@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.
- package/dist/_virtual/index.cjs22.js +1 -1
- package/dist/_virtual/index.cjs23.js +1 -1
- package/dist/_virtual/index.cjs24.js +1 -1
- package/dist/_virtual/index.cjs5.js +1 -1
- package/dist/_virtual/index.cjs6.js +1 -1
- package/dist/_virtual/index.cjs8.js +1 -1
- package/dist/_virtual/index.es15.js +2 -2
- package/dist/_virtual/index.es22.js +3 -3
- package/dist/_virtual/index.es23.js +5 -5
- package/dist/_virtual/index.es24.js +5 -5
- package/dist/_virtual/index.es5.js +4 -4
- package/dist/_virtual/index.es6.js +5 -2
- package/dist/_virtual/index.es6.js.map +1 -1
- package/dist/_virtual/index.es8.js +2 -5
- package/dist/_virtual/index.es8.js.map +1 -1
- package/dist/_virtual/index.es9.js +2 -2
- package/dist/api.cjs.js +1 -1
- package/dist/api.es.js +193 -192
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.cjs.js +1 -1
- package/dist/node_modules/match-sorter/dist/match-sorter.esm.es.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js +1 -1
- package/dist/node_modules/remove-accents/index.cjs.js.map +1 -1
- package/dist/node_modules/remove-accents/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/error-codes/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/index.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/runtime-core/dist/utils/semver/utils.es.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/utils.cjs.js +1 -1
- package/dist/shared/node_modules/@module-federation/sdk/dist/utils.es.js +1 -1
- package/dist/shared/node_modules/prop-types/index.cjs.js +1 -1
- package/dist/shared/node_modules/prop-types/index.cjs.js.map +1 -1
- package/dist/shared/node_modules/prop-types/index.es.js +1 -1
- package/dist/shared/node_modules/react-is/index.cjs.js +1 -1
- package/dist/shared/node_modules/react-is/index.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
- package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
- package/dist/shared/src/api/generated/graphql.cjs.js +4 -0
- package/dist/shared/src/api/generated/graphql.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphql.es.js +4 -0
- package/dist/shared/src/api/generated/graphql.es.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.cjs.js.map +1 -1
- package/dist/shared/src/api/generated/graphqlLinks.es.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js +17 -16
- package/dist/shared/src/api/queries/entities/transformDetailsPanelData.es.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entityLists/getLists.es.js +47 -47
- package/dist/shared/src/api/queries/entityLists/getLists.es.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/folders/getFolders.es.js +20 -22
- package/dist/shared/src/api/queries/folders/getFolders.es.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/overview/getOverview.es.js +92 -89
- package/dist/shared/src/api/queries/overview/getOverview.es.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.cjs.js +1 -1
- package/dist/shared/src/api/queries/project/getProject.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/project/getProject.es.js +1 -1
- package/dist/shared/src/api/queries/project/getProject.es.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js +1 -1
- package/dist/shared/src/api/queries/users/getUsers.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js +1 -1
- package/dist/shared/src/api/queries/users/getUsers.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js +23 -23
- package/dist/shared/src/api/queries/versions/getVersionsProducts.es.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js +13 -13
- package/dist/shared/src/api/queries/versions/getVersionsProductsUtils.es.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js +3 -3
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.cjs.js.map +1 -1
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js +51 -50
- package/dist/shared/src/components/DetailsPanelAttributes/components/RenderFieldWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js +1 -1
- package/dist/shared/src/containers/ListTable/ListTableWidgets.cjs.js.map +1 -1
- package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js +62 -58
- package/dist/shared/src/containers/ListTable/ListTableWidgets.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js +21 -20
- package/dist/shared/src/containers/ProjectTreeTable/buildTreeTableColumns.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js +25 -24
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildGroupByTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js +20 -19
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useBuildProjectDataTable.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js +152 -133
- package/dist/shared/src/containers/ProjectTreeTable/hooks/useUpdateTableData.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js +75 -73
- package/dist/shared/src/containers/ProjectTreeTable/widgets/CellWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js +21 -19
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidget.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js +2 -2
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js +58 -43
- package/dist/shared/src/containers/ProjectTreeTable/widgets/DateWidgetInput.es.js.map +1 -1
- package/dist/types/api/generated/graphql.d.ts +5 -0
- package/dist/types/api/generated/graphqlLinks.d.ts +1 -0
- package/dist/types/api/queries/entities/transformDetailsPanelData.d.ts +1 -0
- package/dist/types/api/queries/overview/getOverview.d.ts +2 -1
- package/dist/types/containers/ProjectTreeTable/types/table.d.ts +3 -1
- package/dist/types/containers/ProjectTreeTable/widgets/CellWidget.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/widgets/DateWidget.d.ts +1 -0
- package/dist/types/containers/ProjectTreeTable/widgets/DateWidgetInput.d.ts +1 -0
- 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
|
|
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":"
|
|
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
|
|
2
|
-
import { format as
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import { DateWidgetInput as
|
|
5
|
-
import { formatUTCDate as
|
|
6
|
-
const
|
|
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:
|
|
9
|
+
isEditing: s,
|
|
10
10
|
isReadOnly: o,
|
|
11
|
-
isInherited:
|
|
11
|
+
isInherited: x,
|
|
12
12
|
onChange: f,
|
|
13
|
-
onCancelEdit:
|
|
13
|
+
onCancelEdit: y,
|
|
14
14
|
showTime: a = !1,
|
|
15
|
-
|
|
16
|
-
|
|
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 ?
|
|
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
|
|
26
|
-
|
|
26
|
+
return s ? /* @__PURE__ */ m.jsx(
|
|
27
|
+
j,
|
|
27
28
|
{
|
|
28
29
|
value: t,
|
|
29
30
|
onChange: f,
|
|
30
|
-
onCancel:
|
|
31
|
+
onCancel: y,
|
|
31
32
|
readOnly: o,
|
|
32
33
|
disabled: o,
|
|
33
|
-
|
|
34
|
+
isMidnightExclusive: n,
|
|
35
|
+
...d
|
|
34
36
|
}
|
|
35
|
-
) : /* @__PURE__ */
|
|
37
|
+
) : /* @__PURE__ */ m.jsx("span", { ...d, ref: c, style: { whiteSpace: "nowrap" }, children: r });
|
|
36
38
|
}
|
|
37
39
|
);
|
|
38
40
|
export {
|
|
39
|
-
|
|
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":";;;;;
|
|
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
|
|
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
|
-
`,
|
|
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 ({
|
|
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
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import
|
|
4
|
-
import { parseISO as
|
|
5
|
-
import { formatUTCDate as
|
|
6
|
-
const
|
|
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
|
-
`,
|
|
21
|
-
({
|
|
22
|
-
|
|
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 =
|
|
25
|
-
if (
|
|
26
|
-
return
|
|
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
|
-
|
|
40
|
+
y(() => {
|
|
31
41
|
if (t) {
|
|
32
|
-
const e =
|
|
33
|
-
|
|
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 =
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
}, [
|
|
46
|
-
const
|
|
60
|
+
}, [l]);
|
|
61
|
+
const w = (e) => {
|
|
47
62
|
e.preventDefault();
|
|
48
63
|
try {
|
|
49
64
|
r.current?.showPicker();
|
|
50
|
-
} catch (
|
|
51
|
-
console.debug("Date picker could not be shown on click:",
|
|
65
|
+
} catch (o) {
|
|
66
|
+
console.debug("Date picker could not be shown on click:", o);
|
|
52
67
|
}
|
|
53
68
|
}, d = (e) => {
|
|
54
|
-
if (
|
|
55
|
-
const [
|
|
56
|
-
if (
|
|
57
|
-
const
|
|
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
|
|
74
|
+
return f(u, e), !0;
|
|
60
75
|
if (e === "Click") {
|
|
61
|
-
const
|
|
62
|
-
return
|
|
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
|
-
},
|
|
68
|
-
d("Click") ||
|
|
69
|
-
},
|
|
70
|
-
e.key === "Enter" ? (e.preventDefault(), d("Enter"), r.current?.blur()) : e.key === "Escape" && (e.preventDefault(),
|
|
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__ */
|
|
73
|
-
|
|
87
|
+
return /* @__PURE__ */ x.jsx(
|
|
88
|
+
z,
|
|
74
89
|
{
|
|
75
|
-
...
|
|
90
|
+
...k,
|
|
76
91
|
ref: r,
|
|
77
92
|
type: "date",
|
|
78
|
-
value:
|
|
79
|
-
onChange: (e) =>
|
|
80
|
-
onBlur:
|
|
81
|
-
onKeyDown:
|
|
82
|
-
onClick:
|
|
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
|
-
|
|
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 ({
|
|
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
|
|
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 {};
|