@owp/core 2.3.1 → 2.4.0
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/index10.js +2 -2
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index16.js +5 -2
- package/dist/_virtual/index16.js.map +1 -1
- package/dist/_virtual/index17.js +2 -2
- package/dist/_virtual/index5.js +2 -5
- package/dist/_virtual/index5.js.map +1 -1
- package/dist/_virtual/index6.js +2 -2
- package/dist/_virtual/index7.js +2 -2
- package/dist/components/OwpLayout/OwpLayout.js +39 -39
- package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +169 -148
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -1
- package/dist/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.js +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridOverlayFrame.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +84 -0
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +114 -103
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/utils/perf.js.map +1 -0
- package/dist/layout/Layout.js +24 -24
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/themeLayouts.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/.pnpm/react-imask@7.6.1_react@19.2.4/node_modules/react-imask/esm/mixin.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +7 -1
- package/dist/types/components/OwpTreeGrid/index.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +60 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +7 -2
- package/dist/types/layout/Layout.d.ts +2 -0
- package/dist/types/layout/themeLayouts.d.ts +2 -0
- package/package.json +2 -2
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +0 -1
- package/dist/components/OwpTreeGrid/utils/perf.js.map +0 -1
- /package/dist/components/OwpTreeGrid/{utils → internal/utils}/perf.js +0 -0
- /package/dist/types/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.d.ts +0 -0
- /package/dist/types/components/OwpTreeGrid/{utils → internal/utils}/perf.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./internal/utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './internal/utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\nimport {\n createTreeGridColumnEditRulesState,\n resolveTreeGridColumnEditRuleLookup,\n syncTreeGridColumnEditRules,\n} from './internal/treeGridColumnEditRules';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\nexport type OwpTreeGridColumnEditPreset = 'hourMinute';\n\nexport interface OwpTreeGridColumnEditRule {\n columns: readonly string[];\n preset: OwpTreeGridColumnEditPreset;\n}\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n columnEditRules?: readonly OwpTreeGridColumnEditRule[];\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n columnEditRules,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n columnEditRules,\n );\n const latestColumnEditRuleLookupRef = useRef(\n resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n }),\n );\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const appliedColumnEditRulesRef = useRef<readonly OwpTreeGridColumnEditRule[] | undefined>(\n undefined,\n );\n const columnEditRulesStateRef = useRef(createTreeGridColumnEditRulesState());\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n latestColumnEditRulesRef.current = columnEditRules;\n latestColumnEditRuleLookupRef.current = resolveTreeGridColumnEditRuleLookup(columnEditRules, {\n hourMinuteInvalidText: t('Message.시간은 HH:mm 형식으로 입력해주세요.'),\n });\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n latestColumnEditRulesRef,\n latestColumnEditRuleLookupRef,\n appliedColumnEditRulesRef,\n columnEditRulesStateRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n const nextColumnEditRules = latestColumnEditRulesRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n const shouldApplyColumnEditRules =\n appliedColumnEditRulesRef.current !== nextColumnEditRules &&\n !isEqual(appliedColumnEditRulesRef.current, nextColumnEditRules);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData && !shouldApplyColumnEditRules) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n\n if (shouldApplyColumnEditRules) {\n syncTreeGridColumnEditRules(\n treeGrid,\n latestColumnEditRuleLookupRef.current,\n columnEditRulesStateRef.current,\n );\n appliedColumnEditRulesRef.current = nextColumnEditRules;\n }\n }, [isTreeGridReady, layoutOverrides, data, columnEditRules, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","nextColumnEditRules","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","shouldApplyColumnEditRules","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","syncTreeGridColumnEditRules","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ var r = Object.defineProperty;
|
|
|
2
2
|
var i = (e, t) => r(e, "name", { value: t, configurable: !0 });
|
|
3
3
|
import { jsx as n } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import o from "@mui/material/CircularProgress";
|
|
5
|
-
import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "
|
|
5
|
+
import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "./hooks/useOwpTreeGridOverlayFrame.js";
|
|
6
6
|
const c = /* @__PURE__ */ i(({ visible: e, overlayFrame: t }) => e ? /* @__PURE__ */ n(
|
|
7
7
|
"div",
|
|
8
8
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGridLoadingOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n} from '
|
|
1
|
+
{"version":3,"file":"OwpTreeGridLoadingOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n} from './hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridLoadingOverlayProps = {\n visible: boolean;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid loading overlay\n */\nconst OwpTreeGridLoadingOverlay = ({ visible, overlayFrame }: OwpTreeGridLoadingOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <CircularProgress color=\"secondary\" size={44} thickness={3.6} />\n </div>\n );\n};\n\nexport { OwpTreeGridLoadingOverlay };\n"],"names":["OwpTreeGridLoadingOverlay","__name","visible","overlayFrame","jsx","TREE_GRID_LOADING_OVERLAY_Z_INDEX","CircularProgress"],"mappings":";;;;;AAcA,MAAMA,IAA4B,gBAAAC,EAAA,CAAC,EAAE,SAAAC,GAAS,cAAAC,QACvCD,IAKH,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,4BAACC,GAAA,EAAiB,OAAM,aAAY,MAAM,IAAI,WAAW,IAAA,CAAK;AAAA,EAAA;AAAA,IAnBzD,MAFuB;"}
|
|
@@ -2,7 +2,7 @@ var r = Object.defineProperty;
|
|
|
2
2
|
var n = (e, i) => r(e, "name", { value: i, configurable: !0 });
|
|
3
3
|
import { jsx as o } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import p from "@mui/material/Typography";
|
|
5
|
-
import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "
|
|
5
|
+
import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "./hooks/useOwpTreeGridOverlayFrame.js";
|
|
6
6
|
const c = /* @__PURE__ */ n(({
|
|
7
7
|
visible: e,
|
|
8
8
|
message: i,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGridNoDataOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n} from '
|
|
1
|
+
{"version":3,"file":"OwpTreeGridNoDataOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n} from './hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridNoDataOverlayProps = {\n visible: boolean;\n message: string;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid no-data overlay\n * @param visible overlay visibility\n * @param message no-data message\n * @param overlayFrame overlay frame\n */\nconst OwpTreeGridNoDataOverlay = ({\n visible,\n message,\n overlayFrame,\n}: OwpTreeGridNoDataOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <Typography\n sx={{\n color: '#111112',\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: '0.04em',\n }}\n >\n {message}\n </Typography>\n </div>\n );\n};\n\nexport { OwpTreeGridNoDataOverlay };\n"],"names":["OwpTreeGridNoDataOverlay","__name","visible","message","overlayFrame","jsx","TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","Typography"],"mappings":";;;;;AAkBA,MAAMA,IAA2B,gBAAAC,EAAA,CAAC;AAAA,EAChC,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AACF,MACOF,IAKH,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAe;AAAA,QAAA;AAAA,QAGhB,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA,IA7BK,MANsB;"}
|
|
@@ -2,7 +2,7 @@ var A = Object.defineProperty;
|
|
|
2
2
|
var l = (i, o) => A(i, "name", { value: o, configurable: !0 });
|
|
3
3
|
import { useState as g, useLayoutEffect as _ } from "react";
|
|
4
4
|
import { countTreeGridPerf as O, isTreeGridPerfEnabled as b, getTreeGridPerfTimestamp as F, measureTreeGridPerf as G } from "../utils/perf.js";
|
|
5
|
-
import { isEqual as L } from "
|
|
5
|
+
import { isEqual as L } from "../../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
|
|
6
6
|
const N = 2147483646, P = 2147483647, R = /* @__PURE__ */ l((i, o) => {
|
|
7
7
|
const r = (o == null ? void 0 : o.MainTag) ?? i, a = Array.from(
|
|
8
8
|
r.querySelectorAll("table.TSMainTable")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwpTreeGridOverlayFrame.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridOverlayFrame.ts"],"sourcesContent":["import { isEqual } from 'es-toolkit/compat';\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n// Temporary TreeGrid perf instrumentation import. Remove with ../utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n isTreeGridPerfEnabled,\n measureTreeGridPerf,\n} from '../utils/perf';\n\nexport type OwpTreeGridOverlayFrame = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\ntype UseOwpTreeGridOverlayFrameInput = {\n visible: boolean;\n containerRef: RefObject<HTMLDivElement | null>;\n treeGridInstanceRef: RefObject<TGrid>;\n debugId?: string;\n};\n\nexport const TREE_GRID_NO_DATA_OVERLAY_Z_INDEX = 2147483646;\nexport const TREE_GRID_LOADING_OVERLAY_Z_INDEX = 2147483647;\n\nconst getTreeGridMainTableElement = (containerElement: HTMLDivElement, grid: TGrid | null) => {\n const mainTagElement = grid?.MainTag as HTMLElement | null | undefined;\n const scopedRootElement = mainTagElement ?? containerElement;\n const mainTableElements = Array.from(\n scopedRootElement.querySelectorAll<HTMLTableElement>('table.TSMainTable'),\n );\n\n const tableElements =\n mainTableElements.length > 0\n ? mainTableElements\n : Array.from(scopedRootElement.querySelectorAll<HTMLTableElement>('table'));\n\n return tableElements.reduce<HTMLTableElement | null>((largestTableElement, tableElement) => {\n const tableRect = tableElement.getBoundingClientRect();\n const largestTableRect = largestTableElement?.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return largestTableElement;\n }\n\n if (!largestTableRect) {\n return tableElement;\n }\n\n return tableRect.width * tableRect.height > largestTableRect.width * largestTableRect.height\n ? tableElement\n : largestTableElement;\n }, null);\n};\n\nconst getTreeGridOverlayFrame = (\n containerElement: HTMLDivElement,\n grid: TGrid | null,\n): OwpTreeGridOverlayFrame => {\n const containerRect = containerElement.getBoundingClientRect();\n const fallbackWidth = containerElement.clientWidth || containerRect.width;\n const fallbackHeight = containerElement.clientHeight || containerRect.height;\n const mainTableElement = getTreeGridMainTableElement(containerElement, grid);\n\n if (!mainTableElement) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n const tableRect = mainTableElement.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n return {\n left: tableRect.left - containerRect.left,\n top: tableRect.top - containerRect.top,\n width: tableRect.width,\n height: tableRect.height,\n };\n};\n\n/**\n * TreeGrid overlay frame hook\n * @param visible overlay visibility\n * @param containerRef TreeGrid container ref\n * @param treeGridInstanceRef TreeGrid instance ref\n */\nconst useOwpTreeGridOverlayFrame = ({\n visible,\n containerRef,\n treeGridInstanceRef,\n debugId,\n}: UseOwpTreeGridOverlayFrameInput) => {\n const [overlayFrame, setOverlayFrame] = useState<OwpTreeGridOverlayFrame>({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n\n useLayoutEffect(() => {\n if (!visible) {\n return;\n }\n\n const containerElement = containerRef.current;\n\n if (!containerElement) {\n return;\n }\n\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n let observedMainTableElement: HTMLTableElement | null = null;\n const scrollListenerOptions = { capture: true } as const;\n\n const syncObservedMainTableElement = (nextMainTableElement: HTMLTableElement | null) => {\n if (!resizeObserver || observedMainTableElement === nextMainTableElement) {\n observedMainTableElement = nextMainTableElement;\n return;\n }\n\n if (observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n observedMainTableElement = nextMainTableElement;\n\n if (observedMainTableElement) {\n resizeObserver.observe(observedMainTableElement);\n }\n };\n\n const updateOverlayFrame = () => {\n const startedAt =\n debugId && isTreeGridPerfEnabled() ? getTreeGridPerfTimestamp() : null;\n const treeGrid = treeGridInstanceRef.current;\n const mainTableElement = getTreeGridMainTableElement(containerElement, treeGrid);\n const nextOverlayFrame = getTreeGridOverlayFrame(containerElement, treeGrid);\n\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay update');\n }\n\n syncObservedMainTableElement(mainTableElement);\n\n setOverlayFrame((currentOverlayFrame) =>\n isEqual(currentOverlayFrame, nextOverlayFrame) ? currentOverlayFrame : nextOverlayFrame,\n );\n\n if (debugId) {\n measureTreeGridPerf(debugId, 'overlay update end', startedAt);\n }\n };\n\n const scheduleOverlayFrameUpdate = () => {\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay schedule');\n }\n\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n animationFrameId = window.requestAnimationFrame(() => {\n animationFrameId = undefined;\n updateOverlayFrame();\n });\n };\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(scheduleOverlayFrameUpdate);\n resizeObserver.observe(containerElement);\n }\n\n const mutationObserver = new MutationObserver(scheduleOverlayFrameUpdate);\n mutationObserver.observe(containerElement, { childList: true, subtree: true });\n window.addEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.addEventListener('scroll', scheduleOverlayFrameUpdate, scrollListenerOptions);\n updateOverlayFrame();\n\n return () => {\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n window.removeEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.removeEventListener(\n 'scroll',\n scheduleOverlayFrameUpdate,\n scrollListenerOptions,\n );\n mutationObserver.disconnect();\n\n if (resizeObserver && observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n resizeObserver?.disconnect();\n };\n }, [containerRef, treeGridInstanceRef, visible, debugId]);\n\n return overlayFrame;\n};\n\nexport { useOwpTreeGridOverlayFrame };\n"],"names":["TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","TREE_GRID_LOADING_OVERLAY_Z_INDEX","getTreeGridMainTableElement","__name","containerElement","grid","scopedRootElement","mainTableElements","largestTableElement","tableElement","tableRect","largestTableRect","getTreeGridOverlayFrame","containerRect","fallbackWidth","fallbackHeight","mainTableElement","useOwpTreeGridOverlayFrame","visible","containerRef","treeGridInstanceRef","debugId","overlayFrame","setOverlayFrame","useState","useLayoutEffect","animationFrameId","resizeObserver","observedMainTableElement","scrollListenerOptions","syncObservedMainTableElement","nextMainTableElement","updateOverlayFrame","startedAt","isTreeGridPerfEnabled","getTreeGridPerfTimestamp","treeGrid","nextOverlayFrame","countTreeGridPerf","currentOverlayFrame","isEqual","measureTreeGridPerf","scheduleOverlayFrameUpdate","mutationObserver"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
var E = Object.defineProperty;
|
|
2
|
+
var o = (t, i) => E(t, "name", { value: i, configurable: !0 });
|
|
3
|
+
import { normalizeTimeToHourMinute as M, formatTimeInputToHourMinute as f } from "../../../utils/normalizeTimeToHourMinute.js";
|
|
4
|
+
const C = "^$|^[\\d:]*$", R = /* @__PURE__ */ o(function(t, i) {
|
|
5
|
+
var r, d;
|
|
6
|
+
const e = f(t, i);
|
|
7
|
+
!this.Tag || e === t || (this.Tag.value = e, (d = (r = this.Tag).setSelectionRange) == null || d.call(r, e.length, e.length));
|
|
8
|
+
}, "handleHourMinuteEditChange"), h = {
|
|
9
|
+
OnChange: R,
|
|
10
|
+
OnKeyDown: /* @__PURE__ */ o(() => {
|
|
11
|
+
}, "OnKeyDown"),
|
|
12
|
+
OnStartEdit: /* @__PURE__ */ o(() => {
|
|
13
|
+
}, "OnStartEdit")
|
|
14
|
+
}, g = /* @__PURE__ */ o((t) => M(`${t ?? ""}`), "normalizeHourMinuteColumnValue"), v = /* @__PURE__ */ o((t, i) => t === "hourMinute" ? {
|
|
15
|
+
edit: h,
|
|
16
|
+
editMask: C,
|
|
17
|
+
resultMask: "",
|
|
18
|
+
resultText: "",
|
|
19
|
+
normalize: g,
|
|
20
|
+
invalidText: i.hourMinuteInvalidText
|
|
21
|
+
} : {}, "getTreeGridColumnEditPresetDefinition"), m = /* @__PURE__ */ o(() => ({
|
|
22
|
+
appliedColumns: {},
|
|
23
|
+
originalAttributes: {}
|
|
24
|
+
}), "createTreeGridColumnEditRulesState"), A = /* @__PURE__ */ o((t) => {
|
|
25
|
+
t.appliedColumns = {}, t.originalAttributes = {};
|
|
26
|
+
}, "resetTreeGridColumnEditRulesState"), O = /* @__PURE__ */ o((t, i) => {
|
|
27
|
+
if (!(t != null && t.length))
|
|
28
|
+
return;
|
|
29
|
+
const e = {};
|
|
30
|
+
return t.forEach((r) => {
|
|
31
|
+
const d = v(r.preset, i);
|
|
32
|
+
r.columns.forEach((l) => {
|
|
33
|
+
l && (e[l] = d);
|
|
34
|
+
});
|
|
35
|
+
}), Object.keys(e).length > 0 ? e : void 0;
|
|
36
|
+
}, "resolveTreeGridColumnEditRuleLookup"), p = /* @__PURE__ */ o((t, i, e) => {
|
|
37
|
+
if (!t)
|
|
38
|
+
return;
|
|
39
|
+
const r = i ? Object.keys(i) : [], l = Object.keys(e.appliedColumns).filter((n) => !(i != null && i[n]));
|
|
40
|
+
l.length === 0 && r.length === 0 || (t.StartUpdate(), l.forEach((n) => {
|
|
41
|
+
var a;
|
|
42
|
+
const s = (a = t.Cols) == null ? void 0 : a[n], u = e.originalAttributes[n];
|
|
43
|
+
if (!s || !u) {
|
|
44
|
+
delete e.appliedColumns[n];
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
s.Edit = u.Edit, s.EditMask = u.EditMask, s.ResultMask = u.ResultMask, s.ResultText = u.ResultText, delete e.appliedColumns[n];
|
|
48
|
+
}), r.forEach((n) => {
|
|
49
|
+
var c, T;
|
|
50
|
+
const s = (c = t.Cols) == null ? void 0 : c[n], u = i == null ? void 0 : i[n];
|
|
51
|
+
if (!s || !u)
|
|
52
|
+
return;
|
|
53
|
+
(T = e.originalAttributes)[n] ?? (T[n] = {
|
|
54
|
+
Edit: s.Edit,
|
|
55
|
+
EditMask: s.EditMask,
|
|
56
|
+
ResultMask: s.ResultMask,
|
|
57
|
+
ResultText: s.ResultText
|
|
58
|
+
});
|
|
59
|
+
const a = e.originalAttributes[n];
|
|
60
|
+
s.Edit = u.edit ?? a.Edit, s.EditMask = u.editMask ?? a.EditMask, s.ResultMask = u.resultMask ?? a.ResultMask, s.ResultText = u.resultText ?? a.ResultText, e.appliedColumns[n] = !0;
|
|
61
|
+
}), t.EndUpdate());
|
|
62
|
+
}, "syncTreeGridColumnEditRules"), k = /* @__PURE__ */ o((t, i, e) => {
|
|
63
|
+
const r = t == null ? void 0 : t[i], d = r == null ? void 0 : r.normalize;
|
|
64
|
+
if (typeof d != "function")
|
|
65
|
+
return;
|
|
66
|
+
const l = d(e), n = `${e ?? ""}`;
|
|
67
|
+
if (l == null)
|
|
68
|
+
return n ? {
|
|
69
|
+
value: "",
|
|
70
|
+
invalidText: r == null ? void 0 : r.invalidText
|
|
71
|
+
} : void 0;
|
|
72
|
+
if (l !== n)
|
|
73
|
+
return {
|
|
74
|
+
value: l
|
|
75
|
+
};
|
|
76
|
+
}, "resolveTreeGridColumnEditValue");
|
|
77
|
+
export {
|
|
78
|
+
m as createTreeGridColumnEditRulesState,
|
|
79
|
+
A as resetTreeGridColumnEditRulesState,
|
|
80
|
+
O as resolveTreeGridColumnEditRuleLookup,
|
|
81
|
+
k as resolveTreeGridColumnEditValue,
|
|
82
|
+
p as syncTreeGridColumnEditRules
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=treeGridColumnEditRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeGridColumnEditRules.js","sources":["../../../../src/components/OwpTreeGrid/internal/treeGridColumnEditRules.ts"],"sourcesContent":["import {\n formatTimeInputToHourMinute,\n normalizeTimeToHourMinute,\n} from '@/utils/normalizeTimeToHourMinute';\nimport type {\n OwpTreeGridColumnEditPreset,\n OwpTreeGridColumnEditRule,\n} from '../OwpTreeGrid';\n\nconst HOUR_MINUTE_EDIT_MASK = '^$|^[\\\\d:]*$';\n\ntype TreeGridColumnEditValue = TCol['Edit'] | TEdit;\ntype TreeGridColumnEditAttributeSnapshot = {\n Edit?: TreeGridColumnEditValue;\n EditMask?: TCol['EditMask'];\n ResultMask?: TCol['ResultMask'];\n ResultText?: TCol['ResultText'];\n};\ntype TreeGridColumnEditMutableColumn = Omit<TCol, 'Edit'> & TreeGridColumnEditAttributeSnapshot;\n\ntype TreeGridColumnEditPresetMessages = {\n hourMinuteInvalidText: string;\n};\n\ntype TreeGridColumnEditPresetDefinition = {\n edit?: TreeGridColumnEditValue;\n editMask?: string;\n resultMask?: string;\n resultText?: string;\n normalize?: (value: unknown) => string | null | undefined;\n invalidText?: string;\n};\n\ntype TreeGridColumnEditRuleLookup = Record<string, TreeGridColumnEditPresetDefinition>;\n\ntype TreeGridColumnEditRulesState = {\n appliedColumns: Record<string, true>;\n originalAttributes: Record<string, TreeGridColumnEditAttributeSnapshot>;\n};\n\ntype HourMinuteEdit = {\n Tag?: HTMLInputElement | HTMLTextAreaElement | null;\n};\n\n/**\n * HH:mm 편집 중 입력 보정\n * @param value 현재 입력값\n * @param oldValue 이전 입력값\n */\nconst handleHourMinuteEditChange = function (this: HourMinuteEdit, value: string, oldValue: string) {\n const formattedValue = formatTimeInputToHourMinute(value, oldValue);\n\n if (!this.Tag || formattedValue === value) {\n return;\n }\n\n this.Tag.value = formattedValue;\n this.Tag.setSelectionRange?.(formattedValue.length, formattedValue.length);\n};\n\nconst HOUR_MINUTE_EDIT: TEdit = {\n OnChange: handleHourMinuteEditChange,\n OnKeyDown: () => {},\n OnStartEdit: () => {},\n};\n\nconst normalizeHourMinuteColumnValue = (value: unknown) => {\n return normalizeTimeToHourMinute(`${value ?? ''}`);\n};\n\nconst getTreeGridColumnEditPresetDefinition = (\n preset: OwpTreeGridColumnEditPreset,\n messages: TreeGridColumnEditPresetMessages,\n): TreeGridColumnEditPresetDefinition => {\n if (preset === 'hourMinute') {\n return {\n edit: HOUR_MINUTE_EDIT,\n editMask: HOUR_MINUTE_EDIT_MASK,\n resultMask: '',\n resultText: '',\n normalize: normalizeHourMinuteColumnValue,\n invalidText: messages.hourMinuteInvalidText,\n };\n }\n\n return {};\n};\n\n/**\n * 컬럼 편집 규칙 상태 생성\n */\nexport const createTreeGridColumnEditRulesState = (): TreeGridColumnEditRulesState => {\n return {\n appliedColumns: {},\n originalAttributes: {},\n };\n};\n\n/**\n * 컬럼 편집 규칙 상태 초기화\n * @param state 컬럼 편집 규칙 상태\n */\nexport const resetTreeGridColumnEditRulesState = (state: TreeGridColumnEditRulesState) => {\n state.appliedColumns = {};\n state.originalAttributes = {};\n};\n\n/**\n * 컬럼 편집 규칙 lookup 생성\n * @param rules 컬럼 편집 규칙 목록\n * @param messages preset 메시지 집합\n */\nexport const resolveTreeGridColumnEditRuleLookup = (\n rules: readonly OwpTreeGridColumnEditRule[] | undefined,\n messages: TreeGridColumnEditPresetMessages,\n) => {\n if (!rules?.length) {\n return undefined;\n }\n\n const lookup: TreeGridColumnEditRuleLookup = {};\n\n rules.forEach((rule) => {\n const presetDefinition = getTreeGridColumnEditPresetDefinition(rule.preset, messages);\n\n rule.columns.forEach((column) => {\n if (column) {\n lookup[column] = presetDefinition;\n }\n });\n });\n\n return Object.keys(lookup).length > 0 ? lookup : undefined;\n};\n\n/**\n * 컬럼 편집 규칙 동기화\n * @param grid TreeGrid 인스턴스\n * @param lookup 컬럼 편집 규칙 lookup\n * @param state 컬럼 편집 규칙 상태\n */\nexport const syncTreeGridColumnEditRules = (\n grid: TGrid | null,\n lookup: TreeGridColumnEditRuleLookup | undefined,\n state: TreeGridColumnEditRulesState,\n) => {\n if (!grid) {\n return;\n }\n\n const nextColumns = lookup ? Object.keys(lookup) : [];\n const previousColumns = Object.keys(state.appliedColumns);\n const columnsToRestore = previousColumns.filter((column) => !lookup?.[column]);\n\n if (columnsToRestore.length === 0 && nextColumns.length === 0) {\n return;\n }\n\n grid.StartUpdate();\n\n columnsToRestore.forEach((columnName) => {\n const column = grid.Cols?.[columnName] as TreeGridColumnEditMutableColumn | undefined;\n const originalAttributes = state.originalAttributes[columnName];\n\n if (!column || !originalAttributes) {\n delete state.appliedColumns[columnName];\n return;\n }\n\n column.Edit = originalAttributes.Edit;\n column.EditMask = originalAttributes.EditMask;\n column.ResultMask = originalAttributes.ResultMask;\n column.ResultText = originalAttributes.ResultText;\n\n delete state.appliedColumns[columnName];\n });\n\n nextColumns.forEach((columnName) => {\n const column = grid.Cols?.[columnName] as TreeGridColumnEditMutableColumn | undefined;\n const presetDefinition = lookup?.[columnName];\n\n if (!column || !presetDefinition) {\n return;\n }\n\n state.originalAttributes[columnName] ??= {\n Edit: column.Edit,\n EditMask: column.EditMask,\n ResultMask: column.ResultMask,\n ResultText: column.ResultText,\n };\n\n const originalAttributes = state.originalAttributes[columnName];\n\n column.Edit = presetDefinition.edit ?? originalAttributes.Edit;\n column.EditMask = presetDefinition.editMask ?? originalAttributes.EditMask;\n column.ResultMask = presetDefinition.resultMask ?? originalAttributes.ResultMask;\n column.ResultText = presetDefinition.resultText ?? originalAttributes.ResultText;\n\n state.appliedColumns[columnName] = true;\n });\n\n grid.EndUpdate();\n};\n\n/**\n * 컬럼 편집 규칙 최종값 정규화\n * @param lookup 컬럼 편집 규칙 lookup\n * @param columnName 컬럼명\n * @param value 원본 값\n */\nexport const resolveTreeGridColumnEditValue = (\n lookup: TreeGridColumnEditRuleLookup | undefined,\n columnName: string,\n value: unknown,\n) => {\n const presetDefinition = lookup?.[columnName];\n const normalize = presetDefinition?.normalize;\n\n if (typeof normalize !== 'function') {\n return undefined;\n }\n\n const normalizedValue = normalize(value);\n const currentValue = `${value ?? ''}`;\n\n if (normalizedValue == null) {\n return currentValue\n ? {\n value: '',\n invalidText: presetDefinition?.invalidText,\n }\n : undefined;\n }\n\n if (normalizedValue === currentValue) {\n return undefined;\n }\n\n return {\n value: normalizedValue,\n };\n};\n\nexport type { TreeGridColumnEditRuleLookup, TreeGridColumnEditRulesState };\n"],"names":["HOUR_MINUTE_EDIT_MASK","handleHourMinuteEditChange","__name","value","oldValue","formattedValue","formatTimeInputToHourMinute","_b","_a","HOUR_MINUTE_EDIT","normalizeHourMinuteColumnValue","normalizeTimeToHourMinute","getTreeGridColumnEditPresetDefinition","preset","messages","createTreeGridColumnEditRulesState","resetTreeGridColumnEditRulesState","state","resolveTreeGridColumnEditRuleLookup","rules","lookup","rule","presetDefinition","column","syncTreeGridColumnEditRules","grid","nextColumns","columnsToRestore","columnName","originalAttributes","resolveTreeGridColumnEditValue","normalize","normalizedValue","currentValue"],"mappings":";;;AASA,MAAMA,IAAwB,gBAwCxBC,IAA6B,gBAAAC,EAAA,SAAgCC,GAAeC,GAAkB;;AAClG,QAAMC,IAAiBC,EAA4BH,GAAOC,CAAQ;AAElE,EAAI,CAAC,KAAK,OAAOC,MAAmBF,MAIpC,KAAK,IAAI,QAAQE,IACjBE,KAAAC,IAAA,KAAK,KAAI,sBAAT,QAAAD,EAAA,KAAAC,GAA6BH,EAAe,QAAQA,EAAe;AACrE,GATmC,+BAW7BI,IAA0B;AAAA,EAC9B,UAAUR;AAAA,EACV,WAAW,gBAAAC,EAAA,MAAM;AAAA,EAAC,GAAP;AAAA,EACX,aAAa,gBAAAA,EAAA,MAAM;AAAA,EAAC,GAAP;AACf,GAEMQ,IAAiC,gBAAAR,EAAA,CAACC,MAC/BQ,EAA0B,GAAGR,KAAS,EAAE,EAAE,GADZ,mCAIjCS,IAAwC,gBAAAV,EAAA,CAC5CW,GACAC,MAEID,MAAW,eACN;AAAA,EACL,MAAMJ;AAAA,EACN,UAAUT;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAWU;AAAA,EACX,aAAaI,EAAS;AAAA,IAInB,CAAA,GAfqC,0CAqBjCC,IAAqC,gBAAAb,EAAA,OACzC;AAAA,EACL,gBAAgB,CAAA;AAAA,EAChB,oBAAoB,CAAA;AAAC,IAHyB,uCAWrCc,IAAoC,gBAAAd,EAAA,CAACe,MAAwC;AACxF,EAAAA,EAAM,iBAAiB,CAAA,GACvBA,EAAM,qBAAqB,CAAA;AAC7B,GAHiD,sCAUpCC,IAAsC,gBAAAhB,EAAA,CACjDiB,GACAL,MACG;AACH,MAAI,EAACK,KAAA,QAAAA,EAAO;AACV;AAGF,QAAMC,IAAuC,CAAA;AAE7C,SAAAD,EAAM,QAAQ,CAACE,MAAS;AACtB,UAAMC,IAAmBV,EAAsCS,EAAK,QAAQP,CAAQ;AAEpF,IAAAO,EAAK,QAAQ,QAAQ,CAACE,MAAW;AAC/B,MAAIA,MACFH,EAAOG,CAAM,IAAID;AAAA,IAErB,CAAC;AAAA,EACH,CAAC,GAEM,OAAO,KAAKF,CAAM,EAAE,SAAS,IAAIA,IAAS;AACnD,GArBmD,wCA6BtCI,IAA8B,gBAAAtB,EAAA,CACzCuB,GACAL,GACAH,MACG;AACH,MAAI,CAACQ;AACH;AAGF,QAAMC,IAAcN,IAAS,OAAO,KAAKA,CAAM,IAAI,CAAA,GAE7CO,IADkB,OAAO,KAAKV,EAAM,cAAc,EACf,OAAO,CAACM,MAAW,EAACH,KAAA,QAAAA,EAASG,GAAO;AAE7E,EAAII,EAAiB,WAAW,KAAKD,EAAY,WAAW,MAI5DD,EAAK,YAAA,GAELE,EAAiB,QAAQ,CAACC,MAAe;;AACvC,UAAML,KAASf,IAAAiB,EAAK,SAAL,gBAAAjB,EAAYoB,IACrBC,IAAqBZ,EAAM,mBAAmBW,CAAU;AAE9D,QAAI,CAACL,KAAU,CAACM,GAAoB;AAClC,aAAOZ,EAAM,eAAeW,CAAU;AACtC;AAAA,IACF;AAEA,IAAAL,EAAO,OAAOM,EAAmB,MACjCN,EAAO,WAAWM,EAAmB,UACrCN,EAAO,aAAaM,EAAmB,YACvCN,EAAO,aAAaM,EAAmB,YAEvC,OAAOZ,EAAM,eAAeW,CAAU;AAAA,EACxC,CAAC,GAEDF,EAAY,QAAQ,CAACE,MAAe;;AAClC,UAAML,KAASf,IAAAiB,EAAK,SAAL,gBAAAjB,EAAYoB,IACrBN,IAAmBF,KAAA,gBAAAA,EAASQ;AAElC,QAAI,CAACL,KAAU,CAACD;AACd;AAGF,KAAAf,IAAAU,EAAM,oBAANW,OAAArB,EAAAqB,KAAyC;AAAA,MACvC,MAAML,EAAO;AAAA,MACb,UAAUA,EAAO;AAAA,MACjB,YAAYA,EAAO;AAAA,MACnB,YAAYA,EAAO;AAAA,IAAA;AAGrB,UAAMM,IAAqBZ,EAAM,mBAAmBW,CAAU;AAE9D,IAAAL,EAAO,OAAOD,EAAiB,QAAQO,EAAmB,MAC1DN,EAAO,WAAWD,EAAiB,YAAYO,EAAmB,UAClEN,EAAO,aAAaD,EAAiB,cAAcO,EAAmB,YACtEN,EAAO,aAAaD,EAAiB,cAAcO,EAAmB,YAEtEZ,EAAM,eAAeW,CAAU,IAAI;AAAA,EACrC,CAAC,GAEDH,EAAK,UAAA;AACP,GA9D2C,gCAsE9BK,IAAiC,gBAAA5B,EAAA,CAC5CkB,GACAQ,GACAzB,MACG;AACH,QAAMmB,IAAmBF,KAAA,gBAAAA,EAASQ,IAC5BG,IAAYT,KAAA,gBAAAA,EAAkB;AAEpC,MAAI,OAAOS,KAAc;AACvB;AAGF,QAAMC,IAAkBD,EAAU5B,CAAK,GACjC8B,IAAe,GAAG9B,KAAS,EAAE;AAEnC,MAAI6B,KAAmB;AACrB,WAAOC,IACH;AAAA,MACE,OAAO;AAAA,MACP,aAAaX,KAAA,gBAAAA,EAAkB;AAAA,IAAA,IAEjC;AAGN,MAAIU,MAAoBC;AAIxB,WAAO;AAAA,MACL,OAAOD;AAAA,IAAA;AAEX,GA/B8C;"}
|