@inventreedb/ui 0.11.3 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/.vite/manifest.json +45 -5
  3. package/dist/_virtual/dynamic-import-helper.js +20 -0
  4. package/dist/_virtual/dynamic-import-helper.js.map +1 -0
  5. package/dist/components/Boundary.js +5 -4
  6. package/dist/components/Boundary.js.map +1 -1
  7. package/dist/components/InvenTreeTable.js +4 -3
  8. package/dist/components/InvenTreeTable.js.map +1 -1
  9. package/dist/components/RowActions.js +3 -2
  10. package/dist/components/RowActions.js.map +1 -1
  11. package/dist/components/TableColumnSelect.js +1 -1
  12. package/dist/components/TableColumnSelect.js.map +1 -1
  13. package/dist/components/TagsList.d.ts +3 -0
  14. package/dist/components/TagsList.js +21 -0
  15. package/dist/components/TagsList.js.map +1 -0
  16. package/dist/components/nav/DetailDrawer.d.ts +1 -0
  17. package/dist/components/nav/DetailDrawer.js +1 -0
  18. package/dist/components/nav/DetailDrawer.js.map +1 -1
  19. package/dist/enums/ApiEndpoints.d.ts +15 -4
  20. package/dist/enums/ApiEndpoints.js +15 -4
  21. package/dist/enums/ApiEndpoints.js.map +1 -1
  22. package/dist/enums/ModelInformation.d.ts +1 -0
  23. package/dist/enums/ModelInformation.js +55 -2
  24. package/dist/enums/ModelInformation.js.map +1 -1
  25. package/dist/enums/ModelType.d.ts +4 -1
  26. package/dist/enums/ModelType.js +3 -0
  27. package/dist/enums/ModelType.js.map +1 -1
  28. package/dist/enums/Roles.d.ts +1 -0
  29. package/dist/enums/Roles.js +1 -0
  30. package/dist/enums/Roles.js.map +1 -1
  31. package/dist/functions/Events.js +4 -3
  32. package/dist/functions/Events.js.map +1 -1
  33. package/dist/functions/Navigation.js +6 -3
  34. package/dist/functions/Navigation.js.map +1 -1
  35. package/dist/functions/Plugins.js +4 -2
  36. package/dist/functions/Plugins.js.map +1 -1
  37. package/dist/hooks/MonitorBackgroundTask.js +10 -8
  38. package/dist/hooks/MonitorBackgroundTask.js.map +1 -1
  39. package/dist/hooks/MonitorDataOutput.js +4 -3
  40. package/dist/hooks/MonitorDataOutput.js.map +1 -1
  41. package/dist/hooks/UseFilterSet.js +45 -7
  42. package/dist/hooks/UseFilterSet.js.map +1 -1
  43. package/dist/hooks/UseTable.js +1 -1
  44. package/dist/index.d.ts +6 -1
  45. package/dist/index.js +20 -11
  46. package/dist/index.js.map +1 -1
  47. package/dist/node_modules/@mantine/hooks/esm/use-debounced-value/use-debounced-value.js +40 -15
  48. package/dist/node_modules/@mantine/hooks/esm/use-debounced-value/use-debounced-value.js.map +1 -1
  49. package/dist/node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.js +1 -1
  50. package/dist/node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.js.map +1 -1
  51. package/dist/node_modules/@mantine/hooks/esm/use-local-storage/create-storage.js +57 -62
  52. package/dist/node_modules/@mantine/hooks/esm/use-local-storage/create-storage.js.map +1 -1
  53. package/dist/node_modules/@mantine/hooks/esm/use-local-storage/use-local-storage.js.map +1 -1
  54. package/dist/node_modules/@mantine/hooks/esm/use-window-event/use-window-event.js +5 -3
  55. package/dist/node_modules/@mantine/hooks/esm/use-window-event/use-window-event.js.map +1 -1
  56. package/dist/node_modules/@mantine/hooks/esm/utils/random-id/random-id.js.map +1 -1
  57. package/dist/node_modules/@remix-run/router/dist/router.js +10 -0
  58. package/dist/node_modules/@remix-run/router/dist/router.js.map +1 -1
  59. package/dist/node_modules/@sentry/browser/build/npm/esm/prod/report-dialog.js +2 -2
  60. package/dist/node_modules/@sentry/browser/build/npm/esm/prod/report-dialog.js.map +1 -1
  61. package/dist/node_modules/@sentry/core/build/esm/scope.js +6 -5
  62. package/dist/node_modules/@sentry/core/build/esm/scope.js.map +1 -1
  63. package/dist/node_modules/@sentry/core/build/esm/utils/chain-and-copy-promiselike.js +1 -1
  64. package/dist/node_modules/@sentry/core/build/esm/utils/chain-and-copy-promiselike.js.map +1 -1
  65. package/dist/node_modules/@sentry/core/build/esm/utils/is.js +1 -1
  66. package/dist/node_modules/@sentry/core/build/esm/utils/is.js.map +1 -1
  67. package/dist/node_modules/@sentry/core/build/esm/utils/misc.js +1 -1
  68. package/dist/node_modules/@sentry/core/build/esm/utils/misc.js.map +1 -1
  69. package/dist/node_modules/@sentry/core/build/esm/utils/randomSafeContext.js +1 -1
  70. package/dist/node_modules/@sentry/core/build/esm/utils/randomSafeContext.js.map +1 -1
  71. package/dist/node_modules/@sentry/core/build/esm/utils/time.js +1 -1
  72. package/dist/node_modules/@sentry/core/build/esm/utils/time.js.map +1 -1
  73. package/dist/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js +6 -0
  74. package/dist/node_modules/@tabler/icons-react/dist/esm/createReactComponent.js.map +1 -1
  75. package/dist/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js +6 -0
  76. package/dist/node_modules/@tabler/icons-react/dist/esm/defaultAttributes.js.map +1 -1
  77. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustments.js +6 -0
  78. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconAdjustments.js.map +1 -1
  79. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js +6 -0
  80. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconArrowRight.js.map +1 -1
  81. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js +6 -0
  82. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.js.map +1 -1
  83. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js +6 -0
  84. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.js.map +1 -1
  85. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheck.js +6 -0
  86. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheck.js.map +1 -1
  87. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleX.js +6 -0
  88. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleX.js.map +1 -1
  89. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js +6 -0
  90. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.js.map +1 -1
  91. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.js +6 -0
  92. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconDots.js.map +1 -1
  93. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.js +6 -0
  94. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconEdit.js.map +1 -1
  95. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconExclamationCircle.js +6 -0
  96. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconExclamationCircle.js.map +1 -1
  97. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconPlus.js +6 -0
  98. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconPlus.js.map +1 -1
  99. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js +6 -0
  100. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconSearch.js.map +1 -1
  101. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconTag.js +14 -0
  102. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconTag.js.map +1 -0
  103. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.js +6 -0
  104. package/dist/node_modules/@tabler/icons-react/dist/esm/icons/IconTrash.js.map +1 -1
  105. package/dist/node_modules/@tanstack/query-core/build/modern/focusManager.js +31 -20
  106. package/dist/node_modules/@tanstack/query-core/build/modern/focusManager.js.map +1 -1
  107. package/dist/node_modules/@tanstack/query-core/build/modern/onlineManager.js +27 -17
  108. package/dist/node_modules/@tanstack/query-core/build/modern/onlineManager.js.map +1 -1
  109. package/dist/node_modules/@tanstack/query-core/build/modern/queryObserver.js +179 -177
  110. package/dist/node_modules/@tanstack/query-core/build/modern/queryObserver.js.map +1 -1
  111. package/dist/node_modules/@tanstack/query-core/build/modern/timeoutManager.js +31 -21
  112. package/dist/node_modules/@tanstack/query-core/build/modern/timeoutManager.js.map +1 -1
  113. package/dist/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js +1 -1
  114. package/dist/node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js.map +1 -1
  115. package/dist/node_modules/@tanstack/react-query/build/modern/suspense.js +1 -1
  116. package/dist/node_modules/@tanstack/react-query/build/modern/suspense.js.map +1 -1
  117. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +7 -4
  118. package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
  119. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js +10 -1
  120. package/dist/node_modules/react/cjs/react-jsx-runtime.development.js.map +1 -1
  121. package/dist/node_modules/react/cjs/react-jsx-runtime.production.js +10 -1
  122. package/dist/node_modules/react/cjs/react-jsx-runtime.production.js.map +1 -1
  123. package/dist/node_modules/react-router/dist/index.js +11 -1
  124. package/dist/node_modules/react-router/dist/index.js.map +1 -1
  125. package/dist/node_modules/react-router-dom/dist/index.js +10 -0
  126. package/dist/node_modules/react-router-dom/dist/index.js.map +1 -1
  127. package/dist/plugin/InventreeHmrPlugin.d.ts +8 -0
  128. package/dist/plugin/InventreeHmrPlugin.js +21 -0
  129. package/dist/plugin/InventreeHmrPlugin.js.map +1 -0
  130. package/dist/plugin/LocalizedComponent.d.ts +9 -0
  131. package/dist/plugin/LocalizedComponent.js +57 -0
  132. package/dist/plugin/LocalizedComponent.js.map +1 -0
  133. package/dist/states/StoredTableState.js +2 -1
  134. package/dist/states/StoredTableState.js.map +1 -1
  135. package/dist/states/types.d.ts +3 -0
  136. package/dist/types/Filters.d.ts +11 -0
  137. package/dist/types/Forms.d.ts +6 -1
  138. package/dist/types/Panel.d.ts +26 -0
  139. package/dist/types/Plugins.d.ts +14 -2
  140. package/dist/types/Plugins.js +2 -2
  141. package/dist/types/Plugins.js.map +1 -1
  142. package/dist/types/Rendering.d.ts +54 -0
  143. package/dist/types/Tables.d.ts +7 -3
  144. package/lib/components/Boundary.tsx +7 -3
  145. package/lib/components/RowActions.tsx +2 -2
  146. package/lib/components/TableColumnSelect.tsx +1 -1
  147. package/lib/components/TagsList.tsx +27 -0
  148. package/lib/components/nav/DetailDrawer.tsx +1 -1
  149. package/lib/enums/ApiEndpoints.tsx +18 -4
  150. package/lib/enums/ModelInformation.tsx +26 -2
  151. package/lib/enums/ModelType.tsx +4 -1
  152. package/lib/enums/Roles.tsx +3 -0
  153. package/lib/functions/Navigation.tsx +1 -1
  154. package/lib/hooks/UseFilterSet.tsx +62 -11
  155. package/lib/index.ts +14 -1
  156. package/lib/plugin/InventreeHmrPlugin.tsx +40 -0
  157. package/lib/plugin/LocalizedComponent.tsx +85 -0
  158. package/lib/states/types.tsx +7 -0
  159. package/lib/types/Filters.tsx +19 -0
  160. package/lib/types/Forms.tsx +7 -1
  161. package/lib/types/Panel.tsx +30 -0
  162. package/lib/types/Plugins.tsx +20 -1
  163. package/lib/types/Rendering.tsx +61 -0
  164. package/lib/types/Tables.tsx +8 -3
  165. package/package.json +19 -18
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorBackgroundTask.js","sources":["../../lib/hooks/MonitorBackgroundTask.tsx"],"sourcesContent":["import { useDocumentVisibility } from '@mantine/hooks';\nimport { notifications, showNotification } from '@mantine/notifications';\nimport {\n IconCircleCheck,\n IconCircleX,\n IconExclamationCircle\n} from '@tabler/icons-react';\nimport { type QueryClient, useQuery } from '@tanstack/react-query';\nimport type { AxiosInstance } from 'axios';\nimport { useEffect, useState } from 'react';\nimport { ApiEndpoints } from '../enums/ApiEndpoints';\nimport { apiUrl } from '../functions/Api';\n\nexport type MonitorBackgroundTaskProps = {\n api: AxiosInstance;\n queryClient?: QueryClient;\n title?: string;\n message: string;\n errorMessage?: string;\n successMessage?: string;\n failureMessage?: string;\n taskId?: string;\n onSuccess?: () => void;\n onFailure?: () => void;\n onComplete?: () => void;\n onError?: (error: Error) => void;\n};\n\n/**\n * Hook for monitoring a background task running on the server\n */\nexport default function useMonitorBackgroundTask(\n props: MonitorBackgroundTaskProps\n) {\n const visibility = useDocumentVisibility();\n\n const [tracking, setTracking] = useState<boolean>(false);\n\n useEffect(() => {\n if (!!props.taskId) {\n setTracking(true);\n showNotification({\n id: `background-task-${props.taskId}`,\n title: props.title,\n message: props.message,\n loading: true,\n autoClose: false,\n withCloseButton: false\n });\n } else {\n setTracking(false);\n }\n }, [props.taskId]);\n\n useQuery(\n {\n enabled: !!props.taskId && tracking && visibility === 'visible',\n refetchInterval: 500,\n queryKey: ['background-task', props.taskId],\n queryFn: () =>\n props.api\n .get(apiUrl(ApiEndpoints.task_overview, props.taskId))\n .then((response) => {\n const data = response?.data ?? {};\n\n if (data.complete) {\n setTracking(false);\n props.onComplete?.();\n\n notifications.update({\n id: `background-task-${props.taskId}`,\n title: props.title,\n loading: false,\n color: data.success ? 'green' : 'red',\n message: response.data?.success\n ? (props.successMessage ?? props.message)\n : (props.failureMessage ?? props.message),\n icon: response.data?.success ? (\n <IconCircleCheck />\n ) : (\n <IconCircleX />\n ),\n autoClose: 1000,\n withCloseButton: true\n });\n\n if (data.success) {\n props.onSuccess?.();\n } else {\n props.onFailure?.();\n }\n }\n\n return response;\n })\n .catch((error) => {\n console.error(\n `Error fetching background task status for task ${props.taskId}:`,\n error\n );\n setTracking(false);\n props.onError?.(error);\n\n notifications.update({\n id: `background-task-${props.taskId}`,\n title: props.title,\n loading: false,\n color: 'red',\n message: props.errorMessage ?? props.message,\n icon: <IconExclamationCircle color='red' />,\n autoClose: 5000,\n withCloseButton: true\n });\n })\n },\n props.queryClient\n );\n}\n"],"names":["useMonitorBackgroundTask","props","visibility","useDocumentVisibility","tracking","setTracking","useState","useEffect","taskId","showNotification","id","title","message","loading","autoClose","withCloseButton","useQuery","enabled","refetchInterval","queryKey","queryFn","api","get","apiUrl","ApiEndpoints","task_overview","then","response","data","complete","onComplete","notifications","update","color","success","successMessage","failureMessage","icon","onSuccess","onFailure","catch","error","console","onError","errorMessage","jsx","queryClient"],"mappings":";;;;;;;;AACA,MAAA,gBAAA,OAAA,sBAAA,EAAA;;AAQA,MAAA,YAAA,OAAA,OAAA,EAAA;;AAsBA,SAAwBA,yBACtBC,OACA;AACA,QAAMC,aAAaC,sBAAAA;AAEnB,QAAM,CAACC,UAAUC,WAAW,IAAIC,SAAkB,KAAK;AAEvDC,YAAU,MAAM;AACd,QAAI,CAAC,CAACN,MAAMO,QAAQ;AAClBH,kBAAY,IAAI;AAChBI,uBAAiB;AAAA,QACfC,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,QACnCG,OAAOV,MAAMU;AAAAA,QACbC,SAASX,MAAMW;AAAAA,QACfC,SAAS;AAAA,QACTC,WAAW;AAAA,QACXC,iBAAiB;AAAA,MAAA,CAClB;AAAA,IACH,OAAO;AACLV,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAACJ,MAAMO,MAAM,CAAC;AAEjBQ,WACE;AAAA,IACEC,SAAS,CAAC,CAAChB,MAAMO,UAAUJ,YAAYF,eAAe;AAAA,IACtDgB,iBAAiB;AAAA,IACjBC,UAAU,CAAC,mBAAmBlB,MAAMO,MAAM;AAAA,IAC1CY,SAASA,MACPnB,MAAMoB,IACHC,IAAIC,OAAOC,aAAaC,eAAexB,MAAMO,MAAM,CAAC,EACpDkB,KAAMC,CAAAA,aAAa;AAClB,YAAMC,OAAOD,UAAUC,QAAQ,CAAA;AAE/B,UAAIA,KAAKC,UAAU;AACjBxB,oBAAY,KAAK;AACjBJ,cAAM6B,aAAAA;AAENC,sBAAcC,OAAO;AAAA,UACnBtB,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,UACnCG,OAAOV,MAAMU;AAAAA,UACbE,SAAS;AAAA,UACToB,OAAOL,KAAKM,UAAU,UAAU;AAAA,UAChCtB,SAASe,SAASC,MAAMM,UACnBjC,MAAMkC,kBAAkBlC,MAAMW,UAC9BX,MAAMmC,kBAAkBnC,MAAMW;AAAAA,UACnCyB,MAAMV,SAASC,MAAMM,gDAClB,iBAAA,CAAA,CAAe,0CAEf,aAAA,EAAW;AAAA,UAEdpB,WAAW;AAAA,UACXC,iBAAiB;AAAA,QAAA,CAClB;AAED,YAAIa,KAAKM,SAAS;AAChBjC,gBAAMqC,YAAAA;AAAAA,QACR,OAAO;AACLrC,gBAAMsC,YAAAA;AAAAA,QACR;AAAA,MACF;AAEA,aAAOZ;AAAAA,IACT,CAAC,EACAa,MAAOC,CAAAA,UAAU;AAChBC,cAAQD,MACN,kDAAkDxC,MAAMO,MAAM,KAC9DiC,KACF;AACApC,kBAAY,KAAK;AACjBJ,YAAM0C,UAAUF,KAAK;AAErBV,oBAAcC,OAAO;AAAA,QACnBtB,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,QACnCG,OAAOV,MAAMU;AAAAA,QACbE,SAAS;AAAA,QACToB,OAAO;AAAA,QACPrB,SAASX,MAAM2C,gBAAgB3C,MAAMW;AAAAA,QACrCyB,MAAMQ,kCAAAA,IAAC,uBAAA,EAAsB,OAAM,MAAA,CAAK;AAAA,QACxC/B,WAAW;AAAA,QACXC,iBAAiB;AAAA,MAAA,CAClB;AAAA,IACH,CAAC;AAAA,EAAA,GAEPd,MAAM6C,WACR;AACF;"}
1
+ {"version":3,"file":"MonitorBackgroundTask.js","sources":["../../lib/hooks/MonitorBackgroundTask.tsx"],"sourcesContent":["import { useDocumentVisibility } from '@mantine/hooks';\nimport { notifications, showNotification } from '@mantine/notifications';\nimport {\n IconCircleCheck,\n IconCircleX,\n IconExclamationCircle\n} from '@tabler/icons-react';\nimport { type QueryClient, useQuery } from '@tanstack/react-query';\nimport type { AxiosInstance } from 'axios';\nimport { useEffect, useState } from 'react';\nimport { ApiEndpoints } from '../enums/ApiEndpoints';\nimport { apiUrl } from '../functions/Api';\n\nexport type MonitorBackgroundTaskProps = {\n api: AxiosInstance;\n queryClient?: QueryClient;\n title?: string;\n message: string;\n errorMessage?: string;\n successMessage?: string;\n failureMessage?: string;\n taskId?: string;\n onSuccess?: () => void;\n onFailure?: () => void;\n onComplete?: () => void;\n onError?: (error: Error) => void;\n};\n\n/**\n * Hook for monitoring a background task running on the server\n */\nexport default function useMonitorBackgroundTask(\n props: MonitorBackgroundTaskProps\n) {\n const visibility = useDocumentVisibility();\n\n const [tracking, setTracking] = useState<boolean>(false);\n\n useEffect(() => {\n if (!!props.taskId) {\n setTracking(true);\n showNotification({\n id: `background-task-${props.taskId}`,\n title: props.title,\n message: props.message,\n loading: true,\n autoClose: false,\n withCloseButton: false\n });\n } else {\n setTracking(false);\n }\n }, [props.taskId]);\n\n useQuery(\n {\n enabled: !!props.taskId && tracking && visibility === 'visible',\n refetchInterval: 500,\n queryKey: ['background-task', props.taskId],\n queryFn: () =>\n props.api\n .get(apiUrl(ApiEndpoints.task_overview, props.taskId))\n .then((response) => {\n const data = response?.data ?? {};\n\n if (data.complete) {\n setTracking(false);\n props.onComplete?.();\n\n notifications.update({\n id: `background-task-${props.taskId}`,\n title: props.title,\n loading: false,\n color: data.success ? 'green' : 'red',\n message: response.data?.success\n ? (props.successMessage ?? props.message)\n : (props.failureMessage ?? props.message),\n icon: response.data?.success ? (\n <IconCircleCheck />\n ) : (\n <IconCircleX />\n ),\n autoClose: 1000,\n withCloseButton: true\n });\n\n if (data.success) {\n props.onSuccess?.();\n } else {\n props.onFailure?.();\n }\n }\n\n return response;\n })\n .catch((error) => {\n console.error(\n `Error fetching background task status for task ${props.taskId}:`,\n error\n );\n setTracking(false);\n props.onError?.(error);\n\n notifications.update({\n id: `background-task-${props.taskId}`,\n title: props.title,\n loading: false,\n color: 'red',\n message: props.errorMessage ?? props.message,\n icon: <IconExclamationCircle color='red' />,\n autoClose: 5000,\n withCloseButton: true\n });\n })\n },\n props.queryClient\n );\n}\n"],"names":["useMonitorBackgroundTask","props","visibility","useDocumentVisibility","tracking","setTracking","useState","useEffect","taskId","showNotification","id","title","message","loading","autoClose","withCloseButton","useQuery","enabled","refetchInterval","queryKey","queryFn","api","get","apiUrl","ApiEndpoints","task_overview","then","response","data","complete","onComplete","notifications","update","color","success","successMessage","failureMessage","icon","onSuccess","onFailure","catch","error","console","onError","errorMessage","jsx","queryClient"],"mappings":";;;;;;;;AACA,MAAA,gBAAA,OAAA,sBAAA,EAAA;;AAQA,MAAA,YAAA,OAAA,OAAA,EAAA;;AAsBA,SAAwBA,yBACtBC,OACA;AACA,QAAMC,aAAaC,sBAAAA;AAEnB,QAAM,CAACC,UAAUC,WAAW,IAAIC,SAAkB,KAAK;AAEvDC,YAAU,MAAM;AACd,QAAI,CAAC,CAACN,MAAMO,QAAQ;AAClBH,kBAAY,IAAI;AAChBI,uBAAiB;AAAA,QACfC,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,QACnCG,OAAOV,MAAMU;AAAAA,QACbC,SAASX,MAAMW;AAAAA,QACfC,SAAS;AAAA,QACTC,WAAW;AAAA,QACXC,iBAAiB;AAAA,MAAA,CAClB;AAAA,IACH,OAAO;AACLV,kBAAY,KAAK;AAAA,IACnB;AAAA,EACF,GAAG,CAACJ,MAAMO,MAAM,CAAC;AAEjBQ,WACE;AAAA,IACEC,SAAS,CAAC,CAAChB,MAAMO,UAAUJ,YAAYF,eAAe;AAAA,IACtDgB,iBAAiB;AAAA,IACjBC,UAAU,CAAC,mBAAmBlB,MAAMO,MAAM;AAAA,IAC1CY,SAASA,MACPnB,MAAMoB,IACHC,IAAIC,OAAOC,aAAaC,eAAexB,MAAMO,MAAM,CAAC,EACpDkB,KAAMC,CAAAA,aAAa;;AAClB,YAAMC,QAAOD,qCAAUC,SAAQ,CAAA;AAE/B,UAAIA,KAAKC,UAAU;AACjBxB,oBAAY,KAAK;AACjBJ,oBAAM6B,eAAN7B;AAEA8B,sBAAcC,OAAO;AAAA,UACnBtB,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,UACnCG,OAAOV,MAAMU;AAAAA,UACbE,SAAS;AAAA,UACToB,OAAOL,KAAKM,UAAU,UAAU;AAAA,UAChCtB,WAASe,cAASC,SAATD,mBAAeO,WACnBjC,MAAMkC,kBAAkBlC,MAAMW,UAC9BX,MAAMmC,kBAAkBnC,MAAMW;AAAAA,UACnCyB,QAAMV,cAASC,SAATD,mBAAeO,iDAClB,iBAAA,CAAA,CAAe,0CAEf,aAAA,EAAW;AAAA,UAEdpB,WAAW;AAAA,UACXC,iBAAiB;AAAA,QAAA,CAClB;AAED,YAAIa,KAAKM,SAAS;AAChBjC,sBAAMqC,cAANrC;AAAAA,QACF,OAAO;AACLA,sBAAMsC,cAANtC;AAAAA,QACF;AAAA,MACF;AAEA,aAAO0B;AAAAA,IACT,CAAC,EACAa,MAAOC,CAAAA,UAAU;;AAChBC,cAAQD,MACN,kDAAkDxC,MAAMO,MAAM,KAC9DiC,KACF;AACApC,kBAAY,KAAK;AACjBJ,kBAAM0C,YAAN1C,+BAAgBwC;AAEhBV,oBAAcC,OAAO;AAAA,QACnBtB,IAAI,mBAAmBT,MAAMO,MAAM;AAAA,QACnCG,OAAOV,MAAMU;AAAAA,QACbE,SAAS;AAAA,QACToB,OAAO;AAAA,QACPrB,SAASX,MAAM2C,gBAAgB3C,MAAMW;AAAAA,QACrCyB,MAAMQ,kCAAAA,IAAC,uBAAA,EAAsB,OAAM,MAAA,CAAK;AAAA,QACxC/B,WAAW;AAAA,QACXC,iBAAiB;AAAA,MAAA,CAClB;AAAA,IACH,CAAC;AAAA,EAAA,GAEPd,MAAM6C,WACR;AACF;"}
@@ -1,9 +1,9 @@
1
1
  import { j as jsxRuntimeExports } from "../_virtual/jsx-runtime.js";
2
+ import { useDocumentVisibility } from "../node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.js";
2
3
  import { useQuery } from "../node_modules/@tanstack/react-query/build/modern/useQuery.js";
3
4
  import { ProgressBar } from "../components/ProgressBar.js";
4
5
  import { ApiEndpoints } from "../enums/ApiEndpoints.js";
5
6
  import { apiUrl } from "../functions/Api.js";
6
- import { useDocumentVisibility } from "../node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.js";
7
7
  import IconExclamationCircle from "../node_modules/@tabler/icons-react/dist/esm/icons/IconExclamationCircle.js";
8
8
  import IconCircleCheck from "../node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheck.js";
9
9
  const _i18n = window["LinguiCore"].i18n;
@@ -32,10 +32,11 @@ function useMonitorDataOutput(props) {
32
32
  refetchInterval: 500,
33
33
  queryKey: ["data-output", props.id, props.title],
34
34
  queryFn: () => props.api.get(apiUrl(ApiEndpoints.data_output, props.id)).then((response) => {
35
- const data = response?.data ?? {};
35
+ var _a;
36
+ const data = (response == null ? void 0 : response.data) ?? {};
36
37
  if (!!data.errors || !!data.error) {
37
38
  setLoading(false);
38
- const error = data?.error ?? data?.errors?.error ?? _i18n._(
39
+ const error = (data == null ? void 0 : data.error) ?? ((_a = data == null ? void 0 : data.errors) == null ? void 0 : _a.error) ?? _i18n._(
39
40
  /*i18n*/
40
41
  {
41
42
  id: "gzjOvt"
@@ -1 +1 @@
1
- {"version":3,"file":"MonitorDataOutput.js","sources":["../../lib/hooks/MonitorDataOutput.tsx"],"sourcesContent":["import { t } from '@lingui/core/macro';\nimport { useDocumentVisibility } from '@mantine/hooks';\nimport { notifications, showNotification } from '@mantine/notifications';\nimport { IconCircleCheck, IconExclamationCircle } from '@tabler/icons-react';\nimport { type QueryClient, useQuery } from '@tanstack/react-query';\nimport type { AxiosInstance } from 'axios';\nimport { useEffect, useState } from 'react';\nimport { ProgressBar } from '../components/ProgressBar';\nimport { ApiEndpoints } from '../enums/ApiEndpoints';\nimport { apiUrl } from '../functions/Api';\n\nexport type MonitorDataOutputProps = {\n api: AxiosInstance;\n queryClient?: QueryClient;\n title: string;\n hostname?: string;\n id?: number;\n};\n\n/**\n * Hook for monitoring a data output process running on the server\n */\nexport default function useMonitorDataOutput(props: MonitorDataOutputProps) {\n const visibility = useDocumentVisibility();\n\n const [loading, setLoading] = useState<boolean>(false);\n\n useEffect(() => {\n if (!!props.id) {\n setLoading(true);\n showNotification({\n id: `data-output-${props.id}`,\n title: props.title,\n loading: true,\n autoClose: false,\n withCloseButton: false,\n message: <ProgressBar size='lg' value={0} progressLabel />\n });\n } else setLoading(false);\n }, [props.id, props.title]);\n\n useQuery(\n {\n enabled: !!props.id && loading && visibility === 'visible',\n refetchInterval: 500,\n queryKey: ['data-output', props.id, props.title],\n queryFn: () =>\n props.api\n .get(apiUrl(ApiEndpoints.data_output, props.id))\n .then((response) => {\n const data = response?.data ?? {};\n\n if (!!data.errors || !!data.error) {\n setLoading(false);\n\n const error: string =\n data?.error ?? data?.errors?.error ?? t`Process failed`;\n\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n icon: <IconExclamationCircle />,\n autoClose: 2500,\n title: props.title,\n message: error,\n color: 'red'\n });\n } else if (data.complete) {\n setLoading(false);\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n autoClose: 2500,\n title: props.title,\n message: t`Process completed successfully`,\n color: 'green',\n icon: <IconCircleCheck />\n });\n\n if (data.output) {\n const url = data.output;\n const base = props.hostname ?? window.location.origin;\n\n const downloadUrl = new URL(url, base);\n\n window.open(downloadUrl.toString(), '_blank');\n }\n } else {\n notifications.update({\n id: `data-output-${props.id}`,\n loading: true,\n autoClose: false,\n withCloseButton: false,\n message: (\n <ProgressBar\n size='lg'\n maximum={data.total}\n value={data.progress}\n progressLabel={data.total > 0}\n animated\n />\n )\n });\n }\n\n return data;\n })\n .catch((error: Error) => {\n console.error('Error in useMonitorDataOutput:', error);\n setLoading(false);\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n autoClose: 2500,\n title: props.title,\n message: error.message || t`Process failed`,\n color: 'red'\n });\n return {};\n })\n },\n props.queryClient\n );\n}\n"],"names":["useMonitorDataOutput","props","visibility","useDocumentVisibility","loading","setLoading","useState","useEffect","id","showNotification","title","autoClose","withCloseButton","message","useQuery","enabled","refetchInterval","queryKey","queryFn","api","get","apiUrl","ApiEndpoints","data_output","then","response","data","errors","error","_i18n","_","notifications","update","icon","color","complete","output","url","base","hostname","window","location","origin","downloadUrl","URL","open","toString","jsx","total","progress","catch","console","queryClient"],"mappings":"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"}
1
+ {"version":3,"file":"MonitorDataOutput.js","sources":["../../lib/hooks/MonitorDataOutput.tsx"],"sourcesContent":["import { t } from '@lingui/core/macro';\nimport { useDocumentVisibility } from '@mantine/hooks';\nimport { notifications, showNotification } from '@mantine/notifications';\nimport { IconCircleCheck, IconExclamationCircle } from '@tabler/icons-react';\nimport { type QueryClient, useQuery } from '@tanstack/react-query';\nimport type { AxiosInstance } from 'axios';\nimport { useEffect, useState } from 'react';\nimport { ProgressBar } from '../components/ProgressBar';\nimport { ApiEndpoints } from '../enums/ApiEndpoints';\nimport { apiUrl } from '../functions/Api';\n\nexport type MonitorDataOutputProps = {\n api: AxiosInstance;\n queryClient?: QueryClient;\n title: string;\n hostname?: string;\n id?: number;\n};\n\n/**\n * Hook for monitoring a data output process running on the server\n */\nexport default function useMonitorDataOutput(props: MonitorDataOutputProps) {\n const visibility = useDocumentVisibility();\n\n const [loading, setLoading] = useState<boolean>(false);\n\n useEffect(() => {\n if (!!props.id) {\n setLoading(true);\n showNotification({\n id: `data-output-${props.id}`,\n title: props.title,\n loading: true,\n autoClose: false,\n withCloseButton: false,\n message: <ProgressBar size='lg' value={0} progressLabel />\n });\n } else setLoading(false);\n }, [props.id, props.title]);\n\n useQuery(\n {\n enabled: !!props.id && loading && visibility === 'visible',\n refetchInterval: 500,\n queryKey: ['data-output', props.id, props.title],\n queryFn: () =>\n props.api\n .get(apiUrl(ApiEndpoints.data_output, props.id))\n .then((response) => {\n const data = response?.data ?? {};\n\n if (!!data.errors || !!data.error) {\n setLoading(false);\n\n const error: string =\n data?.error ?? data?.errors?.error ?? t`Process failed`;\n\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n icon: <IconExclamationCircle />,\n autoClose: 2500,\n title: props.title,\n message: error,\n color: 'red'\n });\n } else if (data.complete) {\n setLoading(false);\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n autoClose: 2500,\n title: props.title,\n message: t`Process completed successfully`,\n color: 'green',\n icon: <IconCircleCheck />\n });\n\n if (data.output) {\n const url = data.output;\n const base = props.hostname ?? window.location.origin;\n\n const downloadUrl = new URL(url, base);\n\n window.open(downloadUrl.toString(), '_blank');\n }\n } else {\n notifications.update({\n id: `data-output-${props.id}`,\n loading: true,\n autoClose: false,\n withCloseButton: false,\n message: (\n <ProgressBar\n size='lg'\n maximum={data.total}\n value={data.progress}\n progressLabel={data.total > 0}\n animated\n />\n )\n });\n }\n\n return data;\n })\n .catch((error: Error) => {\n console.error('Error in useMonitorDataOutput:', error);\n setLoading(false);\n notifications.update({\n id: `data-output-${props.id}`,\n loading: false,\n autoClose: 2500,\n title: props.title,\n message: error.message || t`Process failed`,\n color: 'red'\n });\n return {};\n })\n },\n props.queryClient\n );\n}\n"],"names":["useMonitorDataOutput","props","visibility","useDocumentVisibility","loading","setLoading","useState","useEffect","id","showNotification","title","autoClose","withCloseButton","message","useQuery","enabled","refetchInterval","queryKey","queryFn","api","get","apiUrl","ApiEndpoints","data_output","then","response","data","errors","error","_i18n","_","notifications","update","icon","color","complete","output","url","base","hostname","window","location","origin","downloadUrl","URL","open","toString","jsx","total","progress","catch","console","queryClient"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { useLocalStorage } from "../node_modules/@mantine/hooks/esm/use-local-storage/use-local-storage.js";
2
2
  const useCallback = window["React"].useCallback;
3
+ const useEffect = window["React"].useEffect;
3
4
  const useMemo = window["React"].useMemo;
4
5
  function useFilterSet(filterKey, initialFilters) {
5
6
  const [storedFilters, setStoredFilters] = useLocalStorage({
@@ -8,25 +9,62 @@ function useFilterSet(filterKey, initialFilters) {
8
9
  sync: false,
9
10
  getInitialValueInEffect: false
10
11
  });
11
- const activeFilters = useMemo(() => {
12
+ const [storedNamedSets, setStoredNamedSets] = useLocalStorage({
13
+ key: `inventree-filtersets-${filterKey}`,
14
+ defaultValue: [],
15
+ sync: false,
16
+ getInitialValueInEffect: false
17
+ });
18
+ useEffect(() => {
12
19
  if (storedFilters == null) {
13
- const filters = initialFilters || [];
14
- setStoredFilters(filters);
15
- return filters;
20
+ setStoredFilters(initialFilters || []);
16
21
  }
17
- return storedFilters || [];
18
- }, [storedFilters]);
22
+ }, [storedFilters, initialFilters, setStoredFilters]);
23
+ const activeFilters = useMemo(() => {
24
+ return storedFilters ?? initialFilters ?? [];
25
+ }, [storedFilters, initialFilters]);
19
26
  const clearActiveFilters = useCallback(() => {
20
27
  setStoredFilters([]);
21
28
  }, []);
22
29
  const setActiveFilters = useCallback((filters) => {
23
30
  setStoredFilters(filters);
24
31
  }, [setStoredFilters]);
32
+ const saveFilterSet = useCallback((name) => {
33
+ const snapshot = activeFilters.map(({
34
+ name: n,
35
+ value,
36
+ displayValue
37
+ }) => ({
38
+ name: n,
39
+ value,
40
+ displayValue
41
+ }));
42
+ setStoredNamedSets((prev) => {
43
+ const without = (prev ?? []).filter((s) => s.name !== name);
44
+ return [...without, {
45
+ name,
46
+ filters: snapshot
47
+ }];
48
+ });
49
+ }, [activeFilters, setStoredNamedSets]);
50
+ const loadFilterSet = useCallback((name) => {
51
+ const saved = (storedNamedSets ?? []).find((s) => s.name === name);
52
+ if (saved) {
53
+ setStoredFilters(saved.filters);
54
+ }
55
+ }, [storedNamedSets, setStoredFilters]);
56
+ const deleteFilterSet = useCallback((name) => {
57
+ setStoredNamedSets((prev) => (prev ?? []).filter((s) => s.name !== name));
58
+ }, [setStoredNamedSets]);
25
59
  return {
26
60
  filterKey,
27
61
  activeFilters,
28
62
  setActiveFilters,
29
- clearActiveFilters
63
+ clearActiveFilters,
64
+ savedFilterSets: storedNamedSets ?? [],
65
+ saveFilterSet,
66
+ loadFilterSet,
67
+ deleteFilterSet
30
68
  };
31
69
  }
32
70
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"UseFilterSet.js","sources":["../../lib/hooks/UseFilterSet.tsx"],"sourcesContent":["import { useLocalStorage } from '@mantine/hooks';\nimport { useCallback, useMemo } from 'react';\nimport type { FilterSetState, TableFilter } from '../types/Filters';\n\nexport default function useFilterSet(\n filterKey: string,\n initialFilters?: TableFilter[]\n): FilterSetState {\n // Array of active filters (saved to local storage)\n const [storedFilters, setStoredFilters] = useLocalStorage<\n TableFilter[] | null\n >({\n key: `inventree-filterset-${filterKey}`,\n defaultValue: null,\n sync: false,\n getInitialValueInEffect: false\n });\n\n const activeFilters: TableFilter[] = useMemo(() => {\n if (storedFilters == null) {\n // If there are no stored filters, set initial values\n const filters = initialFilters || [];\n setStoredFilters(filters);\n return filters;\n }\n return storedFilters || [];\n }, [storedFilters]);\n\n // Callback to clear all active filters from the table\n const clearActiveFilters = useCallback(() => {\n setStoredFilters([]);\n }, []);\n\n const setActiveFilters = useCallback(\n (filters: TableFilter[]) => {\n setStoredFilters(filters);\n },\n [setStoredFilters]\n );\n\n return {\n filterKey,\n activeFilters,\n setActiveFilters,\n clearActiveFilters\n };\n}\n"],"names":["useFilterSet","filterKey","initialFilters","storedFilters","setStoredFilters","useLocalStorage","key","defaultValue","sync","getInitialValueInEffect","activeFilters","useMemo","filters","clearActiveFilters","useCallback","setActiveFilters"],"mappings":";AACA,MAAA,cAAA,OAAA,OAAA,EAAA;;AAGA,SAAwBA,aACtBC,WACAC,gBACgB;AAEhB,QAAM,CAACC,eAAeC,gBAAgB,IAAIC,gBAExC;AAAA,IACAC,KAAK,uBAAuBL,SAAS;AAAA,IACrCM,cAAc;AAAA,IACdC,MAAM;AAAA,IACNC,yBAAyB;AAAA,EAAA,CAC1B;AAED,QAAMC,gBAA+BC,QAAQ,MAAM;AACjD,QAAIR,iBAAiB,MAAM;AAEzB,YAAMS,UAAUV,kBAAkB,CAAA;AAClCE,uBAAiBQ,OAAO;AACxB,aAAOA;AAAAA,IACT;AACA,WAAOT,iBAAiB,CAAA;AAAA,EAC1B,GAAG,CAACA,aAAa,CAAC;AAGlB,QAAMU,qBAAqBC,YAAY,MAAM;AAC3CV,qBAAiB,CAAA,CAAE;AAAA,EACrB,GAAG,CAAA,CAAE;AAEL,QAAMW,mBAAmBD,YACvB,CAACF,YAA2B;AAC1BR,qBAAiBQ,OAAO;AAAA,EAC1B,GACA,CAACR,gBAAgB,CACnB;AAEA,SAAO;AAAA,IACLH;AAAAA,IACAS;AAAAA,IACAK;AAAAA,IACAF;AAAAA,EAAAA;AAEJ;"}
1
+ {"version":3,"file":"UseFilterSet.js","sources":["../../lib/hooks/UseFilterSet.tsx"],"sourcesContent":["import { useLocalStorage } from '@mantine/hooks';\nimport { useCallback, useEffect, useMemo } from 'react';\nimport type {\n FilterSetState,\n NamedFilterSet,\n TableFilter\n} from '../types/Filters';\n\nexport default function useFilterSet(\n filterKey: string,\n initialFilters?: TableFilter[]\n): FilterSetState {\n // Array of active filters (saved to local storage)\n const [storedFilters, setStoredFilters] = useLocalStorage<\n TableFilter[] | null\n >({\n key: `inventree-filterset-${filterKey}`,\n defaultValue: null,\n sync: false,\n getInitialValueInEffect: false\n });\n\n // Named filter set snapshots (saved to local storage, separate key)\n const [storedNamedSets, setStoredNamedSets] = useLocalStorage<\n NamedFilterSet[]\n >({\n key: `inventree-filtersets-${filterKey}`,\n defaultValue: [],\n sync: false,\n getInitialValueInEffect: false\n });\n\n useEffect(() => {\n if (storedFilters == null) {\n setStoredFilters(initialFilters || []);\n }\n }, [storedFilters, initialFilters, setStoredFilters]);\n\n const activeFilters: TableFilter[] = useMemo(() => {\n return storedFilters ?? initialFilters ?? [];\n }, [storedFilters, initialFilters]);\n\n const clearActiveFilters = useCallback(() => {\n setStoredFilters([]);\n }, []);\n\n const setActiveFilters = useCallback(\n (filters: TableFilter[]) => {\n setStoredFilters(filters);\n },\n [setStoredFilters]\n );\n\n const saveFilterSet = useCallback(\n (name: string) => {\n const snapshot = activeFilters.map(\n ({ name: n, value, displayValue }) => ({\n name: n,\n value,\n displayValue\n })\n );\n setStoredNamedSets((prev) => {\n const without = (prev ?? []).filter((s) => s.name !== name);\n return [...without, { name, filters: snapshot }];\n });\n },\n [activeFilters, setStoredNamedSets]\n );\n\n const loadFilterSet = useCallback(\n (name: string) => {\n const saved = (storedNamedSets ?? []).find((s) => s.name === name);\n if (saved) {\n setStoredFilters(saved.filters as TableFilter[]);\n }\n },\n [storedNamedSets, setStoredFilters]\n );\n\n const deleteFilterSet = useCallback(\n (name: string) => {\n setStoredNamedSets((prev) => (prev ?? []).filter((s) => s.name !== name));\n },\n [setStoredNamedSets]\n );\n\n return {\n filterKey,\n activeFilters,\n setActiveFilters,\n clearActiveFilters,\n savedFilterSets: storedNamedSets ?? [],\n saveFilterSet,\n loadFilterSet,\n deleteFilterSet\n };\n}\n"],"names":["useFilterSet","filterKey","initialFilters","storedFilters","setStoredFilters","useLocalStorage","key","defaultValue","sync","getInitialValueInEffect","storedNamedSets","setStoredNamedSets","useEffect","activeFilters","useMemo","clearActiveFilters","useCallback","setActiveFilters","filters","saveFilterSet","name","snapshot","map","n","value","displayValue","prev","without","filter","s","loadFilterSet","saved","find","deleteFilterSet","savedFilterSets"],"mappings":";AACA,MAAA,cAAA,OAAA,OAAA,EAAA;;;AAOA,SAAwBA,aACtBC,WACAC,gBACgB;AAEhB,QAAM,CAACC,eAAeC,gBAAgB,IAAIC,gBAExC;AAAA,IACAC,KAAK,uBAAuBL,SAAS;AAAA,IACrCM,cAAc;AAAA,IACdC,MAAM;AAAA,IACNC,yBAAyB;AAAA,EAAA,CAC1B;AAGD,QAAM,CAACC,iBAAiBC,kBAAkB,IAAIN,gBAE5C;AAAA,IACAC,KAAK,wBAAwBL,SAAS;AAAA,IACtCM,cAAc,CAAA;AAAA,IACdC,MAAM;AAAA,IACNC,yBAAyB;AAAA,EAAA,CAC1B;AAEDG,YAAU,MAAM;AACd,QAAIT,iBAAiB,MAAM;AACzBC,uBAAiBF,kBAAkB,EAAE;AAAA,IACvC;AAAA,EACF,GAAG,CAACC,eAAeD,gBAAgBE,gBAAgB,CAAC;AAEpD,QAAMS,gBAA+BC,QAAQ,MAAM;AACjD,WAAOX,iBAAiBD,kBAAkB,CAAA;AAAA,EAC5C,GAAG,CAACC,eAAeD,cAAc,CAAC;AAElC,QAAMa,qBAAqBC,YAAY,MAAM;AAC3CZ,qBAAiB,CAAA,CAAE;AAAA,EACrB,GAAG,CAAA,CAAE;AAEL,QAAMa,mBAAmBD,YACvB,CAACE,YAA2B;AAC1Bd,qBAAiBc,OAAO;AAAA,EAC1B,GACA,CAACd,gBAAgB,CACnB;AAEA,QAAMe,gBAAgBH,YACpB,CAACI,SAAiB;AAChB,UAAMC,WAAWR,cAAcS,IAC7B,CAAC;AAAA,MAAEF,MAAMG;AAAAA,MAAGC;AAAAA,MAAOC;AAAAA,IAAAA,OAAoB;AAAA,MACrCL,MAAMG;AAAAA,MACNC;AAAAA,MACAC;AAAAA,IAAAA,EAEJ;AACAd,uBAAoBe,CAAAA,SAAS;AAC3B,YAAMC,WAAWD,QAAQ,IAAIE,OAAQC,CAAAA,MAAMA,EAAET,SAASA,IAAI;AAC1D,aAAO,CAAC,GAAGO,SAAS;AAAA,QAAEP;AAAAA,QAAMF,SAASG;AAAAA,MAAAA,CAAU;AAAA,IACjD,CAAC;AAAA,EACH,GACA,CAACR,eAAeF,kBAAkB,CACpC;AAEA,QAAMmB,gBAAgBd,YACpB,CAACI,SAAiB;AAChB,UAAMW,SAASrB,mBAAmB,IAAIsB,KAAMH,CAAAA,MAAMA,EAAET,SAASA,IAAI;AACjE,QAAIW,OAAO;AACT3B,uBAAiB2B,MAAMb,OAAwB;AAAA,IACjD;AAAA,EACF,GACA,CAACR,iBAAiBN,gBAAgB,CACpC;AAEA,QAAM6B,kBAAkBjB,YACtB,CAACI,SAAiB;AAChBT,uBAAoBe,CAAAA,UAAUA,QAAQ,CAAA,GAAIE,OAAQC,CAAAA,MAAMA,EAAET,SAASA,IAAI,CAAC;AAAA,EAC1E,GACA,CAACT,kBAAkB,CACrB;AAEA,SAAO;AAAA,IACLV;AAAAA,IACAY;AAAAA,IACAI;AAAAA,IACAF;AAAAA,IACAmB,iBAAiBxB,mBAAmB,CAAA;AAAA,IACpCS;AAAAA,IACAW;AAAAA,IACAG;AAAAA,EAAAA;AAEJ;"}
@@ -1,5 +1,5 @@
1
- import useFilterSet from "./UseFilterSet.js";
2
1
  import { randomId } from "../node_modules/@mantine/hooks/esm/utils/random-id/random-id.js";
2
+ import useFilterSet from "./UseFilterSet.js";
3
3
  const useCallback = window["React"].useCallback;
4
4
  const useMemo = window["React"].useMemo;
5
5
  const useState = window["React"].useState;
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ export { ModelType } from './enums/ModelType';
4
4
  export type { ModelDict } from './enums/ModelInformation';
5
5
  export { UserRoles, UserPermissions } from './enums/Roles';
6
6
  export type { InvenTreePluginContext, InvenTreeFormsContext, InvenTreeTablesContext, ImporterDrawerContext, PluginVersion, StockAdjustmentFormsContext } from './types/Plugins';
7
+ export type { PanelIndicatorType, PanelType, PanelGroupType } from './types/Panel';
7
8
  export type { RowAction, RowViewProps, TableColumn, TableColumnProps, TableState, InvenTreeTableProps, InvenTreeTableRenderProps } from './types/Tables';
8
9
  export type { TableFilterChoice, TableFilterType, TableFilter, FilterSetState } from './types/Filters';
9
10
  export type { ApiFormFieldChoice, ApiFormFieldHeader, ApiFormFieldType, ApiFormFieldSet, ApiFormProps, ApiFormModalProps, BulkEditApiFormModalProps } from './types/Forms';
@@ -25,12 +26,16 @@ export { ProgressBar } from './components/ProgressBar';
25
26
  export { PassFailButton, YesNoButton } from './components/YesNoButton';
26
27
  export { SearchInput } from './components/SearchInput';
27
28
  export { TableColumnSelect } from './components/TableColumnSelect';
29
+ export { default as TagsList } from './components/TagsList';
28
30
  export { default as InvenTreeTable } from './components/InvenTreeTable';
29
31
  export { RowViewAction, RowDuplicateAction, RowEditAction, RowDeleteAction, RowCancelAction, RowActions } from './components/RowActions';
30
32
  export { default as useMonitorDataOutput, type MonitorDataOutputProps } from './hooks/MonitorDataOutput';
31
33
  export { default as useMonitorBackgroundTask, type MonitorBackgroundTaskProps } from './hooks/MonitorBackgroundTask';
32
34
  export { default as useFilterSet } from './hooks/UseFilterSet';
33
35
  export { default as useTable, type TableStateExtraProps } from './hooks/UseTable';
34
- export { type DrawerProps, DetailDrawer, DetailDrawerLink } from './components/nav/DetailDrawer';
36
+ export { type DrawerProps, DetailDrawer, DetailDrawerLink, DetailDrawerComponent } from './components/nav/DetailDrawer';
35
37
  export { StylishText } from './components/StylishText';
36
38
  export { type StoredTableStateProps, useStoredTableState } from './states/StoredTableState';
39
+ export { useLocalLibState } from './states/LocalLibState';
40
+ export { default as InventreeHmrPlugin } from './plugin/InventreeHmrPlugin';
41
+ export { default as LocalizedComponent } from './plugin/LocalizedComponent';
package/dist/index.js CHANGED
@@ -19,15 +19,19 @@ import { ProgressBar } from "./components/ProgressBar.js";
19
19
  import { PassFailButton, YesNoButton } from "./components/YesNoButton.js";
20
20
  import { SearchInput } from "./components/SearchInput.js";
21
21
  import { TableColumnSelect } from "./components/TableColumnSelect.js";
22
- import { default as default2 } from "./components/InvenTreeTable.js";
22
+ import { default as default2 } from "./components/TagsList.js";
23
+ import { default as default3 } from "./components/InvenTreeTable.js";
23
24
  import { RowActions, RowCancelAction, RowDeleteAction, RowDuplicateAction, RowEditAction, RowViewAction } from "./components/RowActions.js";
24
- import { default as default3 } from "./hooks/MonitorDataOutput.js";
25
- import { default as default4 } from "./hooks/MonitorBackgroundTask.js";
26
- import { default as default5 } from "./hooks/UseFilterSet.js";
27
- import { default as default6 } from "./hooks/UseTable.js";
28
- import { DetailDrawer, DetailDrawerLink } from "./components/nav/DetailDrawer.js";
25
+ import { default as default4 } from "./hooks/MonitorDataOutput.js";
26
+ import { default as default5 } from "./hooks/MonitorBackgroundTask.js";
27
+ import { default as default6 } from "./hooks/UseFilterSet.js";
28
+ import { default as default7 } from "./hooks/UseTable.js";
29
+ import { DetailDrawer, DetailDrawerComponent, DetailDrawerLink } from "./components/nav/DetailDrawer.js";
29
30
  import { StylishText } from "./components/StylishText.js";
30
31
  import { useStoredTableState } from "./states/StoredTableState.js";
32
+ import { useLocalLibState } from "./states/LocalLibState.js";
33
+ import { default as default8 } from "./plugin/InventreeHmrPlugin.js";
34
+ import { default as default9 } from "./plugin/LocalizedComponent.js";
31
35
  export {
32
36
  ActionButton,
33
37
  AddItemButton,
@@ -38,12 +42,15 @@ export {
38
42
  CopyableCell,
39
43
  DefaultFallback,
40
44
  DetailDrawer,
45
+ DetailDrawerComponent,
41
46
  DetailDrawerLink,
42
47
  INVENTREE_MANTINE_VERSION,
43
48
  INVENTREE_PLUGIN_VERSION,
44
49
  INVENTREE_REACT_DOM_VERSION,
45
50
  INVENTREE_REACT_VERSION,
46
- default2 as InvenTreeTable,
51
+ default3 as InvenTreeTable,
52
+ default8 as InventreeHmrPlugin,
53
+ default9 as LocalizedComponent,
47
54
  ModelType,
48
55
  PassFailButton,
49
56
  ProgressBar,
@@ -56,6 +63,7 @@ export {
56
63
  SearchInput,
57
64
  StylishText,
58
65
  TableColumnSelect,
66
+ default2 as TagsList,
59
67
  UserPermissions,
60
68
  UserRoles,
61
69
  YesNoButton,
@@ -76,10 +84,11 @@ export {
76
84
  permissionDenied,
77
85
  shortenString,
78
86
  showTimeoutNotification,
79
- default5 as useFilterSet,
80
- default4 as useMonitorBackgroundTask,
81
- default3 as useMonitorDataOutput,
87
+ default6 as useFilterSet,
88
+ useLocalLibState,
89
+ default5 as useMonitorBackgroundTask,
90
+ default4 as useMonitorDataOutput,
82
91
  useStoredTableState,
83
- default6 as useTable
92
+ default7 as useTable
84
93
  };
85
94
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,32 +1,57 @@
1
- const useState = window["React"].useState;
2
- const useRef = window["React"].useRef;
3
1
  const useCallback = window["React"].useCallback;
4
2
  const useEffect = window["React"].useEffect;
3
+ const useRef = window["React"].useRef;
4
+ const useState = window["React"].useState;
5
5
  function useDebouncedValue(value, wait, options = { leading: false }) {
6
6
  const [_value, setValue] = useState(value);
7
7
  const mountedRef = useRef(false);
8
8
  const timeoutRef = useRef(null);
9
9
  const cooldownRef = useRef(false);
10
- const cancel = useCallback(() => window.clearTimeout(timeoutRef.current), []);
10
+ const latestValueRef = useRef(value);
11
+ latestValueRef.current = value;
12
+ const cancel = useCallback(() => {
13
+ window.clearTimeout(timeoutRef.current);
14
+ timeoutRef.current = null;
15
+ cooldownRef.current = false;
16
+ }, []);
17
+ const flush = useCallback(() => {
18
+ if (timeoutRef.current) {
19
+ cancel();
20
+ cooldownRef.current = false;
21
+ setValue(latestValueRef.current);
22
+ }
23
+ }, []);
11
24
  useEffect(() => {
12
- if (mountedRef.current) {
13
- if (!cooldownRef.current && options.leading) {
14
- cooldownRef.current = true;
25
+ if (mountedRef.current) if (!cooldownRef.current && options.leading) {
26
+ cooldownRef.current = true;
27
+ setValue(value);
28
+ timeoutRef.current = window.setTimeout(() => {
29
+ cooldownRef.current = false;
30
+ }, wait);
31
+ } else {
32
+ cancel();
33
+ timeoutRef.current = window.setTimeout(() => {
34
+ cooldownRef.current = false;
15
35
  setValue(value);
16
- } else {
17
- cancel();
18
- timeoutRef.current = window.setTimeout(() => {
19
- cooldownRef.current = false;
20
- setValue(value);
21
- }, wait);
22
- }
36
+ }, wait);
23
37
  }
24
- }, [value, options.leading, wait]);
38
+ }, [
39
+ value,
40
+ options.leading,
41
+ wait
42
+ ]);
25
43
  useEffect(() => {
26
44
  mountedRef.current = true;
27
45
  return cancel;
28
46
  }, []);
29
- return [_value, cancel];
47
+ return [
48
+ _value,
49
+ cancel,
50
+ {
51
+ cancel,
52
+ flush
53
+ }
54
+ ];
30
55
  }
31
56
  export {
32
57
  useDebouncedValue
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounced-value.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-debounced-value/use-debounced-value.mjs"],"sourcesContent":["'use client';\nimport { useState, useRef, useCallback, useEffect } from 'react';\n\nfunction useDebouncedValue(value, wait, options = { leading: false }) {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef(null);\n const cooldownRef = useRef(false);\n const cancel = useCallback(() => window.clearTimeout(timeoutRef.current), []);\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n return [_value, cancel];\n}\n\nexport { useDebouncedValue };\n//# sourceMappingURL=use-debounced-value.mjs.map\n"],"names":[],"mappings":"AACA,MAAA,WAAA,OAAA,OAAA,EAAA;;;;AAEA,SAAS,kBAAkB,OAAO,MAAM,UAAU,EAAE,SAAS,SAAS;AACpE,QAAM,CAAC,QAAQ,QAAQ,IAAI,SAAS,KAAK;AACzC,QAAM,aAAa,OAAO,KAAK;AAC/B,QAAM,aAAa,OAAO,IAAI;AAC9B,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,SAAS,YAAY,MAAM,OAAO,aAAa,WAAW,OAAO,GAAG,EAAE;AAC5E,YAAU,MAAM;AACd,QAAI,WAAW,SAAS;AACtB,UAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;AAC3C,oBAAY,UAAU;AACtB,iBAAS,KAAK;AAAA,MAChB,OAAO;AACL,eAAM;AACN,mBAAW,UAAU,OAAO,WAAW,MAAM;AAC3C,sBAAY,UAAU;AACtB,mBAAS,KAAK;AAAA,QAChB,GAAG,IAAI;AAAA,MACT;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,QAAQ,SAAS,IAAI,CAAC;AACjC,YAAU,MAAM;AACd,eAAW,UAAU;AACrB,WAAO;AAAA,EACT,GAAG,CAAA,CAAE;AACL,SAAO,CAAC,QAAQ,MAAM;AACxB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"use-debounced-value.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-debounced-value/use-debounced-value.mjs"],"sourcesContent":["\"use client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\n//#region packages/@mantine/hooks/src/use-debounced-value/use-debounced-value.ts\nfunction useDebouncedValue(value, wait, options = { leading: false }) {\n\tconst [_value, setValue] = useState(value);\n\tconst mountedRef = useRef(false);\n\tconst timeoutRef = useRef(null);\n\tconst cooldownRef = useRef(false);\n\tconst latestValueRef = useRef(value);\n\tlatestValueRef.current = value;\n\tconst cancel = useCallback(() => {\n\t\twindow.clearTimeout(timeoutRef.current);\n\t\ttimeoutRef.current = null;\n\t\tcooldownRef.current = false;\n\t}, []);\n\tconst flush = useCallback(() => {\n\t\tif (timeoutRef.current) {\n\t\t\tcancel();\n\t\t\tcooldownRef.current = false;\n\t\t\tsetValue(latestValueRef.current);\n\t\t}\n\t}, []);\n\tuseEffect(() => {\n\t\tif (mountedRef.current) if (!cooldownRef.current && options.leading) {\n\t\t\tcooldownRef.current = true;\n\t\t\tsetValue(value);\n\t\t\ttimeoutRef.current = window.setTimeout(() => {\n\t\t\t\tcooldownRef.current = false;\n\t\t\t}, wait);\n\t\t} else {\n\t\t\tcancel();\n\t\t\ttimeoutRef.current = window.setTimeout(() => {\n\t\t\t\tcooldownRef.current = false;\n\t\t\t\tsetValue(value);\n\t\t\t}, wait);\n\t\t}\n\t}, [\n\t\tvalue,\n\t\toptions.leading,\n\t\twait\n\t]);\n\tuseEffect(() => {\n\t\tmountedRef.current = true;\n\t\treturn cancel;\n\t}, []);\n\treturn [\n\t\t_value,\n\t\tcancel,\n\t\t{\n\t\t\tcancel,\n\t\t\tflush\n\t\t}\n\t];\n}\n//#endregion\nexport { useDebouncedValue };\n\n//# sourceMappingURL=use-debounced-value.mjs.map"],"names":[],"mappings":"AACA,MAAA,cAAA,OAAA,OAAA,EAAA;;;;AAEA,SAAS,kBAAkB,OAAO,MAAM,UAAU,EAAE,SAAS,SAAS;AACrE,QAAM,CAAC,QAAQ,QAAQ,IAAI,SAAS,KAAK;AACzC,QAAM,aAAa,OAAO,KAAK;AAC/B,QAAM,aAAa,OAAO,IAAI;AAC9B,QAAM,cAAc,OAAO,KAAK;AAChC,QAAM,iBAAiB,OAAO,KAAK;AACnC,iBAAe,UAAU;AACzB,QAAM,SAAS,YAAY,MAAM;AAChC,WAAO,aAAa,WAAW,OAAO;AACtC,eAAW,UAAU;AACrB,gBAAY,UAAU;AAAA,EACvB,GAAG,CAAA,CAAE;AACL,QAAM,QAAQ,YAAY,MAAM;AAC/B,QAAI,WAAW,SAAS;AACvB,aAAM;AACN,kBAAY,UAAU;AACtB,eAAS,eAAe,OAAO;AAAA,IAChC;AAAA,EACD,GAAG,CAAA,CAAE;AACL,YAAU,MAAM;AACf,QAAI,WAAW,QAAS,KAAI,CAAC,YAAY,WAAW,QAAQ,SAAS;AACpE,kBAAY,UAAU;AACtB,eAAS,KAAK;AACd,iBAAW,UAAU,OAAO,WAAW,MAAM;AAC5C,oBAAY,UAAU;AAAA,MACvB,GAAG,IAAI;AAAA,IACR,OAAO;AACN,aAAM;AACN,iBAAW,UAAU,OAAO,WAAW,MAAM;AAC5C,oBAAY,UAAU;AACtB,iBAAS,KAAK;AAAA,MACf,GAAG,IAAI;AAAA,IACR;AAAA,EACD,GAAG;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,EACF,CAAE;AACD,YAAU,MAAM;AACf,eAAW,UAAU;AACrB,WAAO;AAAA,EACR,GAAG,CAAA,CAAE;AACL,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,MACC;AAAA,MACA;AAAA,IACH;AAAA,EACA;AACA;","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
- const useState = window["React"].useState;
2
1
  const useEffect = window["React"].useEffect;
2
+ const useState = window["React"].useState;
3
3
  function useDocumentVisibility() {
4
4
  const [documentVisibility, setDocumentVisibility] = useState("visible");
5
5
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"use-document-visibility.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.mjs"],"sourcesContent":["'use client';\nimport { useState, useEffect } from 'react';\n\nfunction useDocumentVisibility() {\n const [documentVisibility, setDocumentVisibility] = useState(\"visible\");\n useEffect(() => {\n setDocumentVisibility(document.visibilityState);\n const listener = () => setDocumentVisibility(document.visibilityState);\n document.addEventListener(\"visibilitychange\", listener);\n return () => document.removeEventListener(\"visibilitychange\", listener);\n }, []);\n return documentVisibility;\n}\n\nexport { useDocumentVisibility };\n//# sourceMappingURL=use-document-visibility.mjs.map\n"],"names":[],"mappings":"AACA,MAAA,WAAA,OAAA,OAAA,EAAA;;AAEA,SAAS,wBAAwB;AAC/B,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,SAAS;AACtE,YAAU,MAAM;AACd,0BAAsB,SAAS,eAAe;AAC9C,UAAM,WAAW,MAAM,sBAAsB,SAAS,eAAe;AACrE,aAAS,iBAAiB,oBAAoB,QAAQ;AACtD,WAAO,MAAM,SAAS,oBAAoB,oBAAoB,QAAQ;AAAA,EACxE,GAAG,CAAA,CAAE;AACL,SAAO;AACT;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"use-document-visibility.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-document-visibility/use-document-visibility.mjs"],"sourcesContent":["\"use client\";\nimport { useEffect, useState } from \"react\";\n//#region packages/@mantine/hooks/src/use-document-visibility/use-document-visibility.ts\nfunction useDocumentVisibility() {\n\tconst [documentVisibility, setDocumentVisibility] = useState(\"visible\");\n\tuseEffect(() => {\n\t\tsetDocumentVisibility(document.visibilityState);\n\t\tconst listener = () => setDocumentVisibility(document.visibilityState);\n\t\tdocument.addEventListener(\"visibilitychange\", listener);\n\t\treturn () => document.removeEventListener(\"visibilitychange\", listener);\n\t}, []);\n\treturn documentVisibility;\n}\n//#endregion\nexport { useDocumentVisibility };\n\n//# sourceMappingURL=use-document-visibility.mjs.map"],"names":[],"mappings":"AACA,MAAA,YAAA,OAAA,OAAA,EAAA;;AAEA,SAAS,wBAAwB;AAChC,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,SAAS;AACtE,YAAU,MAAM;AACf,0BAAsB,SAAS,eAAe;AAC9C,UAAM,WAAW,MAAM,sBAAsB,SAAS,eAAe;AACrE,aAAS,iBAAiB,oBAAoB,QAAQ;AACtD,WAAO,MAAM,SAAS,oBAAoB,oBAAoB,QAAQ;AAAA,EACvE,GAAG,CAAA,CAAE;AACL,SAAO;AACR;","x_google_ignoreList":[0]}
@@ -1,7 +1,7 @@
1
1
  import { useWindowEvent } from "../use-window-event/use-window-event.js";
2
2
  const useCallback = window["React"].useCallback;
3
- const useState = window["React"].useState;
4
3
  const useEffect = window["React"].useEffect;
4
+ const useState = window["React"].useState;
5
5
  function serializeJSON(value, hookName = "use-local-storage") {
6
6
  try {
7
7
  return JSON.stringify(value);
@@ -36,91 +36,86 @@ function createStorageHandler(type) {
36
36
  try {
37
37
  window[type].removeItem(key);
38
38
  } catch (error) {
39
- console.warn(
40
- "use-local-storage: Failed to remove value from storage, localStorage is blocked"
41
- );
39
+ console.warn("use-local-storage: Failed to remove value from storage, localStorage is blocked");
42
40
  }
43
41
  };
44
- return { getItem, setItem, removeItem };
42
+ return {
43
+ getItem,
44
+ setItem,
45
+ removeItem
46
+ };
45
47
  }
46
48
  function createStorage(type, hookName) {
47
49
  const eventName = "mantine-local-storage";
48
50
  const { getItem, setItem, removeItem } = createStorageHandler(type);
49
- return function useStorage({
50
- key,
51
- defaultValue,
52
- getInitialValueInEffect = true,
53
- sync = true,
54
- deserialize = deserializeJSON,
55
- serialize = (value) => serializeJSON(value, hookName)
56
- }) {
57
- const readStorageValue = useCallback(
58
- (skipStorage) => {
59
- let storageBlockedOrSkipped;
60
- try {
61
- storageBlockedOrSkipped = typeof window === "undefined" || !(type in window) || window[type] === null || !!skipStorage;
62
- } catch (_e) {
63
- storageBlockedOrSkipped = true;
64
- }
65
- if (storageBlockedOrSkipped) {
66
- return defaultValue;
67
- }
68
- const storageValue = getItem(key);
69
- return storageValue !== null ? deserialize(storageValue) : defaultValue;
70
- },
71
- [key, defaultValue]
72
- );
51
+ return function useStorage({ key, defaultValue, getInitialValueInEffect = true, sync = true, deserialize = deserializeJSON, serialize = (value) => serializeJSON(value, hookName) }) {
52
+ const readStorageValue = useCallback((skipStorage) => {
53
+ let storageBlockedOrSkipped;
54
+ try {
55
+ storageBlockedOrSkipped = typeof window === "undefined" || !(type in window) || window[type] === null || !!skipStorage;
56
+ } catch (_e) {
57
+ storageBlockedOrSkipped = true;
58
+ }
59
+ if (storageBlockedOrSkipped) return defaultValue;
60
+ const storageValue = getItem(key);
61
+ return storageValue !== null ? deserialize(storageValue) : defaultValue;
62
+ }, [key, defaultValue]);
73
63
  const [value, setValue] = useState(readStorageValue(getInitialValueInEffect));
74
- const setStorageValue = useCallback(
75
- (val) => {
76
- if (val instanceof Function) {
77
- setValue((current) => {
78
- const result = val(current);
79
- setItem(key, serialize(result));
80
- queueMicrotask(() => {
81
- window.dispatchEvent(
82
- new CustomEvent(eventName, { detail: { key, value: val(current) } })
83
- );
84
- });
85
- return result;
86
- });
87
- } else {
88
- setItem(key, serialize(val));
89
- window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));
90
- setValue(val);
91
- }
92
- },
93
- [key]
94
- );
64
+ const setStorageValue = useCallback((val) => {
65
+ if (val instanceof Function) setValue((current) => {
66
+ const result = val(current);
67
+ setItem(key, serialize(result));
68
+ queueMicrotask(() => {
69
+ window.dispatchEvent(new CustomEvent(eventName, { detail: {
70
+ key,
71
+ value: result
72
+ } }));
73
+ });
74
+ return result;
75
+ });
76
+ else {
77
+ setItem(key, serialize(val));
78
+ window.dispatchEvent(new CustomEvent(eventName, { detail: {
79
+ key,
80
+ value: val
81
+ } }));
82
+ setValue(val);
83
+ }
84
+ }, [key]);
95
85
  const removeStorageValue = useCallback(() => {
96
86
  removeItem(key);
97
87
  setValue(defaultValue);
98
- window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));
88
+ window.dispatchEvent(new CustomEvent(eventName, { detail: {
89
+ key,
90
+ value: defaultValue
91
+ } }));
99
92
  }, [key, defaultValue]);
100
93
  useWindowEvent("storage", (event) => {
101
94
  if (sync) {
102
- if (event.storageArea === window[type] && event.key === key) {
103
- setValue(deserialize(event.newValue ?? void 0));
104
- }
95
+ if (event.storageArea === window[type] && event.key === key) setValue(deserialize(event.newValue ?? void 0));
105
96
  }
106
97
  });
107
98
  useWindowEvent(eventName, (event) => {
108
99
  if (sync) {
109
- if (event.detail.key === key) {
110
- setValue(event.detail.value);
111
- }
100
+ if (event.detail.key === key) setValue(event.detail.value);
112
101
  }
113
102
  });
114
103
  useEffect(() => {
115
- if (defaultValue !== void 0 && value === void 0) {
116
- setStorageValue(defaultValue);
117
- }
118
- }, [defaultValue, value, setStorageValue]);
104
+ if (defaultValue !== void 0 && value === void 0) setStorageValue(defaultValue);
105
+ }, [
106
+ defaultValue,
107
+ value,
108
+ setStorageValue
109
+ ]);
119
110
  useEffect(() => {
120
111
  const val = readStorageValue();
121
112
  val !== void 0 && setStorageValue(val);
122
113
  }, [key]);
123
- return [value === void 0 ? defaultValue : value, setStorageValue, removeStorageValue];
114
+ return [
115
+ value === void 0 ? defaultValue : value,
116
+ setStorageValue,
117
+ removeStorageValue
118
+ ];
124
119
  };
125
120
  }
126
121
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"create-storage.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-local-storage/create-storage.mjs"],"sourcesContent":["'use client';\nimport { useCallback, useState, useEffect } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event.mjs';\n\nfunction serializeJSON(value, hookName = \"use-local-storage\") {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);\n }\n}\nfunction deserializeJSON(value) {\n try {\n return value && JSON.parse(value);\n } catch {\n return value;\n }\n}\nfunction createStorageHandler(type) {\n const getItem = (key) => {\n try {\n return window[type].getItem(key);\n } catch (error) {\n console.warn(\"use-local-storage: Failed to get value from storage, localStorage is blocked\");\n return null;\n }\n };\n const setItem = (key, value) => {\n try {\n window[type].setItem(key, value);\n } catch (error) {\n console.warn(\"use-local-storage: Failed to set value to storage, localStorage is blocked\");\n }\n };\n const removeItem = (key) => {\n try {\n window[type].removeItem(key);\n } catch (error) {\n console.warn(\n \"use-local-storage: Failed to remove value from storage, localStorage is blocked\"\n );\n }\n };\n return { getItem, setItem, removeItem };\n}\nfunction createStorage(type, hookName) {\n const eventName = type === \"localStorage\" ? \"mantine-local-storage\" : \"mantine-session-storage\";\n const { getItem, setItem, removeItem } = createStorageHandler(type);\n return function useStorage({\n key,\n defaultValue,\n getInitialValueInEffect = true,\n sync = true,\n deserialize = deserializeJSON,\n serialize = (value) => serializeJSON(value, hookName)\n }) {\n const readStorageValue = useCallback(\n (skipStorage) => {\n let storageBlockedOrSkipped;\n try {\n storageBlockedOrSkipped = typeof window === \"undefined\" || !(type in window) || window[type] === null || !!skipStorage;\n } catch (_e) {\n storageBlockedOrSkipped = true;\n }\n if (storageBlockedOrSkipped) {\n return defaultValue;\n }\n const storageValue = getItem(key);\n return storageValue !== null ? deserialize(storageValue) : defaultValue;\n },\n [key, defaultValue]\n );\n const [value, setValue] = useState(readStorageValue(getInitialValueInEffect));\n const setStorageValue = useCallback(\n (val) => {\n if (val instanceof Function) {\n setValue((current) => {\n const result = val(current);\n setItem(key, serialize(result));\n queueMicrotask(() => {\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: val(current) } })\n );\n });\n return result;\n });\n } else {\n setItem(key, serialize(val));\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));\n setValue(val);\n }\n },\n [key]\n );\n const removeStorageValue = useCallback(() => {\n removeItem(key);\n setValue(defaultValue);\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));\n }, [key, defaultValue]);\n useWindowEvent(\"storage\", (event) => {\n if (sync) {\n if (event.storageArea === window[type] && event.key === key) {\n setValue(deserialize(event.newValue ?? void 0));\n }\n }\n });\n useWindowEvent(eventName, (event) => {\n if (sync) {\n if (event.detail.key === key) {\n setValue(event.detail.value);\n }\n }\n });\n useEffect(() => {\n if (defaultValue !== void 0 && value === void 0) {\n setStorageValue(defaultValue);\n }\n }, [defaultValue, value, setStorageValue]);\n useEffect(() => {\n const val = readStorageValue();\n val !== void 0 && setStorageValue(val);\n }, [key]);\n return [value === void 0 ? defaultValue : value, setStorageValue, removeStorageValue];\n };\n}\nfunction readValue(type) {\n const { getItem } = createStorageHandler(type);\n return function read({\n key,\n defaultValue,\n deserialize = deserializeJSON\n }) {\n let storageBlockedOrSkipped;\n try {\n storageBlockedOrSkipped = typeof window === \"undefined\" || !(type in window) || window[type] === null;\n } catch (_e) {\n storageBlockedOrSkipped = true;\n }\n if (storageBlockedOrSkipped) {\n return defaultValue;\n }\n const storageValue = getItem(key);\n return storageValue !== null ? deserialize(storageValue) : defaultValue;\n };\n}\n\nexport { createStorage, readValue };\n//# sourceMappingURL=create-storage.mjs.map\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"create-storage.js","sources":["../../../../../../node_modules/@mantine/hooks/esm/use-local-storage/create-storage.mjs"],"sourcesContent":["\"use client\";\nimport { useWindowEvent } from \"../use-window-event/use-window-event.mjs\";\nimport { useCallback, useEffect, useState } from \"react\";\n//#region packages/@mantine/hooks/src/use-local-storage/create-storage.ts\nfunction serializeJSON(value, hookName = \"use-local-storage\") {\n\ttry {\n\t\treturn JSON.stringify(value);\n\t} catch (error) {\n\t\tthrow new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);\n\t}\n}\nfunction deserializeJSON(value) {\n\ttry {\n\t\treturn value && JSON.parse(value);\n\t} catch {\n\t\treturn value;\n\t}\n}\nfunction createStorageHandler(type) {\n\tconst getItem = (key) => {\n\t\ttry {\n\t\t\treturn window[type].getItem(key);\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"use-local-storage: Failed to get value from storage, localStorage is blocked\");\n\t\t\treturn null;\n\t\t}\n\t};\n\tconst setItem = (key, value) => {\n\t\ttry {\n\t\t\twindow[type].setItem(key, value);\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"use-local-storage: Failed to set value to storage, localStorage is blocked\");\n\t\t}\n\t};\n\tconst removeItem = (key) => {\n\t\ttry {\n\t\t\twindow[type].removeItem(key);\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"use-local-storage: Failed to remove value from storage, localStorage is blocked\");\n\t\t}\n\t};\n\treturn {\n\t\tgetItem,\n\t\tsetItem,\n\t\tremoveItem\n\t};\n}\nfunction createStorage(type, hookName) {\n\tconst eventName = type === \"localStorage\" ? \"mantine-local-storage\" : \"mantine-session-storage\";\n\tconst { getItem, setItem, removeItem } = createStorageHandler(type);\n\treturn function useStorage({ key, defaultValue, getInitialValueInEffect = true, sync = true, deserialize = deserializeJSON, serialize = (value) => serializeJSON(value, hookName) }) {\n\t\tconst readStorageValue = useCallback((skipStorage) => {\n\t\t\tlet storageBlockedOrSkipped;\n\t\t\ttry {\n\t\t\t\tstorageBlockedOrSkipped = typeof window === \"undefined\" || !(type in window) || window[type] === null || !!skipStorage;\n\t\t\t} catch (_e) {\n\t\t\t\tstorageBlockedOrSkipped = true;\n\t\t\t}\n\t\t\tif (storageBlockedOrSkipped) return defaultValue;\n\t\t\tconst storageValue = getItem(key);\n\t\t\treturn storageValue !== null ? deserialize(storageValue) : defaultValue;\n\t\t}, [key, defaultValue]);\n\t\tconst [value, setValue] = useState(readStorageValue(getInitialValueInEffect));\n\t\tconst setStorageValue = useCallback((val) => {\n\t\t\tif (val instanceof Function) setValue((current) => {\n\t\t\t\tconst result = val(current);\n\t\t\t\tsetItem(key, serialize(result));\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\twindow.dispatchEvent(new CustomEvent(eventName, { detail: {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue: result\n\t\t\t\t\t} }));\n\t\t\t\t});\n\t\t\t\treturn result;\n\t\t\t});\n\t\t\telse {\n\t\t\t\tsetItem(key, serialize(val));\n\t\t\t\twindow.dispatchEvent(new CustomEvent(eventName, { detail: {\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue: val\n\t\t\t\t} }));\n\t\t\t\tsetValue(val);\n\t\t\t}\n\t\t}, [key]);\n\t\tconst removeStorageValue = useCallback(() => {\n\t\t\tremoveItem(key);\n\t\t\tsetValue(defaultValue);\n\t\t\twindow.dispatchEvent(new CustomEvent(eventName, { detail: {\n\t\t\t\tkey,\n\t\t\t\tvalue: defaultValue\n\t\t\t} }));\n\t\t}, [key, defaultValue]);\n\t\tuseWindowEvent(\"storage\", (event) => {\n\t\t\tif (sync) {\n\t\t\t\tif (event.storageArea === window[type] && event.key === key) setValue(deserialize(event.newValue ?? void 0));\n\t\t\t}\n\t\t});\n\t\tuseWindowEvent(eventName, (event) => {\n\t\t\tif (sync) {\n\t\t\t\tif (event.detail.key === key) setValue(event.detail.value);\n\t\t\t}\n\t\t});\n\t\tuseEffect(() => {\n\t\t\tif (defaultValue !== void 0 && value === void 0) setStorageValue(defaultValue);\n\t\t}, [\n\t\t\tdefaultValue,\n\t\t\tvalue,\n\t\t\tsetStorageValue\n\t\t]);\n\t\tuseEffect(() => {\n\t\t\tconst val = readStorageValue();\n\t\t\tval !== void 0 && setStorageValue(val);\n\t\t}, [key]);\n\t\treturn [\n\t\t\tvalue === void 0 ? defaultValue : value,\n\t\t\tsetStorageValue,\n\t\t\tremoveStorageValue\n\t\t];\n\t};\n}\nfunction readValue(type) {\n\tconst { getItem } = createStorageHandler(type);\n\treturn function read({ key, defaultValue, deserialize = deserializeJSON }) {\n\t\tlet storageBlockedOrSkipped;\n\t\ttry {\n\t\t\tstorageBlockedOrSkipped = typeof window === \"undefined\" || !(type in window) || window[type] === null;\n\t\t} catch (_e) {\n\t\t\tstorageBlockedOrSkipped = true;\n\t\t}\n\t\tif (storageBlockedOrSkipped) return defaultValue;\n\t\tconst storageValue = getItem(key);\n\t\treturn storageValue !== null ? deserialize(storageValue) : defaultValue;\n\t};\n}\n//#endregion\nexport { createStorage, readValue };\n\n//# sourceMappingURL=create-storage.mjs.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}