@ynput/ayon-frontend-shared 0.3.10 → 0.3.11

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 (21) hide show
  1. package/dist/api.cjs.js +1 -1
  2. package/dist/api.es.js +123 -122
  3. package/dist/shared/src/api/queries/tasks/updateTasks.cjs.js +1 -1
  4. package/dist/shared/src/api/queries/tasks/updateTasks.cjs.js.map +1 -1
  5. package/dist/shared/src/api/queries/tasks/updateTasks.es.js +40 -22
  6. package/dist/shared/src/api/queries/tasks/updateTasks.es.js.map +1 -1
  7. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  8. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  9. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +93 -93
  10. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  11. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +4 -4
  12. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
  13. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +226 -226
  14. package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
  15. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  16. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  17. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +25 -24
  18. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  19. package/dist/types/api/queries/entityLists/types.d.ts +1 -0
  20. package/dist/types/api/queries/tasks/updateTasks.d.ts +7 -0
  21. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"buildTreeTableColumns.es.js","sources":["../../../../../src/containers/ProjectTreeTable/buildTreeTableColumns.tsx"],"sourcesContent":["import { ColumnDef, FilterFnOption, Row, SortingFn, sortingFns } from '@tanstack/react-table'\nimport { TableRow } from './types/table'\nimport { AttributeData, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport {\n CellWidget,\n MetaWidget,\n EntityNameWidget,\n GroupHeaderWidget,\n ThumbnailWidget,\n} from './widgets'\nimport { getCellId, getCellValue } from './utils/cellUtils'\nimport { LinkColumnHeader, TableCellContent } from './ProjectTreeTable.styled'\nimport clsx from 'clsx'\nimport { SelectionCell } from './components/SelectionCell'\nimport RowSelectionHeader from './components/RowSelectionHeader'\nimport { ROW_SELECTION_COLUMN_ID } from './context/SelectionCellsContext'\nimport { TableGroupBy, useCellEditing, useColumnSettingsContext } from './context'\nimport { NEXT_PAGE_ID } from './hooks/useBuildGroupByTableData'\nimport LoadMoreWidget from './widgets/LoadMoreWidget'\nimport { LinkTypeModel } from '@shared/api'\nimport { LinkWidgetData } from './widgets/LinksWidget'\nimport { SubtasksWidgetData } from './widgets/SubtasksWidget'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { getEntityTypeIcon } from '@shared/util'\nimport { NameWidgetData } from '@shared/components/RenameForm'\nimport { isEntityRestricted, READ_ONLY } from './utils/restrictedEntity'\nimport { getColumnDisplayConfig } from './types/columnConfig'\nimport { upperFirst } from 'lodash'\n\nexport const isEntityExpandable = (entityType: string) => ['folder', 'product'].includes(entityType)\n\nexport const COLUMN_MIN_SIZE = 50\n\n// Wrapper function for sorting that pushes isLoading rows to the bottom\nconst withLoadingStateSort = (sortFn: SortingFn<any>): SortingFn<any> => {\n return (rowA, rowB, ...args) => {\n // If row loading states differ, prioritize non-loading rows\n if (rowA.original.isLoading !== rowB.original.isLoading) {\n return rowA.original.isLoading ? 1 : -1\n }\n // Otherwise, use the original sort function\n return sortFn(rowA, rowB, ...args)\n }\n}\n\nconst pathSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.path || rowA.original.name || ''\n const labelB = rowB.original.path || rowB.original.name || ''\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\n\nconst valueLengthSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n const lengthA = Array.isArray(valueA) ? valueA.length : valueA ? String(valueA).length : 0\n const lengthB = Array.isArray(valueB) ? valueB.length : valueB ? String(valueB).length : 0\n return lengthA - lengthB\n}\n\ntype AttribSortingFn = (rowA: any, rowB: any, columnId: string, attribute?: AttributeData) => number\n// sort by the order of the enum options\nconst attribSort: AttribSortingFn = (rowA, rowB, columnId, attrib) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n // if attrib is defined and has enum options, use them\n if (attrib && attrib.enum) {\n const indexA = attrib.enum.findIndex((o) => o.value === valueA)\n const indexB = attrib.enum.findIndex((o) => o.value === valueB)\n return indexB - indexA < 0 ? 1 : -1\n } else if (attrib?.type === 'datetime') {\n return sortingFns.datetime(rowA, rowB, columnId)\n } else if (attrib?.type === 'boolean') {\n const boolA = valueA === true ? 1 : 0\n const boolB = valueB === true ? 1 : 0\n return boolA - boolB\n } else {\n return sortingFns.alphanumeric(rowA, rowB, columnId)\n }\n}\n\nexport const getLinkLabel = (\n link: Pick<LinkTypeModel, 'linkType'>,\n direction: 'in' | 'out' | string,\n) => `${link.linkType.charAt(0).toUpperCase() + link.linkType.slice(1)} (${direction})`\n\nexport const getLinkKey = (link: Pick<LinkTypeModel, 'name'>, direction: 'in' | 'out' | string) =>\n `${link.name.replaceAll('_', '').replaceAll('-', '').replaceAll('|', '_')}_${direction}`\n\nexport const getLinkColumnId = (\n link: Pick<LinkTypeModel, 'name'>,\n direction: 'in' | 'out' | string,\n) => `link_${getLinkKey(link, direction)}`\n\nexport type DefaultColumns =\n | typeof ROW_SELECTION_COLUMN_ID\n | 'thumbnail'\n | 'name'\n | 'entityType'\n | 'folder'\n | 'status'\n | 'subType'\n | 'assignees'\n | 'tags'\n | 'createdAt'\n | 'updatedAt'\n\nexport type TreeTableExtraColumn = { column: ColumnDef<TableRow>; position?: number }\n\nexport type BuildTreeTableColumnsProps = {\n scopes: string[]\n attribs: ProjectTableAttribute[]\n links: LinkTypeModel[]\n includeLinks?: boolean\n showHierarchy: boolean\n options: BuiltInFieldOptions\n excluded?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n groupBy?: TableGroupBy\n nameLabel?: string\n}\n\nconst buildTreeTableColumns = ({\n scopes,\n attribs,\n links = [],\n includeLinks = true,\n showHierarchy,\n options,\n excluded,\n excludedSorting,\n extraColumns,\n groupBy,\n nameLabel = 'Entity',\n}: BuildTreeTableColumnsProps) => {\n const staticColumns: ColumnDef<TableRow>[] = []\n\n // Helper to check if a column should be included\n const isIncluded = (id: DefaultColumns | string) => !excluded?.includes(id)\n const canSort = (id: DefaultColumns | string) => !excludedSorting?.includes(id)\n\n // Conditionally add static columns\n if (isIncluded(ROW_SELECTION_COLUMN_ID)) {\n staticColumns.push({\n id: ROW_SELECTION_COLUMN_ID,\n enableResizing: false,\n enableSorting: false,\n enablePinning: false,\n enableHiding: false,\n\n header: () => <RowSelectionHeader />,\n cell: ({ row }) => {\n if (row.original.entityType === 'group' || row.original.metaType) return null\n return <SelectionCell />\n },\n size: 20,\n })\n }\n\n if (isIncluded('thumbnail')) {\n staticColumns.push({\n id: 'thumbnail',\n header: 'Thumbnail',\n size: 63,\n minSize: 24,\n enableResizing: true,\n enableSorting: false,\n cell: ({ row, column, table }) => {\n if (row.original.entityType === 'group' || row.original.metaType) return null\n const meta = table.options.meta\n if (!meta) return null\n const cellId = getCellId(row.id, column.id)\n let thumbnail = {\n entityId: row.original.entityId || row.id,\n entityType: row.original.entityType,\n updatedAt: row.original.updatedAt,\n }\n // check for thumbnail override\n if (row.original.thumbnail) {\n thumbnail = row.original.thumbnail\n }\n return (\n <ThumbnailWidget\n id={cellId}\n entityId={thumbnail.entityId}\n entityType={thumbnail.entityType}\n updatedAt={thumbnail.updatedAt}\n icon={row.original.icon}\n projectName={meta?.projectName as string}\n className={clsx('thumbnail', {\n loading: row.original.isLoading,\n })}\n isPlayable={row.original.hasReviewables}\n />\n )\n },\n })\n }\n\n if (isIncluded('name')) {\n staticColumns.push({\n id: 'name',\n accessorKey: 'name',\n header: nameLabel,\n minSize: COLUMN_MIN_SIZE,\n sortingFn: withLoadingStateSort(pathSort),\n enableSorting: groupBy ? false : canSort('name'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: groupBy ? false : true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n const { isEditing } = useCellEditing()\n const { rowHeight = 40 } = useColumnSettingsContext()\n const cellId = getCellId(row.id, column.id)\n\n if (row.original.metaType) {\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', 'readonly', row.original.entityType)}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + 8px)`,\n pointerEvents: 'none',\n }}\n tabIndex={0}\n >\n <MetaWidget metaType={row.original.metaType} label={row.original.label} />\n </TableCellContent>\n )\n }\n\n if (row.original.entityType === NEXT_PAGE_ID && row.original.group) {\n return (\n <LoadMoreWidget\n id={row.original.group.value}\n onLoadMore={(id) => meta?.loadMoreRows?.(id)}\n />\n )\n }\n\n const isExpandable =\n row.getCanExpand() &&\n !!row.originalSubRows &&\n (isEntityExpandable(row.original.entityType) || !!row.original.group)\n\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', row.original.entityType, {\n loading: row.original.isLoading,\n hierarchy: showHierarchy,\n })}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + ${\n isExpandable || !row.getCanExpand() ? 0 : 32\n }px + 8px)`,\n }}\n tabIndex={0}\n >\n {row.original.group ? (\n <GroupHeaderWidget\n id={row.id}\n label={row.original.group.label}\n name={row.original.name}\n icon={row.original.group.icon}\n img={row.original.group.img}\n color={row.original.group.color}\n count={row.original.group.count}\n isExpanded={row.getIsExpanded()}\n isEmpty={row.original.group.count === 0}\n toggleExpanded={row.getToggleExpandedHandler()}\n />\n ) : (\n <EntityNameWidget\n id={row.id}\n label={row.original.label}\n name={row.original.name}\n path={!showHierarchy ? '/' + row.original.parents?.join('/') : undefined}\n icon={row.original.icon}\n type={row.original.entityType}\n isExpandable={isExpandable}\n isExpanded={row.getIsExpanded()}\n toggleExpandAll={() => meta?.toggleExpandAll?.([row.id])}\n toggleExpanded={row.getToggleExpandedHandler()}\n rowHeight={rowHeight}\n columnDisplayConfig={getColumnDisplayConfig(meta?.columnsConfig, 'name')}\n />\n )}\n {isEditing(cellId) && (\n <CellWidget\n rowId={id}\n className={clsx('name', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n valueData={\n {\n name: row.original.name,\n label: row.original.label,\n meta,\n entityRowId: id,\n columnId: column.id,\n hasVersions: !!row.original.hasVersions,\n } as NameWidgetData\n }\n entityType={type}\n attributeData={{ type: 'name' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )}\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('status')) {\n staticColumns.push({\n id: 'status',\n accessorKey: 'status',\n minSize: COLUMN_MIN_SIZE,\n header: 'Status',\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: options.status, type: 'string' }),\n ),\n sortDescFirst: true,\n enableSorting: canSort('status'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('status', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={meta?.options?.status.filter((s) => s.scope?.includes(type))}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n pt={{\n enum: {\n pt: {\n template: {\n pt: {\n icon: {\n style: {\n fontVariationSettings: \"'FILL' 1, 'wght' 200, 'GRAD' 200, 'opsz' 20\",\n },\n },\n },\n },\n },\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('entityType')) {\n staticColumns.push({\n id: 'entityType',\n accessorKey: 'entityType',\n header: 'Entity Type',\n minSize: 20,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.alphanumeric),\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const cellId = getCellId(row.id, column.id)\n\n return (\n <TableCellContent\n id={cellId}\n className={clsx('entityType', READ_ONLY, type, { loading: row.original.isLoading })}\n tabIndex={0}\n >\n <Icon icon={getEntityTypeIcon(type)} /> {upperFirst(value)}\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('subType')) {\n staticColumns.push({\n id: 'subType',\n accessorKey: 'subType',\n header: scopes.includes('product') || scopes.includes('version') ? 'Product type' : 'Type',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('subType'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: [...options.folderType, ...options.taskType], type: 'string' }),\n ),\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const fieldId = type === 'folder' ? 'folderType' : 'taskType'\n const meta = table.options.meta\n const folderHasVersions = type === 'folder' && row.original.hasVersions\n return (\n <CellWidget\n rowId={id}\n className={clsx('subType', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={\n type === 'folder'\n ? meta?.options?.folderType\n : type === 'task'\n ? meta?.options?.taskType\n : []\n }\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: fieldId, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={\n meta?.readOnly?.includes(column.id) ||\n meta?.readOnly?.includes(fieldId) ||\n folderHasVersions\n }\n tooltip={\n folderHasVersions\n ? 'Folder type cannot be edited when versions exist within the folder'\n : undefined\n }\n />\n )\n },\n })\n }\n\n if (isIncluded('assignees')) {\n staticColumns.push({\n id: 'assignees',\n accessorKey: 'assignees',\n header: 'Assignees',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('assignees'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(valueLengthSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n if (type === 'folder')\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value=\"\"\n isPlaceholder\n />\n )\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n pt={{\n enum: {\n multiSelectClose: value?.length === 0, // close the dropdown on first assignment\n search: true, // enable search at all times\n multipleOverride: false,\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('folder')) {\n staticColumns.push({\n id: 'folder',\n accessorKey: 'folder',\n header: 'Folder name',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('folderName'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('folder', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n // only show authors column for products\n if (isIncluded('author') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'author',\n accessorKey: 'author',\n header: 'Author',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('author'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('author', { loading: row.original.isLoading })}\n columnId={column.id}\n value={[value]}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isReadOnly={true}\n isInherited={type === 'product'} // products do not have authors, we just show the featured version's author\n />\n )\n },\n })\n }\n\n // version column for versions\n if (isIncluded('version') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'version',\n accessorKey: 'version',\n header: 'Version',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('version'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n let versionValue = row.original.versionName || value\n if (row.original.entityType === 'product') {\n // show summary of versions for products\n versionValue = `${row.original.versionName} (${row.original.versionsCount || 0} versions)`\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('version', { loading: row.original.isLoading })}\n columnId={column.id}\n value={versionValue}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n // product name column for versions and products\n if (isIncluded('product') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'product',\n accessorKey: 'product',\n header: 'Product name',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('product'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('product', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n if (isIncluded('tags')) {\n staticColumns.push({\n id: 'tags',\n accessorKey: 'tags',\n header: 'Tags',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('tags'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(valueLengthSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('tags', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.tag}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n enableCustomValues\n />\n )\n },\n })\n }\n\n if (isIncluded('createdAt')) {\n staticColumns.push({\n id: 'createdAt',\n accessorKey: 'createdAt',\n header: 'Created at',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('createdAt'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.datetime),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('createdAt', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'datetime' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={true}\n pt={{ date: { showTime: true } }}\n />\n )\n },\n })\n }\n\n if (isIncluded('updatedAt')) {\n staticColumns.push({\n id: 'updatedAt',\n accessorKey: 'updatedAt',\n header: 'Updated at',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('updatedAt'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.datetime),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('updatedAt', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'datetime' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={true}\n pt={{ date: { showTime: true } }}\n />\n )\n },\n })\n }\n\n if (isIncluded('subtasks') && scopes.includes('task')) {\n staticColumns.push({\n id: 'subtasks',\n accessorKey: 'subtasks',\n header: 'Subtasks',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n const cellId = getCellId(id, column.id)\n const subtasksData: SubtasksWidgetData = {\n taskId: id,\n subtasks: value || [],\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('subtasks', { loading: row.original.isLoading })}\n columnId={column.id}\n value={subtasksData.subtasks?.map((s: any) => s.label || s.name) || []}\n valueData={subtasksData}\n attributeData={{ type: 'subtasks' }}\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n const attributeColumns: ColumnDef<TableRow>[] = attribs\n .filter((attrib) => {\n // filter out attributes that are out of scope\n if (attrib.scope && !attrib.scope.some((s) => scopes.includes(s))) return false\n\n const columnId = 'attrib_' + attrib.name\n // Check if the specific attribute column is excluded\n // or if all built-in attributes are excluded and this is a built-in attribute\n if (!isIncluded(columnId)) return false\n if (attrib.builtin && !isIncluded('attrib')) return false\n return true\n })\n .map((attrib) => {\n const attribColumn: ColumnDef<TableRow> = {\n id: 'attrib_' + attrib.name,\n accessorKey: 'attrib.' + attrib.name,\n header: attrib.data.title || attrib.name,\n minSize: COLUMN_MIN_SIZE,\n filterFn: 'fuzzy' as FilterFnOption<TableRow>,\n sortingFn: withLoadingStateSort((a, b, c) => attribSort(a, b, c, attrib.data)),\n enableSorting: canSort(attrib.name) && canSort('attrib'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const columnIdParsed = column.id.replace('attrib_', '')\n const { value, id, type } = getValueIdType(row, columnIdParsed, 'attrib')\n const isInherited = !row.original.ownAttrib?.includes(columnIdParsed)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const outOfScopeAndNoValue =\n !attrib.scope?.includes(type as (typeof attrib.scope)[number]) &&\n (value === null || value === undefined)\n\n // if the attribute is not in scope, we should nothing\n if (outOfScopeAndNoValue) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('attrib', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: attrib.data.type || 'string' }}\n options={attrib.data.enum || []}\n isCollapsed={!!row.original.childOnlyMatch}\n isInherited={isInherited}\n isReadOnly={\n // check attrib is not read only\n attrib.readOnly ||\n // check if there is any other reason the cell should be read only\n meta?.readOnly?.some(\n (id) => id === columnIdParsed || (id === 'attrib' && attrib.builtin),\n )\n }\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: columnIdParsed, value, type, isAttrib: true, rowId: row.id },\n { selection: !!attrib.data.enum?.length ? meta?.selection : undefined },\n )\n }\n />\n )\n },\n }\n return attribColumn\n })\n\n const linkColumns: ColumnDef<TableRow>[] = !includeLinks\n ? []\n : links\n .filter((link) => {\n // Check if the link type is excluded\n if (!isIncluded(link.linkType) || !isIncluded('link')) return false\n // Check if inputType and outputType are in scopes\n if (!scopes.includes(link.inputType) && !scopes.includes(link.outputType)) return false\n return true\n })\n .flatMap((link) => {\n const createLinkColumn = (direction: 'in' | 'out'): ColumnDef<TableRow> => {\n return {\n id: getLinkColumnId(link, direction),\n accessorKey: `links.${getLinkKey(link, direction)}`,\n header: () => (\n <LinkColumnHeader>\n {getLinkLabel(link, direction)}{' '}\n <Icon\n icon={getEntityTypeIcon(direction === 'in' ? link.inputType : link.outputType)}\n />\n </LinkColumnHeader>\n ),\n minSize: COLUMN_MIN_SIZE,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column }) => {\n const columnIdParsed = column.id.replace('link_', '')\n\n const { id, value } = getValueIdType(row, columnIdParsed, 'links')\n const cellValue = value?.map((v: any) => v.label)\n const valueData: LinkWidgetData = {\n links: value,\n direction: direction,\n entityId: row.original.entityId || row.original.id,\n entityType: row.original.entityType,\n link: {\n label: link.linkType,\n linkType: link.name,\n targetEntityType: direction === 'in' ? link.inputType : link.outputType,\n },\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('links', { loading: row.original.isLoading })}\n columnId={column.id}\n value={cellValue}\n valueData={valueData}\n folderId={row.original.folderId}\n attributeData={{ type: 'links' }}\n />\n )\n },\n }\n }\n\n return [createLinkColumn('in'), createLinkColumn('out')]\n })\n\n const allColumns = [...staticColumns, ...attributeColumns, ...linkColumns]\n\n // Add extra columns if provided\n if (extraColumns) {\n extraColumns.forEach(({ column, position = -1 }) => {\n if (position >= 0 && position < allColumns.length) {\n allColumns.splice(position, 0, column)\n } else {\n allColumns.push(column)\n }\n })\n }\n\n return allColumns\n}\n\nexport default buildTreeTableColumns\n\nexport const getValueIdType = (\n row: Row<TableRow>,\n field: string,\n nestedField?: keyof TableRow,\n): {\n value: any\n id: string\n type: string\n} => ({\n value: nestedField\n ? (row.original[nestedField as keyof TableRow] as any)?.[field]\n : (row.original[field as keyof TableRow] as any),\n id: row.id,\n type: row.original.entityType,\n})\n"],"names":["isEntityExpandable","entityType","COLUMN_MIN_SIZE","withLoadingStateSort","sortFn","rowA","rowB","args","pathSort","labelA","labelB","valueLengthSort","columnId","valueA","getCellValue","valueB","lengthA","lengthB","attribSort","attrib","indexA","o","sortingFns","getLinkLabel","link","direction","getLinkKey","getLinkColumnId","buildTreeTableColumns","scopes","attribs","links","includeLinks","showHierarchy","options","excluded","excludedSorting","extraColumns","groupBy","nameLabel","staticColumns","isIncluded","id","canSort","ROW_SELECTION_COLUMN_ID","jsx","RowSelectionHeader","row","SelectionCell","column","table","meta","cellId","getCellId","thumbnail","ThumbnailWidget","clsx","value","type","getValueIdType","isEditing","useCellEditing","rowHeight","useColumnSettingsContext","TableCellContent","MetaWidget","NEXT_PAGE_ID","LoadMoreWidget","isExpandable","jsxs","GroupHeaderWidget","EntityNameWidget","getColumnDisplayConfig","CellWidget","a","b","c","s","isEntityRestricted","READ_ONLY","Icon","getEntityTypeIcon","upperFirst","fieldId","folderHasVersions","versionValue","subtasksData","attributeColumns","columnIdParsed","isInherited","linkColumns","createLinkColumn","LinkColumnHeader","cellValue","v","valueData","allColumns","position","field","nestedField"],"mappings":"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"}
1
+ {"version":3,"file":"buildTreeTableColumns.es.js","sources":["../../../../../src/containers/ProjectTreeTable/buildTreeTableColumns.tsx"],"sourcesContent":["import { ColumnDef, FilterFnOption, Row, SortingFn, sortingFns } from '@tanstack/react-table'\nimport { TableRow } from './types/table'\nimport { AttributeData, ProjectTableAttribute, BuiltInFieldOptions } from './types'\nimport {\n CellWidget,\n MetaWidget,\n EntityNameWidget,\n GroupHeaderWidget,\n ThumbnailWidget,\n} from './widgets'\nimport { getCellId, getCellValue, parseCellId } from './utils/cellUtils'\nimport { LinkColumnHeader, TableCellContent } from './ProjectTreeTable.styled'\nimport clsx from 'clsx'\nimport { SelectionCell } from './components/SelectionCell'\nimport RowSelectionHeader from './components/RowSelectionHeader'\nimport { ROW_SELECTION_COLUMN_ID } from './context/SelectionCellsContext'\nimport { TableGroupBy, useCellEditing, useColumnSettingsContext } from './context'\nimport { NEXT_PAGE_ID, parseGroupId } from './hooks/useBuildGroupByTableData'\nimport LoadMoreWidget from './widgets/LoadMoreWidget'\nimport { LinkTypeModel } from '@shared/api'\nimport { LinkWidgetData } from './widgets/LinksWidget'\nimport { SubtasksWidgetData } from './widgets/SubtasksWidget'\nimport { Icon } from '@ynput/ayon-react-components'\nimport { getEntityTypeIcon } from '@shared/util'\nimport { NameWidgetData } from '@shared/components/RenameForm'\nimport { isEntityRestricted, READ_ONLY } from './utils/restrictedEntity'\nimport { getColumnDisplayConfig } from './types/columnConfig'\nimport { upperFirst } from 'lodash'\n\nexport const isEntityExpandable = (entityType: string) => ['folder', 'product'].includes(entityType)\n\nexport const COLUMN_MIN_SIZE = 50\n\n// Wrapper function for sorting that pushes isLoading rows to the bottom\nconst withLoadingStateSort = (sortFn: SortingFn<any>): SortingFn<any> => {\n return (rowA, rowB, ...args) => {\n // If row loading states differ, prioritize non-loading rows\n if (rowA.original.isLoading !== rowB.original.isLoading) {\n return rowA.original.isLoading ? 1 : -1\n }\n // Otherwise, use the original sort function\n return sortFn(rowA, rowB, ...args)\n }\n}\n\nconst pathSort: SortingFn<any> = (rowA, rowB) => {\n const labelA = rowA.original.path || rowA.original.name || ''\n const labelB = rowB.original.path || rowB.original.name || ''\n // sort alphabetically by label\n return labelA.localeCompare(labelB)\n}\n\nconst valueLengthSort: SortingFn<any> = (rowA, rowB, columnId) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n const lengthA = Array.isArray(valueA) ? valueA.length : valueA ? String(valueA).length : 0\n const lengthB = Array.isArray(valueB) ? valueB.length : valueB ? String(valueB).length : 0\n return lengthA - lengthB\n}\n\ntype AttribSortingFn = (rowA: any, rowB: any, columnId: string, attribute?: AttributeData) => number\n// sort by the order of the enum options\nconst attribSort: AttribSortingFn = (rowA, rowB, columnId, attrib) => {\n const valueA = getCellValue(rowA.original, columnId)\n const valueB = getCellValue(rowB.original, columnId)\n // if attrib is defined and has enum options, use them\n if (attrib && attrib.enum) {\n const indexA = attrib.enum.findIndex((o) => o.value === valueA)\n const indexB = attrib.enum.findIndex((o) => o.value === valueB)\n return indexB - indexA < 0 ? 1 : -1\n } else if (attrib?.type === 'datetime') {\n return sortingFns.datetime(rowA, rowB, columnId)\n } else if (attrib?.type === 'boolean') {\n const boolA = valueA === true ? 1 : 0\n const boolB = valueB === true ? 1 : 0\n return boolA - boolB\n } else {\n return sortingFns.alphanumeric(rowA, rowB, columnId)\n }\n}\n\nexport const getLinkLabel = (\n link: Pick<LinkTypeModel, 'linkType'>,\n direction: 'in' | 'out' | string,\n) => `${link.linkType.charAt(0).toUpperCase() + link.linkType.slice(1)} (${direction})`\n\nexport const getLinkKey = (link: Pick<LinkTypeModel, 'name'>, direction: 'in' | 'out' | string) =>\n `${link.name.replaceAll('_', '').replaceAll('-', '').replaceAll('|', '_')}_${direction}`\n\nexport const getLinkColumnId = (\n link: Pick<LinkTypeModel, 'name'>,\n direction: 'in' | 'out' | string,\n) => `link_${getLinkKey(link, direction)}`\n\nexport type DefaultColumns =\n | typeof ROW_SELECTION_COLUMN_ID\n | 'thumbnail'\n | 'name'\n | 'entityType'\n | 'folder'\n | 'status'\n | 'subType'\n | 'assignees'\n | 'tags'\n | 'createdAt'\n | 'updatedAt'\n\nexport type TreeTableExtraColumn = { column: ColumnDef<TableRow>; position?: number }\n\nexport type BuildTreeTableColumnsProps = {\n scopes: string[]\n attribs: ProjectTableAttribute[]\n links: LinkTypeModel[]\n includeLinks?: boolean\n showHierarchy: boolean\n options: BuiltInFieldOptions\n excluded?: (DefaultColumns | string)[]\n excludedSorting?: (DefaultColumns | string)[]\n extraColumns?: TreeTableExtraColumn[]\n groupBy?: TableGroupBy\n nameLabel?: string\n}\n\nconst buildTreeTableColumns = ({\n scopes,\n attribs,\n links = [],\n includeLinks = true,\n showHierarchy,\n options,\n excluded,\n excludedSorting,\n extraColumns,\n groupBy,\n nameLabel = 'Entity',\n}: BuildTreeTableColumnsProps) => {\n const staticColumns: ColumnDef<TableRow>[] = []\n\n // Helper to check if a column should be included\n const isIncluded = (id: DefaultColumns | string) => !excluded?.includes(id)\n const canSort = (id: DefaultColumns | string) => !excludedSorting?.includes(id)\n\n // Conditionally add static columns\n if (isIncluded(ROW_SELECTION_COLUMN_ID)) {\n staticColumns.push({\n id: ROW_SELECTION_COLUMN_ID,\n enableResizing: false,\n enableSorting: false,\n enablePinning: false,\n enableHiding: false,\n\n header: () => <RowSelectionHeader />,\n cell: ({ row }) => {\n if (row.original.entityType === 'group' || row.original.metaType) return null\n return <SelectionCell />\n },\n size: 20,\n })\n }\n\n if (isIncluded('thumbnail')) {\n staticColumns.push({\n id: 'thumbnail',\n header: 'Thumbnail',\n size: 63,\n minSize: 24,\n enableResizing: true,\n enableSorting: false,\n cell: ({ row, column, table }) => {\n if (row.original.entityType === 'group' || row.original.metaType) return null\n const meta = table.options.meta\n if (!meta) return null\n const cellId = getCellId(row.id, column.id)\n let thumbnail = {\n entityId: row.original.entityId || row.id,\n entityType: row.original.entityType,\n updatedAt: row.original.updatedAt,\n }\n // check for thumbnail override\n if (row.original.thumbnail) {\n thumbnail = row.original.thumbnail\n }\n return (\n <ThumbnailWidget\n id={cellId}\n entityId={thumbnail.entityId}\n entityType={thumbnail.entityType}\n updatedAt={thumbnail.updatedAt}\n icon={row.original.icon}\n projectName={meta?.projectName as string}\n className={clsx('thumbnail', {\n loading: row.original.isLoading,\n })}\n isPlayable={row.original.hasReviewables}\n />\n )\n },\n })\n }\n\n if (isIncluded('name')) {\n staticColumns.push({\n id: 'name',\n accessorKey: 'name',\n header: nameLabel,\n minSize: COLUMN_MIN_SIZE,\n sortingFn: withLoadingStateSort(pathSort),\n enableSorting: groupBy ? false : canSort('name'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: groupBy ? false : true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n const { isEditing } = useCellEditing()\n const { rowHeight = 40 } = useColumnSettingsContext()\n const cellId = getCellId(row.id, column.id)\n\n if (row.original.metaType) {\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', 'readonly', row.original.entityType)}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + 8px)`,\n pointerEvents: 'none',\n }}\n tabIndex={0}\n >\n <MetaWidget metaType={row.original.metaType} label={row.original.label} />\n </TableCellContent>\n )\n }\n\n if (row.original.entityType === NEXT_PAGE_ID && row.original.group) {\n return (\n <LoadMoreWidget\n id={row.original.group.value}\n onLoadMore={(id) => meta?.loadMoreRows?.(id)}\n />\n )\n }\n\n const isExpandable =\n row.getCanExpand() &&\n !!row.originalSubRows &&\n (isEntityExpandable(row.original.entityType) || !!row.original.group)\n\n return (\n <TableCellContent\n id={cellId}\n className={clsx('large', row.original.entityType, {\n loading: row.original.isLoading,\n hierarchy: showHierarchy,\n })}\n style={{\n paddingLeft: `calc(${row.depth * 1}rem + ${\n isExpandable || !row.getCanExpand() ? 0 : 32\n }px + 8px)`,\n }}\n tabIndex={0}\n >\n {row.original.group ? (\n <GroupHeaderWidget\n id={row.id}\n label={row.original.group.label}\n name={row.original.name}\n icon={row.original.group.icon}\n img={row.original.group.img}\n color={row.original.group.color}\n count={row.original.group.count}\n isExpanded={row.getIsExpanded()}\n isEmpty={row.original.group.count === 0}\n toggleExpanded={row.getToggleExpandedHandler()}\n />\n ) : (\n <EntityNameWidget\n id={row.id}\n label={row.original.label}\n name={row.original.name}\n path={!showHierarchy ? '/' + row.original.parents?.join('/') : undefined}\n icon={row.original.icon}\n type={row.original.entityType}\n isExpandable={isExpandable}\n isExpanded={row.getIsExpanded()}\n toggleExpandAll={() => meta?.toggleExpandAll?.([row.id])}\n toggleExpanded={row.getToggleExpandedHandler()}\n rowHeight={rowHeight}\n columnDisplayConfig={getColumnDisplayConfig(meta?.columnsConfig, 'name')}\n />\n )}\n {isEditing(cellId) && (\n <CellWidget\n rowId={id}\n className={clsx('name', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n valueData={\n {\n name: row.original.name,\n label: row.original.label,\n meta,\n entityRowId: id,\n columnId: column.id,\n hasVersions: !!row.original.hasVersions,\n } as NameWidgetData\n }\n entityType={type}\n attributeData={{ type: 'name' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )}\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('status')) {\n staticColumns.push({\n id: 'status',\n accessorKey: 'status',\n minSize: COLUMN_MIN_SIZE,\n header: 'Status',\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: options.status, type: 'string' }),\n ),\n sortDescFirst: true,\n enableSorting: canSort('status'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n const meta = table.options.meta\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('status', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={meta?.options?.status.filter((s) => s.scope?.includes(type))}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n pt={{\n enum: {\n pt: {\n template: {\n pt: {\n icon: {\n style: {\n fontVariationSettings: \"'FILL' 1, 'wght' 200, 'GRAD' 200, 'opsz' 20\",\n },\n },\n },\n },\n },\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('entityType')) {\n staticColumns.push({\n id: 'entityType',\n accessorKey: 'entityType',\n header: 'Entity Type',\n minSize: 20,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.alphanumeric),\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const cellId = getCellId(row.id, column.id)\n\n return (\n <TableCellContent\n id={cellId}\n className={clsx('entityType', READ_ONLY, type, { loading: row.original.isLoading })}\n tabIndex={0}\n >\n <Icon icon={getEntityTypeIcon(type)} /> {upperFirst(value)}\n </TableCellContent>\n )\n },\n })\n }\n\n if (isIncluded('subType')) {\n staticColumns.push({\n id: 'subType',\n accessorKey: 'subType',\n header: scopes.includes('product') || scopes.includes('version') ? 'Product type' : 'Type',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('subType'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort((a, b, c) =>\n attribSort(a, b, c, { enum: [...options.folderType, ...options.taskType], type: 'string' }),\n ),\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const fieldId = type === 'folder' ? 'folderType' : 'taskType'\n const meta = table.options.meta\n const folderHasVersions = type === 'folder' && row.original.hasVersions\n return (\n <CellWidget\n rowId={id}\n className={clsx('subType', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n options={\n type === 'folder'\n ? meta?.options?.folderType\n : type === 'task'\n ? meta?.options?.taskType\n : []\n }\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: fieldId, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={\n meta?.readOnly?.includes(column.id) ||\n meta?.readOnly?.includes(fieldId) ||\n folderHasVersions\n }\n tooltip={\n folderHasVersions\n ? 'Folder type cannot be edited when versions exist within the folder'\n : undefined\n }\n />\n )\n },\n })\n }\n\n if (isIncluded('assignees')) {\n staticColumns.push({\n id: 'assignees',\n accessorKey: 'assignees',\n header: 'Assignees',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('assignees'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(valueLengthSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n if (type === 'folder')\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value=\"\"\n isPlaceholder\n />\n )\n return (\n <CellWidget\n rowId={id}\n className={clsx('assignees', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n pt={{\n enum: {\n multiSelectClose: value?.length === 0, // close the dropdown on first assignment\n search: true, // enable search at all times\n multipleOverride: false,\n },\n }}\n />\n )\n },\n })\n }\n\n if (isIncluded('folder')) {\n staticColumns.push({\n id: 'folder',\n accessorKey: 'folder',\n header: 'Folder name',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('folderName'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('folder', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n // only show authors column for products\n if (isIncluded('author') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'author',\n accessorKey: 'author',\n header: 'Author',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('author'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('author', { loading: row.original.isLoading })}\n columnId={column.id}\n value={[value]}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.assignee}\n isReadOnly={true}\n isInherited={type === 'product'} // products do not have authors, we just show the featured version's author\n />\n )\n },\n })\n }\n\n // version column for versions\n if (isIncluded('version') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'version',\n accessorKey: 'version',\n header: 'Version',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('version'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n let versionValue = row.original.versionName || value\n if (row.original.entityType === 'product') {\n // show summary of versions for products\n versionValue = `${row.original.versionName} (${row.original.versionsCount || 0} versions)`\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('version', { loading: row.original.isLoading })}\n columnId={column.id}\n value={versionValue}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n // product name column for versions and products\n if (isIncluded('product') && ['version', 'product'].some((s) => scopes.includes(s))) {\n staticColumns.push({\n id: 'product',\n accessorKey: 'product',\n header: 'Product name',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('product'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(pathSort),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('product', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'string' }}\n isReadOnly={true}\n />\n )\n },\n })\n }\n\n if (isIncluded('tags')) {\n staticColumns.push({\n id: 'tags',\n accessorKey: 'tags',\n header: 'Tags',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('tags'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(valueLengthSort),\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('tags', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'list_of_strings' }}\n options={meta?.options?.tag}\n isCollapsed={!!row.original.childOnlyMatch}\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: column.id, value, type, rowId: row.id },\n { selection: meta?.selection },\n )\n }\n isReadOnly={meta?.readOnly?.includes(column.id) || isEntityRestricted(type)}\n enableCustomValues\n />\n )\n },\n })\n }\n\n if (isIncluded('createdAt')) {\n staticColumns.push({\n id: 'createdAt',\n accessorKey: 'createdAt',\n header: 'Created at',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('createdAt'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.datetime),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('createdAt', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'datetime' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={true}\n pt={{ date: { showTime: true } }}\n />\n )\n },\n })\n }\n\n if (isIncluded('updatedAt')) {\n staticColumns.push({\n id: 'updatedAt',\n accessorKey: 'updatedAt',\n header: 'Updated at',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: canSort('updatedAt'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n sortingFn: withLoadingStateSort(sortingFns.datetime),\n cell: ({ row, column }) => {\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n return (\n <CellWidget\n rowId={id}\n className={clsx('updatedAt', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: 'datetime' }}\n isCollapsed={!!row.original.childOnlyMatch}\n isReadOnly={true}\n pt={{ date: { showTime: true } }}\n />\n )\n },\n })\n }\n\n if (isIncluded('subtasks') && scopes.includes('task')) {\n staticColumns.push({\n id: 'subtasks',\n accessorKey: 'subtasks',\n header: 'Subtasks',\n minSize: COLUMN_MIN_SIZE,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const { value, id, type } = getValueIdType(row, column.id)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n\n // only show for tasks\n if (type !== 'task') return <div className=\"readonly\"></div>\n\n const subtasksData: SubtasksWidgetData = {\n taskId: parseGroupId(row.id) || row.original.entityId || row.original.id,\n subtasks: value || [],\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('subtasks', { loading: row.original.isLoading })}\n columnId={column.id}\n value={subtasksData.subtasks?.map((s: any) => s.label || s.name) || []}\n valueData={subtasksData}\n attributeData={{ type: 'subtasks' }}\n isReadOnly={meta?.readOnly?.includes(column.id)}\n />\n )\n },\n })\n }\n\n const attributeColumns: ColumnDef<TableRow>[] = attribs\n .filter((attrib) => {\n // filter out attributes that are out of scope\n if (attrib.scope && !attrib.scope.some((s) => scopes.includes(s))) return false\n\n const columnId = 'attrib_' + attrib.name\n // Check if the specific attribute column is excluded\n // or if all built-in attributes are excluded and this is a built-in attribute\n if (!isIncluded(columnId)) return false\n if (attrib.builtin && !isIncluded('attrib')) return false\n return true\n })\n .map((attrib) => {\n const attribColumn: ColumnDef<TableRow> = {\n id: 'attrib_' + attrib.name,\n accessorKey: 'attrib.' + attrib.name,\n header: attrib.data.title || attrib.name,\n minSize: COLUMN_MIN_SIZE,\n filterFn: 'fuzzy' as FilterFnOption<TableRow>,\n sortingFn: withLoadingStateSort((a, b, c) => attribSort(a, b, c, attrib.data)),\n enableSorting: canSort(attrib.name) && canSort('attrib'),\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column, table }) => {\n const meta = table.options.meta\n const columnIdParsed = column.id.replace('attrib_', '')\n const { value, id, type } = getValueIdType(row, columnIdParsed, 'attrib')\n const isInherited = !row.original.ownAttrib?.includes(columnIdParsed)\n if (['group', NEXT_PAGE_ID].includes(type) || row.original.metaType) return null\n const outOfScopeAndNoValue =\n !attrib.scope?.includes(type as (typeof attrib.scope)[number]) &&\n (value === null || value === undefined)\n\n // if the attribute is not in scope, we should nothing\n if (outOfScopeAndNoValue) return null\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('attrib', { loading: row.original.isLoading })}\n columnId={column.id}\n value={value}\n attributeData={{ type: attrib.data.type || 'string' }}\n options={attrib.data.enum || []}\n isCollapsed={!!row.original.childOnlyMatch}\n isInherited={isInherited}\n isReadOnly={\n // check attrib is not read only\n attrib.readOnly ||\n // check if there is any other reason the cell should be read only\n meta?.readOnly?.some(\n (id) => id === columnIdParsed || (id === 'attrib' && attrib.builtin),\n )\n }\n onChange={(value) =>\n meta?.updateEntities?.(\n { field: columnIdParsed, value, type, isAttrib: true, rowId: row.id },\n { selection: !!attrib.data.enum?.length ? meta?.selection : undefined },\n )\n }\n />\n )\n },\n }\n return attribColumn\n })\n\n const linkColumns: ColumnDef<TableRow>[] = !includeLinks\n ? []\n : links\n .filter((link) => {\n // Check if the link type is excluded\n if (!isIncluded(link.linkType) || !isIncluded('link')) return false\n // Check if inputType and outputType are in scopes\n if (!scopes.includes(link.inputType) && !scopes.includes(link.outputType)) return false\n return true\n })\n .flatMap((link) => {\n const createLinkColumn = (direction: 'in' | 'out'): ColumnDef<TableRow> => {\n return {\n id: getLinkColumnId(link, direction),\n accessorKey: `links.${getLinkKey(link, direction)}`,\n header: () => (\n <LinkColumnHeader>\n {getLinkLabel(link, direction)}{' '}\n <Icon\n icon={getEntityTypeIcon(direction === 'in' ? link.inputType : link.outputType)}\n />\n </LinkColumnHeader>\n ),\n minSize: COLUMN_MIN_SIZE,\n enableSorting: false,\n enableResizing: true,\n enablePinning: true,\n enableHiding: true,\n cell: ({ row, column }) => {\n const columnIdParsed = column.id.replace('link_', '')\n\n const { id, value } = getValueIdType(row, columnIdParsed, 'links')\n const cellValue = value?.map((v: any) => v.label)\n const valueData: LinkWidgetData = {\n links: value,\n direction: direction,\n entityId: row.original.entityId || row.original.id,\n entityType: row.original.entityType,\n link: {\n label: link.linkType,\n linkType: link.name,\n targetEntityType: direction === 'in' ? link.inputType : link.outputType,\n },\n }\n\n return (\n <CellWidget\n rowId={id}\n className={clsx('links', { loading: row.original.isLoading })}\n columnId={column.id}\n value={cellValue}\n valueData={valueData}\n folderId={row.original.folderId}\n attributeData={{ type: 'links' }}\n />\n )\n },\n }\n }\n\n return [createLinkColumn('in'), createLinkColumn('out')]\n })\n\n const allColumns = [...staticColumns, ...attributeColumns, ...linkColumns]\n\n // Add extra columns if provided\n if (extraColumns) {\n extraColumns.forEach(({ column, position = -1 }) => {\n if (position >= 0 && position < allColumns.length) {\n allColumns.splice(position, 0, column)\n } else {\n allColumns.push(column)\n }\n })\n }\n\n return allColumns\n}\n\nexport default buildTreeTableColumns\n\nexport const getValueIdType = (\n row: Row<TableRow>,\n field: string,\n nestedField?: keyof TableRow,\n): {\n value: any\n id: string\n type: string\n} => ({\n value: nestedField\n ? (row.original[nestedField as keyof TableRow] as any)?.[field]\n : (row.original[field as keyof TableRow] as any),\n id: row.id,\n type: row.original.entityType,\n})\n"],"names":["isEntityExpandable","entityType","COLUMN_MIN_SIZE","withLoadingStateSort","sortFn","rowA","rowB","args","pathSort","labelA","labelB","valueLengthSort","columnId","valueA","getCellValue","valueB","lengthA","lengthB","attribSort","attrib","indexA","o","sortingFns","getLinkLabel","link","direction","getLinkKey","getLinkColumnId","buildTreeTableColumns","scopes","attribs","links","includeLinks","showHierarchy","options","excluded","excludedSorting","extraColumns","groupBy","nameLabel","staticColumns","isIncluded","id","canSort","ROW_SELECTION_COLUMN_ID","jsx","RowSelectionHeader","row","SelectionCell","column","table","meta","cellId","getCellId","thumbnail","ThumbnailWidget","clsx","value","type","getValueIdType","isEditing","useCellEditing","rowHeight","useColumnSettingsContext","TableCellContent","MetaWidget","NEXT_PAGE_ID","LoadMoreWidget","isExpandable","jsxs","GroupHeaderWidget","EntityNameWidget","getColumnDisplayConfig","CellWidget","a","b","c","s","isEntityRestricted","READ_ONLY","Icon","getEntityTypeIcon","upperFirst","fieldId","folderHasVersions","versionValue","subtasksData","parseGroupId","attributeColumns","columnIdParsed","isInherited","linkColumns","createLinkColumn","LinkColumnHeader","cellValue","v","valueData","allColumns","position","field","nestedField"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const Te=require("../../../../../_virtual/jsx-runtime.cjs.js"),F=require("react"),M=require("./SelectionCellsContext.cjs.js"),ke=require("./CellEditingContext.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 we=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");const R=require("../utils/cellUtils.cjs.js"),me=require("../hooks/usePasteLinks.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");const xe=require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const A=require("./clipboard/clipboardUtils.cjs.js"),Ee=require("./clipboard/clipboardValidation.cjs.js"),G=require("./clipboard/clipboardSubtasks.cjs.js"),ve=require("./ProjectTableContext.cjs.js");require("lodash");require("react-toastify");const de=require("../../../util/getEntityId.cjs.js");require("../../../util/pubsub.cjs.js");const fe=F.createContext(void 0),Se=({children:J,entitiesMap:j,columnEnums:ae,columnReadOnly:pe,visibleColumns:Q})=>{const{selectedCells:B,gridMap:I,focusedCellId:be}=M.useSelectionCellsContext(),{updateEntities:le,history:ie}=ke.useCellEditing(),{pasteTableLinks:ce}=me(),{getEntityById:z,attribFields:Y}=ve.useProjectTableContext(),{projectName:Z}=we.useProjectContext(),[ee]=xe.useUpdateSubtasksMutation(),ne=F.useCallback(async(a,u)=>{const{headers:l,fullRow:g}=u||{};try{const S=Q.map(q=>q.id).filter(q=>q!==M.ROW_SELECTION_COLUMN_ID),w=new Map;a.forEach(q=>{const r=R.parseCellId(q);if(!r)return;const{rowId:f,colId:_}=r;_===M.ROW_SELECTION_COLUMN_ID||!S.includes(_)||(w.has(f)||w.set(f,new Set),w.get(f)?.add(_))}),g&&a.filter(r=>R.parseCellId(r)?.rowId&&R.parseCellId(r)?.colId===M.ROW_SELECTION_COLUMN_ID).map(r=>R.parseCellId(r)?.rowId).forEach(r=>{w.has(r)||w.set(r,new Set),Array.from(I.colIdToIndex.keys()).forEach(_=>{w.get(r)?.add(_)})});const d=Array.from(w.keys()).sort((q,r)=>{const f=I.rowIdToIndex.get(q)??1/0,_=I.rowIdToIndex.get(r)??1/0;return f-_});let D="";const se=d[0];if(!se)return"";const oe=Array.from(w.get(se)||[]).sort((q,r)=>{const f=I.colIdToIndex.get(q)??1/0,_=I.colIdToIndex.get(r)??1/0;return f-_});if(l&&oe.length>0){const q=[];for(const r of oe){const f=r;q.push(`${f.replace(/"/g,'""')}`)}D+=q.join(" ")+`
2
- `}for(const q of d){const r=z(q);if(!r){console.warn(`Entity not found for rowId: ${q}`);continue}const _=Array.from(w.get(q)||[]).sort((p,E)=>{const L=I.colIdToIndex.get(p)??1/0,U=I.colIdToIndex.get(E)??1/0;return L-U}).filter(p=>p!==M.ROW_SELECTION_COLUMN_ID),$=[];for(const p of _){let E="";if(p.startsWith("link_"))E=R.getLinkEntityIdsByColumnId(r.links,p);else if(p==="subtasks"){const L=R.getCellValue(r,p)||[];E=G.subtasksToTSV(L,r.id,r.name)}else{let L=R.getCellValue(r,p);if(!L){const U=Y.find(K=>K.name===p.replace("attrib_",""));U&&U.data.type==="boolean"?L=!1:U&&U.data.type.includes("list_of")&&(L=[])}E=L!=null?String(L):"",p==="name"&&(E=A.getEntityPath(r.entityId||r.id,j)),p==="subType"&&("folderType"in r&&(E=r.folderType||""),"taskType"in r&&(E=r.taskType||""))}$.push(`${E.replace(/"/g,'""')}`)}D+=$.join(" ")+`
3
- `}return D}catch(S){console.error("Failed to copy to clipboard:",S)}},[B,be,I,j,z,Q]),ye=async()=>{const a=await ue();if(!a)return!1;const u=A.parseClipboardText(a);return u.length===0?!1:u.every(l=>l.values.every(g=>g.split(",").every(S=>de.validateEntityId(S))))},te=F.useCallback(async(a,u)=>{if(a=a||Array.from(B),!a.length)return;const l=await ne(a,{fullRow:u});if(l){if(!navigator.clipboard){A.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){A.clipboardError("Clipboard operations require a secure HTTPS context.");return}try{await navigator.clipboard.writeText(l)}catch(g){A.clipboardError(`Failed to copy to clipboard: ${g.message}`)}}},[B,j,I]),Ie=F.useCallback(async(a,u,l)=>{if(a=a||Array.from(B),!!a.length)try{const g=await ne(a,{headers:!0,fullRow:l});if(!g)return;const S=new Blob([g],{type:"text/csv"}),w=URL.createObjectURL(S),d=document.createElement("a");d.href=w;const D=a.length;d.download=`${u}-export-${D}_cells-${new Date().toISOString().slice(0,10)}.csv`,d.click(),URL.revokeObjectURL(w)}catch(g){console.error("Failed to copy to clipboard:",g)}},[B,j,I,ne]),ue=async()=>{if(!navigator.clipboard){A.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){A.clipboardError("Clipboard operations require a secure HTTPS context.");return}let a;try{return a=await navigator.clipboard.readText(),a}catch(u){A.clipboardError(`Failed to read from clipboard: ${u.message}`);return}},re=F.useCallback(async(a,u)=>{const{method:l="replace"}=u||{};if(!a.length)return;const g=await ue();if(!g)return;let S=!1,w=g;G.isSubtasksTSV(g)&&(S=!0);const d=A.parseClipboardText(g);if(!d.length)return;const D=d.length===1&&d[0].values.length===1,se=Q.map(e=>e.id).filter(e=>e!==M.ROW_SELECTION_COLUMN_ID),oe=(e,t,s)=>{const b={};return s&&s.length>0?s.forEach((c,i)=>{const h=t.find(n=>n===c||n.replace("attrib_","")===c||n===`attrib_${c}`||n.toLowerCase()===c.toLowerCase());h&&i<e.values.length&&(b[h]=e.values[i])}):t.forEach((c,i)=>{i<e.values.length&&(b[c]=e.values[i])}),b},q=d[0]?.colIds||void 0,r=new Map;Array.from(a).forEach(e=>{const t=R.parseCellId(e);if(!t)return;const{rowId:s,colId:b}=t;b===M.ROW_SELECTION_COLUMN_ID||!se.includes(b)||(r.has(s)||r.set(s,new Set),r.get(s)?.add(b))});const f=Array.from(r.keys()).sort((e,t)=>{const s=I.rowIdToIndex.get(e)??1/0,b=I.rowIdToIndex.get(t)??1/0;return s-b}),_=f[0],$=Array.from(r.get(_)||[]).sort((e,t)=>{const s=I.colIdToIndex.get(e)??1/0,b=I.colIdToIndex.get(t)??1/0;return s-b});for(let e=0;e<f.length;e++){const t=f[e],s=R.getEntityDataById(t,j)?.entityType==="folder",b=e%d.length,c=d[b],i=D?{[$[0]]:d[0].values[0]}:oe(c,$,q);for(const h of $){const n=i[h]||"";if(!Ee.validateClipboardData({colId:h,isFolder:s,pasteValue:n,parsedData:d,columnEnums:ae,columnReadOnly:pe,rowIndex:e,colIndex:$.indexOf(h),isSingleCellValue:D,attribFields:Y}))return}}const p=new Map;for(let e=0;e<$.length;e++){const t=$[e];if(t==="name")continue;if(t==="subtasks"){let i=[],h=!1;if(S){const n=w.trim().split(`
4
- `),y=n[0].toLowerCase(),N=y.includes("label")&&y.includes("name")&&y.includes("start date")&&y.includes("end date")&&y.includes("assignees")&&y.includes("status")?n.slice(1):n,v=new Map,P=[];N.forEach(O=>{const m=G.tsvToSubtasks(O);if(m.length===0)return;const C=m[0],o=`${C.taskId||""}|${C.taskName||""}`;v.has(o)||(v.set(o,[]),P.push(o)),v.get(o).push(C)}),P.forEach(O=>{const[m,C]=O.split("|");i.push({taskId:m||void 0,taskName:C||void 0,subtasks:v.get(O)||[]})}),h=i.length<=1}for(let n=0;n<f.length;n++){const y=f[n],T=R.getEntityDataById(y,j)?.entityType;if(T!=="task")continue;const N=`${y}-${T}`;p.has(N)||p.set(N,{rowId:y,id:y,type:T,fields:{},attrib:{},links:{}});const v=p.get(N),P=z(y),O=P&&"subtasks"in P&&P.subtasks||[];v.previousSubtasks=O;let m=[];if(S){if(h&&i.length>0)m=i[0].subtasks;else if(i.length>0){const o=n%i.length;m=i[o].subtasks}}else if(D){const o=d[0].values[0];m=G.tsvToSubtasks(o)}else{const o=n%d.length,k=d[o],x=e%k.values.length,V=k.values[x];m=G.tsvToSubtasks(V)}if(!m||m.length===0)continue;const C=m.map((o,k)=>({id:de.getEntityId(),name:G.sanitizeSubtaskName(o.name||o.label||`Subtask ${k+1}`),label:o.label||"",assignees:o.assignees||[],description:o.label||"",startDate:o.startDate,endDate:o.endDate,isDone:o.isDone||!1}));if(l==="merge"){const o=[...O],k=new Set(O.map(x=>{const V=(x.label||"").toLowerCase(),H=(x.name||"").toLowerCase();return`${V}|${H}`}));for(const x of C){const V=(x.label||"").toLowerCase(),H=(x.name||"").toLowerCase(),W=`${V}|${H}`;k.has(W)||o.push(x)}v.subtasks=o}else{const o=C.map(k=>{const x=O.find(V=>(V.label||"").toLowerCase()===(k.label||"").toLowerCase()&&(V.name||"").toLowerCase()===(k.name||"").toLowerCase());return{...k,id:x?.id||k.id}});v.subtasks=o}}continue}let s=!1,b=!1,c="string";if(f.length>0){const i=f[0];if(z(i))if(s=t.startsWith("attrib_"),b=t.startsWith("link_"),t==="status"||t==="subType")c="string",s=!1;else if(t==="tags"||t==="assignees")c="array";else if(s){const n=t.replace("attrib_",""),y=Y.find(T=>T.name===n);if(y)switch(y.data.type){case"boolean":c="boolean";break;case"float":case"integer":c="number";break;case"list_of_strings":case"list_of_any":case"list_of_integers":case"list_of_submodels":c="array";break;default:c="string"}}else b&&(c="array")}for(let i=0;i<f.length;i++){const h=f[i],n=R.getEntityDataById(h,j)?.entityType,y=n==="folder";let T;if(D)T=d[0].values[0];else{const m=i%d.length,C=d[m];if(C.values.length>$.length){const o=I.colIdToIndex.get($[0])??0,k=Array.from(I.colIdToIndex.keys()).filter(W=>W!==M.ROW_SELECTION_COLUMN_ID).sort((W,qe)=>{const he=I.colIdToIndex.get(W)??1/0,Ce=I.colIdToIndex.get(qe)??1/0;return he-Ce}),x=k.findIndex(W=>I.colIdToIndex.get(W)===o),H=k.slice(x,x+C.values.length).indexOf(t);T=C.values[H]||C.values[H%C.values.length]}else{const o=e%C.values.length;T=C.values[o]}}let N=t.split("_").pop()||t;if(t==="subType"&&(N=y?"folderType":"taskType",s=!1,!T))continue;const v=A.processFieldValue(T,c),P=`${h}-${n}`;!p.has(P)&&n&&p.set(P,{rowId:h,id:h,type:n,fields:{},attrib:{},links:{}});const O=p.get(P);if(b){const[m,C,o,k,x]=t.split("_");O.links[`${C}|${o}|${k}_${x}`]=v}else s?O.attrib[N]=v:O.fields[N]=v}}const E=[],L=new Map;p.forEach(e=>{Object.entries(e.fields).forEach(([t,s])=>{E.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:s})}),Object.entries(e.attrib).forEach(([t,s])=>{E.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:s,isAttrib:!0})}),Object.entries(e.links).forEach(([t,s])=>{const[b,c]=t.split("_"),i=b.split("|");if(i.length>=3){const h=i[0],n=i[1],y=i[2],T=`${h}|${n}|${y}`,N=c==="out"?y:n,v=`${e.id}-${T}-${c}`;L.set(v,{rowId:e.rowId,sourceEntityId:e.id,sourceEntityType:e.type,linkType:T,direction:c,targetEntityType:N,operation:l,targetEntityIds:Array.isArray(s)?s:[]})}})});const U=Array.from(L.values()),K=[];p.forEach(e=>{e.subtasks&&K.push({taskId:e.id,subtasks:e.subtasks,previousSubtasks:e.previousSubtasks})});const X=[];if(E.length>0&&X.push(le(E)),U.length>0&&X.push(ce(U)),K.length>0){ie&&K.forEach(({taskId:t,subtasks:s,previousSubtasks:b})=>{const c=b||[],i=s||[],h=()=>{ee({projectName:Z,taskId:t,subtasks:c}).unwrap().catch(()=>{})},n=()=>{ee({projectName:Z,taskId:t,subtasks:i}).unwrap().catch(()=>{})};ie.pushHistory([h],[n])});const e=K.map(({taskId:t,subtasks:s})=>ee({projectName:Z,taskId:t,subtasks:s}).unwrap());X.push(...e)}if(X.length>0)try{await Promise.all(X)}catch(e){console.error("Error updating entities:",e),A.clipboardError(`Paste failed: ${e||e?.message||"Unknown error"}`)}},[B,I,j,le,ce,ae,z,Q,Y,Z,ee,ie]);F.useEffect(()=>{const a=async u=>{if((u.ctrlKey||u.metaKey)&&u.key==="c"){const l=document.activeElement,g=l?.closest("table")!==null||l?.closest(".table-container")!==null||l?.tagName==="TD"||l?.tagName==="TH",S=l?.tagName==="INPUT"||l?.tagName==="TEXTAREA"||l?.isContentEditable;if((window.getSelection()?.toString().length??!1)&&!g||S&&!g)return;B.size>0&&await te()}if((u.ctrlKey||u.metaKey)&&u.key==="v"){const l=document.activeElement;if(l&&(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable))if(await ye())u.preventDefault();else return;re(Array.from(B),{method:u.shiftKey?"merge":"replace"})}};return window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}},[te,re]);const ge=F.useMemo(()=>({copyToClipboard:te,pasteFromClipboard:re,exportCSV:Ie}),[te,re]);return Te.jsxRuntimeExports.jsx(fe.Provider,{value:ge,children:J})},_e=()=>{const J=F.useContext(fe);if(J===void 0)throw new Error("useClipboard must be used within a ClipboardProvider");return J};exports.ClipboardProvider=Se;exports.useClipboard=_e;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const we=require("../../../../../_virtual/jsx-runtime.cjs.js"),F=require("react"),M=require("./SelectionCellsContext.cjs.js"),me=require("./CellEditingContext.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 xe=require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");const R=require("../utils/cellUtils.cjs.js"),Ee=require("../hooks/usePasteLinks.cjs.js");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/projectFolders.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/projectFolders/projectFolders.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");const ve=require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");const A=require("./clipboard/clipboardUtils.cjs.js"),Se=require("./clipboard/clipboardValidation.cjs.js"),G=require("./clipboard/clipboardSubtasks.cjs.js"),_e=require("./ProjectTableContext.cjs.js");require("lodash");require("react-toastify");const pe=require("../../../util/getEntityId.cjs.js");require("../../../util/pubsub.cjs.js");const be=F.createContext(void 0),Le=({children:J,entitiesMap:j,columnEnums:ce,columnReadOnly:ye,visibleColumns:Q})=>{const{selectedCells:B,gridMap:I,focusedCellId:Ie}=M.useSelectionCellsContext(),{updateEntities:ue,history:ae}=me.useCellEditing(),{pasteTableLinks:de}=Ee(),{getEntityById:K,attribFields:Y}=_e.useProjectTableContext(),{projectName:Z}=xe.useProjectContext(),[ee]=ve.useUpdateSubtasksMutation(),le=F.useCallback(async(a,u)=>{const{headers:l,fullRow:q}=u||{};try{const E=Q.map(h=>h.id).filter(h=>h!==M.ROW_SELECTION_COLUMN_ID),w=new Map;a.forEach(h=>{const r=R.parseCellId(h);if(!r)return;const{rowId:f,colId:v}=r;v===M.ROW_SELECTION_COLUMN_ID||!E.includes(v)||(w.has(f)||w.set(f,new Set),w.get(f)?.add(v))}),q&&a.filter(r=>R.parseCellId(r)?.rowId&&R.parseCellId(r)?.colId===M.ROW_SELECTION_COLUMN_ID).map(r=>R.parseCellId(r)?.rowId).forEach(r=>{w.has(r)||w.set(r,new Set),Array.from(I.colIdToIndex.keys()).forEach(v=>{w.get(r)?.add(v)})});const d=Array.from(w.keys()).sort((h,r)=>{const f=I.rowIdToIndex.get(h)??1/0,v=I.rowIdToIndex.get(r)??1/0;return f-v});let D="";const se=d[0];if(!se)return"";const oe=Array.from(w.get(se)||[]).sort((h,r)=>{const f=I.colIdToIndex.get(h)??1/0,v=I.colIdToIndex.get(r)??1/0;return f-v});if(l&&oe.length>0){const h=[];for(const r of oe){const f=r;h.push(`${f.replace(/"/g,'""')}`)}D+=h.join(" ")+`
2
+ `}for(const h of d){const r=K(h);if(!r){console.warn(`Entity not found for rowId: ${h}`);continue}const v=Array.from(w.get(h)||[]).sort((p,x)=>{const S=I.colIdToIndex.get(p)??1/0,V=I.colIdToIndex.get(x)??1/0;return S-V}).filter(p=>p!==M.ROW_SELECTION_COLUMN_ID),N=[];for(const p of v){let x="";if(p.startsWith("link_"))x=R.getLinkEntityIdsByColumnId(r.links,p);else if(p==="subtasks"){const S=R.getCellValue(r,p)||[];x=G.subtasksToTSV(S,r.id,r.name)}else{let S=R.getCellValue(r,p);if(!S){const V=Y.find(H=>H.name===p.replace("attrib_",""));V&&V.data.type==="boolean"?S=!1:V&&V.data.type.includes("list_of")&&(S=[])}x=S!=null?String(S):"",p==="name"&&(x=A.getEntityPath(r.entityId||r.id,j)),p==="subType"&&("folderType"in r&&(x=r.folderType||""),"taskType"in r&&(x=r.taskType||""))}N.push(`${x.replace(/"/g,'""')}`)}D+=N.join(" ")+`
3
+ `}return D}catch(E){console.error("Failed to copy to clipboard:",E)}},[B,Ie,I,j,K,Q]),ge=async()=>{const a=await fe();if(!a)return!1;const u=A.parseClipboardText(a);return u.length===0?!1:u.every(l=>l.values.every(q=>q.split(",").every(E=>pe.validateEntityId(E))))},te=F.useCallback(async(a,u)=>{if(a=a||Array.from(B),!a.length)return;const l=await le(a,{fullRow:u});if(l){if(!navigator.clipboard){A.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){A.clipboardError("Clipboard operations require a secure HTTPS context.");return}try{await navigator.clipboard.writeText(l)}catch(q){A.clipboardError(`Failed to copy to clipboard: ${q.message}`)}}},[B,j,I]),qe=F.useCallback(async(a,u,l)=>{if(a=a||Array.from(B),!!a.length)try{const q=await le(a,{headers:!0,fullRow:l});if(!q)return;const E=new Blob([q],{type:"text/csv"}),w=URL.createObjectURL(E),d=document.createElement("a");d.href=w;const D=a.length;d.download=`${u}-export-${D}_cells-${new Date().toISOString().slice(0,10)}.csv`,d.click(),URL.revokeObjectURL(w)}catch(q){console.error("Failed to copy to clipboard:",q)}},[B,j,I,le]),fe=async()=>{if(!navigator.clipboard){A.clipboardError("Clipboard API not supported in this browser.");return}if(!window.isSecureContext){A.clipboardError("Clipboard operations require a secure HTTPS context.");return}let a;try{return a=await navigator.clipboard.readText(),a}catch(u){A.clipboardError(`Failed to read from clipboard: ${u.message}`);return}},re=F.useCallback(async(a,u)=>{const{method:l="replace"}=u||{};if(!a.length)return;const q=await fe();if(!q)return;let E=!1,w=q;G.isSubtasksTSV(q)&&(E=!0);const d=A.parseClipboardText(q);if(!d.length)return;const D=d.length===1&&d[0].values.length===1,se=Q.map(e=>e.id).filter(e=>e!==M.ROW_SELECTION_COLUMN_ID),oe=(e,t,s)=>{const b={};return s&&s.length>0?s.forEach((c,o)=>{const g=t.find(n=>n===c||n.replace("attrib_","")===c||n===`attrib_${c}`||n.toLowerCase()===c.toLowerCase());g&&o<e.values.length&&(b[g]=e.values[o])}):t.forEach((c,o)=>{o<e.values.length&&(b[c]=e.values[o])}),b},h=d[0]?.colIds||void 0,r=new Map;Array.from(a).forEach(e=>{const t=R.parseCellId(e);if(!t)return;const{rowId:s,colId:b}=t;b===M.ROW_SELECTION_COLUMN_ID||!se.includes(b)||(r.has(s)||r.set(s,new Set),r.get(s)?.add(b))});const f=Array.from(r.keys()).sort((e,t)=>{const s=I.rowIdToIndex.get(e)??1/0,b=I.rowIdToIndex.get(t)??1/0;return s-b}),v=f[0],N=Array.from(r.get(v)||[]).sort((e,t)=>{const s=I.colIdToIndex.get(e)??1/0,b=I.colIdToIndex.get(t)??1/0;return s-b});for(let e=0;e<f.length;e++){const t=f[e],s=R.getEntityDataById(t,j)?.entityType==="folder",b=e%d.length,c=d[b],o=D?{[N[0]]:d[0].values[0]}:oe(c,N,h);for(const g of N){const n=o[g]||"";if(!Se.validateClipboardData({colId:g,isFolder:s,pasteValue:n,parsedData:d,columnEnums:ce,columnReadOnly:ye,rowIndex:e,colIndex:N.indexOf(g),isSingleCellValue:D,attribFields:Y}))return}}const p=new Map;for(let e=0;e<N.length;e++){const t=N[e];if(t==="name")continue;if(t==="subtasks"){let o=[],g=!1;if(E){const n=w.trim().split(`
4
+ `),y=n[0].toLowerCase(),O=y.includes("label")&&y.includes("name")&&y.includes("start date")&&y.includes("end date")&&y.includes("assignees")&&y.includes("status")?n.slice(1):n,$=new Map,W=[];O.forEach(P=>{const _=G.tsvToSubtasks(P);if(_.length===0)return;const C=_[0],U=`${C.taskId||""}|${C.taskName||""}`;$.has(U)||($.set(U,[]),W.push(U)),$.get(U).push(C)}),W.forEach(P=>{const[_,C]=P.split("|");o.push({taskId:_||void 0,taskName:C||void 0,subtasks:$.get(P)||[]})}),g=o.length<=1}for(let n=0;n<f.length;n++){const y=f[n],k=R.getEntityDataById(y,j)?.entityType;if(k!=="task")continue;const O=K(y),$=O?.entityId||y,W=`${y}-${k}`;p.has(W)||p.set(W,{rowId:y,id:$,type:k,fields:{},attrib:{},links:{}});const P=p.get(W),_=O&&"subtasks"in O&&O.subtasks||[];P.previousSubtasks=_;let C=[];if(E){if(g&&o.length>0)C=o[0].subtasks;else if(o.length>0){const i=n%o.length;C=o[i].subtasks}}else if(D){const i=d[0].values[0];C=G.tsvToSubtasks(i)}else{const i=n%d.length,T=d[i],m=e%T.values.length,L=T.values[m];C=G.tsvToSubtasks(L)}if(!C||C.length===0)continue;const U=C.map((i,T)=>({id:pe.getEntityId(),name:G.sanitizeSubtaskName(i.name||i.label||`Subtask ${T+1}`),label:i.label||"",assignees:i.assignees||[],description:i.label||"",startDate:i.startDate,endDate:i.endDate,isDone:i.isDone||!1}));if(l==="merge"){const i=[..._],T=new Set(_.map(m=>{const L=(m.label||"").toLowerCase(),ie=(m.name||"").toLowerCase();return`${L}|${ie}`}));for(const m of U){const L=(m.label||"").toLowerCase(),ie=(m.name||"").toLowerCase(),ne=`${L}|${ie}`;T.has(ne)||i.push(m)}P.subtasks=i}else{const i=U.map(T=>{const m=_.find(L=>(L.label||"").toLowerCase()===(T.label||"").toLowerCase()&&(L.name||"").toLowerCase()===(T.name||"").toLowerCase());return{...T,id:m?.id||T.id}});P.subtasks=i}}continue}let s=!1,b=!1,c="string";if(f.length>0){const o=f[0];if(K(o))if(s=t.startsWith("attrib_"),b=t.startsWith("link_"),t==="status"||t==="subType")c="string",s=!1;else if(t==="tags"||t==="assignees")c="array";else if(s){const n=t.replace("attrib_",""),y=Y.find(k=>k.name===n);if(y)switch(y.data.type){case"boolean":c="boolean";break;case"float":case"integer":c="number";break;case"list_of_strings":case"list_of_any":case"list_of_integers":case"list_of_submodels":c="array";break;default:c="string"}}else b&&(c="array")}for(let o=0;o<f.length;o++){const g=f[o],n=R.getEntityDataById(g,j)?.entityType,y=n==="folder";let k;if(D)k=d[0].values[0];else{const U=o%d.length,i=d[U];if(i.values.length>N.length){const T=I.colIdToIndex.get(N[0])??0,m=Array.from(I.colIdToIndex.keys()).filter(X=>X!==M.ROW_SELECTION_COLUMN_ID).sort((X,Ce)=>{const Te=I.colIdToIndex.get(X)??1/0,ke=I.colIdToIndex.get(Ce)??1/0;return Te-ke}),L=m.findIndex(X=>I.colIdToIndex.get(X)===T),ne=m.slice(L,L+i.values.length).indexOf(t);k=i.values[ne]||i.values[ne%i.values.length]}else{const T=e%i.values.length;k=i.values[T]}}let O=t.split("_").pop()||t;if(t==="subType"&&(O=y?"folderType":"taskType",s=!1,!k))continue;const $=A.processFieldValue(k,c),P=K(g)?.entityId||g,_=`${g}-${n}`;!p.has(_)&&n&&p.set(_,{rowId:g,id:P,type:n,fields:{},attrib:{},links:{}});const C=p.get(_);if(b){const[U,i,T,m,L]=t.split("_");C.links[`${i}|${T}|${m}_${L}`]=$}else s?C.attrib[O]=$:C.fields[O]=$}}const x=[],S=new Map;p.forEach(e=>{Object.entries(e.fields).forEach(([t,s])=>{x.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:s})}),Object.entries(e.attrib).forEach(([t,s])=>{x.push({rowId:e.rowId,id:e.id,type:e.type,field:t,value:s,isAttrib:!0})}),Object.entries(e.links).forEach(([t,s])=>{const[b,c]=t.split("_"),o=b.split("|");if(o.length>=3){const g=o[0],n=o[1],y=o[2],k=`${g}|${n}|${y}`,O=c==="out"?y:n,$=`${e.id}-${k}-${c}`;S.set($,{rowId:e.rowId,sourceEntityId:e.id,sourceEntityType:e.type,linkType:k,direction:c,targetEntityType:O,operation:l,targetEntityIds:Array.isArray(s)?s:[]})}})});const V=Array.from(S.values()),H=[];p.forEach(e=>{e.subtasks&&H.push({taskId:e.id,subtasks:e.subtasks,previousSubtasks:e.previousSubtasks})});const z=[];if(x.length>0&&z.push(ue(x)),V.length>0&&z.push(de(V)),H.length>0){ae&&H.forEach(({taskId:t,subtasks:s,previousSubtasks:b})=>{const c=b||[],o=s||[],g=()=>{ee({projectName:Z,taskId:t,subtasks:c}).unwrap().catch(()=>{})},n=()=>{ee({projectName:Z,taskId:t,subtasks:o}).unwrap().catch(()=>{})};ae.pushHistory([g],[n])});const e=H.map(({taskId:t,subtasks:s})=>ee({projectName:Z,taskId:t,subtasks:s}).unwrap());z.push(...e)}if(z.length>0)try{await Promise.all(z)}catch(e){console.error("Error updating entities:",e),A.clipboardError(`Paste failed: ${e||e?.message||"Unknown error"}`)}},[B,I,j,ue,de,ce,K,Q,Y,Z,ee,ae]);F.useEffect(()=>{const a=async u=>{if((u.ctrlKey||u.metaKey)&&u.key==="c"){const l=document.activeElement,q=l?.closest("table")!==null||l?.closest(".table-container")!==null||l?.tagName==="TD"||l?.tagName==="TH",E=l?.tagName==="INPUT"||l?.tagName==="TEXTAREA"||l?.isContentEditable;if((window.getSelection()?.toString().length??!1)&&!q||E&&!q)return;B.size>0&&await te()}if((u.ctrlKey||u.metaKey)&&u.key==="v"){const l=document.activeElement;if(l&&(l.tagName==="INPUT"||l.tagName==="TEXTAREA"||l.isContentEditable))if(await ge())u.preventDefault();else return;re(Array.from(B),{method:u.shiftKey?"merge":"replace"})}};return window.addEventListener("keydown",a),()=>{window.removeEventListener("keydown",a)}},[te,re]);const he=F.useMemo(()=>({copyToClipboard:te,pasteFromClipboard:re,exportCSV:qe}),[te,re]);return we.jsxRuntimeExports.jsx(be.Provider,{value:he,children:J})},Oe=()=>{const J=F.useContext(be);if(J===void 0)throw new Error("useClipboard must be used within a ClipboardProvider");return J};exports.ClipboardProvider=Le;exports.useClipboard=Oe;
5
5
  //# sourceMappingURL=ClipboardContext.cjs.js.map