{
  "version": 3,
  "sources": ["../../../../../src/components/BindingsConsumer/internal/Refreshable.tsx"],
  "sourcesContent": ["import type { MutableRefObject } from 'react';\nimport React, { useState } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport type { BindingDependencies } from '../../../binding/types/binding-dependencies';\nimport type { InferBindingValueTypes } from '../../../binding/types/infer-binding-value-types';\nimport { useIsMountedRef } from '../../../internal-hooks/use-is-mounted-ref.mjs';\nimport type { BindingsConsumerRenderCallback } from '../types/render-callback';\n\n/** A component that returns a refresh method that can be used to manually rerender */\nexport const Refreshable = <DependenciesT extends BindingDependencies>({\n  cancelLastPendingRefresh,\n  getDependencies,\n  getDependencyValues,\n  refreshControls,\n  render\n}: {\n  cancelLastPendingRefresh: () => void;\n  getDependencies: () => DependenciesT;\n  getDependencyValues: () => InferBindingValueTypes<DependenciesT>;\n  refreshControls: MutableRefObject<{ refresh?: () => void }>;\n  render: BindingsConsumerRenderCallback<DependenciesT>;\n}) => {\n  const isMounted = useIsMountedRef();\n\n  const [refreshId, setRefreshId] = useState(0);\n\n  // Immediately refreshes (using ReactDOM.unstable_batchedUpdates) if mounted\n  refreshControls.current.refresh = () => {\n    if (isMounted.current ?? false) {\n      ReactDOM.unstable_batchedUpdates(() => setRefreshId(refreshId + 1));\n    }\n  };\n\n  cancelLastPendingRefresh();\n\n  return <>{render(getDependencyValues(), getDependencies())}</>;\n};\n"],
  "mappings": "AACA,OAAO,SAAS,gBAAgB;AAChC,OAAO,cAAc;AAIrB,SAAS,uBAAuB;AAIzB,MAAM,cAAc,CAA4C;AAAA,EACrE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,YAAY,gBAAgB;AAElC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,CAAC;AAG5C,kBAAgB,QAAQ,UAAU,MAAM;AACtC,QAAI,UAAU,WAAW,OAAO;AAC9B,eAAS,wBAAwB,MAAM,aAAa,YAAY,CAAC,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,2BAAyB;AAEzB,SAAO,0DAAG,OAAO,oBAAoB,GAAG,gBAAgB,CAAC,CAAE;AAC7D;",
  "names": []
}
