@ynput/ayon-frontend-shared 0.3.7 → 0.3.9

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 (37) hide show
  1. package/dist/components.cjs.js +1 -1
  2. package/dist/components.es.js +109 -106
  3. package/dist/components.es.js.map +1 -1
  4. package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js +2 -2
  5. package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js.map +1 -1
  6. package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js +22 -21
  7. package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js.map +1 -1
  8. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js +1 -1
  9. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js.map +1 -1
  10. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js +3 -12
  11. package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js.map +1 -1
  12. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  13. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  14. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +67 -65
  15. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  16. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
  17. package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.es.js.map +1 -1
  18. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
  19. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
  20. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +87 -81
  21. package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
  22. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
  23. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
  24. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
  25. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
  26. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +118 -109
  27. package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
  28. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
  29. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
  30. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +17 -16
  31. package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js.map +1 -1
  32. package/dist/types/components/LinksManager/CellEditingDialog.d.ts +1 -0
  33. package/dist/types/components/LinksManager/index.d.ts +1 -0
  34. package/dist/types/components/SubtasksManager/SubtasksManagerWrapper.d.ts +2 -2
  35. package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +5 -0
  36. package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +6 -1
  37. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTableContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport { EntityMap, TableRow } from '../types/table'\nimport {\n FindInheritedValueFromAncestors,\n GetAncestorsOf,\n GetInheritedDependents,\n FindNonInheritedValues,\n} from '../hooks/useFolderRelationships'\nimport { RowId } from '../utils/cellUtils'\n\nimport { ProjectTableProviderProps } from './ProjectTableProvider'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport type ToggleExpandAll = (rowIds: RowId[], expand?: boolean) => void\nexport type ToggleExpands = (rowIds: RowId[], expand?: boolean) => void\n\nexport interface ProjectTableContextType {\n isInitialized: ProjectTableProviderProps['isInitialized']\n isLoading: ProjectTableProviderProps['isLoading']\n users: ProjectTableProviderProps['users']\n // Attributes\n attribFields: ProjectTableProviderProps['attribFields']\n attribFieldsScoped: ProjectTableProviderProps['attribFields']\n error?: string\n scopes: ProjectTableProviderProps['scopes']\n\n // Data\n tableData: TableRow[]\n tasksMap: ProjectTableProviderProps['tasksMap']\n foldersMap: ProjectTableProviderProps['foldersMap']\n entitiesMap: ProjectTableProviderProps['entitiesMap']\n fetchNextPage: ProjectTableProviderProps['fetchNextPage']\n reloadTableData: ProjectTableProviderProps['reloadTableData']\n getEntityById: (id: string, field?: string) => EntityMap | undefined // if the entity is not found, we explicity search for the field\n\n // grouping\n groups: ProjectTableProviderProps['groups']\n\n // Filters\n queryFilters: ProjectTableProviderProps['queryFilters']\n\n // Hierarchy\n showHierarchy: ProjectTableProviderProps['showHierarchy']\n updateShowHierarchy: ProjectTableProviderProps['updateShowHierarchy']\n\n // Expanded state\n expanded: ProjectTableProviderProps['expanded']\n setExpanded: ProjectTableProviderProps['setExpanded']\n toggleExpanded: ProjectTableProviderProps['toggleExpanded']\n updateExpanded: ProjectTableProviderProps['updateExpanded']\n toggleExpandAll: ToggleExpandAll\n toggleExpands: ToggleExpands // expand/collapse multiple rows at once\n\n // Folder Relationships\n getInheritedDependents: GetInheritedDependents\n findInheritedValueFromAncestors: FindInheritedValueFromAncestors\n findNonInheritedValues: FindNonInheritedValues\n getAncestorsOf: GetAncestorsOf\n\n // Context menu\n contextMenuItems: ProjectTableProviderProps['contextMenuItems']\n\n // Powerpack context\n powerpack?: ProjectTableProviderProps['powerpack']\n\n // remote modules\n modules: ProjectTableProviderProps['modules']\n\n // SubtasksManager\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: ProjectTableProviderProps['playerOpen']\n onOpenPlayer?: ProjectTableProviderProps['onOpenPlayer']\n\n // views\n onResetView?: () => void\n}\n\nexport const ProjectTableContext = createContext<ProjectTableContextType | undefined>(undefined)\n\nexport const useProjectTableContext = () => {\n const context = useContext(ProjectTableContext)\n if (!context) {\n throw new Error('useProjectTableContext must be used within a ProjectTableProvider')\n }\n return context\n}\n"],"names":["ProjectTableContext","createContext","useProjectTableContext","context","useContext"],"mappings":";AA+EO,MAAMA,IAAsBC,EAAmD,MAAS,GAElFC,IAAyB,MAAM;AAC1C,QAAMC,IAAUC,EAAWJ,CAAmB;AAC9C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,mEAAmE;AAErF,SAAOA;AACT;"}
1
+ {"version":3,"file":"ProjectTableContext.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport { EntityMap, TableRow } from '../types/table'\nimport {\n FindInheritedValueFromAncestors,\n GetAncestorsOf,\n GetInheritedDependents,\n FindNonInheritedValues,\n} from '../hooks/useFolderRelationships'\nimport { RowId } from '../utils/cellUtils'\n\nimport { ProjectTableProviderProps } from './ProjectTableProvider'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport type ToggleExpandAll = (rowIds: RowId[], expand?: boolean) => void\nexport type ToggleExpands = (rowIds: RowId[], expand?: boolean) => void\n\nexport interface ProjectTableContextType {\n isInitialized: ProjectTableProviderProps['isInitialized']\n isLoading: ProjectTableProviderProps['isLoading']\n users: ProjectTableProviderProps['users']\n // Attributes\n attribFields: ProjectTableProviderProps['attribFields']\n attribFieldsScoped: ProjectTableProviderProps['attribFields']\n error?: string\n scopes: ProjectTableProviderProps['scopes']\n\n // Data\n tableData: TableRow[]\n tasksMap: ProjectTableProviderProps['tasksMap']\n foldersMap: ProjectTableProviderProps['foldersMap']\n entitiesMap: ProjectTableProviderProps['entitiesMap']\n fetchNextPage: ProjectTableProviderProps['fetchNextPage']\n reloadTableData: ProjectTableProviderProps['reloadTableData']\n getEntityById: (id: string, field?: string) => EntityMap | undefined // if the entity is not found, we explicity search for the field\n\n // grouping\n groups: ProjectTableProviderProps['groups']\n\n // Filters\n queryFilters: ProjectTableProviderProps['queryFilters']\n\n // Hierarchy\n showHierarchy: ProjectTableProviderProps['showHierarchy']\n updateShowHierarchy: ProjectTableProviderProps['updateShowHierarchy']\n\n // Expanded state\n expanded: ProjectTableProviderProps['expanded']\n setExpanded: ProjectTableProviderProps['setExpanded']\n toggleExpanded: ProjectTableProviderProps['toggleExpanded']\n updateExpanded: ProjectTableProviderProps['updateExpanded']\n toggleExpandAll: ToggleExpandAll\n toggleExpands: ToggleExpands // expand/collapse multiple rows at once\n\n // Folder Relationships\n getInheritedDependents: GetInheritedDependents\n findInheritedValueFromAncestors: FindInheritedValueFromAncestors\n findNonInheritedValues: FindNonInheritedValues\n getAncestorsOf: GetAncestorsOf\n\n // Context menu\n contextMenuItems: ProjectTableProviderProps['contextMenuItems']\n\n // Powerpack context\n powerpack?: ProjectTableProviderProps['powerpack']\n\n // remote modules\n modules: ProjectTableProviderProps['modules']\n\n // SubtasksManager\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: ProjectTableProviderProps['playerOpen']\n onOpenPlayer?: ProjectTableProviderProps['onOpenPlayer']\n\n // Views\n onResetView?: () => void\n\n // router hooks\n useParams?: typeof useParams\n useNavigate?: typeof useNavigate\n useLocation?: typeof useLocation\n useSearchParams?: typeof useSearchParams\n}\n\nexport const ProjectTableContext = createContext<ProjectTableContextType | undefined>(undefined)\n\nexport const useProjectTableContext = () => {\n const context = useContext(ProjectTableContext)\n if (!context) {\n throw new Error('useProjectTableContext must be used within a ProjectTableProvider')\n }\n return context\n}\n"],"names":["ProjectTableContext","createContext","useProjectTableContext","context","useContext"],"mappings":";AAsFO,MAAMA,IAAsBC,EAAmD,MAAS,GAElFC,IAAyB,MAAM;AAC1C,QAAMC,IAAUC,EAAWJ,CAAmB;AAC9C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,mEAAmE;AAErF,SAAOA;AACT;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ie=require("../../../../../_virtual/jsx-runtime.cjs.js"),f=require("react"),ce=require("../hooks/useBuildProjectDataTable.cjs.js"),se=require("../hooks/useFolderRelationships.cjs.js"),S=require("../hooks/useBuildGroupByTableData.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/SubtasksModulesContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");const le=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");const ae=require("./ColumnSettingsContext.cjs.js"),qe=require("./ProjectTableContext.cjs.js"),d=g=>g?.split(S.ROW_ID_SEPARATOR)[0]||g,fe=({children:g,foldersMap:s,tableRows:v,tasksMap:c,entitiesMap:u,tasksByFolderMap:j,expanded:i,showHierarchy:m,loadingTasks:R,isLoadingMore:D,isLoading:B,error:A,isInitialized:I,users:w,attribFields:l,scopes:b,groups:h,groupRowFunc:x,queryFilters:O,updateShowHierarchy:G,toggleExpanded:_,updateExpanded:V,fetchNextPage:N,reloadTableData:W,setExpanded:a,contextMenuItems:z,powerpack:J,modules:K,groupByConfig:L,SubtasksManager:Q,playerOpen:U,onOpenPlayer:X,onResetView:Y})=>{const{attrib:Z}=le.useProjectContext(),$=ce({foldersMap:s,tasksMap:c,rows:v,tasksByFolderMap:j,expanded:i,showHierarchy:m,loadingTasks:R,isLoadingMore:D}),{groupBy:y,groupByConfig:{showEmpty:p=!1}={}}=ae.useColumnSettingsContext(),H=S.default({entities:u,entityType:L?.entityType||"unknown",groups:h,attribFields:l,showEmpty:p,groupRowFunc:x}),k=f.useMemo(()=>l.filter(o=>o.scope?.some(n=>b.includes(n))),[l,b]),C=f.useMemo(()=>!!y&&H(y),[y,u,h]),F=y&&C?C:$,E=f.useCallback((o,n="entityId")=>{if(typeof o!="string"){console.warn("getEntityById called with non-string id:",o);return}const e=d(o);if(s.has(e))return s.get(e);if(c.has(e))return c.get(e);if(u.has(e))return u.get(e);for(const[r,t]of u)if(t[n]===e)return t},[s,c,u]),{getInheritedDependents:M,getChildrenEntities:T,findInheritedValueFromAncestors:ee,findNonInheritedValues:te,getAncestorsOf:re}=se({entitiesMap:u,tasksMap:c,tasksByFolderMap:j,getEntityById:E,projectAttrib:Z,attribFields:l}),oe=f.useCallback((o,n)=>{const e=typeof i=="object"?i:{},r={...e};o.forEach(t=>{const P=T(t).map(q=>q.id),ue=e[t]||!1;(n!==void 0?!n:ue)?(r[t]=!1,P.forEach(q=>{r[q]=!1})):(r[t]=!0,P.forEach(q=>{r[q]=!0}))}),a(r)},[i,T,a]),ne=f.useCallback((o,n)=>{const e=typeof i=="object"?i:{},r={...e};o.forEach(t=>{n!==void 0?r[t]=n:r[t]=!e[t]}),a(r)},[i,a]);return ie.jsxRuntimeExports.jsx(qe.ProjectTableContext.Provider,{value:{tableData:F,isInitialized:I,isLoading:B,error:A,attribFields:l,attribFieldsScoped:k,scopes:b,users:w,tasksMap:c,foldersMap:s,entitiesMap:u,fetchNextPage:N,reloadTableData:W,groups:h,queryFilters:O,showHierarchy:m,updateShowHierarchy:G,expanded:i,setExpanded:a,toggleExpanded:_,updateExpanded:V,toggleExpandAll:oe,toggleExpands:ne,getEntityById:E,getInheritedDependents:M,findInheritedValueFromAncestors:ee,findNonInheritedValues:te,getAncestorsOf:re,contextMenuItems:z,powerpack:J,modules:K,SubtasksManager:Q,playerOpen:U,onOpenPlayer:X,onResetView:Y},children:g})};exports.ProjectTableProvider=fe;exports.parseRowId=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const le=require("../../../../../_virtual/jsx-runtime.cjs.js"),f=require("react"),qe=require("../hooks/useBuildProjectDataTable.cjs.js"),fe=require("../hooks/useFolderRelationships.cjs.js"),S=require("../hooks/useBuildGroupByTableData.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/SubtasksModulesContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");const ge=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");const ye=require("./ColumnSettingsContext.cjs.js"),be=require("./ProjectTableContext.cjs.js"),v=g=>g?.split(S.ROW_ID_SEPARATOR)[0]||g,he=({children:g,foldersMap:c,tableRows:d,tasksMap:s,entitiesMap:n,tasksByFolderMap:m,expanded:i,showHierarchy:P,loadingTasks:R,isLoadingMore:D,isLoading:B,error:A,isInitialized:I,users:w,attribFields:a,scopes:b,groups:h,groupRowFunc:x,queryFilters:O,updateShowHierarchy:G,toggleExpanded:N,updateExpanded:_,fetchNextPage:L,reloadTableData:V,setExpanded:l,contextMenuItems:W,powerpack:z,modules:J,groupByConfig:K,SubtasksManager:Q,playerOpen:U,onOpenPlayer:X,onResetView:Y,useParams:Z,useNavigate:$,useLocation:p,useSearchParams:H})=>{const{attrib:k}=ge.useProjectContext(),F=qe({foldersMap:c,tasksMap:s,rows:d,tasksByFolderMap:m,expanded:i,showHierarchy:P,loadingTasks:R,isLoadingMore:D}),{groupBy:y,groupByConfig:{showEmpty:M=!1}={}}=ye.useColumnSettingsContext(),ee=S.default({entities:n,entityType:K?.entityType||"unknown",groups:h,attribFields:a,showEmpty:M,groupRowFunc:x}),te=f.useMemo(()=>a.filter(o=>o.scope?.some(u=>b.includes(u))),[a,b]),j=f.useMemo(()=>!!y&&ee(y),[y,n,h]),re=y&&j?j:F,C=f.useCallback((o,u="entityId")=>{if(typeof o!="string"){console.warn("getEntityById called with non-string id:",o);return}const e=v(o);if(c.has(e))return c.get(e);if(s.has(e))return s.get(e);if(n.has(e))return n.get(e);for(const[r,t]of n)if(t[u]===e)return t},[c,s,n]),{getInheritedDependents:oe,getChildrenEntities:E,findInheritedValueFromAncestors:ue,findNonInheritedValues:ne,getAncestorsOf:ie}=fe({entitiesMap:n,tasksMap:s,tasksByFolderMap:m,getEntityById:C,projectAttrib:k,attribFields:a}),se=f.useCallback((o,u)=>{const e=typeof i=="object"?i:{},r={...e};o.forEach(t=>{const T=E(t).map(q=>q.id),ae=e[t]||!1;(u!==void 0?!u:ae)?(r[t]=!1,T.forEach(q=>{r[q]=!1})):(r[t]=!0,T.forEach(q=>{r[q]=!0}))}),l(r)},[i,E,l]),ce=f.useCallback((o,u)=>{const e=typeof i=="object"?i:{},r={...e};o.forEach(t=>{u!==void 0?r[t]=u:r[t]=!e[t]}),l(r)},[i,l]);return le.jsxRuntimeExports.jsx(be.ProjectTableContext.Provider,{value:{tableData:re,isInitialized:I,isLoading:B,error:A,attribFields:a,attribFieldsScoped:te,scopes:b,users:w,tasksMap:s,foldersMap:c,entitiesMap:n,fetchNextPage:L,reloadTableData:V,groups:h,queryFilters:O,showHierarchy:P,updateShowHierarchy:G,expanded:i,setExpanded:l,toggleExpanded:N,updateExpanded:_,toggleExpandAll:se,toggleExpands:ce,getEntityById:C,getInheritedDependents:oe,findInheritedValueFromAncestors:ue,findNonInheritedValues:ne,getAncestorsOf:ie,contextMenuItems:W,powerpack:z,modules:J,SubtasksManager:Q,playerOpen:U,onOpenPlayer:X,onResetView:Y,useParams:Z,useNavigate:$,useLocation:p,useSearchParams:H},children:g})};exports.ProjectTableProvider=he;exports.parseRowId=v;
2
2
  //# sourceMappingURL=ProjectTableProvider.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTableProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableProvider.tsx"],"sourcesContent":["/**\n * Project Table Context\n *\n * This context serves as the central data management layer for the project table component.\n * It performs three main functions:\n *\n * 1. **Props Forwarding**: Acts as a bridge to forward essential props (project info, users,\n * attributes, filters, etc.) down to child components throughout the table hierarchy.\n *\n * 2. **Table Data Structure Building**: Transforms raw project data into structured table rows\n * that can be consumed by the table component. This includes processing folders, tasks,\n * and entities into a unified table format.\n *\n * 3. **Multi-Modal Data Presentation**: Supports three different data presentation modes:\n * - **Hierarchy Mode**: Builds nested folder/task relationships with expandable rows\n * - **Tasks List Mode**: Flattened view of tasks without hierarchical structure\n * - **Groups Mode**: Groups entities by specified criteria (entity type, custom groups)\n *\n * The context also provides utility functions for entity relationships, expansion state\n * management, filtering, and folder inheritance operations.\n */\nimport { ReactNode, useCallback, useMemo } from 'react'\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table'\nimport useBuildProjectDataTable from '../hooks/useBuildProjectDataTable'\nimport { Filter } from '@ynput/ayon-react-components'\nimport {\n EntitiesMap,\n EntityMap,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport useFolderRelationships from '../hooks/useFolderRelationships'\nimport { ProjectModel } from '../types/project'\nimport { ProjectTableAttribute, LoadingTasks } from '../types'\nimport { QueryFilter } from '../types/folders'\nimport { ContextMenuItemConstructors } from '../hooks/useCellContextMenu'\nimport { EntityGroup } from '@shared/api'\nimport useBuildGroupByTableData, {\n GroupByEntityType,\n ROW_ID_SEPARATOR,\n} from '../hooks/useBuildGroupByTableData'\nimport { PowerpackContextType, useProjectContext } from '@shared/context'\nimport { useColumnSettingsContext } from './ColumnSettingsContext'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { ProjectTableContext, ProjectTableContextType } from './ProjectTableContext'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport const parseRowId = (rowId: string) => rowId?.split(ROW_ID_SEPARATOR)[0] || rowId\n\nexport type TableUser = {\n name: string\n fullName?: string\n}\n\nexport interface ProjectTableProviderProps {\n children: ReactNode\n isInitialized: boolean\n\n // loading\n isLoading: boolean\n isLoadingMore: boolean\n loadingTasks?: LoadingTasks\n error?: string\n users: TableUser[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n scopes: string[]\n\n // data\n tasksMap: TaskNodeMap\n foldersMap: FolderNodeMap\n entitiesMap: EntitiesMap\n tasksByFolderMap: TasksByFolderMap\n tableRows?: TableRow[] // any extra rows that we want to add to the table\n\n // grouping\n groups: EntityGroup[]\n groupRowFunc?: (node: any) => TableRow\n\n // data functions\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n\n // Filters\n queryFilters: {\n filter: QueryFilter | undefined\n filterString?: string\n search: string | undefined\n }\n\n // Hierarchy\n showHierarchy: boolean\n updateShowHierarchy: (showHierarchy: boolean) => void\n\n // Expanded state\n expanded: ExpandedState\n toggleExpanded: (id: string) => void\n updateExpanded: OnChangeFn<ExpandedState>\n setExpanded: React.Dispatch<React.SetStateAction<ExpandedState>>\n\n // context menu\n contextMenuItems: ContextMenuItemConstructors\n\n // powerpack context\n powerpack?: PowerpackContextType\n\n // remote modules\n modules: ProjectTableModulesType\n\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n\n // SubtasksManager component\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: boolean\n onOpenPlayer?: (\n targetIds: {\n taskId?: string\n folderId?: string\n productId?: string\n versionId?: string\n },\n config?: { quickView?: boolean },\n ) => void\n // views\n onResetView?: () => void\n}\n\nexport const ProjectTableProvider = ({\n children,\n foldersMap,\n tableRows,\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n isLoading,\n error,\n isInitialized,\n users,\n attribFields,\n scopes,\n groups,\n groupRowFunc,\n queryFilters,\n updateShowHierarchy,\n toggleExpanded,\n updateExpanded,\n fetchNextPage,\n reloadTableData,\n setExpanded,\n contextMenuItems,\n powerpack,\n modules,\n groupByConfig,\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n}: ProjectTableProviderProps) => {\n const { attrib: projectAttrib } = useProjectContext()\n // DATA TO TABLE\n const defaultTableData = useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows: tableRows,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n })\n\n const { groupBy, groupByConfig: { showEmpty: showEmptyGroups = false } = {} } =\n useColumnSettingsContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType || 'unknown',\n groups: groups,\n attribFields,\n showEmpty: showEmptyGroups,\n groupRowFunc,\n })\n\n const attribFieldsScoped = useMemo(\n () => attribFields.filter((attrib) => attrib.scope?.some((scope) => scopes.includes(scope))),\n [attribFields, scopes],\n )\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groups],\n )\n\n const tableData = groupBy && groupedTableData ? groupedTableData : defaultTableData\n\n const getEntityById = useCallback(\n (id: string, field: string = 'entityId'): EntityMap | undefined => {\n // defensive check to ensure id is a string\n if (typeof id !== 'string') {\n console.warn('getEntityById called with non-string id:', id)\n return undefined\n }\n // always parse the id to remove any suffixes\n // this can happen if the id is a group by id (we need to make the row id unique)\n const parsedId = parseRowId(id)\n if (foldersMap.has(parsedId)) {\n return foldersMap.get(parsedId)\n } else if (tasksMap.has(parsedId)) {\n return tasksMap.get(parsedId)\n } else if (entitiesMap.has(parsedId)) {\n return entitiesMap.get(parsedId)\n }\n\n // if we have not found the entity at all, double check through the maps using field (entityId)\n for (const [_, entity] of entitiesMap) {\n if (entity[field as keyof EntityMap] === parsedId) {\n return entity\n }\n }\n\n // Return undefined if not found\n return undefined\n },\n [foldersMap, tasksMap, entitiesMap],\n )\n\n // get folder relationship functions\n const {\n getInheritedDependents,\n getChildrenEntities,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n } = useFolderRelationships({\n entitiesMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields: attribFields,\n })\n\n const toggleExpandAll: ProjectTableContextType['toggleExpandAll'] = useCallback(\n (rowIds, expandAll) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n // get all children of the rowId using tableData\n const childIds = getChildrenEntities(rowId).map((child) => child.id)\n // check if the rowId is expanded\n const isExpanded = expandedState[rowId] || false\n\n if (expandAll !== undefined ? !expandAll : isExpanded) {\n // collapse all children\n newExpandedState[rowId] = false\n childIds.forEach((id) => {\n newExpandedState[id] = false\n })\n } else {\n // expand all children\n newExpandedState[rowId] = true\n childIds.forEach((id) => {\n newExpandedState[id] = true\n })\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, getChildrenEntities, setExpanded],\n )\n\n const toggleExpands: ProjectTableContextType['toggleExpands'] = useCallback(\n (rowIds, expand) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n if (expand !== undefined) {\n // Use the provided expand parameter\n newExpandedState[rowId] = expand\n } else {\n // Toggle based on current state\n newExpandedState[rowId] = !expandedState[rowId]\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, setExpanded],\n )\n\n return (\n <ProjectTableContext.Provider\n value={{\n // from this context\n tableData,\n // forwarded on\n isInitialized,\n isLoading,\n error,\n attribFields,\n attribFieldsScoped,\n scopes,\n users,\n tasksMap,\n foldersMap,\n entitiesMap,\n fetchNextPage,\n reloadTableData,\n groups,\n queryFilters,\n // hierarchy\n showHierarchy,\n updateShowHierarchy,\n // expanded state\n expanded,\n setExpanded,\n toggleExpanded,\n updateExpanded,\n toggleExpandAll,\n toggleExpands,\n getEntityById,\n // folder relationships\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n // context menu\n contextMenuItems,\n // powerpack context\n powerpack,\n modules,\n // SubtasksManager\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n }}\n >\n {children}\n </ProjectTableContext.Provider>\n )\n}\n"],"names":["parseRowId","rowId","ROW_ID_SEPARATOR","ProjectTableProvider","children","foldersMap","tableRows","tasksMap","entitiesMap","tasksByFolderMap","expanded","showHierarchy","loadingTasks","isLoadingMore","isLoading","error","isInitialized","users","attribFields","scopes","groups","groupRowFunc","queryFilters","updateShowHierarchy","toggleExpanded","updateExpanded","fetchNextPage","reloadTableData","setExpanded","contextMenuItems","powerpack","modules","groupByConfig","SubtasksManager","playerOpen","onOpenPlayer","onResetView","projectAttrib","useProjectContext","defaultTableData","useBuildProjectDataTable","groupBy","showEmptyGroups","useColumnSettingsContext","buildGroupByTableData","useBuildGroupByTableData","attribFieldsScoped","useMemo","attrib","scope","groupedTableData","tableData","getEntityById","useCallback","id","field","parsedId","_","entity","getInheritedDependents","getChildrenEntities","findInheritedValueFromAncestors","findNonInheritedValues","getAncestorsOf","useFolderRelationships","toggleExpandAll","rowIds","expandAll","expandedState","newExpandedState","childIds","child","isExpanded","toggleExpands","expand","jsx","ProjectTableContext"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTableProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableProvider.tsx"],"sourcesContent":["/**\n * Project Table Context\n *\n * This context serves as the central data management layer for the project table component.\n * It performs three main functions:\n *\n * 1. **Props Forwarding**: Acts as a bridge to forward essential props (project info, users,\n * attributes, filters, etc.) down to child components throughout the table hierarchy.\n *\n * 2. **Table Data Structure Building**: Transforms raw project data into structured table rows\n * that can be consumed by the table component. This includes processing folders, tasks,\n * and entities into a unified table format.\n *\n * 3. **Multi-Modal Data Presentation**: Supports three different data presentation modes:\n * - **Hierarchy Mode**: Builds nested folder/task relationships with expandable rows\n * - **Tasks List Mode**: Flattened view of tasks without hierarchical structure\n * - **Groups Mode**: Groups entities by specified criteria (entity type, custom groups)\n *\n * The context also provides utility functions for entity relationships, expansion state\n * management, filtering, and folder inheritance operations.\n */\nimport { ReactNode, useCallback, useMemo } from 'react'\nimport { useParams, useNavigate, useLocation, useSearchParams } from 'react-router-dom'\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table'\nimport useBuildProjectDataTable from '../hooks/useBuildProjectDataTable'\nimport {\n EntitiesMap,\n EntityMap,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport useFolderRelationships from '../hooks/useFolderRelationships'\nimport { ProjectModel } from '../types/project'\nimport { ProjectTableAttribute, LoadingTasks } from '../types'\nimport { QueryFilter } from '../types/folders'\nimport { ContextMenuItemConstructors } from '../hooks/useCellContextMenu'\nimport { EntityGroup } from '@shared/api'\nimport useBuildGroupByTableData, {\n GroupByEntityType,\n ROW_ID_SEPARATOR,\n} from '../hooks/useBuildGroupByTableData'\nimport { PowerpackContextType, useProjectContext } from '@shared/context'\nimport { useColumnSettingsContext } from './ColumnSettingsContext'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { ProjectTableContext, ProjectTableContextType } from './ProjectTableContext'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport const parseRowId = (rowId: string) => rowId?.split(ROW_ID_SEPARATOR)[0] || rowId\n\nexport type TableUser = {\n name: string\n fullName?: string\n}\n\nexport interface ProjectTableProviderProps {\n children: ReactNode\n isInitialized: boolean\n\n // loading\n isLoading: boolean\n isLoadingMore: boolean\n loadingTasks?: LoadingTasks\n error?: string\n users: TableUser[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n scopes: string[]\n\n // data\n tasksMap: TaskNodeMap\n foldersMap: FolderNodeMap\n entitiesMap: EntitiesMap\n tasksByFolderMap: TasksByFolderMap\n tableRows?: TableRow[] // any extra rows that we want to add to the table\n\n // grouping\n groups: EntityGroup[]\n groupRowFunc?: (node: any) => TableRow\n\n // data functions\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n\n // Filters\n queryFilters: {\n filter: QueryFilter | undefined\n filterString?: string\n search: string | undefined\n }\n\n // Hierarchy\n showHierarchy: boolean\n updateShowHierarchy: (showHierarchy: boolean) => void\n\n // Expanded state\n expanded: ExpandedState\n toggleExpanded: (id: string) => void\n updateExpanded: OnChangeFn<ExpandedState>\n setExpanded: React.Dispatch<React.SetStateAction<ExpandedState>>\n\n // context menu\n contextMenuItems: ContextMenuItemConstructors\n\n // powerpack context\n powerpack?: PowerpackContextType\n\n // remote modules\n modules: ProjectTableModulesType\n\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n\n // SubtasksManager component\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: boolean\n onOpenPlayer?: (\n targetIds: {\n taskId?: string\n folderId?: string\n productId?: string\n versionId?: string\n },\n config?: { quickView?: boolean },\n ) => void\n // views\n onResetView?: () => void\n // router hooks\n useParams?: typeof useParams\n useNavigate?: typeof useNavigate\n useLocation?: typeof useLocation\n useSearchParams?: typeof useSearchParams\n}\n\nexport const ProjectTableProvider = ({\n children,\n foldersMap,\n tableRows,\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n isLoading,\n error,\n isInitialized,\n users,\n attribFields,\n scopes,\n groups,\n groupRowFunc,\n queryFilters,\n updateShowHierarchy,\n toggleExpanded,\n updateExpanded,\n fetchNextPage,\n reloadTableData,\n setExpanded,\n contextMenuItems,\n powerpack,\n modules,\n groupByConfig,\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n useParams,\n useNavigate,\n useLocation,\n useSearchParams,\n}: ProjectTableProviderProps) => {\n const { attrib: projectAttrib } = useProjectContext()\n // DATA TO TABLE\n const defaultTableData = useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows: tableRows,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n })\n\n const { groupBy, groupByConfig: { showEmpty: showEmptyGroups = false } = {} } =\n useColumnSettingsContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType || 'unknown',\n groups: groups,\n attribFields,\n showEmpty: showEmptyGroups,\n groupRowFunc,\n })\n\n const attribFieldsScoped = useMemo(\n () => attribFields.filter((attrib) => attrib.scope?.some((scope) => scopes.includes(scope))),\n [attribFields, scopes],\n )\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groups],\n )\n\n const tableData = groupBy && groupedTableData ? groupedTableData : defaultTableData\n\n const getEntityById = useCallback(\n (id: string, field: string = 'entityId'): EntityMap | undefined => {\n // defensive check to ensure id is a string\n if (typeof id !== 'string') {\n console.warn('getEntityById called with non-string id:', id)\n return undefined\n }\n // always parse the id to remove any suffixes\n // this can happen if the id is a group by id (we need to make the row id unique)\n const parsedId = parseRowId(id)\n if (foldersMap.has(parsedId)) {\n return foldersMap.get(parsedId)\n } else if (tasksMap.has(parsedId)) {\n return tasksMap.get(parsedId)\n } else if (entitiesMap.has(parsedId)) {\n return entitiesMap.get(parsedId)\n }\n\n // if we have not found the entity at all, double check through the maps using field (entityId)\n for (const [_, entity] of entitiesMap) {\n if (entity[field as keyof EntityMap] === parsedId) {\n return entity\n }\n }\n\n // Return undefined if not found\n return undefined\n },\n [foldersMap, tasksMap, entitiesMap],\n )\n\n // get folder relationship functions\n const {\n getInheritedDependents,\n getChildrenEntities,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n } = useFolderRelationships({\n entitiesMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields: attribFields,\n })\n\n const toggleExpandAll: ProjectTableContextType['toggleExpandAll'] = useCallback(\n (rowIds, expandAll) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n // get all children of the rowId using tableData\n const childIds = getChildrenEntities(rowId).map((child) => child.id)\n // check if the rowId is expanded\n const isExpanded = expandedState[rowId] || false\n\n if (expandAll !== undefined ? !expandAll : isExpanded) {\n // collapse all children\n newExpandedState[rowId] = false\n childIds.forEach((id) => {\n newExpandedState[id] = false\n })\n } else {\n // expand all children\n newExpandedState[rowId] = true\n childIds.forEach((id) => {\n newExpandedState[id] = true\n })\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, getChildrenEntities, setExpanded],\n )\n\n const toggleExpands: ProjectTableContextType['toggleExpands'] = useCallback(\n (rowIds, expand) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n if (expand !== undefined) {\n // Use the provided expand parameter\n newExpandedState[rowId] = expand\n } else {\n // Toggle based on current state\n newExpandedState[rowId] = !expandedState[rowId]\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, setExpanded],\n )\n\n return (\n <ProjectTableContext.Provider\n value={{\n // from this context\n tableData,\n // forwarded on\n isInitialized,\n isLoading,\n error,\n attribFields,\n attribFieldsScoped,\n scopes,\n users,\n tasksMap,\n foldersMap,\n entitiesMap,\n fetchNextPage,\n reloadTableData,\n groups,\n queryFilters,\n // hierarchy\n showHierarchy,\n updateShowHierarchy,\n // expanded state\n expanded,\n setExpanded,\n toggleExpanded,\n updateExpanded,\n toggleExpandAll,\n toggleExpands,\n getEntityById,\n // folder relationships\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n // context menu\n contextMenuItems,\n // powerpack context\n powerpack,\n modules,\n // SubtasksManager\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n // router hooks\n useParams,\n useNavigate,\n useLocation,\n useSearchParams,\n }}\n >\n {children}\n </ProjectTableContext.Provider>\n )\n}\n"],"names":["parseRowId","rowId","ROW_ID_SEPARATOR","ProjectTableProvider","children","foldersMap","tableRows","tasksMap","entitiesMap","tasksByFolderMap","expanded","showHierarchy","loadingTasks","isLoadingMore","isLoading","error","isInitialized","users","attribFields","scopes","groups","groupRowFunc","queryFilters","updateShowHierarchy","toggleExpanded","updateExpanded","fetchNextPage","reloadTableData","setExpanded","contextMenuItems","powerpack","modules","groupByConfig","SubtasksManager","playerOpen","onOpenPlayer","onResetView","useParams","useNavigate","useLocation","useSearchParams","projectAttrib","useProjectContext","defaultTableData","useBuildProjectDataTable","groupBy","showEmptyGroups","useColumnSettingsContext","buildGroupByTableData","useBuildGroupByTableData","attribFieldsScoped","useMemo","attrib","scope","groupedTableData","tableData","getEntityById","useCallback","id","field","parsedId","_","entity","getInheritedDependents","getChildrenEntities","findInheritedValueFromAncestors","findNonInheritedValues","getAncestorsOf","useFolderRelationships","toggleExpandAll","rowIds","expandAll","expandedState","newExpandedState","childIds","child","isExpanded","toggleExpands","expand","jsx","ProjectTableContext"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { j as it } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { useMemo as B, useCallback as h } from "react";
3
- import mt from "../hooks/useBuildProjectDataTable.es.js";
4
- import ct from "../hooks/useFolderRelationships.es.js";
5
- import st, { ROW_ID_SEPARATOR as ut } from "../hooks/useBuildGroupByTableData.es.js";
1
+ import { j as ut } from "../../../../../_virtual/jsx-runtime.es.js";
2
+ import { useMemo as S, useCallback as h } from "react";
3
+ import at from "../hooks/useBuildProjectDataTable.es.js";
4
+ import ft from "../hooks/useFolderRelationships.es.js";
5
+ import lt, { ROW_ID_SEPARATOR as pt } from "../hooks/useBuildGroupByTableData.es.js";
6
6
  import "../../../context/RemoteModulesContext.es.js";
7
7
  import "../../../context/DetailsPanelContext.es.js";
8
8
  import "../../../context/SubtasksModulesContext.es.js";
@@ -18,179 +18,188 @@ import "../../../context/MoveEntityContext.es.js";
18
18
  import "../../../context/MenuContext.es.js";
19
19
  import "../../../context/WebsocketContext.es.js";
20
20
  import "../../../context/GlobalContext.es.js";
21
- import { useProjectContext as ft } from "../../../context/ProjectContext.es.js";
21
+ import { useProjectContext as gt } from "../../../context/ProjectContext.es.js";
22
22
  import "../../../context/ProjectFoldersContext.es.js";
23
23
  import "../../../context/UriContext.es.js";
24
- import { useColumnSettingsContext as lt } from "./ColumnSettingsContext.es.js";
25
- import { ProjectTableContext as pt } from "./ProjectTableContext.es.js";
26
- const yt = (p) => p?.split(ut)[0] || p, qt = ({
27
- children: p,
28
- foldersMap: s,
29
- tableRows: C,
30
- tasksMap: c,
24
+ import { useColumnSettingsContext as yt } from "./ColumnSettingsContext.es.js";
25
+ import { ProjectTableContext as ht } from "./ProjectTableContext.es.js";
26
+ const Et = (l) => l?.split(pt)[0] || l, Kt = ({
27
+ children: l,
28
+ foldersMap: c,
29
+ tableRows: D,
30
+ tasksMap: s,
31
31
  entitiesMap: i,
32
32
  tasksByFolderMap: E,
33
33
  expanded: m,
34
34
  showHierarchy: b,
35
- loadingTasks: P,
36
- isLoadingMore: S,
35
+ loadingTasks: B,
36
+ isLoadingMore: C,
37
37
  isLoading: R,
38
38
  error: A,
39
39
  isInitialized: d,
40
40
  users: I,
41
41
  attribFields: u,
42
42
  scopes: g,
43
- groups: a,
43
+ groups: y,
44
44
  groupRowFunc: w,
45
45
  queryFilters: G,
46
- updateShowHierarchy: O,
47
- toggleExpanded: _,
48
- updateExpanded: V,
49
- fetchNextPage: x,
50
- reloadTableData: N,
51
- setExpanded: f,
52
- contextMenuItems: W,
53
- powerpack: q,
54
- modules: z,
55
- groupByConfig: J,
56
- SubtasksManager: K,
46
+ updateShowHierarchy: N,
47
+ toggleExpanded: O,
48
+ updateExpanded: _,
49
+ fetchNextPage: L,
50
+ reloadTableData: V,
51
+ setExpanded: a,
52
+ contextMenuItems: x,
53
+ powerpack: W,
54
+ modules: q,
55
+ groupByConfig: z,
56
+ SubtasksManager: J,
57
57
  // player
58
- playerOpen: L,
58
+ playerOpen: K,
59
59
  onOpenPlayer: Q,
60
60
  // views
61
- onResetView: U
61
+ onResetView: U,
62
+ useParams: X,
63
+ useNavigate: Y,
64
+ useLocation: Z,
65
+ useSearchParams: $
62
66
  }) => {
63
- const { attrib: X } = ft(), Y = mt({
64
- foldersMap: s,
65
- tasksMap: c,
66
- rows: C,
67
+ const { attrib: H } = gt(), F = at({
68
+ foldersMap: c,
69
+ tasksMap: s,
70
+ rows: D,
67
71
  tasksByFolderMap: E,
68
72
  expanded: m,
69
73
  showHierarchy: b,
70
- loadingTasks: P,
71
- isLoadingMore: S
72
- }), { groupBy: y, groupByConfig: { showEmpty: Z = !1 } = {} } = lt(), $ = st({
74
+ loadingTasks: B,
75
+ isLoadingMore: C
76
+ }), { groupBy: p, groupByConfig: { showEmpty: k = !1 } = {} } = yt(), M = lt({
73
77
  entities: i,
74
- entityType: J?.entityType || "unknown",
75
- groups: a,
78
+ entityType: z?.entityType || "unknown",
79
+ groups: y,
76
80
  attribFields: u,
77
- showEmpty: Z,
81
+ showEmpty: k,
78
82
  groupRowFunc: w
79
- }), H = B(
80
- () => u.filter((e) => e.scope?.some((n) => g.includes(n))),
83
+ }), tt = S(
84
+ () => u.filter((r) => r.scope?.some((n) => g.includes(n))),
81
85
  [u, g]
82
- ), j = B(
83
- () => !!y && $(y),
84
- [y, i, a]
85
- ), F = y && j ? j : Y, T = h(
86
- (e, n = "entityId") => {
87
- if (typeof e != "string") {
88
- console.warn("getEntityById called with non-string id:", e);
86
+ ), P = S(
87
+ () => !!p && M(p),
88
+ [p, i, y]
89
+ ), ot = p && P ? P : F, j = h(
90
+ (r, n = "entityId") => {
91
+ if (typeof r != "string") {
92
+ console.warn("getEntityById called with non-string id:", r);
89
93
  return;
90
94
  }
91
- const t = yt(e);
92
- if (s.has(t))
93
- return s.get(t);
95
+ const t = Et(r);
94
96
  if (c.has(t))
95
97
  return c.get(t);
98
+ if (s.has(t))
99
+ return s.get(t);
96
100
  if (i.has(t))
97
101
  return i.get(t);
98
- for (const [r, o] of i)
102
+ for (const [e, o] of i)
99
103
  if (o[n] === t)
100
104
  return o;
101
105
  },
102
- [s, c, i]
106
+ [c, s, i]
103
107
  ), {
104
- getInheritedDependents: k,
105
- getChildrenEntities: D,
106
- findInheritedValueFromAncestors: M,
107
- findNonInheritedValues: tt,
108
- getAncestorsOf: ot
109
- } = ct({
108
+ getInheritedDependents: et,
109
+ getChildrenEntities: T,
110
+ findInheritedValueFromAncestors: rt,
111
+ findNonInheritedValues: nt,
112
+ getAncestorsOf: it
113
+ } = ft({
110
114
  entitiesMap: i,
111
- tasksMap: c,
115
+ tasksMap: s,
112
116
  tasksByFolderMap: E,
113
- getEntityById: T,
114
- projectAttrib: X,
117
+ getEntityById: j,
118
+ projectAttrib: H,
115
119
  attribFields: u
116
- }), rt = h(
117
- (e, n) => {
118
- const t = typeof m == "object" ? m : {}, r = { ...t };
119
- e.forEach((o) => {
120
- const v = D(o).map((l) => l.id), nt = t[o] || !1;
121
- (n !== void 0 ? !n : nt) ? (r[o] = !1, v.forEach((l) => {
122
- r[l] = !1;
123
- })) : (r[o] = !0, v.forEach((l) => {
124
- r[l] = !0;
120
+ }), mt = h(
121
+ (r, n) => {
122
+ const t = typeof m == "object" ? m : {}, e = { ...t };
123
+ r.forEach((o) => {
124
+ const v = T(o).map((f) => f.id), ct = t[o] || !1;
125
+ (n !== void 0 ? !n : ct) ? (e[o] = !1, v.forEach((f) => {
126
+ e[f] = !1;
127
+ })) : (e[o] = !0, v.forEach((f) => {
128
+ e[f] = !0;
125
129
  }));
126
- }), f(r);
130
+ }), a(e);
127
131
  },
128
- [m, D, f]
129
- ), et = h(
130
- (e, n) => {
131
- const t = typeof m == "object" ? m : {}, r = { ...t };
132
- e.forEach((o) => {
133
- n !== void 0 ? r[o] = n : r[o] = !t[o];
134
- }), f(r);
132
+ [m, T, a]
133
+ ), st = h(
134
+ (r, n) => {
135
+ const t = typeof m == "object" ? m : {}, e = { ...t };
136
+ r.forEach((o) => {
137
+ n !== void 0 ? e[o] = n : e[o] = !t[o];
138
+ }), a(e);
135
139
  },
136
- [m, f]
140
+ [m, a]
137
141
  );
138
- return /* @__PURE__ */ it.jsx(
139
- pt.Provider,
142
+ return /* @__PURE__ */ ut.jsx(
143
+ ht.Provider,
140
144
  {
141
145
  value: {
142
146
  // from this context
143
- tableData: F,
147
+ tableData: ot,
144
148
  // forwarded on
145
149
  isInitialized: d,
146
150
  isLoading: R,
147
151
  error: A,
148
152
  attribFields: u,
149
- attribFieldsScoped: H,
153
+ attribFieldsScoped: tt,
150
154
  scopes: g,
151
155
  users: I,
152
- tasksMap: c,
153
- foldersMap: s,
156
+ tasksMap: s,
157
+ foldersMap: c,
154
158
  entitiesMap: i,
155
- fetchNextPage: x,
156
- reloadTableData: N,
157
- groups: a,
159
+ fetchNextPage: L,
160
+ reloadTableData: V,
161
+ groups: y,
158
162
  queryFilters: G,
159
163
  // hierarchy
160
164
  showHierarchy: b,
161
- updateShowHierarchy: O,
165
+ updateShowHierarchy: N,
162
166
  // expanded state
163
167
  expanded: m,
164
- setExpanded: f,
165
- toggleExpanded: _,
166
- updateExpanded: V,
167
- toggleExpandAll: rt,
168
- toggleExpands: et,
169
- getEntityById: T,
168
+ setExpanded: a,
169
+ toggleExpanded: O,
170
+ updateExpanded: _,
171
+ toggleExpandAll: mt,
172
+ toggleExpands: st,
173
+ getEntityById: j,
170
174
  // folder relationships
171
- getInheritedDependents: k,
172
- findInheritedValueFromAncestors: M,
173
- findNonInheritedValues: tt,
174
- getAncestorsOf: ot,
175
+ getInheritedDependents: et,
176
+ findInheritedValueFromAncestors: rt,
177
+ findNonInheritedValues: nt,
178
+ getAncestorsOf: it,
175
179
  // context menu
176
- contextMenuItems: W,
180
+ contextMenuItems: x,
177
181
  // powerpack context
178
- powerpack: q,
179
- modules: z,
182
+ powerpack: W,
183
+ modules: q,
180
184
  // SubtasksManager
181
- SubtasksManager: K,
185
+ SubtasksManager: J,
182
186
  // player
183
- playerOpen: L,
187
+ playerOpen: K,
184
188
  onOpenPlayer: Q,
185
189
  // views
186
- onResetView: U
190
+ onResetView: U,
191
+ // router hooks
192
+ useParams: X,
193
+ useNavigate: Y,
194
+ useLocation: Z,
195
+ useSearchParams: $
187
196
  },
188
- children: p
197
+ children: l
189
198
  }
190
199
  );
191
200
  };
192
201
  export {
193
- qt as ProjectTableProvider,
194
- yt as parseRowId
202
+ Kt as ProjectTableProvider,
203
+ Et as parseRowId
195
204
  };
196
205
  //# sourceMappingURL=ProjectTableProvider.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProjectTableProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableProvider.tsx"],"sourcesContent":["/**\n * Project Table Context\n *\n * This context serves as the central data management layer for the project table component.\n * It performs three main functions:\n *\n * 1. **Props Forwarding**: Acts as a bridge to forward essential props (project info, users,\n * attributes, filters, etc.) down to child components throughout the table hierarchy.\n *\n * 2. **Table Data Structure Building**: Transforms raw project data into structured table rows\n * that can be consumed by the table component. This includes processing folders, tasks,\n * and entities into a unified table format.\n *\n * 3. **Multi-Modal Data Presentation**: Supports three different data presentation modes:\n * - **Hierarchy Mode**: Builds nested folder/task relationships with expandable rows\n * - **Tasks List Mode**: Flattened view of tasks without hierarchical structure\n * - **Groups Mode**: Groups entities by specified criteria (entity type, custom groups)\n *\n * The context also provides utility functions for entity relationships, expansion state\n * management, filtering, and folder inheritance operations.\n */\nimport { ReactNode, useCallback, useMemo } from 'react'\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table'\nimport useBuildProjectDataTable from '../hooks/useBuildProjectDataTable'\nimport { Filter } from '@ynput/ayon-react-components'\nimport {\n EntitiesMap,\n EntityMap,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport useFolderRelationships from '../hooks/useFolderRelationships'\nimport { ProjectModel } from '../types/project'\nimport { ProjectTableAttribute, LoadingTasks } from '../types'\nimport { QueryFilter } from '../types/folders'\nimport { ContextMenuItemConstructors } from '../hooks/useCellContextMenu'\nimport { EntityGroup } from '@shared/api'\nimport useBuildGroupByTableData, {\n GroupByEntityType,\n ROW_ID_SEPARATOR,\n} from '../hooks/useBuildGroupByTableData'\nimport { PowerpackContextType, useProjectContext } from '@shared/context'\nimport { useColumnSettingsContext } from './ColumnSettingsContext'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { ProjectTableContext, ProjectTableContextType } from './ProjectTableContext'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport const parseRowId = (rowId: string) => rowId?.split(ROW_ID_SEPARATOR)[0] || rowId\n\nexport type TableUser = {\n name: string\n fullName?: string\n}\n\nexport interface ProjectTableProviderProps {\n children: ReactNode\n isInitialized: boolean\n\n // loading\n isLoading: boolean\n isLoadingMore: boolean\n loadingTasks?: LoadingTasks\n error?: string\n users: TableUser[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n scopes: string[]\n\n // data\n tasksMap: TaskNodeMap\n foldersMap: FolderNodeMap\n entitiesMap: EntitiesMap\n tasksByFolderMap: TasksByFolderMap\n tableRows?: TableRow[] // any extra rows that we want to add to the table\n\n // grouping\n groups: EntityGroup[]\n groupRowFunc?: (node: any) => TableRow\n\n // data functions\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n\n // Filters\n queryFilters: {\n filter: QueryFilter | undefined\n filterString?: string\n search: string | undefined\n }\n\n // Hierarchy\n showHierarchy: boolean\n updateShowHierarchy: (showHierarchy: boolean) => void\n\n // Expanded state\n expanded: ExpandedState\n toggleExpanded: (id: string) => void\n updateExpanded: OnChangeFn<ExpandedState>\n setExpanded: React.Dispatch<React.SetStateAction<ExpandedState>>\n\n // context menu\n contextMenuItems: ContextMenuItemConstructors\n\n // powerpack context\n powerpack?: PowerpackContextType\n\n // remote modules\n modules: ProjectTableModulesType\n\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n\n // SubtasksManager component\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: boolean\n onOpenPlayer?: (\n targetIds: {\n taskId?: string\n folderId?: string\n productId?: string\n versionId?: string\n },\n config?: { quickView?: boolean },\n ) => void\n // views\n onResetView?: () => void\n}\n\nexport const ProjectTableProvider = ({\n children,\n foldersMap,\n tableRows,\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n isLoading,\n error,\n isInitialized,\n users,\n attribFields,\n scopes,\n groups,\n groupRowFunc,\n queryFilters,\n updateShowHierarchy,\n toggleExpanded,\n updateExpanded,\n fetchNextPage,\n reloadTableData,\n setExpanded,\n contextMenuItems,\n powerpack,\n modules,\n groupByConfig,\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n}: ProjectTableProviderProps) => {\n const { attrib: projectAttrib } = useProjectContext()\n // DATA TO TABLE\n const defaultTableData = useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows: tableRows,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n })\n\n const { groupBy, groupByConfig: { showEmpty: showEmptyGroups = false } = {} } =\n useColumnSettingsContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType || 'unknown',\n groups: groups,\n attribFields,\n showEmpty: showEmptyGroups,\n groupRowFunc,\n })\n\n const attribFieldsScoped = useMemo(\n () => attribFields.filter((attrib) => attrib.scope?.some((scope) => scopes.includes(scope))),\n [attribFields, scopes],\n )\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groups],\n )\n\n const tableData = groupBy && groupedTableData ? groupedTableData : defaultTableData\n\n const getEntityById = useCallback(\n (id: string, field: string = 'entityId'): EntityMap | undefined => {\n // defensive check to ensure id is a string\n if (typeof id !== 'string') {\n console.warn('getEntityById called with non-string id:', id)\n return undefined\n }\n // always parse the id to remove any suffixes\n // this can happen if the id is a group by id (we need to make the row id unique)\n const parsedId = parseRowId(id)\n if (foldersMap.has(parsedId)) {\n return foldersMap.get(parsedId)\n } else if (tasksMap.has(parsedId)) {\n return tasksMap.get(parsedId)\n } else if (entitiesMap.has(parsedId)) {\n return entitiesMap.get(parsedId)\n }\n\n // if we have not found the entity at all, double check through the maps using field (entityId)\n for (const [_, entity] of entitiesMap) {\n if (entity[field as keyof EntityMap] === parsedId) {\n return entity\n }\n }\n\n // Return undefined if not found\n return undefined\n },\n [foldersMap, tasksMap, entitiesMap],\n )\n\n // get folder relationship functions\n const {\n getInheritedDependents,\n getChildrenEntities,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n } = useFolderRelationships({\n entitiesMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields: attribFields,\n })\n\n const toggleExpandAll: ProjectTableContextType['toggleExpandAll'] = useCallback(\n (rowIds, expandAll) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n // get all children of the rowId using tableData\n const childIds = getChildrenEntities(rowId).map((child) => child.id)\n // check if the rowId is expanded\n const isExpanded = expandedState[rowId] || false\n\n if (expandAll !== undefined ? !expandAll : isExpanded) {\n // collapse all children\n newExpandedState[rowId] = false\n childIds.forEach((id) => {\n newExpandedState[id] = false\n })\n } else {\n // expand all children\n newExpandedState[rowId] = true\n childIds.forEach((id) => {\n newExpandedState[id] = true\n })\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, getChildrenEntities, setExpanded],\n )\n\n const toggleExpands: ProjectTableContextType['toggleExpands'] = useCallback(\n (rowIds, expand) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n if (expand !== undefined) {\n // Use the provided expand parameter\n newExpandedState[rowId] = expand\n } else {\n // Toggle based on current state\n newExpandedState[rowId] = !expandedState[rowId]\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, setExpanded],\n )\n\n return (\n <ProjectTableContext.Provider\n value={{\n // from this context\n tableData,\n // forwarded on\n isInitialized,\n isLoading,\n error,\n attribFields,\n attribFieldsScoped,\n scopes,\n users,\n tasksMap,\n foldersMap,\n entitiesMap,\n fetchNextPage,\n reloadTableData,\n groups,\n queryFilters,\n // hierarchy\n showHierarchy,\n updateShowHierarchy,\n // expanded state\n expanded,\n setExpanded,\n toggleExpanded,\n updateExpanded,\n toggleExpandAll,\n toggleExpands,\n getEntityById,\n // folder relationships\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n // context menu\n contextMenuItems,\n // powerpack context\n powerpack,\n modules,\n // SubtasksManager\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n }}\n >\n {children}\n </ProjectTableContext.Provider>\n )\n}\n"],"names":["parseRowId","rowId","ROW_ID_SEPARATOR","ProjectTableProvider","children","foldersMap","tableRows","tasksMap","entitiesMap","tasksByFolderMap","expanded","showHierarchy","loadingTasks","isLoadingMore","isLoading","error","isInitialized","users","attribFields","scopes","groups","groupRowFunc","queryFilters","updateShowHierarchy","toggleExpanded","updateExpanded","fetchNextPage","reloadTableData","setExpanded","contextMenuItems","powerpack","modules","groupByConfig","SubtasksManager","playerOpen","onOpenPlayer","onResetView","projectAttrib","useProjectContext","defaultTableData","useBuildProjectDataTable","groupBy","showEmptyGroups","useColumnSettingsContext","buildGroupByTableData","useBuildGroupByTableData","attribFieldsScoped","useMemo","attrib","scope","groupedTableData","tableData","getEntityById","useCallback","id","field","parsedId","_","entity","getInheritedDependents","getChildrenEntities","findInheritedValueFromAncestors","findNonInheritedValues","getAncestorsOf","useFolderRelationships","toggleExpandAll","rowIds","expandAll","expandedState","newExpandedState","childIds","child","isExpanded","toggleExpands","expand","jsx","ProjectTableContext"],"mappings":"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"}
1
+ {"version":3,"file":"ProjectTableProvider.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableProvider.tsx"],"sourcesContent":["/**\n * Project Table Context\n *\n * This context serves as the central data management layer for the project table component.\n * It performs three main functions:\n *\n * 1. **Props Forwarding**: Acts as a bridge to forward essential props (project info, users,\n * attributes, filters, etc.) down to child components throughout the table hierarchy.\n *\n * 2. **Table Data Structure Building**: Transforms raw project data into structured table rows\n * that can be consumed by the table component. This includes processing folders, tasks,\n * and entities into a unified table format.\n *\n * 3. **Multi-Modal Data Presentation**: Supports three different data presentation modes:\n * - **Hierarchy Mode**: Builds nested folder/task relationships with expandable rows\n * - **Tasks List Mode**: Flattened view of tasks without hierarchical structure\n * - **Groups Mode**: Groups entities by specified criteria (entity type, custom groups)\n *\n * The context also provides utility functions for entity relationships, expansion state\n * management, filtering, and folder inheritance operations.\n */\nimport { ReactNode, useCallback, useMemo } from 'react'\nimport { useParams, useNavigate, useLocation, useSearchParams } from 'react-router-dom'\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table'\nimport useBuildProjectDataTable from '../hooks/useBuildProjectDataTable'\nimport {\n EntitiesMap,\n EntityMap,\n FolderNodeMap,\n TableRow,\n TaskNodeMap,\n TasksByFolderMap,\n} from '../types/table'\nimport useFolderRelationships from '../hooks/useFolderRelationships'\nimport { ProjectModel } from '../types/project'\nimport { ProjectTableAttribute, LoadingTasks } from '../types'\nimport { QueryFilter } from '../types/folders'\nimport { ContextMenuItemConstructors } from '../hooks/useCellContextMenu'\nimport { EntityGroup } from '@shared/api'\nimport useBuildGroupByTableData, {\n GroupByEntityType,\n ROW_ID_SEPARATOR,\n} from '../hooks/useBuildGroupByTableData'\nimport { PowerpackContextType, useProjectContext } from '@shared/context'\nimport { useColumnSettingsContext } from './ColumnSettingsContext'\nimport { ProjectTableModulesType } from '@shared/hooks'\nimport { ProjectTableContext, ProjectTableContextType } from './ProjectTableContext'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport const parseRowId = (rowId: string) => rowId?.split(ROW_ID_SEPARATOR)[0] || rowId\n\nexport type TableUser = {\n name: string\n fullName?: string\n}\n\nexport interface ProjectTableProviderProps {\n children: ReactNode\n isInitialized: boolean\n\n // loading\n isLoading: boolean\n isLoadingMore: boolean\n loadingTasks?: LoadingTasks\n error?: string\n users: TableUser[]\n // Attributes\n attribFields: ProjectTableAttribute[]\n scopes: string[]\n\n // data\n tasksMap: TaskNodeMap\n foldersMap: FolderNodeMap\n entitiesMap: EntitiesMap\n tasksByFolderMap: TasksByFolderMap\n tableRows?: TableRow[] // any extra rows that we want to add to the table\n\n // grouping\n groups: EntityGroup[]\n groupRowFunc?: (node: any) => TableRow\n\n // data functions\n fetchNextPage: (value?: string) => void\n reloadTableData: () => void\n\n // Filters\n queryFilters: {\n filter: QueryFilter | undefined\n filterString?: string\n search: string | undefined\n }\n\n // Hierarchy\n showHierarchy: boolean\n updateShowHierarchy: (showHierarchy: boolean) => void\n\n // Expanded state\n expanded: ExpandedState\n toggleExpanded: (id: string) => void\n updateExpanded: OnChangeFn<ExpandedState>\n setExpanded: React.Dispatch<React.SetStateAction<ExpandedState>>\n\n // context menu\n contextMenuItems: ContextMenuItemConstructors\n\n // powerpack context\n powerpack?: PowerpackContextType\n\n // remote modules\n modules: ProjectTableModulesType\n\n groupByConfig?: {\n entityType?: GroupByEntityType\n }\n\n // SubtasksManager component\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: boolean\n onOpenPlayer?: (\n targetIds: {\n taskId?: string\n folderId?: string\n productId?: string\n versionId?: string\n },\n config?: { quickView?: boolean },\n ) => void\n // views\n onResetView?: () => void\n // router hooks\n useParams?: typeof useParams\n useNavigate?: typeof useNavigate\n useLocation?: typeof useLocation\n useSearchParams?: typeof useSearchParams\n}\n\nexport const ProjectTableProvider = ({\n children,\n foldersMap,\n tableRows,\n tasksMap,\n entitiesMap,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n isLoading,\n error,\n isInitialized,\n users,\n attribFields,\n scopes,\n groups,\n groupRowFunc,\n queryFilters,\n updateShowHierarchy,\n toggleExpanded,\n updateExpanded,\n fetchNextPage,\n reloadTableData,\n setExpanded,\n contextMenuItems,\n powerpack,\n modules,\n groupByConfig,\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n useParams,\n useNavigate,\n useLocation,\n useSearchParams,\n}: ProjectTableProviderProps) => {\n const { attrib: projectAttrib } = useProjectContext()\n // DATA TO TABLE\n const defaultTableData = useBuildProjectDataTable({\n foldersMap,\n tasksMap,\n rows: tableRows,\n tasksByFolderMap,\n expanded,\n showHierarchy,\n loadingTasks,\n isLoadingMore,\n })\n\n const { groupBy, groupByConfig: { showEmpty: showEmptyGroups = false } = {} } =\n useColumnSettingsContext()\n\n const buildGroupByTableData = useBuildGroupByTableData({\n entities: entitiesMap,\n entityType: groupByConfig?.entityType || 'unknown',\n groups: groups,\n attribFields,\n showEmpty: showEmptyGroups,\n groupRowFunc,\n })\n\n const attribFieldsScoped = useMemo(\n () => attribFields.filter((attrib) => attrib.scope?.some((scope) => scopes.includes(scope))),\n [attribFields, scopes],\n )\n\n // if we are grouping by something, we ignore current tableData and format the data based on the groupBy\n const groupedTableData = useMemo(\n () => !!groupBy && buildGroupByTableData(groupBy),\n [groupBy, entitiesMap, groups],\n )\n\n const tableData = groupBy && groupedTableData ? groupedTableData : defaultTableData\n\n const getEntityById = useCallback(\n (id: string, field: string = 'entityId'): EntityMap | undefined => {\n // defensive check to ensure id is a string\n if (typeof id !== 'string') {\n console.warn('getEntityById called with non-string id:', id)\n return undefined\n }\n // always parse the id to remove any suffixes\n // this can happen if the id is a group by id (we need to make the row id unique)\n const parsedId = parseRowId(id)\n if (foldersMap.has(parsedId)) {\n return foldersMap.get(parsedId)\n } else if (tasksMap.has(parsedId)) {\n return tasksMap.get(parsedId)\n } else if (entitiesMap.has(parsedId)) {\n return entitiesMap.get(parsedId)\n }\n\n // if we have not found the entity at all, double check through the maps using field (entityId)\n for (const [_, entity] of entitiesMap) {\n if (entity[field as keyof EntityMap] === parsedId) {\n return entity\n }\n }\n\n // Return undefined if not found\n return undefined\n },\n [foldersMap, tasksMap, entitiesMap],\n )\n\n // get folder relationship functions\n const {\n getInheritedDependents,\n getChildrenEntities,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n } = useFolderRelationships({\n entitiesMap,\n tasksMap,\n tasksByFolderMap,\n getEntityById,\n projectAttrib,\n attribFields: attribFields,\n })\n\n const toggleExpandAll: ProjectTableContextType['toggleExpandAll'] = useCallback(\n (rowIds, expandAll) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n // get all children of the rowId using tableData\n const childIds = getChildrenEntities(rowId).map((child) => child.id)\n // check if the rowId is expanded\n const isExpanded = expandedState[rowId] || false\n\n if (expandAll !== undefined ? !expandAll : isExpanded) {\n // collapse all children\n newExpandedState[rowId] = false\n childIds.forEach((id) => {\n newExpandedState[id] = false\n })\n } else {\n // expand all children\n newExpandedState[rowId] = true\n childIds.forEach((id) => {\n newExpandedState[id] = true\n })\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, getChildrenEntities, setExpanded],\n )\n\n const toggleExpands: ProjectTableContextType['toggleExpands'] = useCallback(\n (rowIds, expand) => {\n const expandedState = typeof expanded === 'object' ? expanded : {}\n const newExpandedState = { ...expandedState }\n\n rowIds.forEach((rowId) => {\n if (expand !== undefined) {\n // Use the provided expand parameter\n newExpandedState[rowId] = expand\n } else {\n // Toggle based on current state\n newExpandedState[rowId] = !expandedState[rowId]\n }\n })\n\n setExpanded(newExpandedState)\n },\n [expanded, setExpanded],\n )\n\n return (\n <ProjectTableContext.Provider\n value={{\n // from this context\n tableData,\n // forwarded on\n isInitialized,\n isLoading,\n error,\n attribFields,\n attribFieldsScoped,\n scopes,\n users,\n tasksMap,\n foldersMap,\n entitiesMap,\n fetchNextPage,\n reloadTableData,\n groups,\n queryFilters,\n // hierarchy\n showHierarchy,\n updateShowHierarchy,\n // expanded state\n expanded,\n setExpanded,\n toggleExpanded,\n updateExpanded,\n toggleExpandAll,\n toggleExpands,\n getEntityById,\n // folder relationships\n getInheritedDependents,\n findInheritedValueFromAncestors,\n findNonInheritedValues,\n getAncestorsOf,\n // context menu\n contextMenuItems,\n // powerpack context\n powerpack,\n modules,\n // SubtasksManager\n SubtasksManager,\n // player\n playerOpen,\n onOpenPlayer,\n // views\n onResetView,\n // router hooks\n useParams,\n useNavigate,\n useLocation,\n useSearchParams,\n }}\n >\n {children}\n </ProjectTableContext.Provider>\n )\n}\n"],"names":["parseRowId","rowId","ROW_ID_SEPARATOR","ProjectTableProvider","children","foldersMap","tableRows","tasksMap","entitiesMap","tasksByFolderMap","expanded","showHierarchy","loadingTasks","isLoadingMore","isLoading","error","isInitialized","users","attribFields","scopes","groups","groupRowFunc","queryFilters","updateShowHierarchy","toggleExpanded","updateExpanded","fetchNextPage","reloadTableData","setExpanded","contextMenuItems","powerpack","modules","groupByConfig","SubtasksManager","playerOpen","onOpenPlayer","onResetView","useParams","useNavigate","useLocation","useSearchParams","projectAttrib","useProjectContext","defaultTableData","useBuildProjectDataTable","groupBy","showEmptyGroups","useColumnSettingsContext","buildGroupByTableData","useBuildGroupByTableData","attribFieldsScoped","useMemo","attrib","scope","groupedTableData","tableData","getEntityById","useCallback","id","field","parsedId","_","entity","getInheritedDependents","getChildrenEntities","findInheritedValueFromAncestors","findNonInheritedValues","getAncestorsOf","useFolderRelationships","toggleExpandAll","rowIds","expandAll","expandedState","newExpandedState","childIds","child","isExpanded","toggleExpands","expand","jsx","ProjectTableContext"],"mappings":"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"}