@ynput/ayon-frontend-shared 0.2.5 → 0.2.7

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 (83) hide show
  1. package/dist/ProjectTreeTable.cjs.js +16 -0
  2. package/dist/ProjectTreeTable.cjs.js.map +1 -1
  3. package/dist/ProjectTreeTable.es.js +16 -0
  4. package/dist/ProjectTreeTable.es.js.map +1 -1
  5. package/dist/_virtual/index.cjs5.js +5 -3
  6. package/dist/_virtual/index.cjs5.js.map +1 -1
  7. package/dist/_virtual/index.cjs6.js +3 -5
  8. package/dist/_virtual/index.cjs6.js.map +1 -1
  9. package/dist/_virtual/index.es5.js +5 -2
  10. package/dist/_virtual/index.es5.js.map +1 -1
  11. package/dist/_virtual/index.es6.js +2 -5
  12. package/dist/_virtual/index.es6.js.map +1 -1
  13. package/dist/node_modules/rehype-prism-plus/dist/index.es.cjs.js +1 -1
  14. package/dist/node_modules/rehype-prism-plus/dist/index.es.es.js +1 -1
  15. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  16. package/dist/node_modules/remove-accents/index.es.js +1 -1
  17. package/dist/shared/src/api/generated/actions.cjs.js.map +1 -1
  18. package/dist/shared/src/api/generated/actions.es.js.map +1 -1
  19. package/dist/shared/src/api/generated/graphql.cjs.js +2 -0
  20. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  21. package/dist/shared/src/api/generated/graphql.es.js +2 -0
  22. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  23. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js +1 -1
  24. package/dist/shared/src/components/AttributeEditor/AttributeEditor.cjs.js.map +1 -1
  25. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js +1 -1
  26. package/dist/shared/src/components/AttributeEditor/AttributeEditor.es.js.map +1 -1
  27. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js +0 -1
  28. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.cjs.js.map +1 -1
  29. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js +0 -1
  30. package/dist/shared/src/components/DetailsPanelAttributes/DetailsPanelAttributes.es.js.map +1 -1
  31. package/dist/shared/src/containers/Actions/Actions.cjs.js +5 -2
  32. package/dist/shared/src/containers/Actions/Actions.cjs.js.map +1 -1
  33. package/dist/shared/src/containers/Actions/Actions.es.js +5 -2
  34. package/dist/shared/src/containers/Actions/Actions.es.js.map +1 -1
  35. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js +1 -0
  36. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.cjs.js.map +1 -1
  37. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js +1 -0
  38. package/dist/shared/src/containers/Actions/ActionsDropdown/ActionsDropdown.styled.es.js.map +1 -1
  39. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js +9 -3
  40. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.cjs.js.map +1 -1
  41. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js +9 -3
  42. package/dist/shared/src/containers/DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.es.js.map +1 -1
  43. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js +2 -2
  44. package/dist/shared/src/containers/Feed/context/FeedContext.cjs.js.map +1 -1
  45. package/dist/shared/src/containers/Feed/context/FeedContext.es.js +2 -2
  46. package/dist/shared/src/containers/Feed/context/FeedContext.es.js.map +1 -1
  47. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js +4 -8
  48. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.cjs.js.map +1 -1
  49. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js +4 -8
  50. package/dist/shared/src/containers/ProjectTreeTable/ProjectTreeTable.es.js.map +1 -1
  51. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +0 -1
  52. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  53. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +0 -1
  54. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  55. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js +1 -1
  56. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.cjs.js.map +1 -1
  57. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js +1 -1
  58. package/dist/shared/src/containers/ProjectTreeTable/utils/clientFilterToQueryFilter.es.js.map +1 -1
  59. package/dist/shared/src/context/DetailsPanelContext.cjs.js +0 -1
  60. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  61. package/dist/shared/src/context/DetailsPanelContext.es.js +0 -1
  62. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  63. package/dist/shared/src/hooks/useActionTriggers.cjs.js +7 -6
  64. package/dist/shared/src/hooks/useActionTriggers.cjs.js.map +1 -1
  65. package/dist/shared/src/hooks/useActionTriggers.es.js +7 -6
  66. package/dist/shared/src/hooks/useActionTriggers.es.js.map +1 -1
  67. package/dist/shared/src/hooks/useLoadModules.cjs.js +9 -2
  68. package/dist/shared/src/hooks/useLoadModules.cjs.js.map +1 -1
  69. package/dist/shared/src/hooks/useLoadModules.es.js +9 -2
  70. package/dist/shared/src/hooks/useLoadModules.es.js.map +1 -1
  71. package/dist/shared/src/util/confirmDelete.cjs.js.map +1 -1
  72. package/dist/shared/src/util/confirmDelete.es.js.map +1 -1
  73. package/dist/types/SimpleTable/SimpleTable.d.ts +9 -2
  74. package/dist/types/SimpleTable/SimpleTableRowTemplate.d.ts +7 -0
  75. package/dist/types/api/generated/actions.d.ts +1 -1
  76. package/dist/types/api/generated/graphql.d.ts +3 -1
  77. package/dist/types/containers/Actions/Actions.d.ts +4 -3
  78. package/dist/types/containers/ProjectTreeTable/ProjectTreeTable.d.ts +7 -6
  79. package/dist/types/containers/ProjectTreeTable/index.d.ts +1 -0
  80. package/dist/types/context/DetailsPanelContext.d.ts +8 -2
  81. package/dist/types/hooks/useActionTriggers.d.ts +6 -1
  82. package/dist/types/util/confirmDelete.d.ts +1 -2
  83. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useLoadModules.es.js","sources":["../../../../src/hooks/useLoadModules.ts"],"sourcesContent":["import { useRemoteModules } from '@shared/context/RemoteModulesContext'\nimport { loadRemote } from '@module-federation/enhanced/runtime'\nimport { useEffect, useRef, useState } from 'react'\nimport semver from 'semver'\nimport { FrontendModuleListItem } from '@shared/api'\n\nexport interface ModuleSpec<T> {\n addon: string\n remote: string\n module: string\n fallback?: T\n debug?: boolean\n minVersion?: string\n}\n\ntype ModuleResult<T> = [\n T,\n {\n isLoaded: boolean\n addon: string\n remote: string\n module: string\n minVersion?: string\n outdated?: {\n current: string\n required: string\n }\n },\n]\n\nexport const useLoadModules = <T extends any[]>(\n moduleSpecs: ModuleSpec<T[number]>[],\n modules: FrontendModuleListItem[],\n skip: boolean,\n): { modules: ModuleResult<T[number]>[]; isLoading: boolean } => {\n // Use a ref to track which modules have been processed\n const processedModules = useRef<Set<string>>(new Set())\n\n // Initialize results state\n const [results, setResults] = useState<ModuleResult<T[number]>[]>(() =>\n initializeResults(moduleSpecs),\n )\n const [isLoading, setIsLoading] = useState(true)\n\n // Reset and reinitialize when moduleSpecs change\n useEffect(() => {\n if (skip) return\n // Reset the processed modules tracker\n processedModules.current = new Set()\n\n // Initialize results with proper structure\n setResults(initializeResults(moduleSpecs))\n }, [JSON.stringify(moduleSpecs), skip])\n\n const loadModule = async (\n remote: string,\n module: string,\n addon: string,\n fallback: T[number] | undefined,\n minVersion?: string,\n ) => {\n try {\n const result = await loadRemote<{ default: T[number] }>(`${remote}/${module}`, {\n from: 'runtime',\n })\n updateResultWithLoaded(addon, remote, module, result?.default || fallback, minVersion)\n } catch (error) {\n console.error('Error loading remote module', remote, module, error)\n throw error\n }\n }\n\n // Load modules when remotes are initialized\n useEffect(() => {\n if (skip) return\n\n console.log('loading modules')\n\n const promises: Promise<void>[] = []\n moduleSpecs.forEach((spec, index) => {\n const { addon, remote, module, fallback, minVersion } = spec\n\n if (!addon || !remote || !module) return\n\n // Create a unique key for this module\n const moduleKey = `${addon}/${remote}/${module}`\n\n // Skip if already processed\n if (processedModules.current.has(moduleKey)) return\n\n // Check if this module is already loaded in our results\n if (results[index]?.[1]?.isLoaded) {\n processedModules.current.add(moduleKey)\n return\n }\n\n // Mark as processed\n processedModules.current.add(moduleKey)\n\n const addonInfo = modules.find((m) => m.addonName === addon)\n\n // Handle missing addon\n if (!addonInfo) {\n console.log('Addon not found', { addon, remote, module })\n return\n }\n\n // Check version requirements\n if (minVersion && !semver.gte(addonInfo.addonVersion, minVersion)) {\n updateResultWithOutdated(\n index,\n addon,\n remote,\n module,\n fallback,\n minVersion,\n addonInfo.addonVersion,\n )\n return\n }\n\n // Check if module exists\n if (!addonInfo.modules[remote]) {\n console.log('Module not found', { addon, remote, module })\n return\n }\n\n promises.push(loadModule(remote, module, addon, fallback, minVersion))\n })\n\n // Wait for all promises to resolve\n setIsLoading(true)\n Promise.all(promises)\n .then(() => {\n // all modules loaded\n setIsLoading(false)\n })\n .catch((error) => {\n console.error('Error loading modules', error)\n setIsLoading(false)\n })\n }, [skip, modules, JSON.stringify(moduleSpecs)])\n\n // Helper function to initialize results\n function initializeResults(specs: ModuleSpec<T[number]>[]): ModuleResult<T[number]>[] {\n return specs.map(\n ({ addon = '', remote = '', module = '', fallback, minVersion }): ModuleResult<T[number]> => [\n fallback as T[number],\n {\n isLoaded: false,\n addon,\n remote,\n module,\n minVersion,\n outdated: undefined,\n },\n ],\n )\n }\n\n // Helper to update a result with outdated status\n function updateResultWithOutdated(\n index: number,\n addon: string,\n remote: string,\n module: string,\n fallback: T[number] | undefined,\n requiredVersion: string,\n currentVersion: string,\n ) {\n setResults((prev) => {\n const updated = [...prev]\n if (index >= 0 && index < updated.length) {\n updated[index] = [\n fallback,\n {\n isLoaded: false,\n addon,\n remote,\n module,\n minVersion: requiredVersion,\n outdated: {\n current: currentVersion,\n required: requiredVersion,\n },\n },\n ]\n }\n return updated\n })\n }\n\n // Helper to update a result when module is loaded\n function updateResultWithLoaded(\n addon: string,\n remote: string,\n module: string,\n loadedModule: T[number] | undefined,\n minVersion?: string,\n ) {\n setResults((prev) => {\n const updated = [...prev]\n // Find the corresponding module spec\n const index = moduleSpecs.findIndex(\n (spec) => spec.addon === addon && spec.remote === remote && spec.module === module,\n )\n\n if (index >= 0 && index < updated.length) {\n updated[index] = [\n loadedModule,\n {\n isLoaded: true,\n addon,\n remote,\n module,\n minVersion,\n outdated: undefined,\n },\n ]\n }\n return updated\n })\n }\n\n return { modules: results, isLoading }\n}\n"],"names":["loadRemote"],"mappings":"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"}
1
+ {"version":3,"file":"useLoadModules.es.js","sources":["../../../../src/hooks/useLoadModules.ts"],"sourcesContent":["import { loadRemote } from '@module-federation/enhanced/runtime'\nimport { useEffect, useRef, useState } from 'react'\nimport semver from 'semver'\nimport { FrontendModuleListItem } from '@shared/api'\n\nexport interface ModuleSpec<T> {\n addon: string\n remote: string\n module: string\n fallback?: T\n debug?: boolean\n minVersion?: string\n}\n\ntype ModuleResult<T> = [\n T,\n {\n isLoaded: boolean\n addon: string\n remote: string\n module: string\n minVersion?: string\n outdated?: {\n current: string\n required: string\n }\n },\n]\n\nexport const useLoadModules = <T extends any[]>(\n moduleSpecs: ModuleSpec<T[number]>[],\n modules: FrontendModuleListItem[],\n skip: boolean,\n): { modules: ModuleResult<T[number]>[]; isLoading: boolean } => {\n // Use a ref to track which modules have been processed\n const processedModules = useRef<Set<string>>(new Set())\n\n // Initialize results state\n const [results, setResults] = useState<ModuleResult<T[number]>[]>(() =>\n initializeResults(moduleSpecs),\n )\n const [isLoading, setIsLoading] = useState(modules.length > 0 && !skip)\n\n // Reset and reinitialize when moduleSpecs change\n useEffect(() => {\n if (skip) return\n // Reset the processed modules tracker\n processedModules.current = new Set()\n\n // Initialize results with proper structure\n setResults(initializeResults(moduleSpecs))\n }, [JSON.stringify(moduleSpecs), skip])\n\n const loadModule = async (\n remote: string,\n module: string,\n addon: string,\n fallback: T[number] | undefined,\n minVersion?: string,\n ) => {\n try {\n const result = await loadRemote<{ default: T[number] }>(`${remote}/${module}`, {\n from: 'runtime',\n })\n updateResultWithLoaded(addon, remote, module, result?.default || fallback, minVersion)\n } catch (error) {\n console.error('Error loading remote module', remote, module, error)\n throw error\n }\n }\n\n // Load modules when remotes are initialized\n useEffect(() => {\n if (skip) {\n setIsLoading(false)\n return\n }\n\n console.log('loading modules')\n\n const promises: Promise<void>[] = []\n moduleSpecs.forEach((spec, index) => {\n const { addon, remote, module, fallback, minVersion } = spec\n\n if (!addon || !remote || !module) return\n\n // Create a unique key for this module\n const moduleKey = `${addon}/${remote}/${module}`\n\n // Skip if already processed\n if (processedModules.current.has(moduleKey)) return\n\n // Check if this module is already loaded in our results\n if (results[index]?.[1]?.isLoaded) {\n processedModules.current.add(moduleKey)\n return\n }\n\n // Mark as processed\n processedModules.current.add(moduleKey)\n\n const addonInfo = modules.find((m) => m.addonName === addon)\n\n // Handle missing addon\n if (!addonInfo) {\n console.log('Addon not found', { addon, remote, module })\n return\n }\n\n // Check version requirements\n if (minVersion && !semver.gte(addonInfo.addonVersion, minVersion)) {\n updateResultWithOutdated(\n index,\n addon,\n remote,\n module,\n fallback,\n minVersion,\n addonInfo.addonVersion,\n )\n return\n }\n\n // Check if module exists\n if (!addonInfo.modules[remote]) {\n console.log('Module not found', { addon, remote, module })\n return\n }\n\n promises.push(loadModule(remote, module, addon, fallback, minVersion))\n })\n\n if (!promises.length) {\n setIsLoading(false)\n return\n }\n\n // Wait for all promises to resolve\n setIsLoading(true)\n Promise.all(promises)\n .then(() => {\n // all modules loaded\n setIsLoading(false)\n })\n .catch((error) => {\n console.error('Error loading modules', error)\n setIsLoading(false)\n })\n }, [skip, modules, JSON.stringify(moduleSpecs)])\n\n // Helper function to initialize results\n function initializeResults(specs: ModuleSpec<T[number]>[]): ModuleResult<T[number]>[] {\n return specs.map(\n ({ addon = '', remote = '', module = '', fallback, minVersion }): ModuleResult<T[number]> => [\n fallback as T[number],\n {\n isLoaded: false,\n addon,\n remote,\n module,\n minVersion,\n outdated: undefined,\n },\n ],\n )\n }\n\n // Helper to update a result with outdated status\n function updateResultWithOutdated(\n index: number,\n addon: string,\n remote: string,\n module: string,\n fallback: T[number] | undefined,\n requiredVersion: string,\n currentVersion: string,\n ) {\n setResults((prev) => {\n const updated = [...prev]\n if (index >= 0 && index < updated.length) {\n updated[index] = [\n fallback,\n {\n isLoaded: false,\n addon,\n remote,\n module,\n minVersion: requiredVersion,\n outdated: {\n current: currentVersion,\n required: requiredVersion,\n },\n },\n ]\n }\n return updated\n })\n }\n\n // Helper to update a result when module is loaded\n function updateResultWithLoaded(\n addon: string,\n remote: string,\n module: string,\n loadedModule: T[number] | undefined,\n minVersion?: string,\n ) {\n setResults((prev) => {\n const updated = [...prev]\n // Find the corresponding module spec\n const index = moduleSpecs.findIndex(\n (spec) => spec.addon === addon && spec.remote === remote && spec.module === module,\n )\n\n if (index >= 0 && index < updated.length) {\n updated[index] = [\n loadedModule,\n {\n isLoaded: true,\n addon,\n remote,\n module,\n minVersion,\n outdated: undefined,\n },\n ]\n }\n return updated\n })\n }\n\n return { modules: results, isLoading }\n}\n"],"names":["loadRemote"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirmDelete.cjs.js","sources":["../../../../src/util/confirmDelete.ts"],"sourcesContent":["import { upperFirst } from 'lodash'\nimport { confirmDialog, ConfirmDialogOptions } from 'primereact/confirmdialog'\nimport { toast } from 'react-toastify'\n\ninterface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {\n label?: string\n message?: string\n deleteLabel?: string\n accept?: () => Promise<any>\n showToasts?: boolean\n isArchive?: boolean\n onSuccess?: () => void\n onError?: (error: any) => void\n}\n\nexport const confirmDelete = ({\n label = '',\n message = 'Are you sure? This cannot be undone',\n deleteLabel,\n accept = async () => {},\n showToasts = true,\n isArchive = false,\n onSuccess,\n onError,\n ...props\n}: ConfirmDeleteOptions): ReturnType<typeof confirmDialog> => {\n deleteLabel = deleteLabel || (isArchive ? 'Archive' : 'Delete')\n const deleteLabelPresent = isArchive ? 'archiving' : 'deleting'\n const deleteLabelPast = isArchive ? 'archived' : 'deleted'\n\n return confirmDialog({\n header: props.header || `${deleteLabel} ${label}`,\n message,\n accept: async () => {\n const toastId = showToasts\n ? toast.loading(`${upperFirst(deleteLabelPresent)} ${label.toLowerCase()}...`, {\n autoClose: false,\n })\n : null\n try {\n await accept()\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: `${label} ${deleteLabelPast}`,\n type: 'success',\n autoClose: 5000,\n isLoading: false,\n })\n\n onSuccess && onSuccess()\n } catch (error: any) {\n const errorMessage =\n typeof error === 'string'\n ? error\n : error.message || `Error ${deleteLabelPresent} ${label}`\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: errorMessage,\n type: 'error',\n autoClose: 5000,\n isLoading: false,\n })\n\n onError && onError(error)\n }\n },\n reject: () => {},\n acceptLabel: upperFirst(deleteLabel),\n rejectLabel: 'Cancel',\n acceptClassName: 'button-danger',\n style: { minWidth: 400, maxWidth: 600 },\n ...props,\n })\n}\n"],"names":["confirmDialog","toast","upperFirst"],"mappings":";;;;;AAeO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,SAAS,YAAY;AAAA,EAAC;AAAA,EACtB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA8D;AAC9C,gBAAA,gBAAgB,YAAY,YAAY;AAChD,QAAA,qBAAqB,YAAY,cAAc;AAC/C,QAAA,kBAAkB,YAAY,aAAa;AAEjD,SAAOA,gCAAc;AAAA,IACnB,QAAQ,MAAM,UAAU,GAAG,WAAW,IAAI,KAAK;AAAA,IAC/C;AAAA,IACA,QAAQ,YAAY;AAClB,YAAM,UAAU,aACZC,oBAAM,QAAQ,GAAGC,OAAAA,WAAW,kBAAkB,CAAC,IAAI,MAAM,YAAa,CAAA,OAAO;AAAA,QAC3E,WAAW;AAAA,MACZ,CAAA,IACD;AACA,UAAA;AACF,cAAM,OAAO;AAGX,sBAAA,WACAD,oBAAM,OAAO,SAAS;AAAA,UACpB,QAAQ,GAAG,KAAK,IAAI,eAAe;AAAA,UACnC,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,qBAAa,UAAU;AAAA,eAChB,OAAY;AACb,cAAA,eACJ,OAAO,UAAU,WACb,QACA,MAAM,WAAW,SAAS,kBAAkB,IAAI,KAAK;AAGzD,sBAAA,WACAA,oBAAM,OAAO,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,mBAAW,QAAQ,KAAK;AAAA,MAAA;AAAA,IAE5B;AAAA,IACA,QAAQ,MAAM;AAAA,IAAC;AAAA,IACf,aAAaC,kBAAW,WAAW;AAAA,IACnC,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI;AAAA,IACtC,GAAG;AAAA,EAAA,CACJ;AACH;;"}
1
+ {"version":3,"file":"confirmDelete.cjs.js","sources":["../../../../src/util/confirmDelete.ts"],"sourcesContent":["import { upperFirst } from 'lodash'\nimport { confirmDialog, ConfirmDialogOptions } from 'primereact/confirmdialog'\nimport { toast } from 'react-toastify'\n\nexport interface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {\n label?: string\n message?: string\n deleteLabel?: string\n accept?: () => Promise<any>\n showToasts?: boolean\n isArchive?: boolean\n onSuccess?: () => void\n onError?: (error: any) => void\n}\n\nexport const confirmDelete = ({\n label = '',\n message = 'Are you sure? This cannot be undone',\n deleteLabel,\n accept = async () => {},\n showToasts = true,\n isArchive = false,\n onSuccess,\n onError,\n ...props\n}: ConfirmDeleteOptions): ReturnType<typeof confirmDialog> => {\n deleteLabel = deleteLabel || (isArchive ? 'Archive' : 'Delete')\n const deleteLabelPresent = isArchive ? 'archiving' : 'deleting'\n const deleteLabelPast = isArchive ? 'archived' : 'deleted'\n\n return confirmDialog({\n header: props.header || `${deleteLabel} ${label}`,\n message,\n accept: async () => {\n const toastId = showToasts\n ? toast.loading(`${upperFirst(deleteLabelPresent)} ${label.toLowerCase()}...`, {\n autoClose: false,\n })\n : null\n try {\n await accept()\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: `${label} ${deleteLabelPast}`,\n type: 'success',\n autoClose: 5000,\n isLoading: false,\n })\n\n onSuccess && onSuccess()\n } catch (error: any) {\n const errorMessage =\n typeof error === 'string'\n ? error\n : error.message || `Error ${deleteLabelPresent} ${label}`\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: errorMessage,\n type: 'error',\n autoClose: 5000,\n isLoading: false,\n })\n\n onError && onError(error)\n }\n },\n reject: () => {},\n acceptLabel: upperFirst(deleteLabel),\n rejectLabel: 'Cancel',\n acceptClassName: 'button-danger',\n style: { minWidth: 400, maxWidth: 600 },\n ...props,\n })\n}\n"],"names":["confirmDialog","toast","upperFirst"],"mappings":";;;;;AAeO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,SAAS,YAAY;AAAA,EAAC;AAAA,EACtB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA8D;AAC9C,gBAAA,gBAAgB,YAAY,YAAY;AAChD,QAAA,qBAAqB,YAAY,cAAc;AAC/C,QAAA,kBAAkB,YAAY,aAAa;AAEjD,SAAOA,gCAAc;AAAA,IACnB,QAAQ,MAAM,UAAU,GAAG,WAAW,IAAI,KAAK;AAAA,IAC/C;AAAA,IACA,QAAQ,YAAY;AAClB,YAAM,UAAU,aACZC,oBAAM,QAAQ,GAAGC,OAAAA,WAAW,kBAAkB,CAAC,IAAI,MAAM,YAAa,CAAA,OAAO;AAAA,QAC3E,WAAW;AAAA,MACZ,CAAA,IACD;AACA,UAAA;AACF,cAAM,OAAO;AAGX,sBAAA,WACAD,oBAAM,OAAO,SAAS;AAAA,UACpB,QAAQ,GAAG,KAAK,IAAI,eAAe;AAAA,UACnC,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,qBAAa,UAAU;AAAA,eAChB,OAAY;AACb,cAAA,eACJ,OAAO,UAAU,WACb,QACA,MAAM,WAAW,SAAS,kBAAkB,IAAI,KAAK;AAGzD,sBAAA,WACAA,oBAAM,OAAO,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,mBAAW,QAAQ,KAAK;AAAA,MAAA;AAAA,IAE5B;AAAA,IACA,QAAQ,MAAM;AAAA,IAAC;AAAA,IACf,aAAaC,kBAAW,WAAW;AAAA,IACnC,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI;AAAA,IACtC,GAAG;AAAA,EAAA,CACJ;AACH;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"confirmDelete.es.js","sources":["../../../../src/util/confirmDelete.ts"],"sourcesContent":["import { upperFirst } from 'lodash'\nimport { confirmDialog, ConfirmDialogOptions } from 'primereact/confirmdialog'\nimport { toast } from 'react-toastify'\n\ninterface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {\n label?: string\n message?: string\n deleteLabel?: string\n accept?: () => Promise<any>\n showToasts?: boolean\n isArchive?: boolean\n onSuccess?: () => void\n onError?: (error: any) => void\n}\n\nexport const confirmDelete = ({\n label = '',\n message = 'Are you sure? This cannot be undone',\n deleteLabel,\n accept = async () => {},\n showToasts = true,\n isArchive = false,\n onSuccess,\n onError,\n ...props\n}: ConfirmDeleteOptions): ReturnType<typeof confirmDialog> => {\n deleteLabel = deleteLabel || (isArchive ? 'Archive' : 'Delete')\n const deleteLabelPresent = isArchive ? 'archiving' : 'deleting'\n const deleteLabelPast = isArchive ? 'archived' : 'deleted'\n\n return confirmDialog({\n header: props.header || `${deleteLabel} ${label}`,\n message,\n accept: async () => {\n const toastId = showToasts\n ? toast.loading(`${upperFirst(deleteLabelPresent)} ${label.toLowerCase()}...`, {\n autoClose: false,\n })\n : null\n try {\n await accept()\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: `${label} ${deleteLabelPast}`,\n type: 'success',\n autoClose: 5000,\n isLoading: false,\n })\n\n onSuccess && onSuccess()\n } catch (error: any) {\n const errorMessage =\n typeof error === 'string'\n ? error\n : error.message || `Error ${deleteLabelPresent} ${label}`\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: errorMessage,\n type: 'error',\n autoClose: 5000,\n isLoading: false,\n })\n\n onError && onError(error)\n }\n },\n reject: () => {},\n acceptLabel: upperFirst(deleteLabel),\n rejectLabel: 'Cancel',\n acceptClassName: 'button-danger',\n style: { minWidth: 400, maxWidth: 600 },\n ...props,\n })\n}\n"],"names":[],"mappings":";;;AAeO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,SAAS,YAAY;AAAA,EAAC;AAAA,EACtB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA8D;AAC9C,gBAAA,gBAAgB,YAAY,YAAY;AAChD,QAAA,qBAAqB,YAAY,cAAc;AAC/C,QAAA,kBAAkB,YAAY,aAAa;AAEjD,SAAO,cAAc;AAAA,IACnB,QAAQ,MAAM,UAAU,GAAG,WAAW,IAAI,KAAK;AAAA,IAC/C;AAAA,IACA,QAAQ,YAAY;AAClB,YAAM,UAAU,aACZ,MAAM,QAAQ,GAAG,WAAW,kBAAkB,CAAC,IAAI,MAAM,YAAa,CAAA,OAAO;AAAA,QAC3E,WAAW;AAAA,MACZ,CAAA,IACD;AACA,UAAA;AACF,cAAM,OAAO;AAGX,sBAAA,WACA,MAAM,OAAO,SAAS;AAAA,UACpB,QAAQ,GAAG,KAAK,IAAI,eAAe;AAAA,UACnC,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,qBAAa,UAAU;AAAA,eAChB,OAAY;AACb,cAAA,eACJ,OAAO,UAAU,WACb,QACA,MAAM,WAAW,SAAS,kBAAkB,IAAI,KAAK;AAGzD,sBAAA,WACA,MAAM,OAAO,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,mBAAW,QAAQ,KAAK;AAAA,MAAA;AAAA,IAE5B;AAAA,IACA,QAAQ,MAAM;AAAA,IAAC;AAAA,IACf,aAAa,WAAW,WAAW;AAAA,IACnC,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI;AAAA,IACtC,GAAG;AAAA,EAAA,CACJ;AACH;"}
1
+ {"version":3,"file":"confirmDelete.es.js","sources":["../../../../src/util/confirmDelete.ts"],"sourcesContent":["import { upperFirst } from 'lodash'\nimport { confirmDialog, ConfirmDialogOptions } from 'primereact/confirmdialog'\nimport { toast } from 'react-toastify'\n\nexport interface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {\n label?: string\n message?: string\n deleteLabel?: string\n accept?: () => Promise<any>\n showToasts?: boolean\n isArchive?: boolean\n onSuccess?: () => void\n onError?: (error: any) => void\n}\n\nexport const confirmDelete = ({\n label = '',\n message = 'Are you sure? This cannot be undone',\n deleteLabel,\n accept = async () => {},\n showToasts = true,\n isArchive = false,\n onSuccess,\n onError,\n ...props\n}: ConfirmDeleteOptions): ReturnType<typeof confirmDialog> => {\n deleteLabel = deleteLabel || (isArchive ? 'Archive' : 'Delete')\n const deleteLabelPresent = isArchive ? 'archiving' : 'deleting'\n const deleteLabelPast = isArchive ? 'archived' : 'deleted'\n\n return confirmDialog({\n header: props.header || `${deleteLabel} ${label}`,\n message,\n accept: async () => {\n const toastId = showToasts\n ? toast.loading(`${upperFirst(deleteLabelPresent)} ${label.toLowerCase()}...`, {\n autoClose: false,\n })\n : null\n try {\n await accept()\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: `${label} ${deleteLabelPast}`,\n type: 'success',\n autoClose: 5000,\n isLoading: false,\n })\n\n onSuccess && onSuccess()\n } catch (error: any) {\n const errorMessage =\n typeof error === 'string'\n ? error\n : error.message || `Error ${deleteLabelPresent} ${label}`\n\n showToasts &&\n toastId &&\n toast.update(toastId, {\n render: errorMessage,\n type: 'error',\n autoClose: 5000,\n isLoading: false,\n })\n\n onError && onError(error)\n }\n },\n reject: () => {},\n acceptLabel: upperFirst(deleteLabel),\n rejectLabel: 'Cancel',\n acceptClassName: 'button-danger',\n style: { minWidth: 400, maxWidth: 600 },\n ...props,\n })\n}\n"],"names":[],"mappings":";;;AAeO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,SAAS,YAAY;AAAA,EAAC;AAAA,EACtB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAA8D;AAC9C,gBAAA,gBAAgB,YAAY,YAAY;AAChD,QAAA,qBAAqB,YAAY,cAAc;AAC/C,QAAA,kBAAkB,YAAY,aAAa;AAEjD,SAAO,cAAc;AAAA,IACnB,QAAQ,MAAM,UAAU,GAAG,WAAW,IAAI,KAAK;AAAA,IAC/C;AAAA,IACA,QAAQ,YAAY;AAClB,YAAM,UAAU,aACZ,MAAM,QAAQ,GAAG,WAAW,kBAAkB,CAAC,IAAI,MAAM,YAAa,CAAA,OAAO;AAAA,QAC3E,WAAW;AAAA,MACZ,CAAA,IACD;AACA,UAAA;AACF,cAAM,OAAO;AAGX,sBAAA,WACA,MAAM,OAAO,SAAS;AAAA,UACpB,QAAQ,GAAG,KAAK,IAAI,eAAe;AAAA,UACnC,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,qBAAa,UAAU;AAAA,eAChB,OAAY;AACb,cAAA,eACJ,OAAO,UAAU,WACb,QACA,MAAM,WAAW,SAAS,kBAAkB,IAAI,KAAK;AAGzD,sBAAA,WACA,MAAM,OAAO,SAAS;AAAA,UACpB,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,QAAA,CACZ;AAEH,mBAAW,QAAQ,KAAK;AAAA,MAAA;AAAA,IAE5B;AAAA,IACA,QAAQ,MAAM;AAAA,IAAC;AAAA,IACf,aAAa,WAAW,WAAW;AAAA,IACnC,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,OAAO,EAAE,UAAU,KAAK,UAAU,IAAI;AAAA,IACtC,GAAG;AAAA,EAAA,CACJ;AACH;"}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { Row, FilterFn } from '@tanstack/react-table';
2
+ import { Row, FilterFn, RowData, Table } from '@tanstack/react-table';
3
3
  import { RankingInfo } from '@tanstack/match-sorter-utils';
4
4
  import { SimpleTableCellTemplateProps } from './SimpleTableRowTemplate';
5
5
  declare module '@tanstack/react-table' {
@@ -9,6 +9,12 @@ declare module '@tanstack/react-table' {
9
9
  interface FilterMeta {
10
10
  itemRank: RankingInfo;
11
11
  }
12
+ interface TableMeta<TData extends RowData> {
13
+ isExpandable?: boolean;
14
+ isLoading?: boolean;
15
+ children?: (props: SimpleTableCellTemplateProps, row: Row<TData>, table: Table<SimpleTableRow>) => JSX.Element;
16
+ [key: string]: any;
17
+ }
12
18
  }
13
19
  export type RowItemData = {
14
20
  id: string;
@@ -37,7 +43,8 @@ export interface SimpleTableProps {
37
43
  isExpandable?: boolean;
38
44
  forceUpdateTable?: any;
39
45
  globalFilter?: string;
40
- children?: (props: SimpleTableCellTemplateProps, row: Row<SimpleTableRow>) => JSX.Element;
46
+ meta?: Record<string, any>;
47
+ children?: (props: SimpleTableCellTemplateProps, row: Row<SimpleTableRow>, table: Table<SimpleTableRow>) => JSX.Element;
41
48
  }
42
49
  declare const SimpleTable: FC<SimpleTableProps>;
43
50
  export default SimpleTable;
@@ -1,3 +1,10 @@
1
+ export type RowExpanderProps = {
2
+ isRowExpandable?: boolean;
3
+ isRowExpanded?: boolean;
4
+ isTableExpandable?: boolean;
5
+ onExpandClick?: () => void;
6
+ };
7
+ export declare const RowExpander: ({ isRowExpandable, isRowExpanded, isTableExpandable, onExpandClick, }: RowExpanderProps) => false | import("react/jsx-runtime").JSX.Element | undefined;
1
8
  export interface SimpleTableCellTemplateProps extends React.HTMLAttributes<HTMLDivElement> {
2
9
  value: string;
3
10
  icon?: string;
@@ -109,7 +109,7 @@ export type ActionContext = {
109
109
  /** The name of the project. If not provided, use global actions, the rest of the fields are ignored. */
110
110
  projectName?: string;
111
111
  /** The type of the entity. If not specified, project-lever or global actions are used. */
112
- entityType?: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile';
112
+ entityType?: 'folder' | 'product' | 'version' | 'representation' | 'task' | 'workfile' | 'list';
113
113
  /** List of subtypes present in the entity list */
114
114
  entitySubtypes?: string[];
115
115
  /** The IDs of the entities */
@@ -1967,6 +1967,8 @@ export type GetListsQuery = {
1967
1967
  id: string;
1968
1968
  label: string;
1969
1969
  entityListType: string;
1970
+ tags: Array<string>;
1971
+ data: string;
1970
1972
  entityType: string;
1971
1973
  active: boolean;
1972
1974
  createdAt: any;
@@ -2672,7 +2674,7 @@ export declare const GetDetailsPanelTaskDocument = "\n query GetDetailsPanelT
2672
2674
  export declare const GetDetailsPanelVersionDocument = "\n query GetDetailsPanelVersion($projectName: String!, $entityId: String!) {\n project(name: $projectName) {\n projectName\n code\n version(id: $entityId) {\n id\n version\n name\n author\n status\n tags\n updatedAt\n createdAt\n thumbnailId\n hasReviewables\n product {\n ...DetailsPanelProductFragment\n folder {\n ...DetailsPanelFolderFragment\n }\n }\n task {\n ...DetailsPanelTaskFragment\n }\n allAttrib\n representations {\n edges {\n node {\n ...DetailsPanelRepresentationFragment\n }\n }\n }\n }\n }\n}\n \n fragment DetailsPanelProductFragment on ProductNode {\n id\n name\n productType\n}\n \n\n fragment DetailsPanelFolderFragment on FolderNode {\n id\n name\n label\n path\n folderType\n}\n \n\n fragment DetailsPanelTaskFragment on TaskNode {\n id\n name\n label\n assignees\n taskType\n}\n \n\n fragment DetailsPanelRepresentationFragment on RepresentationNode {\n id\n name\n fileCount\n}\n ";
2673
2675
  export declare const GetProductVersionsDocument = "\n query GetProductVersions($projectName: String!, $productId: String!) {\n project(name: $projectName) {\n product(id: $productId) {\n versionList {\n id\n name\n version\n }\n }\n }\n}\n ";
2674
2676
  export declare const GetListItemsDocument = "\n query GetListItems($projectName: String!, $listId: String!, $first: Int, $after: String, $before: String, $last: Int, $sortBy: String, $filter: String) {\n project(name: $projectName) {\n entityLists(ids: [$listId]) {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n node {\n id\n active\n items(\n first: $first\n after: $after\n before: $before\n last: $last\n sortBy: $sortBy\n filter: $filter\n ) {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n id\n entityId\n entityType\n allAttrib\n ownAttrib\n node {\n active\n name\n updatedAt\n ...ListItemFragment\n }\n }\n }\n }\n }\n }\n }\n}\n \n fragment ListItemFragment on BaseNode {\n ... on TaskNode {\n name\n label\n status\n tags\n taskType\n assignees\n folder {\n path\n folderType\n }\n }\n ... on FolderNode {\n name\n label\n status\n tags\n folderType\n path\n }\n ... on ProductNode {\n name\n status\n tags\n productType\n folder {\n path\n folderType\n }\n }\n ... on VersionNode {\n name\n status\n tags\n product {\n name\n productType\n folder {\n path\n folderType\n }\n }\n task {\n name\n taskType\n }\n }\n}\n ";
2675
- export declare const GetListsDocument = "\n query GetLists($projectName: String!, $first: Int!, $after: String, $filter: String) {\n project(name: $projectName) {\n entityLists(first: $first, after: $after, filter: $filter) {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n node {\n id\n label\n entityListType\n entityType\n active\n createdAt\n updatedAt\n active\n owner\n count\n }\n }\n }\n }\n}\n ";
2677
+ export declare const GetListsDocument = "\n query GetLists($projectName: String!, $first: Int!, $after: String, $filter: String) {\n project(name: $projectName) {\n entityLists(first: $first, after: $after, filter: $filter) {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n node {\n id\n label\n entityListType\n tags\n data\n entityType\n active\n createdAt\n updatedAt\n active\n owner\n count\n }\n }\n }\n }\n}\n ";
2676
2678
  export declare const GetTasksByParentDocument = "\n query GetTasksByParent($projectName: String!, $parentIds: [String!]!, $filter: String, $search: String) {\n project(name: $projectName) {\n name\n tasks(folderIds: $parentIds, filter: $filter, search: $search) {\n edges {\n node {\n ...TaskPropsFragment\n }\n }\n }\n }\n}\n \n fragment TaskPropsFragment on TaskNode {\n id\n folderId\n label\n name\n ownAttrib\n status\n tags\n taskType\n updatedAt\n active\n assignees\n allAttrib\n folder {\n path\n }\n}\n ";
2677
2679
  export declare const GetTasksListDocument = "\n query GetTasksList($projectName: String!, $folderIds: [String!], $filter: String, $search: String, $after: String, $first: Int, $before: String, $last: Int, $sortBy: String) {\n project(name: $projectName) {\n name\n tasks(\n filter: $filter\n search: $search\n folderIds: $folderIds\n after: $after\n first: $first\n before: $before\n last: $last\n sortBy: $sortBy\n ) {\n pageInfo {\n startCursor\n endCursor\n hasNextPage\n hasPreviousPage\n }\n edges {\n cursor\n node {\n ...TaskPropsFragment\n }\n }\n }\n }\n}\n \n fragment TaskPropsFragment on TaskNode {\n id\n folderId\n label\n name\n ownAttrib\n status\n tags\n taskType\n updatedAt\n active\n assignees\n allAttrib\n folder {\n path\n }\n}\n ";
2678
2680
  export declare const GetProjectLatestDocument = "\n query GetProjectLatest($projectName: String!) {\n project(name: $projectName) {\n name\n }\n}\n ";
@@ -1,5 +1,6 @@
1
1
  import { ActionContext } from '../../api';
2
- type ActionsProps = {
2
+ import { ActionTriggersProps } from '../../hooks';
3
+ interface ActionsProps extends ActionTriggersProps {
3
4
  entities: {
4
5
  id: string;
5
6
  projectName: string;
@@ -8,6 +9,6 @@ type ActionsProps = {
8
9
  entityType: ActionContext['entityType'];
9
10
  entitySubTypes?: string[];
10
11
  isLoadingEntity: boolean;
11
- };
12
- export declare const Actions: ({ entities, entityType, entitySubTypes, isLoadingEntity, }: ActionsProps) => import("react/jsx-runtime").JSX.Element;
12
+ }
13
+ export declare const Actions: ({ entities, entityType, entitySubTypes, isLoadingEntity, searchParams, onNavigate, onSetSearchParams, }: ActionsProps) => import("react/jsx-runtime").JSX.Element;
13
14
  export {};
@@ -7,11 +7,11 @@ import { ToggleExpandAll } from './context/ProjectTableContext';
7
7
  import { UpdateTableEntities } from './hooks/useUpdateTableData';
8
8
  declare module '@tanstack/react-table' {
9
9
  interface TableMeta<TData extends RowData> {
10
- options: BuiltInFieldOptions;
11
- readOnly: ProjectTreeTableProps['readOnly'];
12
- projectName: string;
13
- updateEntities: UpdateTableEntities;
14
- toggleExpandAll: ToggleExpandAll;
10
+ options?: BuiltInFieldOptions;
11
+ readOnly?: ProjectTreeTableProps['readOnly'];
12
+ projectName?: string;
13
+ updateEntities?: UpdateTableEntities;
14
+ toggleExpandAll?: ToggleExpandAll;
15
15
  }
16
16
  }
17
17
  export interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivElement> {
@@ -22,12 +22,13 @@ export interface ProjectTreeTableProps extends React.HTMLAttributes<HTMLDivEleme
22
22
  readOnly?: (DefaultColumns | string)[];
23
23
  excludedColumns?: (DefaultColumns | string)[];
24
24
  extraColumns?: TreeTableExtraColumn[];
25
+ isLoading?: boolean;
25
26
  pt?: {
26
27
  container?: React.HTMLAttributes<HTMLDivElement>;
27
28
  head?: Partial<TableHeadProps>;
28
29
  };
29
30
  }
30
- export declare const ProjectTreeTable: ({ scope, sliceId, fetchMoreOnBottomReached, onOpenNew, readOnly, excludedColumns, extraColumns, pt, ...props }: ProjectTreeTableProps) => import("react/jsx-runtime").JSX.Element;
31
+ export declare const ProjectTreeTable: ({ scope, sliceId, fetchMoreOnBottomReached, onOpenNew, readOnly, excludedColumns, extraColumns, isLoading: isLoadingProp, pt, ...props }: ProjectTreeTableProps) => import("react/jsx-runtime").JSX.Element;
31
32
  interface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {
32
33
  columnVirtualizer: Virtualizer<HTMLDivElement, HTMLTableCellElement>;
33
34
  table: Table<TableRow>;
@@ -16,3 +16,4 @@ export * from './context';
16
16
  export * from './buildTreeTableColumns';
17
17
  export * from './hooks/useUpdateTableData';
18
18
  export { useGetEntityTypeData };
19
+ export * from './widgets';
@@ -1,5 +1,7 @@
1
1
  import { default as React, ReactNode } from 'react';
2
2
  import { DetailsPanelEntityType, UserModel } from '../api';
3
+ import { useLocation, useNavigate, useParams } from 'react-router';
4
+ import { useSearchParams } from 'react-router-dom';
3
5
  export type FeedFilters = 'activity' | 'comments' | 'versions' | 'checklists';
4
6
  export type DetailsPanelTab = FeedFilters | 'attribs' | 'files';
5
7
  export type SlideOut = {
@@ -26,8 +28,8 @@ export interface DetailsPanelContextProps {
26
28
  user: UserModel;
27
29
  viewer?: {
28
30
  reviewableIds: string[];
29
- taskId?: string;
30
- folderId?: string;
31
+ taskId?: string | null;
32
+ folderId?: string | null;
31
33
  };
32
34
  onOpenImage?: (args: any) => void;
33
35
  onGoToFrame?: (frame: number) => void;
@@ -36,6 +38,10 @@ export interface DetailsPanelContextProps {
36
38
  operations: any[];
37
39
  entityType: string;
38
40
  }) => void;
41
+ useParams: typeof useParams;
42
+ useNavigate: typeof useNavigate;
43
+ useLocation: typeof useLocation;
44
+ useSearchParams: typeof useSearchParams;
39
45
  }
40
46
  export interface DetailsPanelContextType extends DetailsPanelContextProps {
41
47
  panelOpenByScope: OpenStateByScope;
@@ -1,3 +1,8 @@
1
+ export type ActionTriggersProps = {
2
+ searchParams: URLSearchParams;
3
+ onSetSearchParams: (params: URLSearchParams) => void;
4
+ onNavigate: (uri: string) => void;
5
+ };
1
6
  interface QueryParams {
2
7
  [key: string]: string;
3
8
  }
@@ -9,7 +14,7 @@ interface ActionPayload {
9
14
  extra_clipboard?: string;
10
15
  [key: string]: any;
11
16
  }
12
- export declare const useActionTriggers: () => {
17
+ export declare const useActionTriggers: ({ searchParams, onSetSearchParams, onNavigate, }: ActionTriggersProps) => {
13
18
  handleActionPayload: (actionType: string, payload: ActionPayload | null) => void;
14
19
  };
15
20
  export {};
@@ -1,5 +1,5 @@
1
1
  import { confirmDialog, ConfirmDialogOptions } from 'primereact/confirmdialog';
2
- interface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {
2
+ export interface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {
3
3
  label?: string;
4
4
  message?: string;
5
5
  deleteLabel?: string;
@@ -10,4 +10,3 @@ interface ConfirmDeleteOptions extends Omit<ConfirmDialogOptions, 'accept'> {
10
10
  onError?: (error: any) => void;
11
11
  }
12
12
  export declare const confirmDelete: ({ label, message, deleteLabel, accept, showToasts, isArchive, onSuccess, onError, ...props }: ConfirmDeleteOptions) => ReturnType<typeof confirmDialog>;
13
- export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynput/ayon-frontend-shared",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Shared React components for AYON frontend",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",