{
  "version": 3,
  "sources": ["../../../../src/specialized-waitables/use-softened-waitable/use-softened-waitable.ts"],
  "sourcesContent": ["import { useRef } from 'react';\nimport type { EmptyObject } from 'react-bindings';\n\nimport { concatArrays, normalizeAsOptionalArray } from '../../internal-utils/array-like.mjs';\nimport type { Waitable } from '../../waitable/types/waitable';\nimport { useDerivedWaitable } from '../use-derived-waitable/use-derived-waitable.mjs';\nimport type { UseSoftenedWaitableArgs } from './types';\n\n/**\n * Derives a waitable from another waitable where the last known value of the original waitable is remembered until a new value is\n * available.  This is useful for async waitables that are frequently reset where the last known value is good enough, for display purposes\n * for example.\n *\n * Hard resets on the softened waitable clear out the remembered values.\n */\nexport const useSoftenedWaitable = <SuccessT, FailureT, ExtraFieldsT extends object = EmptyObject>(\n  originalWaitable: Waitable<SuccessT, FailureT> | undefined,\n  args: UseSoftenedWaitableArgs<SuccessT, FailureT, ExtraFieldsT>\n) => {\n  const lastSuccess = useRef<SuccessT | undefined>(undefined);\n  const lastFailure = useRef<FailureT | undefined>(undefined);\n\n  const softenedWaitable = useDerivedWaitable(\n    undefined,\n    (_dependencyValues, _dependencies, setFailure): SuccessT | undefined => {\n      const value = originalWaitable?.value.get();\n      const error = originalWaitable?.error.get();\n      if (value !== undefined) {\n        lastFailure.current = undefined;\n        lastSuccess.current = value;\n        return value;\n      } else if (error !== undefined) {\n        lastFailure.current = error;\n        lastSuccess.current = undefined;\n        setFailure(error);\n        return undefined;\n      } else if (lastSuccess.current !== undefined) {\n        return lastSuccess.current;\n      } else if (lastFailure.current !== undefined) {\n        setFailure(lastFailure.current);\n        return undefined;\n      } else {\n        return undefined;\n      }\n    },\n    {\n      ...args,\n      defaultValue: () => originalWaitable?.value.get(),\n      limitType: 'none',\n      softResetBindings: concatArrays([originalWaitable?.isComplete], normalizeAsOptionalArray(args.softResetBindings)),\n      onReset: (resetType) => {\n        if (resetType === 'hard') {\n          lastFailure.current = undefined;\n          lastSuccess.current = undefined;\n        }\n\n        args.onReset?.(resetType);\n      }\n    }\n  );\n  return softenedWaitable;\n};\n"],
  "mappings": "AAAA,SAAS,cAAc;AAGvB,SAAS,cAAc,gCAAgC;AAEvD,SAAS,0BAA0B;AAU5B,MAAM,sBAAsB,CACjC,kBACA,SACG;AACH,QAAM,cAAc,OAA6B,MAAS;AAC1D,QAAM,cAAc,OAA6B,MAAS;AAE1D,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA,CAAC,mBAAmB,eAAe,eAAqC;AACtE,YAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,YAAM,QAAQ,kBAAkB,MAAM,IAAI;AAC1C,UAAI,UAAU,QAAW;AACvB,oBAAY,UAAU;AACtB,oBAAY,UAAU;AACtB,eAAO;AAAA,MACT,WAAW,UAAU,QAAW;AAC9B,oBAAY,UAAU;AACtB,oBAAY,UAAU;AACtB,mBAAW,KAAK;AAChB,eAAO;AAAA,MACT,WAAW,YAAY,YAAY,QAAW;AAC5C,eAAO,YAAY;AAAA,MACrB,WAAW,YAAY,YAAY,QAAW;AAC5C,mBAAW,YAAY,OAAO;AAC9B,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,cAAc,MAAM,kBAAkB,MAAM,IAAI;AAAA,MAChD,WAAW;AAAA,MACX,mBAAmB,aAAa,CAAC,kBAAkB,UAAU,GAAG,yBAAyB,KAAK,iBAAiB,CAAC;AAAA,MAChH,SAAS,CAAC,cAAc;AACtB,YAAI,cAAc,QAAQ;AACxB,sBAAY,UAAU;AACtB,sBAAY,UAAU;AAAA,QACxB;AAEA,aAAK,UAAU,SAAS;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
  "names": []
}
