@owp/core 2.5.15 → 2.5.17
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/components/OwpPicker/OwpTimePicker.js +147 -185
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js +184 -177
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +16 -21
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +237 -215
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +153 -0
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +301 -209
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +141 -127
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/constants/treeGrid.js +32 -26
- package/dist/constants/treeGrid.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/constants.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +9 -1
- package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +14 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +9 -1
- package/dist/types/constants/treeGrid.d.ts +3 -3
- package/dist/utils/treeGridUtil.js +81 -76
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\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 useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\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';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\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 toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: 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 syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: 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 toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = '.8rem',\n layoutUrl,\n layoutData,\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 syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\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 handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\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 syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\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 syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\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 syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\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 layoutData,\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: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\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\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\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","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","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","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { resolveOwpGridTheme } from '@/constants/gridTheme';\nimport {\n resolveTreeGridColorNumber,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport { useConfirm } from '@/hooks/useConfirm';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport {\n appendTreeGridAddedRowHighlightColumn,\n highlightTreeGridCellById,\n isTreeGridRowAddedById,\n} from '@/utils/treeGridUtil';\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 useMemo,\n useRef,\n useState,\n} from 'react';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport { useOwpTreeGridDatePickerEditor } from './internal/hooks/useOwpTreeGridDatePickerEditor';\nimport { useOwpTreeGridOverlayFrame } from './internal/hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridExplicitEnterMode,\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';\nimport {\n createTreeGridThemeContainerStyle,\n TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n TREE_GRID_THEME_WRAPPER_CLASS,\n treeGridThemeStyles,\n type TreeGridThemeContainerStyle,\n} from './internal/treeGridTheme';\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\nexport interface OwpTreeGridDatePickerEditorConfig {\n enabled?: boolean;\n columns?: readonly string[];\n showTimeInput?: boolean;\n showTimeSelect?: boolean;\n timeIntervals?: number;\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 toolbarRowBackgroundColor?: CSSProperties['backgroundColor'];\n layoutUrl?: string;\n layoutData?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n canUseTableRadius?: boolean;\n tableBorderRadius?: 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 datePickerEditor?: OwpTreeGridDatePickerEditorConfig;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n syncDeletedRowCanEdit?: boolean;\n confirmDeletedRowRemoval?: 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 toolbarRowBackgroundColor 하단 Toolbar row 배경색\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n * @param canUseTableRadius TreeGrid 내부 테이블 radius 사용 여부\n * @param tableBorderRadius TreeGrid 내부 테이블 radius 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n toolbarRowBackgroundColor,\n className,\n style,\n height = '100%',\n width = '100%',\n canUseTableRadius = false,\n tableBorderRadius = '.8rem',\n layoutUrl,\n layoutData,\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 datePickerEditor,\n highlightEditableCells = true,\n highlightChangedCells = true,\n syncDeletedRowCanEdit = true,\n confirmDeletedRowRemoval = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const { confirmDelete } = useConfirm();\n const currentSettings = useGetCurrentSettings();\n const currentGridThemeConfig = currentSettings?.theme?.main?.grid;\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 layoutHasExplicitEnterModeRef = useRef(hasTreeGridExplicitEnterMode(layoutData));\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 handleBeforeRowUndelete = confirmDeletedRowRemoval\n ? async () => {\n const confirmed = await confirmDelete({\n title: t('Message.삭제된 항목을 완전히 삭제하시겠습니까?'),\n description: t('Message.취소하면 삭제 상태가 해제됩니다.'),\n okText: t('Button.완전 삭제'),\n });\n\n return confirmed ? 'remove' : 'undelete';\n }\n : undefined;\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\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 syncDeletedRowCanEditRef = useRef(syncDeletedRowCanEdit);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentGridThemeConfig),\n [currentGridThemeConfig],\n );\n const editableCellBackgroundColorValueRef = useRef(\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR),\n );\n const changedCellBackgroundColorRef = useRef(\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR,\n );\n const selectedCellBackgroundColorRef = useRef(treeGridTheme.state.selectedCellBackgroundColor);\n const hoverCellBackgroundColorRef = useRef(treeGridTheme.state.hoverCellBackgroundColor);\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 const handleDatePickerEditorValueChange = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: unknown,\n ) => {\n if (highlightChangedCellsRef.current && row.Fixed !== 'Foot') {\n highlightTreeGridCellById(id, {\n row,\n col,\n backgroundColor: changedCellBackgroundColorRef.current,\n });\n\n if (isTreeGridRowAddedById(row)) {\n appendTreeGridAddedRowHighlightColumn(row, col);\n }\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row, col, value);\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n layoutHasExplicitEnterModeRef.current = hasTreeGridExplicitEnterMode(layoutData);\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 syncDeletedRowCanEditRef.current = syncDeletedRowCanEdit;\n editableCellBackgroundColorValueRef.current =\n resolveTreeGridColorNumber(treeGridTheme.editable.backgroundColor) ??\n resolveTreeGridColorNumber(TREEGRID_INPUT_CELL_COLOR);\n changedCellBackgroundColorRef.current =\n treeGridTheme.changed.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR;\n selectedCellBackgroundColorRef.current = treeGridTheme.state.selectedCellBackgroundColor;\n hoverCellBackgroundColorRef.current = treeGridTheme.state.hoverCellBackgroundColor;\n const { datePickerEditorElement, handleDatePickerEditorCellClick } =\n useOwpTreeGridDatePickerEditor({\n config: datePickerEditor,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange: handleDatePickerEditorValueChange,\n });\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onBeforeRowUndelete: handleBeforeRowUndelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n onInternalCellClick: handleDatePickerEditorCellClick,\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 layoutHasExplicitEnterModeRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n syncDeletedRowCanEditRef,\n editableCellBackgroundColorValueRef,\n changedCellBackgroundColorRef,\n selectedCellBackgroundColorRef,\n hoverCellBackgroundColorRef,\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 layoutData,\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: TreeGridThemeContainerStyle = createTreeGridThemeContainerStyle({\n width,\n height,\n treeGridTheme,\n gridThemeConfig: currentGridThemeConfig,\n containerStyle,\n tableBorderRadius: canUseTableRadius ? tableBorderRadius : undefined,\n });\n\n if (toolbarRowBackgroundColor !== undefined) {\n resolvedContainerStyle['--owp-tree-grid-toolbar-row-background-color'] =\n String(toolbarRowBackgroundColor);\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\n ref={treeGridContainerRef}\n className={[\n TREE_GRID_THEME_WRAPPER_CLASS,\n canUseTableRadius && TREE_GRID_THEME_TABLE_RADIUS_CLASS,\n containerClassName,\n ]\n .filter(Boolean)\n .join(' ')}\n style={resolvedContainerStyle}\n >\n <GlobalStyles styles={treeGridThemeStyles} />\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 {datePickerEditorElement}\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","toolbarRowBackgroundColor","className","style","height","width","canUseTableRadius","tableBorderRadius","layoutUrl","layoutData","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","columnEditRules","datePickerEditor","highlightEditableCells","highlightChangedCells","syncDeletedRowCanEdit","confirmDeletedRowRemoval","loading","showLoading","t","useOwpTranslation","confirmDelete","useConfirm","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","layoutHasExplicitEnterModeRef","hasTreeGridExplicitEnterMode","latestColumnEditRulesRef","latestColumnEditRuleLookupRef","resolveTreeGridColumnEditRuleLookup","handleBeforeRowUndelete","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","appliedColumnEditRulesRef","columnEditRulesStateRef","createTreeGridColumnEditRulesState","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","syncDeletedRowCanEditRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","treeGridTheme","useMemo","resolveOwpGridTheme","editableCellBackgroundColorValueRef","resolveTreeGridColorNumber","TREEGRID_INPUT_CELL_COLOR","changedCellBackgroundColorRef","TREEGRID_CELL_HIGHLIGHT_COLOR","selectedCellBackgroundColorRef","hoverCellBackgroundColorRef","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","handleDatePickerEditorValueChange","row","col","value","highlightTreeGridCellById","isTreeGridRowAddedById","appendTreeGridAddedRowHighlightColumn","valueChangedHandler","datePickerEditorElement","handleDatePickerEditorCellClick","useOwpTreeGridDatePickerEditor","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","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","createTreeGridThemeContainerStyle","jsxs","TREE_GRID_THEME_WRAPPER_CLASS","TREE_GRID_THEME_TABLE_RADIUS_CLASS","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAqLA,MAAMA,KAAc,gBAAAC,EAAA,CAAK;AAAA,EACvB,IAAAC,IAAK;AAAA,EACL,gBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,2BAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC,KAAS;AAAA,EACT,OAAAC,KAAQ;AAAA,EACR,mBAAAC,KAAoB;AAAA,EACpB,mBAAAC,KAAoB;AAAA,EACpB,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,MAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,wBAAAC,KAAyB;AAAA,EACzB,uBAAAC,KAAwB;AAAA,EACxB,uBAAAC,KAAwB;AAAA,EACxB,0BAAAC,KAA2B;AAAA,EAC3B,SAAAC;AAAA,EACA,aAAAC,IAAc;AAChB,MAA2B;;AACzB,QAAM,EAAE,GAAAC,EAAA,IAAMC,GAAA,GACR,EAAE,eAAAC,GAAA,IAAkBC,GAAA,GACpBC,IAAkBC,GAAA,GAClBC,KAAyBC,MAAAC,KAAAJ,KAAA,gBAAAA,EAAiB,UAAjB,gBAAAI,GAAwB,SAAxB,gBAAAD,GAA8B,MACvDE,IAAsBC,EAAc,IAAI,GACxCC,KAAuBD,EAA8B,IAAI,GACzDE,KAA2BF,EAAsB,IAAI,GACrDG,IAAyBH,EAAsB,IAAI,GACnDI,IAA2BJ,EAA4C/B,CAAe,GACtFoC,KAAwBL,EAA+B9B,CAAI,GAC3DoC,KAAgCN,EAAOO,GAA6BxC,CAAU,CAAC,GAC/EyC,IAA2BR;AAAA,IAC/BlB;AAAA,EAAA,GAEI2B,IAAgCT;AAAA,IACpCU,GAAoC5B,GAAiB;AAAA,MACnD,uBAAuBQ,EAAE,gCAAgC;AAAA,IAAA,CAC1D;AAAA,EAAA,GAEGqB,KAA0BxB,KAC5B,YACoB,MAAMK,GAAc;AAAA,IACpC,OAAOF,EAAE,+BAA+B;AAAA,IACxC,aAAaA,EAAE,4BAA4B;AAAA,IAC3C,QAAQA,EAAE,cAAc;AAAA,EAAA,CACzB,IAEkB,WAAW,aAEhC,QACEsB,IAAyBZ,EAAiC;AAAA,IAC9D,UAAA5B;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,qBAAqBoC;AAAA,IACrB,eAAAnC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,EAAA,CACD,GACKgC,IAAwBb,EAA+B,MAAS,GAChEc,IAA2Bd,EAAO,EAAK,GACvCe,IAA4Bf,EAA4C,MAAS,GACjFgB,IAAyBhB,EAA+B,MAAS,GACjEiB,IAA4BjB;AAAA,IAChC;AAAA,EAAA,GAEIkB,KAA0BlB,EAAOmB,IAAoC,GACrEC,KAA6BpB,EAAO,EAAK,GACzCqB,IAAwBrB,EAAO,CAAC,GAChCsB,IAA6BtB,EAAsB,IAAI,GACvDuB,IAA+BvB,EAA2B,MAAS,GACnEwB,IAA4BxB,EAA2B,MAAS,GAChEyB,KAA4BzB,EAAOhB,EAAsB,GACzD0C,IAA2B1B,EAAOf,EAAqB,GACvD0C,KAA2B3B,EAAOd,EAAqB,GACvD,CAAC0C,GAAiBC,EAAkB,IAAIC,EAAS,EAAK,GACtD,CAACC,IAAyBC,CAA0B,IAAIF,EAAS,EAAK,GACtE,CAACG,IAAoBC,EAAqB,IAAIJ,EAAS,EAAK,GAC5DK,IAAkBC,GAAA,GAClBC,IAAgBC;AAAA,IACpB,MAAMC,GAAoB3C,CAAsB;AAAA,IAChD,CAACA,CAAsB;AAAA,EAAA,GAEnB4C,KAAsCxC;AAAA,IAC1CyC,EAA2BJ,EAAc,SAAS,eAAe,KAC/DI,EAA2BC,EAAyB;AAAA,EAAA,GAElDC,IAAgC3C;AAAA,IACpCqC,EAAc,QAAQ,mBAAmBO;AAAA,EAAA,GAErCC,KAAiC7C,EAAOqC,EAAc,MAAM,2BAA2B,GACvFS,KAA8B9C,EAAOqC,EAAc,MAAM,wBAAwB,GACjFU,KAAuB/C,EAAOmC,EAAgB,EAAE,GAChDa,KACJ3D,KACAnB,MAAS,UACT0D,KACAZ,EAAuB,YAAY9C,GAE/B+E,IAA2B5D,KAAeD,OAAY,MAD3BC,MAAgB0C,MAA2BiB,KAEtEE,IACJ,CAACD,KAA2B/E,MAAS,UAAaiF,EAAQjF,CAAI,KAAK,CAAC+D,IAEhEmB,KAAyB,gBAAAjG,EAAA,CAACkG,MAAuB;AACrD,IAAAnB,GAAsBoB,GAA2BD,CAAI,CAAC;AAAA,EACxD,GAF+B,2BAGzBE,KAAoC,gBAAApG,EAAA,CACxCkG,GACAG,GACAC,GACAC,MACG;;AACH,IAAIhC,EAAyB,WAAW8B,EAAI,UAAU,WACpDG,GAA0BvG,GAAI;AAAA,MAC5B,KAAAoG;AAAA,MACA,KAAAC;AAAA,MACA,iBAAiBd,EAA8B;AAAA,IAAA,CAChD,GAEGiB,GAAuBJ,CAAG,KAC5BK,GAAsCL,GAAKC,CAAG;AAIlD,UAAMK,MACJhE,IAAAc,EAAuB,YAAvB,gBAAAd,EAAgC,0BAChCD,IAAAe,EAAuB,YAAvB,gBAAAf,EAAgC;AAElC,IAAAiE,KAAA,QAAAA,EAAsBT,GAAMG,GAAKC,GAAKC;AAAA,EACxC,GAvB0C;AAyB1C,EAAAtD,EAAyB,UAAUnC,GACnCoC,GAAsB,UAAUnC,GAChCoC,GAA8B,UAAUC,GAA6BxC,CAAU,GAC/EyC,EAAyB,UAAU1B,GACnC2B,EAA8B,UAAUC,GAAoC5B,GAAiB;AAAA,IAC3F,uBAAuBQ,EAAE,gCAAgC;AAAA,EAAA,CAC1D,GACDmC,GAA0B,UAAUzC,IACpC0C,EAAyB,UAAUzC,IACnC0C,GAAyB,UAAUzC,IACnCsD,GAAoC,UAClCC,EAA2BJ,EAAc,SAAS,eAAe,KACjEI,EAA2BC,EAAyB,GACtDC,EAA8B,UAC5BN,EAAc,QAAQ,mBAAmBO,IAC3CC,GAA+B,UAAUR,EAAc,MAAM,6BAC7DS,GAA4B,UAAUT,EAAc,MAAM;AAC1D,QAAM,EAAE,yBAAA0B,IAAyB,iCAAAC,GAAA,IAC/BC,GAA+B;AAAA,IAC7B,QAAQlF;AAAA,IACR,qBAAAgB;AAAA,IACA,iBAAA6B;AAAA,IACA,eAAe2B;AAAA,EAAA,CAChB;AACH,EAAA3C,EAAuB,UAAU;AAAA,IAC/B,UAAAxC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,aAAAC;AAAA,IACA,qBAAqBoC;AAAA,IACrB,eAAAnC;AAAA,IACA,aAAAC;AAAA,IACA,eAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,qBAAqBmF;AAAA,EAAA;AAGvB,QAAME,KAAeC,GAA2B;AAAA,IAC9C,SAASlB,KAA2BC;AAAA,IACpC,cAAcjD;AAAA,IACd,qBAAAF;AAAA,IACA,SAAS3C;AAAA,EAAA,CACV,GAEKgH,IAAiC,gBAAAjH,EAAA,MAAM;AAC3C,IAAIoE,EAA6B,YAAY,WAC3C,OAAO,aAAaA,EAA6B,OAAO,GACxDA,EAA6B,UAAU;AAAA,EAE3C,GALuC,mCAOjC8C,IAA8B,gBAAAlH,EAAA,MAAM;AACxC,IAAIqE,EAA0B,YAAY,WACxC,OAAO,aAAaA,EAA0B,OAAO,GACrDA,EAA0B,UAAU;AAAA,EAExC,GALoC;AAOpC,EAAA8C,EAAU,MAAM;AACd,UAAMC,IAAwB,gBAAApH,EAAA,CAACqH,MAAiB;;AAG9C,QAAI1E,IAFgB0E,EAEJ,WAAZ,gBAAA1E,EAAoB,YAAW1C,KAInC8E,GAAsBoB,GAA2BvD,EAAoB,OAAO,CAAC;AAAA,IAC/E,GAR8B;AAU9B,kBAAO,iBAAiB0E,IAAmCF,CAAqB,GAEzE,MAAM;AACX,aAAO,oBAAoBE,IAAmCF,CAAqB;AAAA,IACrF;AAAA,EACF,GAAG,CAACnH,CAAE,CAAC,GAEPkH,EAAU,MAAM;AACd,IAAKjF,MACHgF,EAAA,GACAD,EAAA,GACA9C,EAA2B,UAAU,MACrCU,EAA2B,EAAK;AAAA,EAEpC,GAAG,CAAC3C,CAAW,CAAC,GAEhBiF,EAAU,MAAM;;AAUd,QAREnC,EAAgB,OAAOY,GAAqB,WAC5C,CAACI,EAAQpD,EAAoB,OAAO,OAEpCD,IAAAC,EAAoB,YAApB,QAAAD,EAA6B,WAC7BC,EAAoB,UAAU,MAC9BgD,GAAqB,UAAUZ,EAAgB,KAG7C,EAACgB,EAAQpD,EAAoB,OAAO;AAIxC,aAAA2E,GAAmB;AAAA,QACjB,IAAAtH;AAAA,QACA,wBAAAwD;AAAA,QACA,+BAAAN;AAAA,QACA,2BAAAmB;AAAA,QACA,0BAAAC;AAAA,QACA,0BAAAC;AAAA,QACA,qCAAAa;AAAA,QACA,+BAAAG;AAAA,QACA,gCAAAE;AAAA,QACA,6BAAAC;AAAA,QACA,qBAAA/C;AAAA,QACA,0BAAAG;AAAA,QACA,0BAAAE;AAAA,QACA,2BAAAW;AAAA,QACA,wBAAAC;AAAA,QACA,0BAAAR;AAAA,QACA,+BAAAC;AAAA,QACA,2BAAAQ;AAAA,QACA,yBAAAC;AAAA,QACA,4BAAAE;AAAA,QACA,wBAAAgC;AAAA,QACA,oBAAAvB;AAAA,MAAA,CACD,GAED3B,GAAyB,UAAUyE,EAAA,GACnCC,GAAkBxH,GAAI,MAAM,GAC5ByH,GAAgBzH,GAAI,uBAAuB;AAAA,QACzC,YAAY,EAAQe;AAAA,QACpB,cAAc2G,EAAyB5G,CAAI;AAAA,MAAA,CAC5C,GAED,OAAO;AAAA,QACL6G,GAAmC;AAAA,UACjC,IAAA3H;AAAA,UACA,WAAAU;AAAA,UACA,YAAAC;AAAA,UACA,SAAAC;AAAA,UACA,UAAUE;AAAA,UACV,YAAAC;AAAA,UACA,OAAAR;AAAA,UACA,QAAAD;AAAA,UACA,YAAYyE,EAAgB;AAAA,QAAA,CAC7B;AAAA,QACD/E;AAAA,QACAA;AAAA,MAAA,GAGK,MAAM;AACX,QAAA4H,GAAM,MAAM;;AACV,WAAAlF,IAAAC,EAAoB,YAApB,QAAAD,EAA6B;AAAA,QAC/B,GAAG,GAAG;AAAA,MACR;AAAA,EAEF,GAAG,CAAA,CAAE,GAELmF,GAAgB,MAAM;AACpB,UAAMC,IAAWnF,EAAoB,SAC/BoF,IAAsB/E,EAAyB,SAC/CgF,IAAe/E,GAAsB,SACrCgF,IAAsB7E,EAAyB;AAErD,QAAI2C,EAAQ+B,CAAQ,KAAK,CAACtD;AACxB;AAGF,UAAM0D,IACJvE,EAA0B,YAAYoE,KACtC,CAACI,GAAQxE,EAA0B,SAASoE,CAAmB,GAC3DK,IACJxE,EAAuB,YAAYoE,MAClC,CAACtE,EAAyB,WAAWD,EAAsB,YAAYuE,IACpEK,IACJxE,EAA0B,YAAYoE,KACtC,CAACE,GAAQtE,EAA0B,SAASoE,CAAmB;AAEjE,QAAI,GAACC,KAA8B,CAACE,KAAuB,CAACC,IAI5D;AAAA,UAAIH,GAA4B;AAC9B,cAAMI,IAAuBf,EAAA;AAE7B,QAAAgB,GAA0BT,GAAUC,GAAqBK,CAAmB,GAC5EzE,EAA0B,UAAUoE,GACpCS,GAAoBxI,GAAI,gBAAgBsI,GAAsB;AAAA,UAC5D,mBAAmB,EAAQF;AAAA,QAAmB,CAC/C;AAAA,MACH;AAEA,UAAIA,GAAqB;AACvB,cAAMK,IAAiBxE,EAAsB,UAAU,GACjDyE,KAAgB,gBAAA3I,EAAA,MAAM;AAC1B,gBAAM4I,IAAkBlF,EAAsB;AAE9C,UAAAW,EAA0B,UAAU,QACpCrB,EAAuB,UAAUwE,EAAA,GACjCC,GAAkBxH,GAAI,QAAQ,GAC9ByH,GAAgBzH,GAAI,oBAAoB;AAAA,YACtC,cAAc0H,EAAyBiB,CAAe;AAAA,UAAA,CACvD,GAEDC,GAAwBd,GAAUa,GAAiB,MAAM;AACvD,gBAAI1E,EAAsB,YAAYwE;AACpC;AAGF,YAAA7E,EAAuB,UAAU+E,GACjC3C,GAAuB8B,CAAQ,GAC/BU,GAAoBxI,GAAI,kBAAkB+C,EAAuB,SAAS;AAAA,cACxE,cAAc2E,EAAyBiB,CAAe;AAAA,YAAA,CACvD,GACD5F,EAAuB,UAAU,MAE7BU,EAAsB,YAAYkF,MACpClF,EAAsB,UAAU,QAChCC,EAAyB,UAAU;AAGrC,kBAAMmF,KAAY3E,EAA2B;AAE7C,gBAAI,CAACjC,KAAe4G,OAAc,MAAM;AACtC,cAAA3E,EAA2B,UAAU,MACrCU,EAA2B,EAAK;AAChC;AAAA,YACF;AAEA,kBAAMkE,KAAuB,KAAK;AAAA,cAChC;AAAA,cACAC,MAA4C,KAAK,IAAA,IAAQF;AAAA,YAAA;AAK3D,gBAFA7B,EAAA,GAEI8B,OAAyB,GAAG;AAC9B,cAAA5E,EAA2B,UAAU,MACrCU,EAA2B,EAAK;AAChC;AAAA,YACF;AAEA,YAAAT,EAA6B,UAAU,OAAO,WAAW,MAAM;AAC7D,cAAIF,EAAsB,YAAYwE,MAItCtE,EAA6B,UAAU,QACvCD,EAA2B,UAAU,MACrCU,EAA2B,EAAK;AAAA,YAClC,GAAGkE,EAAoB;AAAA,UACzB,CAAC;AAAA,QACH,GA1DsB;AA4DtB,QAAA7E,EAAsB,UAAUwE,GAChChF,EAAsB,UAAUuE,GAChCtE,EAAyB,UAAU,IAE/BzB,KAAe+F,MAAiB,UAClCf,EAAA,GACAD,EAAA,GACA9C,EAA2B,UAAU,KAAK,IAAA,GAC1CU,EAA2B,EAAI,GAC/BR,EAA0B,UAAU,OAAO,WAAW,MAAM;AAC1D,UAAIH,EAAsB,YAAYwE,KAItCC,GAAA;AAAA,QACF,GAAG,CAAC,KAEJA,GAAA;AAAA,MAEJ;AAEA,MAAIL,MACFW;AAAA,QACElB;AAAA,QACAzE,EAA8B;AAAA,QAC9BS,GAAwB;AAAA,MAAA,GAE1BD,EAA0B,UAAUoE;AAAA;AAAA,EAExC,GAAG,CAACzD,GAAiB3D,GAAiBC,GAAMY,GAAiBO,GAAajC,CAAE,CAAC,GAE7EkH,EAAU,MACD,MAAM;AACX,IAAAD,EAAA,GACAD,EAAA;AAAA,EACF,GACC,CAAA,CAAE;AAEL,QAAMiC,IAAsDC,GAAkC;AAAA,IAC5F,OAAA3I;AAAA,IACA,QAAAD;AAAA,IACA,eAAA2E;AAAA,IACA,iBAAiBzC;AAAA,IACjB,gBAAAvC;AAAA,IACA,mBAAmBO,KAAoBC,KAAoB;AAAA,EAAA,CAC5D;AAED,SAAIN,OAA8B,WAChC8I,EAAuB,8CAA8C,IACnE,OAAO9I,EAAyB,KAGhC8B,KAAe6D,OACjBmD,EAAuB,WACrBhJ,KAAA,QAAAA,EAAgB,YAAYA,EAAe,aAAa,WACpDA,EAAe,WACf,YACNgJ,EAAuB,YAAY,YAInC,gBAAAE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKtG;AAAA,MACL,WAAW;AAAA,QACTuG;AAAA,QACA5I,MAAqB6I;AAAA,QACrBnJ;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,OAAO+I;AAAA,MAEP,UAAA;AAAA,QAAA,gBAAAK,EAACC,IAAA,EAAa,QAAQC,GAAA,CAAqB;AAAA,QAC3C,gBAAAF,EAAC,OAAA,EAAI,IAAAtJ,GAAQ,WAAAI,IAAsB,OAAOqJ,GAAKpJ,IAAO,CAAC,UAAU,OAAO,CAAC,EAAA,CAAG;AAAA,QAC5E,gBAAAiJ;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,SAAS5D;AAAA,YACT,SAAS5D,EAAE,uBAAuB;AAAA,YAClC,cAAA4E;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAwC,EAACK,IAAA,EAA0B,SAAS9D,GAAyB,cAAAiB,GAAA,CAA4B;AAAA,QACxFH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP,GAveoB;"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
var K = Object.defineProperty;
|
|
2
|
+
var l = (e, a) => K(e, "name", { value: a, configurable: !0 });
|
|
3
|
+
import { jsx as T } 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
|
+
import { VALUE_TIME_FORMATTER as b, VALUE_DATE_FORMATTER as _ } from "../../../OwpPicker/constants/index.js";
|
|
5
|
+
import { useOwpTranslation as U } from "../../../../hooks/useOwpTranslation.js";
|
|
6
|
+
import $ from "@mui/material/ClickAwayListener";
|
|
7
|
+
import j from "@mui/material/Paper";
|
|
8
|
+
import V from "@mui/material/Popper";
|
|
9
|
+
import { enUS as z } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US.js";
|
|
10
|
+
import { ko as H } from "../../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/ko.js";
|
|
11
|
+
import w from "dayjs";
|
|
12
|
+
import { useState as N, useMemo as c, useEffect as y, useCallback as v } from "react";
|
|
13
|
+
import { DatePicker as q, registerLocale as L, setDefaultLocale as J } from "../../../../node_modules/.pnpm/react-datepicker@8.7.0_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-datepicker/dist/index.es.js";
|
|
14
|
+
L("ko", H);
|
|
15
|
+
L("en", z);
|
|
16
|
+
J("ko");
|
|
17
|
+
const Q = `${_} ${b}`, S = "", W = "OwpTreeGridDatePickerEditor", X = /* @__PURE__ */ l((e) => (e == null ? void 0 : e.enabled) !== !1, "isDatePickerEditorEnabled"), Y = /* @__PURE__ */ l((e, a, o) => !(o != null && o.showTimeInput) && !(o != null && o.showTimeSelect) ? _ : a.size === 0 || a.has(e) ? Q : _, "getDatePickerEditorValueFormatter"), k = /* @__PURE__ */ l((e) => e === 1 || e === "1", "isTreeGridCanEditEnabled"), Z = /* @__PURE__ */ l((e) => e === 0 || e === "0" || e === !1, "isTreeGridCanEditDisabled"), f = /* @__PURE__ */ l((e) => !e || e.Fixed === "Foot" ? !1 : e.Kind === "Data" || k(e.Added), "isDisplayTreeGridRow"), g = /* @__PURE__ */ l((e, a, o, d) => {
|
|
18
|
+
var u;
|
|
19
|
+
if (d.size > 0 && !d.has(o))
|
|
20
|
+
return !1;
|
|
21
|
+
const s = (u = e.Cols) == null ? void 0 : u[o], n = a[`${o}CanEdit`], t = n != null, p = k(t ? n : s == null ? void 0 : s.CanEdit);
|
|
22
|
+
return (s == null ? void 0 : s.Type) === "Date" && f(a) && !Z(a.CanEdit) && p && a.Deleted !== 1;
|
|
23
|
+
}, "isEditableDatePickerCell"), ee = /* @__PURE__ */ l((e, a) => {
|
|
24
|
+
var d;
|
|
25
|
+
if (!e)
|
|
26
|
+
return;
|
|
27
|
+
(a.length > 0 ? a : Object.keys(e.Cols ?? {}).filter((s) => {
|
|
28
|
+
var n, t;
|
|
29
|
+
return ((t = (n = e.Cols) == null ? void 0 : n[s]) == null ? void 0 : t.Type) === "Date";
|
|
30
|
+
})).forEach((s) => {
|
|
31
|
+
var t;
|
|
32
|
+
const n = (t = e.Cols) == null ? void 0 : t[s];
|
|
33
|
+
!n || n.Type !== "Date" || !k(n.CanEdit) || (n.Button = "Date", n.OnClickSideDate = "Focus", n.AutoCalendar = 0, n.CalendarButtons = 0);
|
|
34
|
+
}), (d = e.Rerender) == null || d.call(e, 1, 1);
|
|
35
|
+
}, "configureTreeGridDatePickerColumns"), ke = /* @__PURE__ */ l(({
|
|
36
|
+
config: e,
|
|
37
|
+
treeGridInstanceRef: a,
|
|
38
|
+
isTreeGridReady: o,
|
|
39
|
+
onValueChange: d
|
|
40
|
+
}) => {
|
|
41
|
+
var R;
|
|
42
|
+
const { t: s, i18n: n } = U(), [t, p] = N(null), u = X(e), D = ((R = e == null ? void 0 : e.columns) == null ? void 0 : R.join(S)) ?? "", C = c(
|
|
43
|
+
() => D ? D.split(S) : [],
|
|
44
|
+
[D]
|
|
45
|
+
), h = c(() => new Set(C), [C]), O = (n.resolvedLanguage ?? n.language ?? "kr") === "kr" ? "ko" : "en";
|
|
46
|
+
y(() => {
|
|
47
|
+
!u || !o || ee(a.current, C);
|
|
48
|
+
}, [C, u, o, a]);
|
|
49
|
+
const m = v(() => {
|
|
50
|
+
p(null);
|
|
51
|
+
}, []), F = v(
|
|
52
|
+
(r, i, E, ne, ae, A) => {
|
|
53
|
+
if (!u || !g(r, i, E, h)) {
|
|
54
|
+
m();
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const I = r.GetCell(i, E);
|
|
58
|
+
if (I)
|
|
59
|
+
return A.preventDefault(), A.stopPropagation(), p({
|
|
60
|
+
grid: r,
|
|
61
|
+
row: i,
|
|
62
|
+
col: E,
|
|
63
|
+
anchorRect: I.getBoundingClientRect(),
|
|
64
|
+
value: r.GetString(i, E) || r.GetValue(i, E)
|
|
65
|
+
}), 1;
|
|
66
|
+
},
|
|
67
|
+
[m, h, u]
|
|
68
|
+
), M = c(() => {
|
|
69
|
+
if (!(t != null && t.value))
|
|
70
|
+
return null;
|
|
71
|
+
const r = w(t.value);
|
|
72
|
+
return r.isValid() ? r.toDate() : null;
|
|
73
|
+
}, [t == null ? void 0 : t.value]), x = c(() => t ? {
|
|
74
|
+
getBoundingClientRect: /* @__PURE__ */ l(() => t.anchorRect, "getBoundingClientRect")
|
|
75
|
+
} : null, [t]), G = c(() => {
|
|
76
|
+
if (!(typeof document > "u"))
|
|
77
|
+
return document.getElementById("calendar-portal") ?? void 0;
|
|
78
|
+
}, []), B = /* @__PURE__ */ l((r) => {
|
|
79
|
+
if (!t)
|
|
80
|
+
return;
|
|
81
|
+
const i = r ? w(r).format(Y(t.col, h, e)) : "";
|
|
82
|
+
t.grid.SetString(t.row, t.col, i, 1), d == null || d(t.grid, t.row, t.col, i), m();
|
|
83
|
+
}, "handleSelect"), P = /* @__PURE__ */ l((r) => {
|
|
84
|
+
r.stopPropagation();
|
|
85
|
+
}, "handleEditorMouseEvent");
|
|
86
|
+
return y(() => {
|
|
87
|
+
if (!t)
|
|
88
|
+
return;
|
|
89
|
+
const r = /* @__PURE__ */ l((i) => {
|
|
90
|
+
i.key === "Escape" && m();
|
|
91
|
+
}, "handleKeyDown");
|
|
92
|
+
return window.addEventListener("keydown", r), () => {
|
|
93
|
+
window.removeEventListener("keydown", r);
|
|
94
|
+
};
|
|
95
|
+
}, [m, t]), {
|
|
96
|
+
datePickerEditorElement: t ? /* @__PURE__ */ T(
|
|
97
|
+
V,
|
|
98
|
+
{
|
|
99
|
+
open: !0,
|
|
100
|
+
anchorEl: x,
|
|
101
|
+
container: G,
|
|
102
|
+
placement: "bottom-start",
|
|
103
|
+
sx: { zIndex: 1400 },
|
|
104
|
+
children: /* @__PURE__ */ T($, { onClickAway: m, children: /* @__PURE__ */ T(
|
|
105
|
+
j,
|
|
106
|
+
{
|
|
107
|
+
className: W,
|
|
108
|
+
elevation: 8,
|
|
109
|
+
onClick: P,
|
|
110
|
+
onMouseDown: P,
|
|
111
|
+
sx: {
|
|
112
|
+
borderRadius: 1,
|
|
113
|
+
lineHeight: 0,
|
|
114
|
+
overflow: "hidden",
|
|
115
|
+
"& .react-datepicker": {
|
|
116
|
+
border: 0,
|
|
117
|
+
display: "block",
|
|
118
|
+
lineHeight: "normal"
|
|
119
|
+
},
|
|
120
|
+
"& .react-datepicker__month-container": {
|
|
121
|
+
float: "none"
|
|
122
|
+
},
|
|
123
|
+
"& .react-datepicker__month": {
|
|
124
|
+
marginBottom: 0
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
children: /* @__PURE__ */ T(
|
|
128
|
+
q,
|
|
129
|
+
{
|
|
130
|
+
inline: !0,
|
|
131
|
+
locale: O,
|
|
132
|
+
selected: M,
|
|
133
|
+
onChange: /* @__PURE__ */ l((r) => B(r), "onChange"),
|
|
134
|
+
showTimeInput: e == null ? void 0 : e.showTimeInput,
|
|
135
|
+
showTimeSelect: e == null ? void 0 : e.showTimeSelect,
|
|
136
|
+
timeIntervals: e == null ? void 0 : e.timeIntervals,
|
|
137
|
+
dateFormat: e != null && e.showTimeInput || e != null && e.showTimeSelect ? "Pp" : "P",
|
|
138
|
+
timeFormat: b,
|
|
139
|
+
timeCaption: `${s("Common.시간")}: `,
|
|
140
|
+
timeInputLabel: `${s("Common.시간")}: `
|
|
141
|
+
}
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
) })
|
|
145
|
+
}
|
|
146
|
+
) : null,
|
|
147
|
+
handleDatePickerEditorCellClick: F
|
|
148
|
+
};
|
|
149
|
+
}, "useOwpTreeGridDatePickerEditor");
|
|
150
|
+
export {
|
|
151
|
+
ke as useOwpTreeGridDatePickerEditor
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=useOwpTreeGridDatePickerEditor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOwpTreeGridDatePickerEditor.js","sources":["../../../../../src/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.tsx"],"sourcesContent":["import {\n VALUE_DATE_FORMATTER,\n VALUE_TIME_FORMATTER,\n} from '@/components/OwpPicker/constants';\nimport { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport ClickAwayListener from '@mui/material/ClickAwayListener';\nimport Paper from '@mui/material/Paper';\nimport Popper, { type PopperProps } from '@mui/material/Popper';\nimport { enUS } from 'date-fns/locale/en-US';\nimport { ko } from 'date-fns/locale/ko';\nimport dayjs from 'dayjs';\nimport {\n type MouseEvent,\n type RefObject,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport ReactDatePicker, {\n registerLocale,\n setDefaultLocale,\n} from 'react-datepicker';\nimport type {\n OwpTreeGridDatePickerEditorConfig,\n OwpTreeGridRowModel,\n} from '../../OwpTreeGrid';\n\nregisterLocale('ko', ko);\nregisterLocale('en', enUS);\nsetDefaultLocale('ko');\n\nconst DATE_TIME_VALUE_FORMATTER = `${VALUE_DATE_FORMATTER} ${VALUE_TIME_FORMATTER}`;\nconst DATE_PICKER_EDITOR_COLUMNS_SEPARATOR = '\\u001f';\nconst TREE_GRID_DATE_PICKER_EDITOR_CLASS = 'OwpTreeGridDatePickerEditor';\n\ntype TreeGridDatePickerColumn = TCol & {\n OnClickSideDate?: string;\n};\n\ntype TreeGridDatePickerEditorState<T> = {\n grid: TGrid;\n row: OwpTreeGridRowModel<T>;\n col: string;\n anchorRect: DOMRect;\n value?: string;\n};\n\ninterface UseOwpTreeGridDatePickerEditorParams<T> {\n config?: OwpTreeGridDatePickerEditorConfig;\n treeGridInstanceRef: RefObject<TGrid>;\n isTreeGridReady: boolean;\n onValueChange?: (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: string,\n ) => void;\n}\n\n/** DatePicker editor 활성 여부 */\nconst isDatePickerEditorEnabled = (config?: OwpTreeGridDatePickerEditorConfig) =>\n config?.enabled !== false;\n\n/** DatePicker editor 값 포맷 */\nconst getDatePickerEditorValueFormatter = (\n col: string,\n columns: ReadonlySet<string>,\n config?: OwpTreeGridDatePickerEditorConfig,\n) => {\n if (!config?.showTimeInput && !config?.showTimeSelect) {\n return VALUE_DATE_FORMATTER;\n }\n\n return columns.size === 0 || columns.has(col) ? DATE_TIME_VALUE_FORMATTER : VALUE_DATE_FORMATTER;\n};\n\n/** TreeGrid CanEdit 명시 활성 여부 */\nconst isTreeGridCanEditEnabled = (value: unknown) => value === 1 || value === '1';\n\n/** TreeGrid CanEdit 명시 비활성 여부 */\nconst isTreeGridCanEditDisabled = (value: unknown) =>\n value === 0 || value === '0' || value === false;\n\n/** TreeGrid 표시 행 여부 */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot') {\n return false;\n }\n\n return row.Kind === 'Data' || isTreeGridCanEditEnabled((row as { Added?: unknown }).Added);\n};\n\n/** TreeGrid 날짜 셀 편집 가능 여부 */\nconst isEditableDatePickerCell = <T,>(\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n columns: ReadonlySet<string>,\n) => {\n if (columns.size > 0 && !columns.has(col)) {\n return false;\n }\n\n const column = grid.Cols?.[col];\n const cellCanEdit = (row as Record<string, unknown>)[`${col}CanEdit`];\n const hasCellCanEdit = cellCanEdit !== undefined && cellCanEdit !== null;\n const canEdit = hasCellCanEdit\n ? isTreeGridCanEditEnabled(cellCanEdit)\n : isTreeGridCanEditEnabled(column?.CanEdit);\n\n return (\n column?.Type === 'Date' &&\n isDisplayTreeGridRow(row) &&\n !isTreeGridCanEditDisabled(row.CanEdit) &&\n canEdit &&\n row.Deleted !== 1\n );\n};\n\n/** TreeGrid DatePicker editor 컬럼 설정 */\nconst configureTreeGridDatePickerColumns = (grid: TGrid | null, columns: readonly string[]) => {\n if (!grid) {\n return;\n }\n\n const targetColumns =\n columns.length > 0\n ? columns\n : Object.keys(grid.Cols ?? {}).filter((col) => grid.Cols?.[col]?.Type === 'Date');\n\n targetColumns.forEach((col) => {\n const column = grid.Cols?.[col] as TreeGridDatePickerColumn | undefined;\n\n if (!column || column.Type !== 'Date' || !isTreeGridCanEditEnabled(column.CanEdit)) {\n return;\n }\n\n column.Button = 'Date';\n column.OnClickSideDate = 'Focus';\n column.AutoCalendar = 0;\n column.CalendarButtons = 0;\n });\n\n grid.Rerender?.(1, 1);\n};\n\n/** OwpTreeGrid Date 셀 React DatePicker editor */\nexport const useOwpTreeGridDatePickerEditor = <T,>({\n config,\n treeGridInstanceRef,\n isTreeGridReady,\n onValueChange,\n}: UseOwpTreeGridDatePickerEditorParams<T>) => {\n const { t, i18n } = useOwpTranslation();\n const [editorState, setEditorState] = useState<TreeGridDatePickerEditorState<T> | null>(null);\n const enabled = isDatePickerEditorEnabled(config);\n const columnsKey = config?.columns?.join(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) ?? '';\n const columns = useMemo(\n () => (columnsKey ? columnsKey.split(DATE_PICKER_EDITOR_COLUMNS_SEPARATOR) : []),\n [columnsKey],\n );\n const columnSet = useMemo(() => new Set(columns), [columns]);\n const languageId = i18n.resolvedLanguage ?? i18n.language ?? 'kr';\n const datePickerLocale = languageId === 'kr' ? 'ko' : 'en';\n\n useEffect(() => {\n if (!enabled || !isTreeGridReady) {\n return;\n }\n\n configureTreeGridDatePickerColumns(treeGridInstanceRef.current, columns);\n }, [columns, enabled, isTreeGridReady, treeGridInstanceRef]);\n\n const closeEditor = useCallback(() => {\n setEditorState(null);\n }, []);\n\n const handleDatePickerEditorCellClick = useCallback(\n (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n _x: number,\n _y: number,\n event: Event,\n ) => {\n if (!enabled || !isEditableDatePickerCell(grid, row, col, columnSet)) {\n closeEditor();\n return undefined;\n }\n\n const cellElement = grid.GetCell(row, col) as HTMLElement | null;\n\n if (!cellElement) {\n return undefined;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n setEditorState({\n grid,\n row,\n col,\n anchorRect: cellElement.getBoundingClientRect(),\n value: grid.GetString(row, col) || grid.GetValue(row, col),\n });\n\n return 1;\n },\n [closeEditor, columnSet, enabled],\n );\n\n const selectedValue = useMemo(() => {\n if (!editorState?.value) {\n return null;\n }\n\n const dateValue = dayjs(editorState.value);\n\n return dateValue.isValid() ? dateValue.toDate() : null;\n }, [editorState?.value]);\n\n const anchorEl = useMemo<PopperProps['anchorEl']>(() => {\n if (!editorState) {\n return null;\n }\n\n return {\n getBoundingClientRect: () => editorState.anchorRect,\n };\n }, [editorState]);\n const popperContainer = useMemo(() => {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document.getElementById('calendar-portal') ?? undefined;\n }, []);\n\n const handleSelect = (dateValue: Date | null) => {\n if (!editorState) {\n return;\n }\n\n const nextValue = dateValue\n ? dayjs(dateValue).format(getDatePickerEditorValueFormatter(editorState.col, columnSet, config))\n : '';\n\n editorState.grid.SetString(editorState.row, editorState.col, nextValue, 1);\n onValueChange?.(editorState.grid, editorState.row, editorState.col, nextValue);\n closeEditor();\n };\n\n const handleEditorMouseEvent = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (!editorState) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n closeEditor();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n\n return () => {\n window.removeEventListener('keydown', handleKeyDown);\n };\n }, [closeEditor, editorState]);\n\n const datePickerEditorElement = editorState ? (\n <Popper\n open\n anchorEl={anchorEl}\n container={popperContainer}\n placement=\"bottom-start\"\n sx={{ zIndex: 1400 }}\n >\n <ClickAwayListener onClickAway={closeEditor}>\n <Paper\n className={TREE_GRID_DATE_PICKER_EDITOR_CLASS}\n elevation={8}\n onClick={handleEditorMouseEvent}\n onMouseDown={handleEditorMouseEvent}\n sx={{\n borderRadius: 1,\n lineHeight: 0,\n overflow: 'hidden',\n '& .react-datepicker': {\n border: 0,\n display: 'block',\n lineHeight: 'normal',\n },\n '& .react-datepicker__month-container': {\n float: 'none',\n },\n '& .react-datepicker__month': {\n marginBottom: 0,\n },\n }}\n >\n <ReactDatePicker\n inline\n locale={datePickerLocale}\n selected={selectedValue}\n onChange={(dateValue: Date | null) => handleSelect(dateValue)}\n showTimeInput={config?.showTimeInput}\n showTimeSelect={config?.showTimeSelect}\n timeIntervals={config?.timeIntervals}\n dateFormat={config?.showTimeInput || config?.showTimeSelect ? 'Pp' : 'P'}\n timeFormat={VALUE_TIME_FORMATTER}\n timeCaption={`${t('Common.시간')}: `}\n timeInputLabel={`${t('Common.시간')}: `}\n />\n </Paper>\n </ClickAwayListener>\n </Popper>\n ) : null;\n\n return {\n datePickerEditorElement,\n handleDatePickerEditorCellClick,\n };\n};\n"],"names":["registerLocale","ko","enUS","setDefaultLocale","DATE_TIME_VALUE_FORMATTER","VALUE_DATE_FORMATTER","VALUE_TIME_FORMATTER","DATE_PICKER_EDITOR_COLUMNS_SEPARATOR","TREE_GRID_DATE_PICKER_EDITOR_CLASS","isDatePickerEditorEnabled","__name","config","getDatePickerEditorValueFormatter","col","columns","isTreeGridCanEditEnabled","value","isTreeGridCanEditDisabled","isDisplayTreeGridRow","row","isEditableDatePickerCell","grid","column","_a","cellCanEdit","hasCellCanEdit","canEdit","configureTreeGridDatePickerColumns","_b","useOwpTreeGridDatePickerEditor","treeGridInstanceRef","isTreeGridReady","onValueChange","t","i18n","useOwpTranslation","editorState","setEditorState","useState","enabled","columnsKey","useMemo","columnSet","datePickerLocale","useEffect","closeEditor","useCallback","handleDatePickerEditorCellClick","_x","_y","event","cellElement","selectedValue","dateValue","dayjs","anchorEl","popperContainer","handleSelect","nextValue","handleEditorMouseEvent","handleKeyDown","jsx","Popper","ClickAwayListener","Paper","ReactDatePicker"],"mappings":"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"}
|