Skip to content

Instantly share code, notes, and snippets.

View mweststrate's full-sized avatar
💭
I may be slow to respond.

Michel Weststrate mweststrate

💭
I may be slow to respond.
View GitHub Profile
@mweststrate
mweststrate / immer.js
Last active November 28, 2019 14:59
immer-producer-4
const byId = (state, action) =>
produce(state, draft => {
switch (action.type) {
case RECEIVE_PRODUCTS:
action.products.forEach(product => {
draft[product.id] = product
})
break
}
})
@mweststrate
mweststrate / update-in.js
Created January 9, 2018 10:57
update-in
// ImmutableJS
const newMap = map.updateIn(['inMap', 'inList'], list => list.push(4))
// Immer
draft.inMap.inList.push(4)
@mweststrate
mweststrate / immer-curry.js
Last active January 12, 2018 08:04
immer producer with currying
const byId = produce((draft, action) => {
switch (action.type) {
case RECEIVE_PRODUCTS:
action.products.forEach(product => {
draft[product.id] = product
})
break
}
})
@mweststrate
mweststrate / cityview.js
Created March 6, 2018 14:43
CityView component
const CityView = observer(({ city }) => (
<li>
City: {city.location} - Temperature in ℃: {city.temperature || 'Loading'}
</li>
))
@mweststrate
mweststrate / decorators.js
Last active March 12, 2018 19:46
Decorators in MobX
import { decorate, observable, flow } from "mobx"
/**
with decorator syntax enabled
*/
class City {
@observable location
@observable temperature
@action.bound
@mweststrate
mweststrate / when.js
Created March 6, 2018 14:59
Async when
import { when } from "mobx"
async() => {
await when(() => user.loggedOut)
alert("You have been successfully logged out!")
}
@mweststrate
mweststrate / city.js
Last active August 7, 2019 11:05
City.js
import { decorate, observable, flow, onBecomeObserved, onBecomeUnobserved } from 'mobx'
import { log } from './log'
const APPID = '<secret>'
export class City {
location
temperature
interval
@mweststrate
mweststrate / doc structure proposal.md
Created March 11, 2018 10:36
doc structure proposal.md
  • philosophy
  • overview
    • observables
    • reactions: autorun
    • derived values: computed
    • actions

Making things observable

  • observable.box
  • observable.object
Object.defineProperty(observable([]).constructor.prototype, Symbol.isConcatSpreadable, {
enumerable: false, configurable: true, value: true
})
@mweststrate
mweststrate / AbstractNode.js
Created July 17, 2018 12:14
circular-deps-1
export class AbstractNode {
constructor(parent) {
this.parent = parent
}
getDepth() {
if (this.parent) return this.parent.getDepth() + 1
return 0
}