@owp/core 2.5.3 → 2.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/_virtual/index11.js +2 -2
  2. package/dist/_virtual/index13.js +2 -2
  3. package/dist/_virtual/index14.js +2 -2
  4. package/dist/_virtual/index15.js +2 -2
  5. package/dist/components/OwpMrtTable/OwpMrtTable.js +250 -258
  6. package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
  7. package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js +166 -0
  8. package/dist/components/OwpSnackbarContent/OwpSnackbarContent.js.map +1 -0
  9. package/dist/components/OwpTable/OwpDataTable.js +316 -288
  10. package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
  11. package/dist/components/OwpTable/OwpFieldTable.js +102 -58
  12. package/dist/components/OwpTable/OwpFieldTable.js.map +1 -1
  13. package/dist/components/OwpTable/OwpTable.js +163 -164
  14. package/dist/components/OwpTable/OwpTable.js.map +1 -1
  15. package/dist/components/OwpTable/internal/treeGridTableStyle.js +77 -0
  16. package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -0
  17. package/dist/components/OwpTreeGrid/OwpTreeGrid.js +197 -252
  18. package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
  19. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +172 -131
  20. package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
  21. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +462 -0
  22. package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -0
  23. package/dist/configs/defaultConfig.js +67 -44
  24. package/dist/configs/defaultConfig.js.map +1 -1
  25. package/dist/constants/gridTheme.js +60 -10
  26. package/dist/constants/gridTheme.js.map +1 -1
  27. package/dist/constants/tableTheme.js +16 -0
  28. package/dist/constants/tableTheme.js.map +1 -0
  29. package/dist/constants/treeGrid.js +44 -26
  30. package/dist/constants/treeGrid.js.map +1 -1
  31. package/dist/constants.js +21 -20
  32. package/dist/contexts/OwpUiProvider.js +59 -38
  33. package/dist/contexts/OwpUiProvider.js.map +1 -1
  34. package/dist/index.js +111 -110
  35. package/dist/layout/components/toolbar/ToolbarLayout.js +5 -4
  36. package/dist/layout/components/toolbar/ToolbarLayout.js.map +1 -1
  37. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
  38. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
  39. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
  40. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
  41. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
  42. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
  43. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
  44. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
  45. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
  46. package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
  47. package/dist/types/components/OwpSnackbarContent/OwpSnackbarContent.d.ts +2 -0
  48. package/dist/types/components/OwpTable/OwpTable.d.ts +3 -1
  49. package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +105 -0
  50. package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +5 -1
  51. package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +20 -0
  52. package/dist/types/configs/defaultConfig.d.ts +22 -0
  53. package/dist/types/constants/gridTheme.d.ts +58 -0
  54. package/dist/types/constants/tableTheme.d.ts +18 -0
  55. package/dist/types/constants/treeGrid.d.ts +5 -0
  56. package/dist/types/types/OwpGridThemeTypes.d.ts +34 -0
  57. package/dist/types/types/OwpSettingsTypes.d.ts +9 -0
  58. package/dist/types/types/OwpTableThemeTypes.d.ts +16 -0
  59. package/dist/types/types/index.d.ts +3 -2
  60. package/dist/types/utils/treeGridUtil.d.ts +1 -0
  61. package/dist/utils/exceljsBrowser.js +45 -48
  62. package/dist/utils/exceljsBrowser.js.map +1 -1
  63. package/dist/utils/treeGridUtil.js +66 -66
  64. package/dist/utils/treeGridUtil.js.map +1 -1
  65. 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 { useGetCurrentSettings } from '@/hooks/useOwpSettings';\nimport { 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 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';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridThemeContainerStyle = CSSProperties & {\n '--owp-tree-grid-header-background-color'?: string;\n '--owp-tree-grid-header-color'?: string;\n '--owp-tree-grid-header-font-size'?: string;\n '--owp-tree-grid-header-font-weight'?: string;\n '--owp-tree-grid-cell-font-size'?: string;\n};\n\nconst TREE_GRID_STYLE_PREFIXES = [\n 'TS',\n 'TW',\n 'TB',\n 'TM',\n 'TT',\n 'CF',\n 'CL',\n 'CO',\n 'CG',\n 'CB',\n 'CQ',\n 'CE',\n 'CS',\n 'CR',\n 'CP',\n 'CC',\n] as const;\nconst TREE_GRID_THEME_WRAPPER_CLASS = 'owp-tree-grid-theme';\n\nconst toTreeGridCssValue = (value: number | string) => {\n return typeof value === 'number' ? `${value}px` : value;\n};\n\nconst createTreeGridSelectors = ({\n rowSuffix,\n suffixes,\n withChildren = false,\n}: {\n rowSuffix?: string;\n suffixes: readonly string[];\n withChildren?: boolean;\n}) => {\n return TREE_GRID_STYLE_PREFIXES.flatMap((prefix) => {\n return suffixes.flatMap((suffix) => {\n const wrapperSelector = `.${TREE_GRID_THEME_WRAPPER_CLASS}`;\n const rowSelector = rowSuffix ? ` .${prefix}${rowSuffix}` : '';\n const selector = `${wrapperSelector}${rowSelector} .${prefix}${suffix}`;\n\n return withChildren ? [selector, `${selector} *`] : [selector];\n });\n }).join(', ');\n};\n\nconst treeGridBodyTypographySelector = createTreeGridSelectors({\n suffixes: ['Main'],\n withChildren: true,\n});\n\nconst treeGridHeaderTypographySelector = createTreeGridSelectors({\n rowSuffix: 'HeaderRow',\n suffixes: ['CellHeader', 'CellIndex', 'GanttHeaderBase', 'LevelButton'],\n withChildren: true,\n});\n\nconst treeGridHeaderSurfaceSelector = createTreeGridSelectors({\n rowSuffix: 'HeaderRow',\n suffixes: [\n 'CellHeader',\n 'CellIndex',\n 'EditHeaderInput',\n 'EditHeaderTextarea',\n 'ColorFocusedCellHeader',\n 'ColorHoveredCellHeader',\n 'ColorHoveredCellIndex',\n 'HeaderFocus',\n 'HeaderDrag',\n ],\n});\n\nconst treeGridThemeStyles = {\n [treeGridBodyTypographySelector]: {\n fontSize: 'var(--owp-tree-grid-cell-font-size, 13px)',\n fontWeight: 'normal',\n lineHeight: '16px',\n },\n [treeGridHeaderTypographySelector]: {\n color: 'var(--owp-tree-grid-header-color, #ffffff) !important',\n fontSize: 'var(--owp-tree-grid-header-font-size, 14px) !important',\n fontWeight: 'var(--owp-tree-grid-header-font-weight, normal) !important',\n lineHeight: '16px',\n },\n [treeGridHeaderSurfaceSelector]: {\n backgroundColor: 'var(--owp-tree-grid-header-background-color, #586980) !important',\n color: 'var(--owp-tree-grid-header-color, #ffffff) !important',\n },\n};\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 currentSettings = useGetCurrentSettings();\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 treeGridTheme = useMemo(\n () => resolveOwpGridTheme(currentSettings?.theme?.main?.grid),\n [currentSettings],\n );\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: TreeGridThemeContainerStyle = {\n height,\n width,\n '--owp-tree-grid-header-background-color': treeGridTheme.header.backgroundColor,\n '--owp-tree-grid-header-color': treeGridTheme.header.color,\n '--owp-tree-grid-header-font-size': toTreeGridCssValue(treeGridTheme.header.fontSize),\n '--owp-tree-grid-header-font-weight': String(treeGridTheme.header.fontWeight),\n '--owp-tree-grid-cell-font-size': toTreeGridCssValue(treeGridTheme.cell.fontSize),\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\n ref={treeGridContainerRef}\n className={[TREE_GRID_THEME_WRAPPER_CLASS, containerClassName].filter(Boolean).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":["TREE_GRID_STYLE_PREFIXES","TREE_GRID_THEME_WRAPPER_CLASS","toTreeGridCssValue","__name","value","createTreeGridSelectors","rowSuffix","suffixes","withChildren","prefix","suffix","wrapperSelector","rowSelector","selector","treeGridBodyTypographySelector","treeGridHeaderTypographySelector","treeGridHeaderSurfaceSelector","treeGridThemeStyles","OwpTreeGrid","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","currentSettings","useGetCurrentSettings","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","treeGridTheme","useMemo","resolveOwpGridTheme","_b","_a","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","jsxs","jsx","GlobalStyles","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 {\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_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 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 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 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 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 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 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 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 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 });\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={[TREE_GRID_THEME_WRAPPER_CLASS, containerClassName].filter(Boolean).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","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","currentSettings","useGetCurrentSettings","currentGridThemeConfig","_b","_a","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","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","jsx","GlobalStyles","treeGridThemeStyles","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
@@ -1,190 +1,231 @@
1
- var E = Object.defineProperty;
2
- var G = (e, t) => E(e, "name", { value: t, configurable: !0 });
3
- import { getTreeGridTextResourceUrl as k, TREEGRID_INPUT_CELL_COLOR as v } from "../../../constants/treeGrid.js";
4
- import { highlightTreeGridCellById as U } from "../../../utils/treeGridUtil.js";
5
- import { enqueueSnackbar as V } from "notistack";
6
- import { applyTreeGridLayoutToGrid as $ } from "./treeGridLayout.js";
7
- import { resolveTreeGridColumnEditValue as F, resetTreeGridColumnEditRulesState as P, syncTreeGridColumnEditRules as M } from "./treeGridColumnEditRules.js";
8
- import { measureTreeGridPerf as j } from "./utils/perf.js";
9
- import { debounce as O } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/debounce.js";
10
- import { get as q } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/get.js";
11
- import { isEmpty as z } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
12
- const K = Number.parseInt(
13
- v.replace("#", ""),
14
- 16
15
- ), fe = 300, L = /* @__PURE__ */ G((e) => `${e}?noCache=${Date.now()}`, "appendNoCacheQuery"), Q = /* @__PURE__ */ G((e) => e != null && e.includes("assets") ? L(e) : (
1
+ var P = Object.defineProperty;
2
+ var G = (e, t) => P(e, "name", { value: t, configurable: !0 });
3
+ import { getTreeGridTextResourceUrl as U } from "../../../constants/treeGrid.js";
4
+ import { highlightTreeGridCellById as $ } from "../../../utils/treeGridUtil.js";
5
+ import { enqueueSnackbar as M } from "notistack";
6
+ import { applyTreeGridLayoutToGrid as W } from "./treeGridLayout.js";
7
+ import { resolveTreeGridColumnEditValue as Y, resetTreeGridColumnEditRulesState as j, syncTreeGridColumnEditRules as q } from "./treeGridColumnEditRules.js";
8
+ import { measureTreeGridPerf as z } from "./utils/perf.js";
9
+ import { debounce as m } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/debounce.js";
10
+ import { get as K } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/get.js";
11
+ import { isEmpty as Q } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
12
+ const ae = 300, J = [255, 255, 166], X = [240, 240, 240], Z = [248, 248, 248], g = [255, 255, 255], H = [255, 255, 254], ee = [242, 242, 242], A = /* @__PURE__ */ G((e) => `${e}?noCache=${Date.now()}`, "appendNoCacheQuery"), te = /* @__PURE__ */ G((e) => e != null && e.includes("assets") ? A(e) : (
16
13
  // @ts-expect-error - API base URL env is provided by host app
17
14
  `undefined/${e}?noCache=${Date.now()}`
18
- ), "resolveTreeGridDataUrl"), J = /* @__PURE__ */ G((e, t, i) => e ? { Url: Q(t) } : { Data: { Body: [z(i) ? [] : i] } }, "buildTreeGridDataSource"), Ce = /* @__PURE__ */ G(({
15
+ ), "resolveTreeGridDataUrl"), ne = /* @__PURE__ */ G((e, t, o) => e ? { Url: te(t) } : { Data: { Body: [Q(o) ? [] : o] } }, "buildTreeGridDataSource"), pe = /* @__PURE__ */ G(({
19
16
  id: e,
20
17
  layoutUrl: t,
21
- dataUrl: i,
22
- bodyData: C,
23
- useDataUrl: m,
24
- width: p,
25
- height: l,
26
- languageId: s
18
+ dataUrl: o,
19
+ bodyData: i,
20
+ useDataUrl: s,
21
+ width: R,
22
+ height: D,
23
+ languageId: _
27
24
  }) => ({
28
25
  id: e,
29
- Layout: { Url: L(t ?? "") },
30
- Data: J(m, i, C),
26
+ Layout: { Url: A(t ?? "") },
27
+ Data: ne(s, o, i),
31
28
  Text: {
32
- Url: k(s)
29
+ Url: U(_)
33
30
  },
34
- width: p,
35
- height: l,
31
+ width: R,
32
+ height: D,
36
33
  Debug: "Error"
37
- }), "buildTreeGridInitializationOptions"), h = /* @__PURE__ */ G((e) => q(e, "Data.Data.Data.Body.0"), "getTreeGridBodyData"), W = /* @__PURE__ */ G((e) => Array.isArray(e) ? e.length : 0, "getTreeGridBodyDataCount"), X = /* @__PURE__ */ G((e) => {
34
+ }), "buildTreeGridInitializationOptions"), v = /* @__PURE__ */ G((e) => K(e, "Data.Data.Data.Body.0"), "getTreeGridBodyData"), re = /* @__PURE__ */ G((e) => Array.isArray(e) ? e.length : 0, "getTreeGridBodyDataCount"), oe = /* @__PURE__ */ G((e) => {
38
35
  const t = e == null ? void 0 : e.Visible;
39
36
  return !!e && t !== 0 && t !== !1 && t !== "0";
40
- }, "isVisibleTreeGridRow"), Y = /* @__PURE__ */ G((e) => {
37
+ }, "isVisibleTreeGridRow"), ue = /* @__PURE__ */ G((e) => {
41
38
  const t = e == null ? void 0 : e.Added;
42
39
  return !!e && t !== 0 && t !== !1 && t !== "0" && t !== void 0;
43
- }, "isAddedTreeGridRow"), S = /* @__PURE__ */ G((e) => !e || e.Fixed === "Foot" || !X(e) ? !1 : e.Kind === "Data" || Y(e), "isDisplayTreeGridRow"), Z = /* @__PURE__ */ G((e, t, i) => !t || !i || !S(t) ? !1 : e.CanEdit(t, i) === 1, "isEditableTreeGridCell"), g = /* @__PURE__ */ G((e, t, i) => {
44
- const C = e.GetAttribute(t, i, "Color");
45
- return C != null && C !== "";
46
- }, "hasExplicitTreeGridCellColor"), H = /* @__PURE__ */ G((e, t, i) => {
47
- if (!(!t || !Z(e, t, i) || g(e, t, i)))
48
- return K;
49
- }, "getEditableTreeGridCellDefaultColor"), de = /* @__PURE__ */ G((e) => {
40
+ }, "isAddedTreeGridRow"), E = /* @__PURE__ */ G((e) => !e || e.Fixed === "Foot" || !oe(e) ? !1 : e.Kind === "Data" || ue(e), "isDisplayTreeGridRow"), ce = /* @__PURE__ */ G((e, t, o) => !t || !o || !E(t) ? !1 : e.CanEdit(t, o) === 1, "isEditableTreeGridCell"), ie = /* @__PURE__ */ G((e, t, o) => {
41
+ const i = e.GetAttribute(t, o, "Color");
42
+ return i != null && i !== "";
43
+ }, "hasExplicitTreeGridCellColor"), Ge = /* @__PURE__ */ G((e, t, o, i) => {
44
+ if (!(!t || i === void 0 || !ce(e, t, o) || ie(e, t, o)))
45
+ return i;
46
+ }, "getEditableTreeGridCellDefaultColor"), S = /* @__PURE__ */ G((e, t, o, i) => e === i[0] && t === i[1] && o === i[2], "matchesTreeGridRgbColor"), Te = /* @__PURE__ */ G((e, t, o) => {
47
+ if (!t || !o || !E(t))
48
+ return !1;
49
+ const i = e.IsSelected(t, o);
50
+ return i !== 0 && i !== !1 && i !== void 0 && i !== null;
51
+ }, "isTreeGridSelectedCellState"), fe = /* @__PURE__ */ G((e, t, o) => !t || !o || !E(t) || e.ARow !== t || e.ACol !== o ? !1 : e.CanEdit(t, o) === 0, "isTreeGridReadonlyHoveredCellState"), Ce = /* @__PURE__ */ G((e, t, o) => !t || !o || !E(t) || e.ARow !== t || e.ACol !== o ? !1 : e.CanEdit(t, o) === 2, "isTreeGridPreviewHoveredCellState"), se = /* @__PURE__ */ G(({
52
+ grid: e,
53
+ row: t,
54
+ col: o,
55
+ r: i,
56
+ g: s,
57
+ b: R,
58
+ selectedCellBackgroundColor: D,
59
+ hoverCellBackgroundColor: _
60
+ }) => {
61
+ if (Te(e, t, o) && S(i, s, R, J))
62
+ return D;
63
+ if (fe(e, t, o) && (S(i, s, R, X) || S(i, s, R, Z)) || Ce(e, t, o) && (S(i, s, R, g) || S(i, s, R, H) || S(i, s, R, ee)))
64
+ return _;
65
+ }, "resolveTreeGridStateBackgroundColor"), we = /* @__PURE__ */ G((e) => {
50
66
  if (!e)
51
67
  return !1;
52
68
  if (typeof e.GetFirst == "function" && typeof e.GetNext == "function") {
53
69
  let t = e.GetFirst();
54
70
  for (; t; ) {
55
- if (S(t))
71
+ if (E(t))
56
72
  return !0;
57
73
  t = e.GetNext(t);
58
74
  }
59
75
  return !1;
60
76
  }
61
- return Object.values(e.Rows ?? {}).some((t) => S(t));
62
- }, "hasTreeGridDisplayDataRows"), me = /* @__PURE__ */ G((e, t, i) => {
63
- var m;
64
- const C = (m = e.Data) == null ? void 0 : m.Data;
77
+ return Object.values(e.Rows ?? {}).some((t) => E(t));
78
+ }, "hasTreeGridDisplayDataRows"), ye = /* @__PURE__ */ G((e, t, o) => {
79
+ var s;
80
+ const i = (s = e.Data) == null ? void 0 : s.Data;
65
81
  e.Data.Data = {
66
- ...C,
82
+ ...i,
67
83
  Data: { Body: [t || []] },
68
84
  Url: ""
69
- }, e.ReloadBody(i);
70
- }, "replaceTreeGridBodyData"), we = /* @__PURE__ */ G(({
85
+ }, e.ReloadBody(o);
86
+ }, "replaceTreeGridBodyData"), Le = /* @__PURE__ */ G(({
71
87
  id: e,
72
88
  latestEventHandlersRef: t,
73
- highlightEditableCellsRef: i,
74
- highlightChangedCellsRef: C,
75
- treeGridInstanceRef: m,
76
- treeGridInitStartedAtRef: p,
77
- latestLayoutOverridesRef: l,
78
- appliedLayoutOverridesRef: s,
79
- appliedBodyDataPropRef: x,
80
- latestColumnEditRulesRef: A,
81
- latestColumnEditRuleLookupRef: R,
82
- appliedColumnEditRulesRef: N,
83
- columnEditRulesStateRef: _,
84
- hasAppliedInitialLayoutRef: b,
85
- syncHasDisplayDataRows: w,
86
- setIsTreeGridReady: a
89
+ highlightEditableCellsRef: o,
90
+ highlightChangedCellsRef: i,
91
+ editableCellBackgroundColorValueRef: s,
92
+ changedCellBackgroundColorRef: R,
93
+ selectedCellBackgroundColorRef: D,
94
+ hoverCellBackgroundColorRef: _,
95
+ treeGridInstanceRef: h,
96
+ treeGridInitStartedAtRef: a,
97
+ latestLayoutOverridesRef: N,
98
+ appliedLayoutOverridesRef: V,
99
+ appliedBodyDataPropRef: k,
100
+ latestColumnEditRulesRef: b,
101
+ latestColumnEditRuleLookupRef: p,
102
+ appliedColumnEditRulesRef: x,
103
+ columnEditRulesStateRef: w,
104
+ hasAppliedInitialLayoutRef: y,
105
+ syncHasDisplayDataRows: l,
106
+ setIsTreeGridReady: F
87
107
  }) => {
88
- const c = t.current;
89
- window.TGSetEvent("OnRowAdd", e, (r, o) => {
90
- var n, u;
91
- o.CanEdit = 1, o.CanDelete = 1, (u = (n = t.current) == null ? void 0 : n.onRowAdd) == null || u.call(n, r, o);
92
- }), window.TGSetEvent("OnRowAdded", e, (r) => {
93
- w(r);
94
- }), typeof (c == null ? void 0 : c.onRowClick) == "function" && window.TGSetEvent(
108
+ const T = t.current;
109
+ window.TGSetEvent("OnRowAdd", e, (n, u) => {
110
+ var r, c;
111
+ u.CanEdit = 1, u.CanDelete = 1, (c = (r = t.current) == null ? void 0 : r.onRowAdd) == null || c.call(r, n, u);
112
+ }), window.TGSetEvent("OnRowAdded", e, (n) => {
113
+ l(n);
114
+ }), typeof (T == null ? void 0 : T.onRowClick) == "function" && window.TGSetEvent(
95
115
  "OnClick",
96
116
  e,
97
- O((r, o, n, u, T, f) => {
98
- var d, D;
99
- (D = (d = t.current) == null ? void 0 : d.onRowClick) == null || D.call(
117
+ m((n, u, r, c, f, C) => {
118
+ var d, O;
119
+ (O = (d = t.current) == null ? void 0 : d.onRowClick) == null || O.call(
100
120
  d,
101
- r,
102
- o,
103
121
  n,
104
122
  u,
105
- T,
106
- f
123
+ r,
124
+ c,
125
+ f,
126
+ C
107
127
  );
108
128
  }, 300)
109
- ), typeof (c == null ? void 0 : c.onClickButton) == "function" && window.TGSetEvent(
129
+ ), typeof (T == null ? void 0 : T.onClickButton) == "function" && window.TGSetEvent(
110
130
  "OnClickButton",
111
131
  e,
112
- O((r, o, n, u) => {
113
- var T, f;
114
- (f = (T = t.current) == null ? void 0 : T.onClickButton) == null || f.call(
115
- T,
116
- r,
117
- o,
132
+ m((n, u, r, c) => {
133
+ var f, C;
134
+ (C = (f = t.current) == null ? void 0 : f.onClickButton) == null || C.call(
135
+ f,
118
136
  n,
119
- u
137
+ u,
138
+ r,
139
+ c
120
140
  );
121
141
  }, 300)
122
- ), typeof (c == null ? void 0 : c.onRowDelete) == "function" ? window.TGSetEvent("OnRowDelete", e, (r, o, n) => {
123
- var u, T;
124
- w(r), (T = (u = t.current) == null ? void 0 : u.onRowDelete) == null || T.call(
142
+ ), typeof (T == null ? void 0 : T.onRowDelete) == "function" ? window.TGSetEvent("OnRowDelete", e, (n, u, r) => {
143
+ var c, f;
144
+ l(n), (f = (c = t.current) == null ? void 0 : c.onRowDelete) == null || f.call(
145
+ c,
146
+ n,
125
147
  u,
126
- r,
127
- o,
128
- n
148
+ r
129
149
  );
130
- }) : window.TGSetEvent("OnRowDelete", e, (r) => {
131
- w(r);
132
- }), typeof (c == null ? void 0 : c.onRowUndelete) == "function" ? window.TGSetEvent("OnRowUndelete", e, (r, o) => {
133
- var n, u;
134
- w(r), (u = (n = t.current) == null ? void 0 : n.onRowUndelete) == null || u.call(n, r, o);
135
- }) : window.TGSetEvent("OnRowUndelete", e, (r) => {
136
- w(r);
137
- }), window.TGSetEvent("OnGetDefaultColor", e, (r, o, n) => {
138
- if (!(!i.current || !S(o)))
139
- return H(r, o, n);
140
- }), window.TGSetEvent("OnAfterValueChanged", e, (r, o, n, u) => {
141
- var B, I;
142
- const T = R.current, f = T ? F(T, n, u) : void 0, d = f == null ? void 0 : f.value, D = d ?? u;
143
- f != null && f.invalidText && V(f.invalidText, { variant: "warning" }), d !== void 0 && r.SetValue(o, n, d, 1), C.current && S(o) && U(e, { row: o, col: n });
144
- const y = ((B = t.current) == null ? void 0 : B.onAfterValueChanged) ?? ((I = t.current) == null ? void 0 : I.onRowChange);
145
- y == null || y(r, o, n, D);
146
- }), typeof (c == null ? void 0 : c.onSelect) == "function" && window.TGSetEvent(
150
+ }) : window.TGSetEvent("OnRowDelete", e, (n) => {
151
+ l(n);
152
+ }), typeof (T == null ? void 0 : T.onRowUndelete) == "function" ? window.TGSetEvent("OnRowUndelete", e, (n, u) => {
153
+ var r, c;
154
+ l(n), (c = (r = t.current) == null ? void 0 : r.onRowUndelete) == null || c.call(r, n, u);
155
+ }) : window.TGSetEvent("OnRowUndelete", e, (n) => {
156
+ l(n);
157
+ }), window.TGSetEvent("OnGetDefaultColor", e, (n, u, r) => {
158
+ if (!(!o.current || !E(u)))
159
+ return Ge(
160
+ n,
161
+ u,
162
+ r,
163
+ s.current
164
+ );
165
+ }), window.TGSetEvent("OnGetColor", e, (n, u, r, c, f, C, d) => {
166
+ if (!d)
167
+ return se({
168
+ grid: n,
169
+ row: u,
170
+ col: r,
171
+ r: c,
172
+ g: f,
173
+ b: C,
174
+ selectedCellBackgroundColor: D.current,
175
+ hoverCellBackgroundColor: _.current
176
+ });
177
+ }), window.TGSetEvent("OnAfterValueChanged", e, (n, u, r, c) => {
178
+ var L, I;
179
+ const f = p.current, C = f ? Y(f, r, c) : void 0, d = C == null ? void 0 : C.value, O = d ?? c;
180
+ C != null && C.invalidText && M(C.invalidText, { variant: "warning" }), d !== void 0 && n.SetValue(u, r, d, 1), i.current && E(u) && $(e, {
181
+ row: u,
182
+ col: r,
183
+ backgroundColor: R.current
184
+ });
185
+ const B = ((L = t.current) == null ? void 0 : L.onAfterValueChanged) ?? ((I = t.current) == null ? void 0 : I.onRowChange);
186
+ B == null || B(n, u, r, O);
187
+ }), typeof (T == null ? void 0 : T.onSelect) == "function" && window.TGSetEvent(
147
188
  "OnSelect",
148
189
  e,
149
- O((r) => {
150
- var n, u;
151
- const o = r.GetSelRows() ?? [];
152
- (u = (n = t.current) == null ? void 0 : n.onSelect) == null || u.call(n, o);
190
+ m((n) => {
191
+ var r, c;
192
+ const u = n.GetSelRows() ?? [];
193
+ (c = (r = t.current) == null ? void 0 : r.onSelect) == null || c.call(r, u);
153
194
  }, 100)
154
- ), typeof (c == null ? void 0 : c.onSave) == "function" && window.TGSetEvent("OnSave", e, (r, o, n) => {
155
- var u, T;
156
- (T = (u = t.current) == null ? void 0 : u.onSave) == null || T.call(
195
+ ), typeof (T == null ? void 0 : T.onSave) == "function" && window.TGSetEvent("OnSave", e, (n, u, r) => {
196
+ var c, f;
197
+ (f = (c = t.current) == null ? void 0 : c.onSave) == null || f.call(
198
+ c,
199
+ n,
157
200
  u,
158
- r,
159
- o,
160
- n
201
+ r
161
202
  );
162
203
  }), window.TGSetEvent(
163
204
  "OnReady",
164
205
  e,
165
- O((r) => {
166
- var o, n;
167
- if (!b.current) {
168
- const u = l.current;
169
- b.current = !0, $(r, u), P(_.current), M(
170
- r,
171
- R.current,
172
- _.current
173
- ), m.current = r, s.current = u, x.current = h(r), N.current = A.current, w(r), a(!0), j(e, "TreeGrid init ready", p.current, {
174
- bodyRowCount: W(
175
- h(r)
206
+ m((n) => {
207
+ var u, r;
208
+ if (!y.current) {
209
+ const c = N.current;
210
+ y.current = !0, W(n, c), j(w.current), q(
211
+ n,
212
+ p.current,
213
+ w.current
214
+ ), h.current = n, V.current = c, k.current = v(n), x.current = b.current, l(n), F(!0), z(e, "TreeGrid init ready", a.current, {
215
+ bodyRowCount: re(
216
+ v(n)
176
217
  )
177
- }), p.current = null, (n = (o = t.current) == null ? void 0 : o.onReady) == null || n.call(o, r);
218
+ }), a.current = null, (r = (u = t.current) == null ? void 0 : u.onReady) == null || r.call(u, n);
178
219
  }
179
220
  }, 100)
180
221
  );
181
222
  }, "bindTreeGridEvents");
182
223
  export {
183
- fe as TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,
184
- we as bindTreeGridEvents,
185
- Ce as buildTreeGridInitializationOptions,
186
- W as getTreeGridBodyDataCount,
187
- de as hasTreeGridDisplayDataRows,
188
- me as replaceTreeGridBodyData
224
+ ae as TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,
225
+ Le as bindTreeGridEvents,
226
+ pe as buildTreeGridInitializationOptions,
227
+ re as getTreeGridBodyDataCount,
228
+ we as hasTreeGridDisplayDataRows,
229
+ ye as replaceTreeGridBodyData
189
230
  };
190
231
  //# sourceMappingURL=treeGridRuntime.js.map