{"version":3,"file":"state-hooks.cjs","sources":["../../src/util/state-hooks.ts"],"sourcesContent":["import { useState, useRef, useEffect, RefObject } from \"react\";\nimport { isEqual } from \"underscore\";\nimport update, { Spec } from \"immutability-helper\";\nimport { useAsyncEffect } from \"use-async-effect\";\nimport { Component } from \"react\";\n// Re-export useAsyncEffect\nexport { useAsyncEffect };\n\nexport function useImmutableState<S>(v: S): [S, (spec: Spec<S>) => void] {\n  /** useState wrapper hook that requires updating using an \"immutability-helper\" spec */\n  const [state, setState] = useState(v);\n  const updateState = function (cset: Spec<S>) {\n    const newState = update(state, cset);\n    return setState(newState);\n  };\n  return [state, updateState];\n}\n\nexport function useMemoizedValue(\n  obj: any,\n  equalityFunction: (a: any, b: any) => boolean = isEqual,\n) {\n  /** Hook to keep a dependency up to date using a deep equals approach */\n  const ref = useRef(obj);\n  if (obj == ref.current || equalityFunction(obj, ref.current)) {\n    return ref.current;\n  } else {\n    ref.current = obj;\n    return obj;\n  }\n}\n\nexport class StatefulComponent<Props, State> extends Component<Props, State> {\n  constructor(props: Props) {\n    console.warn(\n      \"StatefulComponent is deprecated. Use useImmutableState instead.\",\n    );\n    super(props);\n    this.updateState.bind(this);\n  }\n  updateState(spec: Spec<State>) {\n    const newState = update(this.state, spec);\n    this.setState(newState);\n  }\n}\n\nexport function usePrevious<T>(value: T) {\n  const ref: RefObject<T | undefined> = useRef(undefined);\n  useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\n\nexport function useAsyncMemo<T>(fn: () => Promise<T>, deps: any[]): T | null {\n  const [value, setValue] = useState<T | null>(null);\n  useAsyncEffect(async () => {\n    const result = await fn();\n    setValue(result);\n  }, deps);\n  return value;\n}\n"],"names":["useState","update","isEqual","useRef","Component","useEffect","useAsyncEffect"],"mappings":";;;;;;;;AAQO,SAAS,kBAAqB,GAAoC;AAEvE,QAAM,CAAC,OAAO,QAAQ,IAAIA,MAAAA,SAAS,CAAC;AACpC,QAAM,cAAc,SAAU,MAAe;AAC3C,UAAM,WAAWC,gBAAAA,QAAO,OAAO,IAAI;AACnC,WAAO,SAAS,QAAQ;AAAA,EAC1B;AACA,SAAO,CAAC,OAAO,WAAW;AAC5B;AAEO,SAAS,iBACd,KACA,mBAAgDC,oBAChD;AAEA,QAAM,MAAMC,MAAAA,OAAO,GAAG;AACtB,MAAI,OAAO,IAAI,WAAW,iBAAiB,KAAK,IAAI,OAAO,GAAG;AAC5D,WAAO,IAAI;AAAA,EACb,OAAO;AACL,QAAI,UAAU;AACd,WAAO;AAAA,EACT;AACF;AAEO,MAAM,0BAAwCC,MAAAA,UAAwB;AAAA,EAC3E,YAAY,OAAc;AACxB,YAAQ;AAAA,MACN;AAAA,IAAA;AAEF,UAAM,KAAK;AACX,SAAK,YAAY,KAAK,IAAI;AAAA,EAC5B;AAAA,EACA,YAAY,MAAmB;AAC7B,UAAM,WAAWH,gBAAAA,QAAO,KAAK,OAAO,IAAI;AACxC,SAAK,SAAS,QAAQ;AAAA,EACxB;AACF;AAEO,SAAS,YAAe,OAAU;AACvC,QAAM,MAAgCE,MAAAA,OAAO,MAAS;AACtDE,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,CAAC;AACD,SAAO,IAAI;AACb;AAEO,SAAS,aAAgB,IAAsB,MAAuB;AAC3E,QAAM,CAAC,OAAO,QAAQ,IAAIL,MAAAA,SAAmB,IAAI;AACjDM,QAAAA,sBAAAA,eAAe,YAAY;AACzB,UAAM,SAAS,MAAM,GAAA;AACrB,aAAS,MAAM;AAAA,EACjB,GAAG,IAAI;AACP,SAAO;AACT;;;;;;;"}