@ynput/ayon-frontend-shared 0.3.55 → 0.3.56

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 (131) hide show
  1. package/dist/_virtual/index.cjs22.js +1 -1
  2. package/dist/_virtual/index.cjs23.js +1 -1
  3. package/dist/_virtual/index.cjs24.js +1 -1
  4. package/dist/_virtual/index.cjs5.js +1 -1
  5. package/dist/_virtual/index.cjs6.js +1 -1
  6. package/dist/_virtual/index.cjs8.js +1 -1
  7. package/dist/_virtual/index.es15.js +2 -2
  8. package/dist/_virtual/index.es22.js +3 -3
  9. package/dist/_virtual/index.es23.js +5 -5
  10. package/dist/_virtual/index.es24.js +5 -5
  11. package/dist/_virtual/index.es5.js +4 -4
  12. package/dist/_virtual/index.es6.js +5 -2
  13. package/dist/_virtual/index.es6.js.map +1 -1
  14. package/dist/_virtual/index.es8.js +2 -5
  15. package/dist/_virtual/index.es8.js.map +1 -1
  16. package/dist/_virtual/index.es9.js +2 -2
  17. package/dist/api.cjs.js +1 -1
  18. package/dist/api.es.js +193 -192
  19. package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
  20. package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
  21. package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
  22. package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
  23. package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
  24. package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
  25. package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
  26. package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
  27. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  28. package/dist/node_modules/remove-accents/index.cjs.js.map +1 -1
  29. package/dist/node_modules/remove-accents/index.es.js +1 -1
  30. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
  31. package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
  32. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
  33. package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
  34. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
  35. package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
  36. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
  37. package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
  38. package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
  39. package/dist/shared/node_modules/prop-types/index.cjs.js.map +1 -1
  40. package/dist/shared/node_modules/prop-types/index.es.js +1 -1
  41. package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
  42. package/dist/shared/node_modules/react-is/index.es.js +1 -1
  43. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  44. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  45. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  46. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  47. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  48. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  49. package/dist/shared/src/api/generated/graphql.cjs.js +4 -0
  50. package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
  51. package/dist/shared/src/api/generated/graphql.es.js +4 -0
  52. package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
  53. package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
  54. package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
  55. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
  56. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
  57. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +17 -16
  58. package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
  59. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
  60. package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
  61. package/dist/shared/src/api/queries/entityLists/getLists.es.js +47 -47
  62. package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
  63. package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -1
  64. package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
  65. package/dist/shared/src/api/queries/folders/getFolders.es.js +20 -22
  66. package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
  67. package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
  68. package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
  69. package/dist/shared/src/api/queries/overview/getOverview.es.js +92 -89
  70. package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
  71. package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
  72. package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
  73. package/dist/shared/src/api/queries/project/getProject.es.js +1 -1
  74. package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
  75. package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
  76. package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
  77. package/dist/shared/src/api/queries/users/getUsers.es.js +1 -1
  78. package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
  79. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
  80. package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
  81. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +23 -23
  82. package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
  83. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js +1 -1
  84. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js.map +1 -1
  85. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js +13 -13
  86. package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js.map +1 -1
  87. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
  88. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
  89. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +51 -50
  90. package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
  91. package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js +1 -1
  92. package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js.map +1 -1
  93. package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js +62 -58
  94. package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js.map +1 -1
  95. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
  96. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
  97. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +21 -20
  98. package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
  99. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
  100. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
  101. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +25 -24
  102. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
  103. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
  104. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
  105. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +20 -19
  106. package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
  107. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
  108. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
  109. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +152 -133
  110. package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
  111. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
  112. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
  113. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +75 -73
  114. package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
  115. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js +1 -1
  116. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js.map +1 -1
  117. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js +21 -19
  118. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js.map +1 -1
  119. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js +2 -2
  120. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js.map +1 -1
  121. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js +58 -43
  122. package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js.map +1 -1
  123. package/dist/types/api/generated/graphql.d.ts +5 -0
  124. package/dist/types/api/generated/graphqlLinks.d.ts +1 -0
  125. package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +1 -0
  126. package/dist/types/api/queries/overview/getOverview.d.ts +2 -1
  127. package/dist/types/containers/ProjectTreeTable/types/table.d.ts +3 -1
  128. package/dist/types/containers/ProjectTreeTable/widgets/CellWidget.d.ts +1 -0
  129. package/dist/types/containers/ProjectTreeTable/widgets/DateWidget.d.ts +1 -0
  130. package/dist/types/containers/ProjectTreeTable/widgets/DateWidgetInput.d.ts +1 -0
  131. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CellWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/CellWidget.tsx"],"sourcesContent":["import { FC, useMemo, useRef } from 'react'\nimport styled from 'styled-components'\n\n// Widgets\nimport { BooleanWidget, BooleanWidgetProps } from './BooleanWidget'\nimport { CollapsedWidget } from './CollapsedWidget'\nimport { DateWidget, DateWidgetProps } from './DateWidget'\nimport { EnumWidget, EnumWidgetProps } from './EnumWidget'\nimport { TextWidget, TextWidgetProps, TextWidgetType } from './TextWidget'\nimport { isLinkEditable, LinksWidget, LinkWidgetData } from './LinksWidget'\nimport { SubtasksWidget, SubtasksWidgetData } from './SubtasksWidget'\nimport { CommentsWidget } from './CommentsWidget'\n\n// Contexts\nimport { useCellEditing } from '../context/CellEditingContext'\n\n// Utils\nimport { getCellId } from '../utils/cellUtils'\nimport clsx from 'clsx'\nimport { useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectContext } from '@shared/context'\nimport { EnumCellValue } from './EnumCellValue'\nimport { NameWidget } from '@shared/containers/ProjectTreeTable/widgets/NameWidget'\nimport { NameWidgetData } from '@shared/components/RenameForm'\nimport { READ_ONLY } from '../utils'\nimport { AttributeData, EnumItem, type EntityComment } from '@shared/api'\n\nconst Cell = styled.div`\n position: absolute;\n inset: 0;\n padding: 4px 8px;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n &:has(.markdown),\n &:has(.comments-list) {\n align-items: flex-start;\n }\n\n &:focus-visible {\n outline: none;\n }\n\n &.inherited {\n opacity: 0.6;\n font-style: italic;\n }\n\n &.loading {\n inset: 4px;\n border-radius: 4px;\n opacity: 1;\n }\n`\n\n// use this class to trigger the editing mode on a single click\nexport const EDIT_TRIGGER_CLASS = 'edit-trigger'\n\ntype WidgetAttributeData = {\n type: AttributeData['type'] | 'links' | 'name' | 'subtasks' | 'comments'\n widget?: AttributeData['widget']\n}\n\nexport type CellValue = string | number | boolean\nexport type CellValueData = Record<string, any>\n\ninterface EditorCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n rowId: string\n columnId: string\n value: CellValue | CellValue[]\n valueData?: CellValueData | CellValueData[] // extra data for the value\n attributeData?: WidgetAttributeData\n options?: EnumItem[]\n isCollapsed?: boolean\n isInherited?: boolean\n isPlaceholder?: boolean\n isFocused?: boolean\n isReadOnly?: boolean\n enableCustomValues?: boolean\n isLinksLoading?: boolean\n folderId?: string | null\n tooltip?: string\n onChange?: (value: CellValue | CellValue[], key?: 'Enter' | 'Click' | 'Escape') => void\n // options passthrough props\n pt?: {\n enum?: Partial<EnumWidgetProps>\n text?: Partial<TextWidgetProps>\n date?: Partial<DateWidgetProps>\n boolean?: Partial<BooleanWidgetProps>\n }\n entityType?: string\n}\n\nexport interface WidgetBaseProps {\n isEditing?: boolean\n isReadOnly?: boolean\n onChange: Required<EditorCellProps>['onChange']\n onCancelEdit?: () => void\n}\n\nexport const CellWidget: FC<EditorCellProps> = ({\n rowId,\n columnId,\n value,\n valueData,\n attributeData,\n options = [],\n isCollapsed,\n isInherited,\n isPlaceholder,\n isReadOnly,\n enableCustomValues,\n isLinksLoading,\n folderId,\n tooltip,\n onChange,\n entityType,\n pt,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n const type = attributeData?.type\n\n const { projectName } = useProjectContext()\n const { isEditing, setEditingCellId, getEditingDraft, setEditingDraft } = useCellEditing()\n const { isCellFocused, gridMap, selectCell, focusCell } = useSelectionCellsContext()\n const cellId = getCellId(rowId, columnId)\n\n const isCurrentCellEditing = isEditing(cellId)\n const isCurrentCellFocused = isCellFocused(cellId)\n\n const moveToNextRow = () => {\n const rowIndex = gridMap.rowIdToIndex.get(rowId)\n if (rowIndex === undefined) {\n setEditingCellId(null)\n return\n }\n const newRowId = gridMap.indexToRowId.get(rowIndex + 1)\n if (newRowId) {\n const newCellId = getCellId(newRowId, columnId)\n selectCell(newCellId, false, false)\n focusCell(newCellId)\n setEditingCellId(newCellId)\n } else {\n setEditingCellId(null)\n }\n }\n\n const handleOnChange: WidgetBaseProps['onChange'] = (newValue, key) => {\n if (isReadOnly) {\n setEditingCellId(null)\n return\n }\n if (key === 'Enter') {\n // Move to next row first (sets new editing cell), then save value.\n // This prevents the dialog from blinking between rows.\n moveToNextRow()\n onChange?.(newValue, key)\n } else if (key === 'Click' && newValue != value) {\n setEditingCellId(null)\n onChange?.(newValue, key)\n } else {\n setEditingCellId(null)\n }\n }\n\n const handleCancel = () => {\n setEditingCellId(null)\n // ensure the browser focus moves back to the parent <td>\n const td = ref.current?.closest('td') as HTMLElement | null\n if (td) td.focus()\n }\n\n const widget = useMemo(() => {\n // Common props shared across all widgets\n const sharedProps: WidgetBaseProps = {\n onChange: handleOnChange,\n onCancelEdit: handleCancel,\n isEditing: isCurrentCellEditing,\n isReadOnly: isReadOnly,\n }\n\n const textTypes: TextWidgetType[] = ['string', 'integer', 'float']\n\n // Determine widget type based on attribute type\n switch (true) {\n // this is showing the collapsed widget (dot)\n case isCollapsed: {\n // if enum, find the first selected option and get its color\n const firstSelectedOption = type?.includes('list')\n ? options.find((option) =>\n Array.isArray(value) ? value.includes(option.value) : value === option.value,\n )\n : undefined\n const color = firstSelectedOption?.color\n return <CollapsedWidget color={color} />\n }\n case type === 'name': {\n return (\n <NameWidget\n value={value as CellValue}\n valueData={valueData as NameWidgetData}\n cellId={cellId}\n entityType={entityType || ''}\n {...sharedProps}\n />\n )\n }\n\n case type === 'links': {\n const linksValue = valueData as LinkWidgetData | undefined\n\n const isEditable = isLinkEditable(\n linksValue?.direction || 'out',\n linksValue?.link.linkType || '',\n linksValue?.entityType || '',\n )\n\n // overwrite readonly state if the cell is currently being edited\n isReadOnly = !isEditable\n return (\n <LinksWidget\n value={linksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={!isEditable}\n folderId={folderId}\n isLoading={isLinksLoading}\n {...sharedProps}\n />\n )\n }\n\n case type === 'subtasks': {\n const subtasksValue = valueData as SubtasksWidgetData | undefined\n\n return (\n <SubtasksWidget\n value={subtasksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={isReadOnly}\n {...sharedProps}\n />\n )\n }\n\n case type === 'comments': {\n return <CommentsWidget value={valueData as EntityComment[] | undefined} {...sharedProps} />\n }\n\n case !!options.length: {\n const enumValue = Array.isArray(value) ? value : [value]\n if (isReadOnly) {\n const selectedOptions = options.filter((option) => enumValue.includes(option.value))\n\n if (enumValue.length && !selectedOptions.length) {\n // value has something but it is not in options, show a placeholder\n return (\n <TextWidget\n value={enumValue.join(', ')}\n isInherited={isInherited}\n columnId={columnId}\n cellId={cellId}\n isMarkdown={attributeData?.widget === 'markdown'}\n onRequestEdit={setEditingCellId}\n getDraftValue={getEditingDraft}\n setDraftValue={setEditingDraft}\n {...sharedProps}\n {...pt?.text}\n />\n )\n }\n\n return (\n <EnumCellValue\n selectedOptions={selectedOptions}\n isReadOnly\n hasMultipleValues={enumValue.length > 1}\n isMultiSelect={type?.includes('list')}\n {...pt?.enum?.pt?.template}\n />\n )\n }\n return (\n <EnumWidget\n value={enumValue}\n options={options}\n type={type}\n onOpen={() => setEditingCellId(cellId)}\n enableCustomValues={enableCustomValues}\n {...sharedProps}\n {...pt?.enum}\n />\n )\n }\n\n case textTypes.includes(type as TextWidgetType):\n return (\n <TextWidget\n value={value as string}\n isInherited={isInherited}\n columnId={columnId}\n cellId={cellId}\n isMarkdown={\n attributeData?.widget === 'markdown' ||\n // description SHOULD be default markdown, but lets have this here just in case\n columnId === 'attrib_description' ||\n columnId === 'description'\n }\n type={type as TextWidgetType}\n onRequestEdit={setEditingCellId}\n getDraftValue={getEditingDraft}\n setDraftValue={setEditingDraft}\n {...sharedProps}\n {...pt?.text}\n />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={value ? (value as string) : undefined}\n isInherited={isInherited}\n {...sharedProps}\n {...pt?.date}\n />\n )\n\n case type === 'boolean':\n return <BooleanWidget value={value as boolean} {...sharedProps} {...pt?.boolean} />\n\n case isPlaceholder:\n return null\n\n default:\n // TODO: We should not allow editing unrecognized types\n // At this point, only list_of_strings without proper options is unrecognized\n // (tags if not tags are specified in anatomy) and in that case, validation\n // on the server fails with a string value. Unless we have a widget that\n // accepts a string value AND options at the same time we shouldn't show\n // any edit widget\n\n //console.log(`Unrecognized type \"${type}\" for cell ${cellId}.`)\n return null\n }\n }, [cellId, value, type, isCurrentCellEditing, options, isCollapsed])\n\n return (\n <Cell\n {...props}\n className={clsx(props.className, {\n inherited: isInherited && !isCurrentCellEditing,\n [READ_ONLY]: isReadOnly,\n editable: !isReadOnly,\n })}\n ref={ref}\n id={cellId}\n data-tooltip={\n tooltip ||\n (isInherited && !isCurrentCellEditing && isCurrentCellFocused ? 'Inherited' : undefined)\n }\n data-tooltip-delay={200}\n >\n {widget}\n </Cell>\n )\n}\n"],"names":["Cell","styled","EDIT_TRIGGER_CLASS","CellWidget","rowId","columnId","value","valueData","attributeData","options","isCollapsed","isInherited","isPlaceholder","isReadOnly","enableCustomValues","isLinksLoading","folderId","tooltip","onChange","entityType","pt","props","ref","useRef","type","projectName","useProjectContext","isEditing","setEditingCellId","getEditingDraft","setEditingDraft","useCellEditing","isCellFocused","gridMap","selectCell","focusCell","useSelectionCellsContext","cellId","getCellId","isCurrentCellEditing","isCurrentCellFocused","moveToNextRow","rowIndex","newRowId","newCellId","handleOnChange","newValue","key","handleCancel","td","widget","useMemo","sharedProps","textTypes","color","option","jsx","CollapsedWidget","NameWidget","linksValue","isEditable","isLinkEditable","LinksWidget","subtasksValue","SubtasksWidget","CommentsWidget","enumValue","selectedOptions","TextWidget","EnumCellValue","EnumWidget","DateWidget","BooleanWidget","clsx","READ_ONLY"],"mappings":"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"}
1
+ {"version":3,"file":"CellWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/CellWidget.tsx"],"sourcesContent":["import { FC, useMemo, useRef } from 'react'\nimport styled from 'styled-components'\n\n// Widgets\nimport { BooleanWidget, BooleanWidgetProps } from './BooleanWidget'\nimport { CollapsedWidget } from './CollapsedWidget'\nimport { DateWidget, DateWidgetProps } from './DateWidget'\nimport { EnumWidget, EnumWidgetProps } from './EnumWidget'\nimport { TextWidget, TextWidgetProps, TextWidgetType } from './TextWidget'\nimport { isLinkEditable, LinksWidget, LinkWidgetData } from './LinksWidget'\nimport { SubtasksWidget, SubtasksWidgetData } from './SubtasksWidget'\nimport { CommentsWidget } from './CommentsWidget'\n\n// Contexts\nimport { useCellEditing } from '../context/CellEditingContext'\n\n// Utils\nimport { getCellId } from '../utils/cellUtils'\nimport clsx from 'clsx'\nimport { useSelectionCellsContext } from '../context/SelectionCellsContext'\nimport { useProjectContext } from '@shared/context'\nimport { EnumCellValue } from './EnumCellValue'\nimport { NameWidget } from '@shared/containers/ProjectTreeTable/widgets/NameWidget'\nimport { NameWidgetData } from '@shared/components/RenameForm'\nimport { READ_ONLY } from '../utils'\nimport { AttributeData, EnumItem, type EntityComment } from '@shared/api'\n\nconst Cell = styled.div`\n position: absolute;\n inset: 0;\n padding: 4px 8px;\n display: flex;\n align-items: center;\n overflow: hidden;\n\n &:has(.markdown),\n &:has(.comments-list) {\n align-items: flex-start;\n }\n\n &:focus-visible {\n outline: none;\n }\n\n &.inherited {\n opacity: 0.6;\n font-style: italic;\n }\n\n &.loading {\n inset: 4px;\n border-radius: 4px;\n opacity: 1;\n }\n`\n\n// use this class to trigger the editing mode on a single click\nexport const EDIT_TRIGGER_CLASS = 'edit-trigger'\n\ntype WidgetAttributeData = {\n type: AttributeData['type'] | 'links' | 'name' | 'subtasks' | 'comments'\n widget?: AttributeData['widget']\n}\n\nexport type CellValue = string | number | boolean\nexport type CellValueData = Record<string, any>\n\ninterface EditorCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n rowId: string\n columnId: string\n value: CellValue | CellValue[]\n valueData?: CellValueData | CellValueData[] // extra data for the value\n attributeData?: WidgetAttributeData\n options?: EnumItem[]\n isCollapsed?: boolean\n isInherited?: boolean\n isPlaceholder?: boolean\n isFocused?: boolean\n isReadOnly?: boolean\n enableCustomValues?: boolean\n isLinksLoading?: boolean\n folderId?: string | null\n midnightExclusiveFields?: string[]\n tooltip?: string\n onChange?: (value: CellValue | CellValue[], key?: 'Enter' | 'Click' | 'Escape') => void\n // options passthrough props\n pt?: {\n enum?: Partial<EnumWidgetProps>\n text?: Partial<TextWidgetProps>\n date?: Partial<DateWidgetProps>\n boolean?: Partial<BooleanWidgetProps>\n }\n entityType?: string\n}\n\nexport interface WidgetBaseProps {\n isEditing?: boolean\n isReadOnly?: boolean\n onChange: Required<EditorCellProps>['onChange']\n onCancelEdit?: () => void\n}\n\nexport const CellWidget: FC<EditorCellProps> = ({\n rowId,\n columnId,\n value,\n valueData,\n attributeData,\n options = [],\n isCollapsed,\n isInherited,\n isPlaceholder,\n isReadOnly,\n enableCustomValues,\n isLinksLoading,\n folderId,\n midnightExclusiveFields,\n tooltip,\n onChange,\n entityType,\n pt,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n const type = attributeData?.type\n\n const { projectName } = useProjectContext()\n const { isEditing, setEditingCellId, getEditingDraft, setEditingDraft } = useCellEditing()\n const { isCellFocused, gridMap, selectCell, focusCell } = useSelectionCellsContext()\n const cellId = getCellId(rowId, columnId)\n const isMidnightExclusive = midnightExclusiveFields?.includes(columnId) ?? false\n\n const isCurrentCellEditing = isEditing(cellId)\n const isCurrentCellFocused = isCellFocused(cellId)\n\n const moveToNextRow = () => {\n const rowIndex = gridMap.rowIdToIndex.get(rowId)\n if (rowIndex === undefined) {\n setEditingCellId(null)\n return\n }\n const newRowId = gridMap.indexToRowId.get(rowIndex + 1)\n if (newRowId) {\n const newCellId = getCellId(newRowId, columnId)\n selectCell(newCellId, false, false)\n focusCell(newCellId)\n setEditingCellId(newCellId)\n } else {\n setEditingCellId(null)\n }\n }\n\n const handleOnChange: WidgetBaseProps['onChange'] = (newValue, key) => {\n if (isReadOnly) {\n setEditingCellId(null)\n return\n }\n if (key === 'Enter') {\n // Move to next row first (sets new editing cell), then save value.\n // This prevents the dialog from blinking between rows.\n moveToNextRow()\n onChange?.(newValue, key)\n } else if (key === 'Click' && newValue != value) {\n setEditingCellId(null)\n onChange?.(newValue, key)\n } else {\n setEditingCellId(null)\n }\n }\n\n const handleCancel = () => {\n setEditingCellId(null)\n // ensure the browser focus moves back to the parent <td>\n const td = ref.current?.closest('td') as HTMLElement | null\n if (td) td.focus()\n }\n\n const widget = useMemo(() => {\n // Common props shared across all widgets\n const sharedProps: WidgetBaseProps = {\n onChange: handleOnChange,\n onCancelEdit: handleCancel,\n isEditing: isCurrentCellEditing,\n isReadOnly: isReadOnly,\n }\n\n const textTypes: TextWidgetType[] = ['string', 'integer', 'float']\n\n // Determine widget type based on attribute type\n switch (true) {\n // this is showing the collapsed widget (dot)\n case isCollapsed: {\n // if enum, find the first selected option and get its color\n const firstSelectedOption = type?.includes('list')\n ? options.find((option) =>\n Array.isArray(value) ? value.includes(option.value) : value === option.value,\n )\n : undefined\n const color = firstSelectedOption?.color\n return <CollapsedWidget color={color} />\n }\n case type === 'name': {\n return (\n <NameWidget\n value={value as CellValue}\n valueData={valueData as NameWidgetData}\n cellId={cellId}\n entityType={entityType || ''}\n {...sharedProps}\n />\n )\n }\n\n case type === 'links': {\n const linksValue = valueData as LinkWidgetData | undefined\n\n const isEditable = isLinkEditable(\n linksValue?.direction || 'out',\n linksValue?.link.linkType || '',\n linksValue?.entityType || '',\n )\n\n // overwrite readonly state if the cell is currently being edited\n isReadOnly = !isEditable\n return (\n <LinksWidget\n value={linksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={!isEditable}\n folderId={folderId}\n isLoading={isLinksLoading}\n {...sharedProps}\n />\n )\n }\n\n case type === 'subtasks': {\n const subtasksValue = valueData as SubtasksWidgetData | undefined\n\n return (\n <SubtasksWidget\n value={subtasksValue}\n cellId={cellId}\n projectName={projectName}\n disabled={isReadOnly}\n {...sharedProps}\n />\n )\n }\n\n case type === 'comments': {\n return <CommentsWidget value={valueData as EntityComment[] | undefined} {...sharedProps} />\n }\n\n case !!options.length: {\n const enumValue = Array.isArray(value) ? value : [value]\n if (isReadOnly) {\n const selectedOptions = options.filter((option) => enumValue.includes(option.value))\n\n if (enumValue.length && !selectedOptions.length) {\n // value has something but it is not in options, show a placeholder\n return (\n <TextWidget\n value={enumValue.join(', ')}\n isInherited={isInherited}\n columnId={columnId}\n cellId={cellId}\n isMarkdown={attributeData?.widget === 'markdown'}\n onRequestEdit={setEditingCellId}\n getDraftValue={getEditingDraft}\n setDraftValue={setEditingDraft}\n {...sharedProps}\n {...pt?.text}\n />\n )\n }\n\n return (\n <EnumCellValue\n selectedOptions={selectedOptions}\n isReadOnly\n hasMultipleValues={enumValue.length > 1}\n isMultiSelect={type?.includes('list')}\n {...pt?.enum?.pt?.template}\n />\n )\n }\n return (\n <EnumWidget\n value={enumValue}\n options={options}\n type={type}\n onOpen={() => setEditingCellId(cellId)}\n enableCustomValues={enableCustomValues}\n {...sharedProps}\n {...pt?.enum}\n />\n )\n }\n\n case textTypes.includes(type as TextWidgetType):\n return (\n <TextWidget\n value={value as string}\n isInherited={isInherited}\n columnId={columnId}\n cellId={cellId}\n isMarkdown={\n attributeData?.widget === 'markdown' ||\n // description SHOULD be default markdown, but lets have this here just in case\n columnId === 'attrib_description' ||\n columnId === 'description'\n }\n type={type as TextWidgetType}\n onRequestEdit={setEditingCellId}\n getDraftValue={getEditingDraft}\n setDraftValue={setEditingDraft}\n {...sharedProps}\n {...pt?.text}\n />\n )\n\n case type === 'datetime':\n return (\n <DateWidget\n value={value ? (value as string) : undefined}\n isInherited={isInherited}\n isMidnightExclusive={isMidnightExclusive}\n {...sharedProps}\n {...pt?.date}\n />\n )\n\n case type === 'boolean':\n return <BooleanWidget value={value as boolean} {...sharedProps} {...pt?.boolean} />\n\n case isPlaceholder:\n return null\n\n default:\n // TODO: We should not allow editing unrecognized types\n // At this point, only list_of_strings without proper options is unrecognized\n // (tags if not tags are specified in anatomy) and in that case, validation\n // on the server fails with a string value. Unless we have a widget that\n // accepts a string value AND options at the same time we shouldn't show\n // any edit widget\n\n //console.log(`Unrecognized type \"${type}\" for cell ${cellId}.`)\n return null\n }\n }, [cellId, value, type, isCurrentCellEditing, options, isCollapsed, isMidnightExclusive])\n\n return (\n <Cell\n {...props}\n className={clsx(props.className, {\n inherited: isInherited && !isCurrentCellEditing,\n [READ_ONLY]: isReadOnly,\n editable: !isReadOnly,\n })}\n ref={ref}\n id={cellId}\n data-tooltip={\n tooltip ||\n (isInherited && !isCurrentCellEditing && isCurrentCellFocused ? 'Inherited' : undefined)\n }\n data-tooltip-delay={200}\n >\n {widget}\n </Cell>\n )\n}\n"],"names":["Cell","styled","EDIT_TRIGGER_CLASS","CellWidget","rowId","columnId","value","valueData","attributeData","options","isCollapsed","isInherited","isPlaceholder","isReadOnly","enableCustomValues","isLinksLoading","folderId","midnightExclusiveFields","tooltip","onChange","entityType","pt","props","ref","useRef","type","projectName","useProjectContext","isEditing","setEditingCellId","getEditingDraft","setEditingDraft","useCellEditing","isCellFocused","gridMap","selectCell","focusCell","useSelectionCellsContext","cellId","getCellId","isMidnightExclusive","isCurrentCellEditing","isCurrentCellFocused","moveToNextRow","rowIndex","newRowId","newCellId","handleOnChange","newValue","key","handleCancel","td","widget","useMemo","sharedProps","textTypes","color","option","jsx","CollapsedWidget","NameWidget","linksValue","isEditable","isLinkEditable","LinksWidget","subtasksValue","SubtasksWidget","CommentsWidget","enumValue","selectedOptions","TextWidget","EnumCellValue","EnumWidget","DateWidget","BooleanWidget","clsx","READ_ONLY"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("../../../../../_virtual/jsx-runtime.cjs.js"),f=require("date-fns"),l=require("react"),m=require("./DateWidgetInput.cjs.js"),g=require("../../../util/formatUTCDate.cjs.js"),D=l.forwardRef(({value:t,isEditing:d,isReadOnly:n,isInherited:x,onChange:c,onCancelEdit:u,showTime:a=!1,...i},y)=>{let e="";if(t)try{const r=a?"dd-MM-yyyy HH:mm:ss":"dd-MM-yyyy",o=new Date(t);e=a?f.format(o,r):g.formatUTCDate(o,r)}catch{console.error("Invalid date value:",t),e="Invalid Date"}return d?s.jsxRuntimeExports.jsx(m.DateWidgetInput,{value:t,onChange:c,onCancel:u,readOnly:n,disabled:n,...i}):s.jsxRuntimeExports.jsx("span",{...i,ref:y,style:{whiteSpace:"nowrap"},children:e})});exports.DateWidget=D;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("../../../../../_virtual/jsx-runtime.cjs.js"),c=require("date-fns"),m=require("react"),D=require("./DateWidgetInput.cjs.js"),g=require("../../../util/formatUTCDate.cjs.js"),j=m.forwardRef(({value:e,isEditing:u,isReadOnly:n,isInherited:p,onChange:y,onCancelEdit:f,showTime:a=!1,isMidnightExclusive:s=!1,...o},l)=>{let t="";if(e)try{const r=a?"dd-MM-yyyy HH:mm:ss":"dd-MM-yyyy",i=s?c.subMilliseconds(new Date(e),1):new Date(e);t=a?c.format(i,r):g.formatUTCDate(i,r)}catch{console.error("Invalid date value:",e),t="Invalid Date"}return u?d.jsxRuntimeExports.jsx(D.DateWidgetInput,{value:e,onChange:y,onCancel:f,readOnly:n,disabled:n,isMidnightExclusive:s,...o}):d.jsxRuntimeExports.jsx("span",{...o,ref:l,style:{whiteSpace:"nowrap"},children:t})});exports.DateWidget=j;
2
2
  //# sourceMappingURL=DateWidget.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidget.tsx"],"sourcesContent":["import { format } from 'date-fns'\nimport { forwardRef } from 'react'\nimport { DateWidgetInput } from './DateWidgetInput'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '../../../util/formatUTCDate'\n\nexport interface DateWidgetProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange'>,\n WidgetBaseProps {\n value?: string\n isReadOnly?: boolean\n isInherited?: boolean\n showTime?: boolean\n}\n\nexport const DateWidget = forwardRef<HTMLSpanElement, DateWidgetProps>(\n (\n {\n value,\n isEditing,\n isReadOnly,\n isInherited,\n onChange,\n onCancelEdit,\n showTime = false,\n ...props\n },\n ref,\n ) => {\n let dateString = ''\n if (value) {\n try {\n const formatString = showTime ? 'dd-MM-yyyy HH:mm:ss' : 'dd-MM-yyyy'\n const date = new Date(value)\n dateString = showTime ? format(date, formatString) : formatUTCDate(date, formatString)\n } catch (error) {\n console.error('Invalid date value:', value)\n dateString = 'Invalid Date'\n }\n }\n\n if (isEditing) {\n return (\n <DateWidgetInput\n value={value}\n onChange={onChange}\n onCancel={onCancelEdit}\n readOnly={isReadOnly}\n disabled={isReadOnly}\n {...(props as any)}\n />\n )\n }\n\n return (\n <span {...props} ref={ref} style={{ whiteSpace: 'nowrap' }}>\n {dateString}\n </span>\n )\n },\n)\n"],"names":["DateWidget","forwardRef","value","isEditing","isReadOnly","isInherited","onChange","onCancelEdit","showTime","props","ref","dateString","formatString","date","format","formatUTCDate","jsx","DateWidgetInput"],"mappings":"6QAeaA,EAAaC,EAAAA,WACxB,CACE,CACE,MAAAC,EACA,UAAAC,EACA,WAAAC,EACA,YAAAC,EACA,SAAAC,EACA,aAAAC,EACA,SAAAC,EAAW,GACX,GAAGC,CAAA,EAELC,IACG,CACH,IAAIC,EAAa,GACjB,GAAIT,EACF,GAAI,CACF,MAAMU,EAAeJ,EAAW,sBAAwB,aAClDK,EAAO,IAAI,KAAKX,CAAK,EAC3BS,EAAaH,EAAWM,EAAAA,OAAOD,EAAMD,CAAY,EAAIG,EAAAA,cAAcF,EAAMD,CAAY,CACvF,MAAgB,CACd,QAAQ,MAAM,sBAAuBV,CAAK,EAC1CS,EAAa,cACf,CAGF,OAAIR,EAEAa,EAAAA,kBAAAA,IAACC,EAAAA,gBAAA,CACC,MAAAf,EACA,SAAAI,EACA,SAAUC,EACV,SAAUH,EACV,SAAUA,EACT,GAAIK,CAAA,CAAA,EAMTO,wBAAC,OAAA,CAAM,GAAGP,EAAO,IAAAC,EAAU,MAAO,CAAE,WAAY,QAAA,EAC7C,SAAAC,CAAA,CACH,CAEJ,CACF"}
1
+ {"version":3,"file":"DateWidget.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidget.tsx"],"sourcesContent":["import { format, subMilliseconds } from 'date-fns'\nimport { forwardRef } from 'react'\nimport { DateWidgetInput } from './DateWidgetInput'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '../../../util/formatUTCDate'\n\nexport interface DateWidgetProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange'>,\n WidgetBaseProps {\n value?: string\n isReadOnly?: boolean\n isInherited?: boolean\n showTime?: boolean\n isMidnightExclusive?: boolean\n}\n\nexport const DateWidget = forwardRef<HTMLSpanElement, DateWidgetProps>(\n (\n {\n value,\n isEditing,\n isReadOnly,\n isInherited,\n onChange,\n onCancelEdit,\n showTime = false,\n isMidnightExclusive = false,\n ...props\n },\n ref,\n ) => {\n let dateString = ''\n if (value) {\n try {\n const formatString = showTime ? 'dd-MM-yyyy HH:mm:ss' : 'dd-MM-yyyy'\n const date = isMidnightExclusive ? subMilliseconds(new Date(value), 1) : new Date(value)\n dateString = showTime ? format(date, formatString) : formatUTCDate(date, formatString)\n } catch (error) {\n console.error('Invalid date value:', value)\n dateString = 'Invalid Date'\n }\n }\n\n if (isEditing) {\n return (\n <DateWidgetInput\n value={value}\n onChange={onChange}\n onCancel={onCancelEdit}\n readOnly={isReadOnly}\n disabled={isReadOnly}\n isMidnightExclusive={isMidnightExclusive}\n {...(props as any)}\n />\n )\n }\n\n return (\n <span {...props} ref={ref} style={{ whiteSpace: 'nowrap' }}>\n {dateString}\n </span>\n )\n },\n)\n"],"names":["DateWidget","forwardRef","value","isEditing","isReadOnly","isInherited","onChange","onCancelEdit","showTime","isMidnightExclusive","props","ref","dateString","formatString","date","subMilliseconds","format","formatUTCDate","jsx","DateWidgetInput"],"mappings":"6QAgBaA,EAAaC,EAAAA,WACxB,CACE,CACE,MAAAC,EACA,UAAAC,EACA,WAAAC,EACA,YAAAC,EACA,SAAAC,EACA,aAAAC,EACA,SAAAC,EAAW,GACX,oBAAAC,EAAsB,GACtB,GAAGC,CAAA,EAELC,IACG,CACH,IAAIC,EAAa,GACjB,GAAIV,EACF,GAAI,CACF,MAAMW,EAAeL,EAAW,sBAAwB,aAClDM,EAAOL,EAAsBM,EAAAA,gBAAgB,IAAI,KAAKb,CAAK,EAAG,CAAC,EAAI,IAAI,KAAKA,CAAK,EACvFU,EAAaJ,EAAWQ,EAAAA,OAAOF,EAAMD,CAAY,EAAII,EAAAA,cAAcH,EAAMD,CAAY,CACvF,MAAgB,CACd,QAAQ,MAAM,sBAAuBX,CAAK,EAC1CU,EAAa,cACf,CAGF,OAAIT,EAEAe,EAAAA,kBAAAA,IAACC,EAAAA,gBAAA,CACC,MAAAjB,EACA,SAAAI,EACA,SAAUC,EACV,SAAUH,EACV,SAAUA,EACV,oBAAAK,EACC,GAAIC,CAAA,CAAA,EAMTQ,wBAAC,OAAA,CAAM,GAAGR,EAAO,IAAAC,EAAU,MAAO,CAAE,WAAY,QAAA,EAC7C,SAAAC,CAAA,CACH,CAEJ,CACF"}
@@ -1,41 +1,43 @@
1
- import { j as d } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { format as c } from "date-fns";
3
- import { forwardRef as p } from "react";
4
- import { DateWidgetInput as l } from "./DateWidgetInput.es.js";
5
- import { formatUTCDate as x } from "../../../util/formatUTCDate.es.js";
6
- const w = p(
1
+ import { j as m } from "../../../../../_virtual/jsx-runtime.es.js";
2
+ import { subMilliseconds as p, format as l } from "date-fns";
3
+ import { forwardRef as D } from "react";
4
+ import { DateWidgetInput as j } from "./DateWidgetInput.es.js";
5
+ import { formatUTCDate as w } from "../../../util/formatUTCDate.es.js";
6
+ const h = D(
7
7
  ({
8
8
  value: t,
9
- isEditing: m,
9
+ isEditing: s,
10
10
  isReadOnly: o,
11
- isInherited: D,
11
+ isInherited: x,
12
12
  onChange: f,
13
- onCancelEdit: s,
13
+ onCancelEdit: y,
14
14
  showTime: a = !1,
15
- ...n
16
- }, y) => {
15
+ isMidnightExclusive: n = !1,
16
+ ...d
17
+ }, c) => {
17
18
  let r = "";
18
19
  if (t)
19
20
  try {
20
- const e = a ? "dd-MM-yyyy HH:mm:ss" : "dd-MM-yyyy", i = new Date(t);
21
- r = a ? c(i, e) : x(i, e);
21
+ const e = a ? "dd-MM-yyyy HH:mm:ss" : "dd-MM-yyyy", i = n ? p(new Date(t), 1) : new Date(t);
22
+ r = a ? l(i, e) : w(i, e);
22
23
  } catch {
23
24
  console.error("Invalid date value:", t), r = "Invalid Date";
24
25
  }
25
- return m ? /* @__PURE__ */ d.jsx(
26
- l,
26
+ return s ? /* @__PURE__ */ m.jsx(
27
+ j,
27
28
  {
28
29
  value: t,
29
30
  onChange: f,
30
- onCancel: s,
31
+ onCancel: y,
31
32
  readOnly: o,
32
33
  disabled: o,
33
- ...n
34
+ isMidnightExclusive: n,
35
+ ...d
34
36
  }
35
- ) : /* @__PURE__ */ d.jsx("span", { ...n, ref: y, style: { whiteSpace: "nowrap" }, children: r });
37
+ ) : /* @__PURE__ */ m.jsx("span", { ...d, ref: c, style: { whiteSpace: "nowrap" }, children: r });
36
38
  }
37
39
  );
38
40
  export {
39
- w as DateWidget
41
+ h as DateWidget
40
42
  };
41
43
  //# sourceMappingURL=DateWidget.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidget.tsx"],"sourcesContent":["import { format } from 'date-fns'\nimport { forwardRef } from 'react'\nimport { DateWidgetInput } from './DateWidgetInput'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '../../../util/formatUTCDate'\n\nexport interface DateWidgetProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange'>,\n WidgetBaseProps {\n value?: string\n isReadOnly?: boolean\n isInherited?: boolean\n showTime?: boolean\n}\n\nexport const DateWidget = forwardRef<HTMLSpanElement, DateWidgetProps>(\n (\n {\n value,\n isEditing,\n isReadOnly,\n isInherited,\n onChange,\n onCancelEdit,\n showTime = false,\n ...props\n },\n ref,\n ) => {\n let dateString = ''\n if (value) {\n try {\n const formatString = showTime ? 'dd-MM-yyyy HH:mm:ss' : 'dd-MM-yyyy'\n const date = new Date(value)\n dateString = showTime ? format(date, formatString) : formatUTCDate(date, formatString)\n } catch (error) {\n console.error('Invalid date value:', value)\n dateString = 'Invalid Date'\n }\n }\n\n if (isEditing) {\n return (\n <DateWidgetInput\n value={value}\n onChange={onChange}\n onCancel={onCancelEdit}\n readOnly={isReadOnly}\n disabled={isReadOnly}\n {...(props as any)}\n />\n )\n }\n\n return (\n <span {...props} ref={ref} style={{ whiteSpace: 'nowrap' }}>\n {dateString}\n </span>\n )\n },\n)\n"],"names":["DateWidget","forwardRef","value","isEditing","isReadOnly","isInherited","onChange","onCancelEdit","showTime","props","ref","dateString","formatString","date","format","formatUTCDate","jsx","DateWidgetInput"],"mappings":";;;;;AAeO,MAAMA,IAAaC;AAAA,EACxB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,QAAIC,IAAa;AACjB,QAAIT;AACF,UAAI;AACF,cAAMU,IAAeJ,IAAW,wBAAwB,cAClDK,IAAO,IAAI,KAAKX,CAAK;AAC3B,QAAAS,IAAaH,IAAWM,EAAOD,GAAMD,CAAY,IAAIG,EAAcF,GAAMD,CAAY;AAAA,MACvF,QAAgB;AACd,gBAAQ,MAAM,uBAAuBV,CAAK,GAC1CS,IAAa;AAAA,MACf;AAGF,WAAIR,IAEAa,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAAf;AAAA,QACA,UAAAI;AAAA,QACA,UAAUC;AAAA,QACV,UAAUH;AAAA,QACV,UAAUA;AAAA,QACT,GAAIK;AAAA,MAAA;AAAA,IAAA,IAMTO,gBAAAA,MAAC,QAAA,EAAM,GAAGP,GAAO,KAAAC,GAAU,OAAO,EAAE,YAAY,SAAA,GAC7C,UAAAC,EAAA,CACH;AAAA,EAEJ;AACF;"}
1
+ {"version":3,"file":"DateWidget.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidget.tsx"],"sourcesContent":["import { format, subMilliseconds } from 'date-fns'\nimport { forwardRef } from 'react'\nimport { DateWidgetInput } from './DateWidgetInput'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '../../../util/formatUTCDate'\n\nexport interface DateWidgetProps\n extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'onChange'>,\n WidgetBaseProps {\n value?: string\n isReadOnly?: boolean\n isInherited?: boolean\n showTime?: boolean\n isMidnightExclusive?: boolean\n}\n\nexport const DateWidget = forwardRef<HTMLSpanElement, DateWidgetProps>(\n (\n {\n value,\n isEditing,\n isReadOnly,\n isInherited,\n onChange,\n onCancelEdit,\n showTime = false,\n isMidnightExclusive = false,\n ...props\n },\n ref,\n ) => {\n let dateString = ''\n if (value) {\n try {\n const formatString = showTime ? 'dd-MM-yyyy HH:mm:ss' : 'dd-MM-yyyy'\n const date = isMidnightExclusive ? subMilliseconds(new Date(value), 1) : new Date(value)\n dateString = showTime ? format(date, formatString) : formatUTCDate(date, formatString)\n } catch (error) {\n console.error('Invalid date value:', value)\n dateString = 'Invalid Date'\n }\n }\n\n if (isEditing) {\n return (\n <DateWidgetInput\n value={value}\n onChange={onChange}\n onCancel={onCancelEdit}\n readOnly={isReadOnly}\n disabled={isReadOnly}\n isMidnightExclusive={isMidnightExclusive}\n {...(props as any)}\n />\n )\n }\n\n return (\n <span {...props} ref={ref} style={{ whiteSpace: 'nowrap' }}>\n {dateString}\n </span>\n )\n },\n)\n"],"names":["DateWidget","forwardRef","value","isEditing","isReadOnly","isInherited","onChange","onCancelEdit","showTime","isMidnightExclusive","props","ref","dateString","formatString","date","subMilliseconds","format","formatUTCDate","jsx","DateWidgetInput"],"mappings":";;;;;AAgBO,MAAMA,IAAaC;AAAA,EACxB,CACE;AAAA,IACE,OAAAC;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,qBAAAC,IAAsB;AAAA,IACtB,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,QAAIC,IAAa;AACjB,QAAIV;AACF,UAAI;AACF,cAAMW,IAAeL,IAAW,wBAAwB,cAClDM,IAAOL,IAAsBM,EAAgB,IAAI,KAAKb,CAAK,GAAG,CAAC,IAAI,IAAI,KAAKA,CAAK;AACvF,QAAAU,IAAaJ,IAAWQ,EAAOF,GAAMD,CAAY,IAAII,EAAcH,GAAMD,CAAY;AAAA,MACvF,QAAgB;AACd,gBAAQ,MAAM,uBAAuBX,CAAK,GAC1CU,IAAa;AAAA,MACf;AAGF,WAAIT,IAEAe,gBAAAA,EAAAA;AAAAA,MAACC;AAAA,MAAA;AAAA,QACC,OAAAjB;AAAA,QACA,UAAAI;AAAA,QACA,UAAUC;AAAA,QACV,UAAUH;AAAA,QACV,UAAUA;AAAA,QACV,qBAAAK;AAAA,QACC,GAAIC;AAAA,MAAA;AAAA,IAAA,IAMTQ,gBAAAA,MAAC,QAAA,EAAM,GAAGR,GAAO,KAAAC,GAAU,OAAO,EAAE,YAAY,SAAA,GAC7C,UAAAC,EAAA,CACH;AAAA,EAEJ;AACF;"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const k=require("../../../../../_virtual/jsx-runtime.cjs.js"),n=require("react"),w=require("styled-components"),o=require("date-fns"),D=require("../../../util/formatUTCDate.cjs.js"),I=w.input`
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../../../../../_virtual/jsx-runtime.cjs.js"),o=require("react"),I=require("styled-components"),r=require("date-fns"),b=require("../../../util/formatUTCDate.cjs.js"),O=I.input`
2
2
  z-index: 10;
3
3
  border: none;
4
4
  outline: none;
@@ -12,5 +12,5 @@
12
12
  background-color: transparent;
13
13
  width: 100%;
14
14
  box-sizing: border-box;
15
- `,x=n.forwardRef(({value:t,onChange:i,onCancel:f,autoFocus:d=!0,...g},O)=>{const[c,u]=n.useState(()=>{if(t){const e=o.parseISO(t);if(o.isValid(e))return D.formatUTCDate(e,"yyyy-MM-dd")}return""});n.useEffect(()=>{if(t){const e=o.parseISO(t);o.isValid(e)?u(D.formatUTCDate(e,"yyyy-MM-dd")):u("")}},[t]);const r=n.useRef(null);n.useEffect(()=>{d&&r.current&&(r.current.focus(),setTimeout(()=>{try{r.current?.showPicker()}catch(e){console.debug("Date picker could not be shown automatically:",e)}},100))},[d]);const h=e=>{e.preventDefault();try{r.current?.showPicker()}catch(s){console.debug("Date picker could not be shown on click:",s)}},l=e=>{if(c){const[s,p,y]=c.split("-").map(Number);if(s&&p&&y){const a=new Date(Date.UTC(s,p-1,y)).toISOString();if(e==="Enter")return i(a,e),!0;if(e==="Click"){const S=t?o.parseISO(t).toISOString():"";return a!==S?(i(a,e),!0):!1}}}return!1},b=()=>{l("Click")||f?.()},m=e=>{e.key==="Enter"?(e.preventDefault(),l("Enter"),r.current?.blur()):e.key==="Escape"&&(e.preventDefault(),f?.())};return k.jsxRuntimeExports.jsx(I,{...g,ref:r,type:"date",value:c,onChange:e=>u(e.target.value),onBlur:b,onKeyDown:m,onClick:h})});exports.DateWidgetInput=x;
15
+ `,C=o.forwardRef(({value:t,onChange:f,onCancel:l,autoFocus:d=!0,isMidnightExclusive:s=!1,...m},x)=>{const[u,a]=o.useState(()=>{if(t){const e=r.parseISO(t);if(r.isValid(e))return b.formatUTCDate(s?r.subMilliseconds(e,1):e,"yyyy-MM-dd")}return""});o.useEffect(()=>{if(t){const e=r.parseISO(t);r.isValid(e)?a(b.formatUTCDate(s?r.subMilliseconds(e,1):e,"yyyy-MM-dd")):a("")}},[t,s]);const n=o.useRef(null);o.useEffect(()=>{d&&n.current&&(n.current.focus(),setTimeout(()=>{try{n.current?.showPicker()}catch(e){console.debug("Date picker could not be shown automatically:",e)}},100))},[d]);const S=e=>{e.preventDefault();try{n.current?.showPicker()}catch(c){console.debug("Date picker could not be shown on click:",c)}},p=e=>{if(u){const[c,y,D]=u.split("-").map(Number);if(c&&y&&D){const i=new Date(Date.UTC(c,y-1,D+Number(s))).toISOString();if(e==="Enter")return f(i,e),!0;if(e==="Click"){const k=t?r.parseISO(t).toISOString():"";return i!==k?(f(i,e),!0):!1}}}return!1},g=()=>{p("Click")||l?.()},h=e=>{e.key==="Enter"?(e.preventDefault(),p("Enter"),n.current?.blur()):e.key==="Escape"&&(e.preventDefault(),l?.())};return w.jsxRuntimeExports.jsx(O,{...m,ref:n,type:"date",value:u,onChange:e=>a(e.target.value),onBlur:g,onKeyDown:h,onClick:S})});exports.DateWidgetInput=C;
16
16
  //# sourceMappingURL=DateWidgetInput.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateWidgetInput.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidgetInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react'\nimport styled from 'styled-components'\nimport { isValid, parseISO } from 'date-fns'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '@shared/util/formatUTCDate'\n\ninterface DateWidgetInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>,\n WidgetBaseProps {\n value: string\n onCancel?: () => void\n autoFocus?: boolean\n}\n\nconst StyledInput = styled.input`\n z-index: 10;\n border: none;\n outline: none;\n padding: 0;\n padding-left: 1px;\n margin: 0;\n cursor: text;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n background-color: transparent;\n width: 100%;\n box-sizing: border-box;\n`\n\nexport const DateWidgetInput = forwardRef<HTMLInputElement, DateWidgetInputProps>(\n ({ value: initialValue, onChange, onCancel, autoFocus = true, ...props }, _) => {\n const [value, setValue] = useState(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n return formatUTCDate(parsedDate, 'yyyy-MM-dd')\n }\n }\n return ''\n })\n\n useEffect(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n setValue(formatUTCDate(parsedDate, 'yyyy-MM-dd'))\n } else {\n setValue('')\n }\n }\n }, [initialValue])\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (autoFocus && inputRef.current) {\n inputRef.current.focus()\n // Delay showPicker call until after focus to ensure it's tied to user interaction\n setTimeout(() => {\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown automatically:', error)\n }\n }, 100)\n }\n }, [autoFocus])\n\n // Ensure the picker opens when clicked directly\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n e.preventDefault() // Prevent default to ensure our handler takes precedence\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown on click:', error)\n }\n }\n\n const handleDateSubmit = (event?: 'Click' | 'Enter') => {\n if (value) {\n const [y, m, d] = value.split('-').map(Number)\n if (y && m && d) {\n const utcDate = new Date(Date.UTC(y, m - 1, d))\n const newISOValue = utcDate.toISOString()\n\n // For Click/Blur: only save if value changed\n // For Enter: always save\n if (event === 'Enter') {\n onChange(newISOValue, event)\n return true\n } else if (event === 'Click') {\n // Check if value actually changed\n const initialDateISO = initialValue ? parseISO(initialValue).toISOString() : ''\n if (newISOValue !== initialDateISO) {\n onChange(newISOValue, event)\n return true\n }\n // Value didn't change, cancel edit\n return false\n }\n }\n }\n return false\n }\n\n const handleBlur = () => {\n if (!handleDateSubmit('Click')) {\n onCancel?.()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleDateSubmit('Enter')\n inputRef.current?.blur()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n return (\n <StyledInput\n {...props}\n ref={inputRef}\n type=\"date\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n />\n )\n },\n)\n"],"names":["StyledInput","styled","DateWidgetInput","forwardRef","initialValue","onChange","onCancel","autoFocus","props","_","value","setValue","useState","parsedDate","parseISO","isValid","formatUTCDate","useEffect","inputRef","useRef","error","handleClick","handleDateSubmit","event","y","m","d","newISOValue","initialDateISO","handleBlur","handleKeyDown","jsx"],"mappings":"sQAcMA,EAAcC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBdC,EAAkBC,EAAAA,WAC7B,CAAC,CAAE,MAAOC,EAAc,SAAAC,EAAU,SAAAC,EAAU,UAAAC,EAAY,GAAM,GAAGC,CAAA,EAASC,IAAM,CAC9E,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,IAAM,CACvC,GAAIR,EAAc,CAChB,MAAMS,EAAaC,EAAAA,SAASV,CAAY,EACxC,GAAIW,EAAAA,QAAQF,CAAU,EACpB,OAAOG,EAAAA,cAAcH,EAAY,YAAY,CAEjD,CACA,MAAO,EACT,CAAC,EAEDI,EAAAA,UAAU,IAAM,CACd,GAAIb,EAAc,CAChB,MAAMS,EAAaC,EAAAA,SAASV,CAAY,EACpCW,EAAAA,QAAQF,CAAU,EACpBF,EAASK,EAAAA,cAAcH,EAAY,YAAY,CAAC,EAEhDF,EAAS,EAAE,CAEf,CACF,EAAG,CAACP,CAAY,CAAC,EAEjB,MAAMc,EAAWC,EAAAA,OAAyB,IAAI,EAE9CF,EAAAA,UAAU,IAAM,CACVV,GAAaW,EAAS,UACxBA,EAAS,QAAQ,MAAA,EAEjB,WAAW,IAAM,CACf,GAAI,CACFA,EAAS,SAAS,WAAA,CACpB,OAASE,EAAO,CACd,QAAQ,MAAM,gDAAiDA,CAAK,CACtE,CACF,EAAG,GAAG,EAEV,EAAG,CAACb,CAAS,CAAC,EAGd,MAAMc,EAAe,GAA0C,CAC7D,EAAE,eAAA,EACF,GAAI,CACFH,EAAS,SAAS,WAAA,CACpB,OAASE,EAAO,CACd,QAAQ,MAAM,2CAA4CA,CAAK,CACjE,CACF,EAEME,EAAoBC,GAA8B,CACtD,GAAIb,EAAO,CACT,KAAM,CAACc,EAAGC,EAAGC,CAAC,EAAIhB,EAAM,MAAM,GAAG,EAAE,IAAI,MAAM,EAC7C,GAAIc,GAAKC,GAAKC,EAAG,CAEf,MAAMC,EADU,IAAI,KAAK,KAAK,IAAIH,EAAGC,EAAI,EAAGC,CAAC,CAAC,EAClB,YAAA,EAI5B,GAAIH,IAAU,QACZ,OAAAlB,EAASsB,EAAaJ,CAAK,EACpB,GACT,GAAWA,IAAU,QAAS,CAE5B,MAAMK,EAAiBxB,EAAeU,EAAAA,SAASV,CAAY,EAAE,cAAgB,GAC7E,OAAIuB,IAAgBC,GAClBvB,EAASsB,EAAaJ,CAAK,EACpB,IAGF,EACT,CACF,CACF,CACA,MAAO,EACT,EAEMM,EAAa,IAAM,CAClBP,EAAiB,OAAO,GAC3BhB,IAAA,CAEJ,EAEMwB,EAAiB,GAA6C,CAC9D,EAAE,MAAQ,SACZ,EAAE,eAAA,EACFR,EAAiB,OAAO,EACxBJ,EAAS,SAAS,KAAA,GACT,EAAE,MAAQ,WACnB,EAAE,eAAA,EACFZ,IAAA,EAEJ,EAEA,OACEyB,EAAAA,kBAAAA,IAAC/B,EAAA,CACE,GAAGQ,EACJ,IAAKU,EACL,KAAK,OACL,MAAAR,EACA,SAAW,GAAMC,EAAS,EAAE,OAAO,KAAK,EACxC,OAAQkB,EACR,UAAWC,EACX,QAAST,CAAA,CAAA,CAGf,CACF"}
1
+ {"version":3,"file":"DateWidgetInput.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidgetInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react'\nimport styled from 'styled-components'\nimport { isValid, parseISO, subMilliseconds } from 'date-fns'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '@shared/util/formatUTCDate'\n\ninterface DateWidgetInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>,\n WidgetBaseProps {\n value: string\n onCancel?: () => void\n autoFocus?: boolean\n isMidnightExclusive?: boolean\n}\n\nconst StyledInput = styled.input`\n z-index: 10;\n border: none;\n outline: none;\n padding: 0;\n padding-left: 1px;\n margin: 0;\n cursor: text;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n background-color: transparent;\n width: 100%;\n box-sizing: border-box;\n`\n\nexport const DateWidgetInput = forwardRef<HTMLInputElement, DateWidgetInputProps>(\n (\n {\n value: initialValue,\n onChange,\n onCancel,\n autoFocus = true,\n isMidnightExclusive = false,\n ...props\n },\n _,\n ) => {\n const [value, setValue] = useState(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n return formatUTCDate(\n isMidnightExclusive ? subMilliseconds(parsedDate, 1) : parsedDate,\n 'yyyy-MM-dd',\n )\n }\n }\n return ''\n })\n\n useEffect(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n setValue(\n formatUTCDate(\n isMidnightExclusive ? subMilliseconds(parsedDate, 1) : parsedDate,\n 'yyyy-MM-dd',\n ),\n )\n } else {\n setValue('')\n }\n }\n }, [initialValue, isMidnightExclusive])\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (autoFocus && inputRef.current) {\n inputRef.current.focus()\n // Delay showPicker call until after focus to ensure it's tied to user interaction\n setTimeout(() => {\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown automatically:', error)\n }\n }, 100)\n }\n }, [autoFocus])\n\n // Ensure the picker opens when clicked directly\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n e.preventDefault() // Prevent default to ensure our handler takes precedence\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown on click:', error)\n }\n }\n\n const handleDateSubmit = (event?: 'Click' | 'Enter') => {\n if (value) {\n const [y, m, d] = value.split('-').map(Number)\n if (y && m && d) {\n const utcDate = new Date(Date.UTC(y, m - 1, d + Number(isMidnightExclusive)))\n const newISOValue = utcDate.toISOString()\n\n // For Click/Blur: only save if value changed\n // For Enter: always save\n if (event === 'Enter') {\n onChange(newISOValue, event)\n return true\n } else if (event === 'Click') {\n // Check if value actually changed\n const initialDateISO = initialValue ? parseISO(initialValue).toISOString() : ''\n if (newISOValue !== initialDateISO) {\n onChange(newISOValue, event)\n return true\n }\n // Value didn't change, cancel edit\n return false\n }\n }\n }\n return false\n }\n\n const handleBlur = () => {\n if (!handleDateSubmit('Click')) {\n onCancel?.()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleDateSubmit('Enter')\n inputRef.current?.blur()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n return (\n <StyledInput\n {...props}\n ref={inputRef}\n type=\"date\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n />\n )\n },\n)\n"],"names":["StyledInput","styled","DateWidgetInput","forwardRef","initialValue","onChange","onCancel","autoFocus","isMidnightExclusive","props","_","value","setValue","useState","parsedDate","parseISO","isValid","formatUTCDate","subMilliseconds","useEffect","inputRef","useRef","error","handleClick","handleDateSubmit","event","y","m","d","newISOValue","initialDateISO","handleBlur","handleKeyDown","jsx"],"mappings":"sQAeMA,EAAcC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBdC,EAAkBC,EAAAA,WAC7B,CACE,CACE,MAAOC,EACP,SAAAC,EACA,SAAAC,EACA,UAAAC,EAAY,GACZ,oBAAAC,EAAsB,GACtB,GAAGC,CAAA,EAELC,IACG,CACH,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,IAAM,CACvC,GAAIT,EAAc,CAChB,MAAMU,EAAaC,EAAAA,SAASX,CAAY,EACxC,GAAIY,EAAAA,QAAQF,CAAU,EACpB,OAAOG,EAAAA,cACLT,EAAsBU,EAAAA,gBAAgBJ,EAAY,CAAC,EAAIA,EACvD,YAAA,CAGN,CACA,MAAO,EACT,CAAC,EAEDK,EAAAA,UAAU,IAAM,CACd,GAAIf,EAAc,CAChB,MAAMU,EAAaC,EAAAA,SAASX,CAAY,EACpCY,EAAAA,QAAQF,CAAU,EACpBF,EACEK,EAAAA,cACET,EAAsBU,EAAAA,gBAAgBJ,EAAY,CAAC,EAAIA,EACvD,YAAA,CACF,EAGFF,EAAS,EAAE,CAEf,CACF,EAAG,CAACR,EAAcI,CAAmB,CAAC,EAEtC,MAAMY,EAAWC,EAAAA,OAAyB,IAAI,EAE9CF,EAAAA,UAAU,IAAM,CACVZ,GAAaa,EAAS,UACxBA,EAAS,QAAQ,MAAA,EAEjB,WAAW,IAAM,CACf,GAAI,CACFA,EAAS,SAAS,WAAA,CACpB,OAASE,EAAO,CACd,QAAQ,MAAM,gDAAiDA,CAAK,CACtE,CACF,EAAG,GAAG,EAEV,EAAG,CAACf,CAAS,CAAC,EAGd,MAAMgB,EAAe,GAA0C,CAC7D,EAAE,eAAA,EACF,GAAI,CACFH,EAAS,SAAS,WAAA,CACpB,OAASE,EAAO,CACd,QAAQ,MAAM,2CAA4CA,CAAK,CACjE,CACF,EAEME,EAAoBC,GAA8B,CACtD,GAAId,EAAO,CACT,KAAM,CAACe,EAAGC,EAAGC,CAAC,EAAIjB,EAAM,MAAM,GAAG,EAAE,IAAI,MAAM,EAC7C,GAAIe,GAAKC,GAAKC,EAAG,CAEf,MAAMC,EADU,IAAI,KAAK,KAAK,IAAIH,EAAGC,EAAI,EAAGC,EAAI,OAAOpB,CAAmB,CAAC,CAAC,EAChD,YAAA,EAI5B,GAAIiB,IAAU,QACZ,OAAApB,EAASwB,EAAaJ,CAAK,EACpB,GACT,GAAWA,IAAU,QAAS,CAE5B,MAAMK,EAAiB1B,EAAeW,EAAAA,SAASX,CAAY,EAAE,cAAgB,GAC7E,OAAIyB,IAAgBC,GAClBzB,EAASwB,EAAaJ,CAAK,EACpB,IAGF,EACT,CACF,CACF,CACA,MAAO,EACT,EAEMM,EAAa,IAAM,CAClBP,EAAiB,OAAO,GAC3BlB,IAAA,CAEJ,EAEM0B,EAAiB,GAA6C,CAC9D,EAAE,MAAQ,SACZ,EAAE,eAAA,EACFR,EAAiB,OAAO,EACxBJ,EAAS,SAAS,KAAA,GACT,EAAE,MAAQ,WACnB,EAAE,eAAA,EACFd,IAAA,EAEJ,EAEA,OACE2B,EAAAA,kBAAAA,IAACjC,EAAA,CACE,GAAGS,EACJ,IAAKW,EACL,KAAK,OACL,MAAAT,EACA,SAAW,GAAMC,EAAS,EAAE,OAAO,KAAK,EACxC,OAAQmB,EACR,UAAWC,EACX,QAAST,CAAA,CAAA,CAGf,CACF"}
@@ -1,9 +1,9 @@
1
- import { j as S } from "../../../../../_virtual/jsx-runtime.es.js";
2
- import { forwardRef as x, useState as I, useEffect as m, useRef as E } from "react";
3
- import C from "styled-components";
4
- import { parseISO as i, isValid as y } from "date-fns";
5
- import { formatUTCDate as D } from "../../../util/formatUTCDate.es.js";
6
- const O = C.input`
1
+ import { j as x } from "../../../../../_virtual/jsx-runtime.es.js";
2
+ import { forwardRef as C, useState as O, useEffect as y, useRef as R } from "react";
3
+ import j from "styled-components";
4
+ import { parseISO as a, isValid as D, subMilliseconds as b } from "date-fns";
5
+ import { formatUTCDate as h } from "../../../util/formatUTCDate.es.js";
6
+ const z = j.input`
7
7
  z-index: 10;
8
8
  border: none;
9
9
  outline: none;
@@ -17,74 +17,89 @@ const O = C.input`
17
17
  background-color: transparent;
18
18
  width: 100%;
19
19
  box-sizing: border-box;
20
- `, K = x(
21
- ({ value: t, onChange: u, onCancel: a, autoFocus: f = !0, ...h }, M) => {
22
- const [o, s] = I(() => {
20
+ `, U = C(
21
+ ({
22
+ value: t,
23
+ onChange: f,
24
+ onCancel: i,
25
+ autoFocus: l = !0,
26
+ isMidnightExclusive: n = !1,
27
+ ...k
28
+ }, E) => {
29
+ const [s, c] = O(() => {
23
30
  if (t) {
24
- const e = i(t);
25
- if (y(e))
26
- return D(e, "yyyy-MM-dd");
31
+ const e = a(t);
32
+ if (D(e))
33
+ return h(
34
+ n ? b(e, 1) : e,
35
+ "yyyy-MM-dd"
36
+ );
27
37
  }
28
38
  return "";
29
39
  });
30
- m(() => {
40
+ y(() => {
31
41
  if (t) {
32
- const e = i(t);
33
- y(e) ? s(D(e, "yyyy-MM-dd")) : s("");
42
+ const e = a(t);
43
+ D(e) ? c(
44
+ h(
45
+ n ? b(e, 1) : e,
46
+ "yyyy-MM-dd"
47
+ )
48
+ ) : c("");
34
49
  }
35
- }, [t]);
36
- const r = E(null);
37
- m(() => {
38
- f && r.current && (r.current.focus(), setTimeout(() => {
50
+ }, [t, n]);
51
+ const r = R(null);
52
+ y(() => {
53
+ l && r.current && (r.current.focus(), setTimeout(() => {
39
54
  try {
40
55
  r.current?.showPicker();
41
56
  } catch (e) {
42
57
  console.debug("Date picker could not be shown automatically:", e);
43
58
  }
44
59
  }, 100));
45
- }, [f]);
46
- const b = (e) => {
60
+ }, [l]);
61
+ const w = (e) => {
47
62
  e.preventDefault();
48
63
  try {
49
64
  r.current?.showPicker();
50
- } catch (n) {
51
- console.debug("Date picker could not be shown on click:", n);
65
+ } catch (o) {
66
+ console.debug("Date picker could not be shown on click:", o);
52
67
  }
53
68
  }, d = (e) => {
54
- if (o) {
55
- const [n, l, p] = o.split("-").map(Number);
56
- if (n && l && p) {
57
- const c = new Date(Date.UTC(n, l - 1, p)).toISOString();
69
+ if (s) {
70
+ const [o, p, m] = s.split("-").map(Number);
71
+ if (o && p && m) {
72
+ const u = new Date(Date.UTC(o, p - 1, m + Number(n))).toISOString();
58
73
  if (e === "Enter")
59
- return u(c, e), !0;
74
+ return f(u, e), !0;
60
75
  if (e === "Click") {
61
- const w = t ? i(t).toISOString() : "";
62
- return c !== w ? (u(c, e), !0) : !1;
76
+ const I = t ? a(t).toISOString() : "";
77
+ return u !== I ? (f(u, e), !0) : !1;
63
78
  }
64
79
  }
65
80
  }
66
81
  return !1;
67
- }, g = () => {
68
- d("Click") || a?.();
69
- }, k = (e) => {
70
- e.key === "Enter" ? (e.preventDefault(), d("Enter"), r.current?.blur()) : e.key === "Escape" && (e.preventDefault(), a?.());
82
+ }, S = () => {
83
+ d("Click") || i?.();
84
+ }, g = (e) => {
85
+ e.key === "Enter" ? (e.preventDefault(), d("Enter"), r.current?.blur()) : e.key === "Escape" && (e.preventDefault(), i?.());
71
86
  };
72
- return /* @__PURE__ */ S.jsx(
73
- O,
87
+ return /* @__PURE__ */ x.jsx(
88
+ z,
74
89
  {
75
- ...h,
90
+ ...k,
76
91
  ref: r,
77
92
  type: "date",
78
- value: o,
79
- onChange: (e) => s(e.target.value),
80
- onBlur: g,
81
- onKeyDown: k,
82
- onClick: b
93
+ value: s,
94
+ onChange: (e) => c(e.target.value),
95
+ onBlur: S,
96
+ onKeyDown: g,
97
+ onClick: w
83
98
  }
84
99
  );
85
100
  }
86
101
  );
87
102
  export {
88
- K as DateWidgetInput
103
+ U as DateWidgetInput
89
104
  };
90
105
  //# sourceMappingURL=DateWidgetInput.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateWidgetInput.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidgetInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react'\nimport styled from 'styled-components'\nimport { isValid, parseISO } from 'date-fns'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '@shared/util/formatUTCDate'\n\ninterface DateWidgetInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>,\n WidgetBaseProps {\n value: string\n onCancel?: () => void\n autoFocus?: boolean\n}\n\nconst StyledInput = styled.input`\n z-index: 10;\n border: none;\n outline: none;\n padding: 0;\n padding-left: 1px;\n margin: 0;\n cursor: text;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n background-color: transparent;\n width: 100%;\n box-sizing: border-box;\n`\n\nexport const DateWidgetInput = forwardRef<HTMLInputElement, DateWidgetInputProps>(\n ({ value: initialValue, onChange, onCancel, autoFocus = true, ...props }, _) => {\n const [value, setValue] = useState(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n return formatUTCDate(parsedDate, 'yyyy-MM-dd')\n }\n }\n return ''\n })\n\n useEffect(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n setValue(formatUTCDate(parsedDate, 'yyyy-MM-dd'))\n } else {\n setValue('')\n }\n }\n }, [initialValue])\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (autoFocus && inputRef.current) {\n inputRef.current.focus()\n // Delay showPicker call until after focus to ensure it's tied to user interaction\n setTimeout(() => {\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown automatically:', error)\n }\n }, 100)\n }\n }, [autoFocus])\n\n // Ensure the picker opens when clicked directly\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n e.preventDefault() // Prevent default to ensure our handler takes precedence\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown on click:', error)\n }\n }\n\n const handleDateSubmit = (event?: 'Click' | 'Enter') => {\n if (value) {\n const [y, m, d] = value.split('-').map(Number)\n if (y && m && d) {\n const utcDate = new Date(Date.UTC(y, m - 1, d))\n const newISOValue = utcDate.toISOString()\n\n // For Click/Blur: only save if value changed\n // For Enter: always save\n if (event === 'Enter') {\n onChange(newISOValue, event)\n return true\n } else if (event === 'Click') {\n // Check if value actually changed\n const initialDateISO = initialValue ? parseISO(initialValue).toISOString() : ''\n if (newISOValue !== initialDateISO) {\n onChange(newISOValue, event)\n return true\n }\n // Value didn't change, cancel edit\n return false\n }\n }\n }\n return false\n }\n\n const handleBlur = () => {\n if (!handleDateSubmit('Click')) {\n onCancel?.()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleDateSubmit('Enter')\n inputRef.current?.blur()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n return (\n <StyledInput\n {...props}\n ref={inputRef}\n type=\"date\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n />\n )\n },\n)\n"],"names":["StyledInput","styled","DateWidgetInput","forwardRef","initialValue","onChange","onCancel","autoFocus","props","_","value","setValue","useState","parsedDate","parseISO","isValid","formatUTCDate","useEffect","inputRef","useRef","error","handleClick","handleDateSubmit","event","y","m","d","newISOValue","initialDateISO","handleBlur","handleKeyDown","jsx"],"mappings":";;;;;AAcA,MAAMA,IAAcC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgBdC,IAAkBC;AAAA,EAC7B,CAAC,EAAE,OAAOC,GAAc,UAAAC,GAAU,UAAAC,GAAU,WAAAC,IAAY,IAAM,GAAGC,EAAA,GAASC,MAAM;AAC9E,UAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAS,MAAM;AACvC,UAAIR,GAAc;AAChB,cAAMS,IAAaC,EAASV,CAAY;AACxC,YAAIW,EAAQF,CAAU;AACpB,iBAAOG,EAAcH,GAAY,YAAY;AAAA,MAEjD;AACA,aAAO;AAAA,IACT,CAAC;AAED,IAAAI,EAAU,MAAM;AACd,UAAIb,GAAc;AAChB,cAAMS,IAAaC,EAASV,CAAY;AACxC,QAAIW,EAAQF,CAAU,IACpBF,EAASK,EAAcH,GAAY,YAAY,CAAC,IAEhDF,EAAS,EAAE;AAAA,MAEf;AAAA,IACF,GAAG,CAACP,CAAY,CAAC;AAEjB,UAAMc,IAAWC,EAAyB,IAAI;AAE9C,IAAAF,EAAU,MAAM;AACd,MAAIV,KAAaW,EAAS,YACxBA,EAAS,QAAQ,MAAA,GAEjB,WAAW,MAAM;AACf,YAAI;AACF,UAAAA,EAAS,SAAS,WAAA;AAAA,QACpB,SAASE,GAAO;AACd,kBAAQ,MAAM,iDAAiDA,CAAK;AAAA,QACtE;AAAA,MACF,GAAG,GAAG;AAAA,IAEV,GAAG,CAACb,CAAS,CAAC;AAGd,UAAMc,IAAc,CAAC,MAA0C;AAC7D,QAAE,eAAA;AACF,UAAI;AACF,QAAAH,EAAS,SAAS,WAAA;AAAA,MACpB,SAASE,GAAO;AACd,gBAAQ,MAAM,4CAA4CA,CAAK;AAAA,MACjE;AAAA,IACF,GAEME,IAAmB,CAACC,MAA8B;AACtD,UAAIb,GAAO;AACT,cAAM,CAACc,GAAGC,GAAGC,CAAC,IAAIhB,EAAM,MAAM,GAAG,EAAE,IAAI,MAAM;AAC7C,YAAIc,KAAKC,KAAKC,GAAG;AAEf,gBAAMC,IADU,IAAI,KAAK,KAAK,IAAIH,GAAGC,IAAI,GAAGC,CAAC,CAAC,EAClB,YAAA;AAI5B,cAAIH,MAAU;AACZ,mBAAAlB,EAASsB,GAAaJ,CAAK,GACpB;AACT,cAAWA,MAAU,SAAS;AAE5B,kBAAMK,IAAiBxB,IAAeU,EAASV,CAAY,EAAE,gBAAgB;AAC7E,mBAAIuB,MAAgBC,KAClBvB,EAASsB,GAAaJ,CAAK,GACpB,MAGF;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAEMM,IAAa,MAAM;AACvB,MAAKP,EAAiB,OAAO,KAC3BhB,IAAA;AAAA,IAEJ,GAEMwB,IAAgB,CAAC,MAA6C;AAClE,MAAI,EAAE,QAAQ,WACZ,EAAE,eAAA,GACFR,EAAiB,OAAO,GACxBJ,EAAS,SAAS,KAAA,KACT,EAAE,QAAQ,aACnB,EAAE,eAAA,GACFZ,IAAA;AAAA,IAEJ;AAEA,WACEyB,gBAAAA,EAAAA;AAAAA,MAAC/B;AAAA,MAAA;AAAA,QACE,GAAGQ;AAAA,QACJ,KAAKU;AAAA,QACL,MAAK;AAAA,QACL,OAAAR;AAAA,QACA,UAAU,CAAC,MAAMC,EAAS,EAAE,OAAO,KAAK;AAAA,QACxC,QAAQkB;AAAA,QACR,WAAWC;AAAA,QACX,SAAST;AAAA,MAAA;AAAA,IAAA;AAAA,EAGf;AACF;"}
1
+ {"version":3,"file":"DateWidgetInput.es.js","sources":["../../../../../../src/containers/ProjectTreeTable/widgets/DateWidgetInput.tsx"],"sourcesContent":["import { forwardRef, useState, useEffect, useRef } from 'react'\nimport styled from 'styled-components'\nimport { isValid, parseISO, subMilliseconds } from 'date-fns'\nimport { WidgetBaseProps } from './CellWidget'\nimport { formatUTCDate } from '@shared/util/formatUTCDate'\n\ninterface DateWidgetInputProps\n extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'onChange'>,\n WidgetBaseProps {\n value: string\n onCancel?: () => void\n autoFocus?: boolean\n isMidnightExclusive?: boolean\n}\n\nconst StyledInput = styled.input`\n z-index: 10;\n border: none;\n outline: none;\n padding: 0;\n padding-left: 1px;\n margin: 0;\n cursor: text;\n font-size: inherit;\n font-family: inherit;\n font-weight: inherit;\n background-color: transparent;\n width: 100%;\n box-sizing: border-box;\n`\n\nexport const DateWidgetInput = forwardRef<HTMLInputElement, DateWidgetInputProps>(\n (\n {\n value: initialValue,\n onChange,\n onCancel,\n autoFocus = true,\n isMidnightExclusive = false,\n ...props\n },\n _,\n ) => {\n const [value, setValue] = useState(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n return formatUTCDate(\n isMidnightExclusive ? subMilliseconds(parsedDate, 1) : parsedDate,\n 'yyyy-MM-dd',\n )\n }\n }\n return ''\n })\n\n useEffect(() => {\n if (initialValue) {\n const parsedDate = parseISO(initialValue)\n if (isValid(parsedDate)) {\n setValue(\n formatUTCDate(\n isMidnightExclusive ? subMilliseconds(parsedDate, 1) : parsedDate,\n 'yyyy-MM-dd',\n ),\n )\n } else {\n setValue('')\n }\n }\n }, [initialValue, isMidnightExclusive])\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n useEffect(() => {\n if (autoFocus && inputRef.current) {\n inputRef.current.focus()\n // Delay showPicker call until after focus to ensure it's tied to user interaction\n setTimeout(() => {\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown automatically:', error)\n }\n }, 100)\n }\n }, [autoFocus])\n\n // Ensure the picker opens when clicked directly\n const handleClick = (e: React.MouseEvent<HTMLInputElement>) => {\n e.preventDefault() // Prevent default to ensure our handler takes precedence\n try {\n inputRef.current?.showPicker()\n } catch (error) {\n console.debug('Date picker could not be shown on click:', error)\n }\n }\n\n const handleDateSubmit = (event?: 'Click' | 'Enter') => {\n if (value) {\n const [y, m, d] = value.split('-').map(Number)\n if (y && m && d) {\n const utcDate = new Date(Date.UTC(y, m - 1, d + Number(isMidnightExclusive)))\n const newISOValue = utcDate.toISOString()\n\n // For Click/Blur: only save if value changed\n // For Enter: always save\n if (event === 'Enter') {\n onChange(newISOValue, event)\n return true\n } else if (event === 'Click') {\n // Check if value actually changed\n const initialDateISO = initialValue ? parseISO(initialValue).toISOString() : ''\n if (newISOValue !== initialDateISO) {\n onChange(newISOValue, event)\n return true\n }\n // Value didn't change, cancel edit\n return false\n }\n }\n }\n return false\n }\n\n const handleBlur = () => {\n if (!handleDateSubmit('Click')) {\n onCancel?.()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n handleDateSubmit('Enter')\n inputRef.current?.blur()\n } else if (e.key === 'Escape') {\n e.preventDefault()\n onCancel?.()\n }\n }\n\n return (\n <StyledInput\n {...props}\n ref={inputRef}\n type=\"date\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n />\n )\n },\n)\n"],"names":["StyledInput","styled","DateWidgetInput","forwardRef","initialValue","onChange","onCancel","autoFocus","isMidnightExclusive","props","_","value","setValue","useState","parsedDate","parseISO","isValid","formatUTCDate","subMilliseconds","useEffect","inputRef","useRef","error","handleClick","handleDateSubmit","event","y","m","d","newISOValue","initialDateISO","handleBlur","handleKeyDown","jsx"],"mappings":"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"}
@@ -251,6 +251,7 @@ export type EntityListNodeItemsArgs = {
251
251
  filter?: InputMaybe<Scalars['String']['input']>;
252
252
  first?: InputMaybe<Scalars['Int']['input']>;
253
253
  last?: InputMaybe<Scalars['Int']['input']>;
254
+ search?: InputMaybe<Scalars['String']['input']>;
254
255
  sortBy?: InputMaybe<Scalars['String']['input']>;
255
256
  };
256
257
  export type EntityListsConnection = {
@@ -1890,6 +1891,7 @@ export type GetDetailsPanelTaskQuery = {
1890
1891
  thumbnailId: string | null;
1891
1892
  hasReviewables: boolean;
1892
1893
  parents: Array<string>;
1894
+ data: string | null;
1893
1895
  subtasks: Array<{
1894
1896
  id: string;
1895
1897
  name: string;
@@ -2608,6 +2610,7 @@ export type GetTasksByParentQuery = {
2608
2610
  allAttrib: string;
2609
2611
  hasReviewables: boolean;
2610
2612
  parents: Array<string>;
2613
+ data: string | null;
2611
2614
  subtasks: Array<{
2612
2615
  id: string;
2613
2616
  name: string;
@@ -2680,6 +2683,7 @@ export type GetTasksListQuery = {
2680
2683
  allAttrib: string;
2681
2684
  hasReviewables: boolean;
2682
2685
  parents: Array<string>;
2686
+ data: string | null;
2683
2687
  subtasks: Array<{
2684
2688
  id: string;
2685
2689
  name: string;
@@ -2731,6 +2735,7 @@ export type TaskPropsFragmentFragment = {
2731
2735
  allAttrib: string;
2732
2736
  hasReviewables: boolean;
2733
2737
  parents: Array<string>;
2738
+ data: string | null;
2734
2739
  subtasks: Array<{
2735
2740
  id: string;
2736
2741
  name: string;
@@ -251,6 +251,7 @@ export type EntityListNodeItemsArgs = {
251
251
  filter?: InputMaybe<Scalars['String']['input']>;
252
252
  first?: InputMaybe<Scalars['Int']['input']>;
253
253
  last?: InputMaybe<Scalars['Int']['input']>;
254
+ search?: InputMaybe<Scalars['String']['input']>;
254
255
  sortBy?: InputMaybe<Scalars['String']['input']>;
255
256
  };
256
257
  export type EntityListsConnection = {
@@ -35,6 +35,7 @@ export type DetailsPanelEntityData = {
35
35
  product?: DetailsPanelProductFragmentFragment;
36
36
  version?: DetailsPanelVersionFragmentFragment;
37
37
  representations?: DetailsPanelRepresentationFragmentFragment[];
38
+ data?: Record<string, any>;
38
39
  };
39
40
  export declare const transformDetailsPanelQueriesData: ({ entity, entityType, projectName, }: TransformEntityDataArgs) => DetailsPanelEntityData;
40
41
  export {};
@@ -2,7 +2,8 @@ import { gqlApi, GetTasksByParentQuery, GetTasksListQuery, GetFolderColumnStatsQ
2
2
  import { EditorTaskNode } from '../../../containers/ProjectTreeTable';
3
3
  import { FieldStats } from '../columnStats';
4
4
  import { DefinitionsFromApi, FetchBaseQueryError, OverrideResultType } from '@reduxjs/toolkit/query';
5
- export declare const parseAllAttribs: (allAttrib: string) => any;
5
+ export declare const parseJSONField: (allAttrib: string | null | undefined) => Record<string, unknown>;
6
+ export declare const parseAllAttribs: (allAttrib: string | null | undefined) => Record<string, unknown>;
6
7
  export type GetTasksListResult = {
7
8
  pageInfo: GetTasksListQuery['project']['tasks']['pageInfo'];
8
9
  tasks: EditorTaskNode[];
@@ -59,6 +59,7 @@ export type TableRow = {
59
59
  assignees?: string[];
60
60
  author?: string;
61
61
  attrib?: Record<string, any>;
62
+ midnightExclusiveFields?: string[];
62
63
  links?: Record<string, LinkValue>;
63
64
  subtasks?: SubTaskNode[];
64
65
  latestComments?: EntityComment[];
@@ -80,7 +81,7 @@ export type MatchingFolder = FolderListItem & {
80
81
  };
81
82
  export type FolderNodeMap = Map<string, MatchingFolder>;
82
83
  type TaskNode = GetTasksByParentQuery['project']['tasks']['edges'][0]['node'];
83
- export type EditorTaskNode = Omit<TaskNode, 'links'> & {
84
+ export type EditorTaskNode = Omit<TaskNode, 'links' | 'data'> & {
84
85
  attrib: Record<string, any>;
85
86
  entityId: string;
86
87
  entityType: 'task';
@@ -90,6 +91,7 @@ export type EditorTaskNode = Omit<TaskNode, 'links'> & {
90
91
  }[];
91
92
  links: EntityLink[];
92
93
  hasVersions?: boolean;
94
+ data: Record<string, any>;
93
95
  };
94
96
  export type EditorVersionNode = {
95
97
  id: string;
@@ -26,6 +26,7 @@ interface EditorCellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'on
26
26
  enableCustomValues?: boolean;
27
27
  isLinksLoading?: boolean;
28
28
  folderId?: string | null;
29
+ midnightExclusiveFields?: string[];
29
30
  tooltip?: string;
30
31
  onChange?: (value: CellValue | CellValue[], key?: 'Enter' | 'Click' | 'Escape') => void;
31
32
  pt?: {
@@ -4,5 +4,6 @@ export interface DateWidgetProps extends Omit<React.HTMLAttributes<HTMLSpanEleme
4
4
  isReadOnly?: boolean;
5
5
  isInherited?: boolean;
6
6
  showTime?: boolean;
7
+ isMidnightExclusive?: boolean;
7
8
  }
8
9
  export declare const DateWidget: import('react').ForwardRefExoticComponent<DateWidgetProps & import('react').RefAttributes<HTMLSpanElement>>;
@@ -3,6 +3,7 @@ interface DateWidgetInputProps extends Omit<React.InputHTMLAttributes<HTMLInputE
3
3
  value: string;
4
4
  onCancel?: () => void;
5
5
  autoFocus?: boolean;
6
+ isMidnightExclusive?: boolean;
6
7
  }
7
8
  export declare const DateWidgetInput: import('react').ForwardRefExoticComponent<DateWidgetInputProps & import('react').RefAttributes<HTMLInputElement>>;
8
9
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ynput/ayon-frontend-shared",
3
- "version": "0.3.55",
3
+ "version": "0.3.56",
4
4
  "description": "Shared React components for AYON frontend",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.es.js",