@owp/core 2.2.4 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index11.js +2 -2
- package/dist/_virtual/index12.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index16.js +2 -5
- package/dist/_virtual/index16.js.map +1 -1
- package/dist/_virtual/index17.js +2 -2
- package/dist/_virtual/index6.js +5 -2
- package/dist/_virtual/index6.js.map +1 -1
- package/dist/_virtual/index7.js +2 -2
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js +68 -149
- package/dist/components/OwpCommonCode/OwpCommonCodeSelector.js.map +1 -1
- package/dist/components/OwpDialog/OwpDialog.js +48 -46
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js +24 -24
- package/dist/components/OwpErrorStatusPage/OwpErrorStatusPage.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +2 -2
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.js → internal/OwpMrtTableNoDataOverlay.js} +1 -1
- package/dist/components/OwpMrtTable/internal/OwpMrtTableNoDataOverlay.js.map +1 -0
- package/dist/components/OwpMrtTable/{OwpMrtTableTopToolbar.js → internal/OwpMrtTableTopToolbar.js} +3 -3
- package/dist/components/OwpMrtTable/internal/OwpMrtTableTopToolbar.js.map +1 -0
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js +52 -38
- package/dist/components/OwpOptionSelector/OwpOptionSelector.js.map +1 -1
- package/dist/components/OwpPageCarded/OwpPageCarded.js +81 -77
- package/dist/components/OwpPageCarded/OwpPageCarded.js.map +1 -1
- package/dist/components/OwpPageCarded/{OwpPageCardedHeader.js → internal/OwpPageCardedHeader.js} +2 -2
- package/dist/components/OwpPageCarded/internal/OwpPageCardedHeader.js.map +1 -0
- package/dist/components/OwpPageCarded/{OwpPageCardedSidebar.js → internal/OwpPageCardedSidebar.js} +3 -3
- package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebar.js.map +1 -0
- package/dist/components/OwpPageCarded/{OwpPageCardedSidebarContent.js → internal/OwpPageCardedSidebarContent.js} +2 -2
- package/dist/components/OwpPageCarded/internal/OwpPageCardedSidebarContent.js.map +1 -0
- package/dist/components/OwpPicker/OwpDatePicker.js +90 -83
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpDateRangePicker.js +57 -50
- package/dist/components/OwpPicker/OwpDateRangePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpTimePicker.js +65 -61
- package/dist/components/OwpPicker/OwpTimePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpWeekDatePicker.js +58 -52
- package/dist/components/OwpPicker/OwpWeekDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/OwpYearRangePicker.js +68 -62
- package/dist/components/OwpPicker/OwpYearRangePicker.js.map +1 -1
- package/dist/components/OwpPicker/{constants.js → constants/index.js} +1 -1
- package/dist/components/OwpPicker/constants/index.js.map +1 -0
- package/dist/components/OwpPicker/{AnimatedCalendarContainer.js → internal/AnimatedCalendarContainer.js} +2 -2
- package/dist/components/OwpPicker/internal/AnimatedCalendarContainer.js.map +1 -0
- package/dist/components/OwpPicker/{CalendarContainer.js → internal/CalendarContainer.js} +2 -2
- package/dist/components/OwpPicker/internal/CalendarContainer.js.map +1 -0
- package/dist/components/OwpPicker/{DatePickerInput.js → internal/DatePickerInput.js} +4 -4
- package/dist/components/OwpPicker/internal/DatePickerInput.js.map +1 -0
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js +266 -0
- package/dist/components/OwpQuerySelector/OwpQuerySelector.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js +390 -0
- package/dist/components/OwpSelectorBase/OwpSelectorAutocomplete.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorBase.js +14 -0
- package/dist/components/OwpSelectorBase/OwpSelectorBase.js.map +1 -0
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js +152 -0
- package/dist/components/OwpSelectorBase/OwpSelectorSelect.js.map +1 -0
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js +120 -0
- package/dist/components/OwpSelectorBase/hooks/useOwpSelectorBase.js.map +1 -0
- package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js +24 -0
- package/dist/components/OwpSelectorBase/utils/querySelectorUtils.js.map +1 -0
- package/dist/components/OwpStyleProvider/OwpStyleProvider.js +90 -42
- package/dist/components/OwpStyleProvider/OwpStyleProvider.js.map +1 -1
- package/dist/components/OwpSuspense/OwpSuspense.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +50 -51
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +163 -308
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js +1 -1
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +1 -1
- package/dist/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.js → internal/OwpTreeGridLoadingOverlay.js} +2 -2
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -0
- package/dist/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.js → internal/OwpTreeGridNoDataOverlay.js} +2 -2
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -0
- package/dist/components/OwpTreeGrid/{utils/index.js → internal/treeGridLayout.js} +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridLayout.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +176 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -0
- package/dist/components/OwpTreeGrid/utils/perf.js.map +1 -0
- package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js +1 -1
- package/dist/components/OwpZoomImageSlider/OwpZoomImageSlider.js.map +1 -1
- package/dist/components/OwpZoomImageSlider/{ZoomImage.js → internal/ZoomImage.js} +1 -1
- package/dist/components/OwpZoomImageSlider/internal/ZoomImage.js.map +1 -0
- package/dist/index.js +100 -104
- package/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js +9 -0
- package/dist/node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@7.3.9_@emotion_react@11.14.0_@types_react@19.2._dc2be6bc014bebdac88a574e3e02c144/node_modules/@mui/icons-material/esm/ArrowDropDown.js.map +1 -0
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js +10 -0
- package/dist/node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isFunction.js.map +1 -0
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/prop-types@15.8.1/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/.pnpm/react-imask@7.6.1_react@19.2.4/node_modules/react-imask/esm/mixin.js +1 -1
- package/dist/node_modules/.pnpm/react-overlays@5.2.1_react-dom@19.2.4_react@19.2.4__react@19.2.4/node_modules/react-overlays/esm/Portal.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpCommonCode/OwpCommonCodeSelector.d.ts +16 -6
- package/dist/types/components/OwpOptionSelector/OwpOptionSelector.d.ts +9 -8
- package/dist/types/components/OwpPageCarded/OwpPageCarded.d.ts +12 -41
- package/dist/types/components/OwpPageSkeleton/index.d.ts +1 -0
- package/dist/types/components/OwpPicker/OwpWeekDatePicker.d.ts +0 -1
- package/dist/types/components/OwpPicker/OwpYearRangePicker.d.ts +0 -1
- package/dist/types/components/OwpQuerySelector/OwpQuerySelector.d.ts +6 -0
- package/dist/types/components/OwpQuerySelector/index.d.ts +2 -0
- package/dist/types/components/OwpQuerySelector/types/index.d.ts +1 -0
- package/dist/types/components/OwpQuerySelector/types/types.d.ts +44 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorAutocomplete.d.ts +11 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorBase.d.ts +6 -0
- package/dist/types/components/OwpSelectorBase/OwpSelectorSelect.d.ts +11 -0
- package/dist/types/components/OwpSelectorBase/hooks/useOwpSelectorBase.d.ts +6 -0
- package/dist/types/components/OwpSelectorBase/types/index.d.ts +1 -0
- package/dist/types/components/OwpSelectorBase/types/types.d.ts +59 -0
- package/dist/types/components/OwpSelectorBase/utils/index.d.ts +1 -0
- package/dist/types/components/OwpSelectorBase/utils/querySelectorUtils.d.ts +31 -0
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +3 -1
- package/dist/types/components/OwpTreeGrid/{OwpTreeGridLoadingOverlay.d.ts → internal/OwpTreeGridLoadingOverlay.d.ts} +1 -1
- package/dist/types/components/OwpTreeGrid/{OwpTreeGridNoDataOverlay.d.ts → internal/OwpTreeGridNoDataOverlay.d.ts} +1 -1
- package/dist/types/components/OwpTreeGrid/{utils/index.d.ts → internal/treeGridLayout.d.ts} +0 -2
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +75 -0
- package/dist/types/index.d.ts +2 -4
- package/dist/types/store/navigationSlice.d.ts +1 -0
- package/dist/types/types/OwpNavigationTypes.d.ts +14 -0
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/navigationUtils.d.ts +6 -2
- package/dist/types/utils/normalizeTimeToHourMinute.d.ts +11 -0
- package/dist/utils/navigationUtils.js.map +1 -1
- package/dist/utils/normalizeTimeToHourMinute.js +34 -0
- package/dist/utils/normalizeTimeToHourMinute.js.map +1 -0
- package/dist/utils/treeGridUtil.js +1 -1
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils.js +78 -75
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTableNoDataOverlay.js.map +0 -1
- package/dist/components/OwpMrtTable/OwpMrtTableTopToolbar.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedHeader.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedSidebar.js.map +0 -1
- package/dist/components/OwpPageCarded/OwpPageCardedSidebarContent.js.map +0 -1
- package/dist/components/OwpPicker/AnimatedCalendarContainer.js.map +0 -1
- package/dist/components/OwpPicker/CalendarContainer.js.map +0 -1
- package/dist/components/OwpPicker/DatePickerInput.js.map +0 -1
- package/dist/components/OwpPicker/constants.js.map +0 -1
- package/dist/components/OwpTreeGrid/OwpTreeGridLoadingOverlay.js.map +0 -1
- package/dist/components/OwpTreeGrid/OwpTreeGridNoDataOverlay.js.map +0 -1
- package/dist/components/OwpTreeGrid/perf.js.map +0 -1
- package/dist/components/OwpTreeGrid/utils/index.js.map +0 -1
- package/dist/components/OwpZoomImageSlider/ZoomImage.js.map +0 -1
- package/dist/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/react-datepicker.css +0 -1
- /package/dist/components/OwpTreeGrid/{perf.js → utils/perf.js} +0 -0
- /package/dist/types/components/OwpMrtTable/{OwpMrtTableNoDataOverlay.d.ts → internal/OwpMrtTableNoDataOverlay.d.ts} +0 -0
- /package/dist/types/components/OwpMrtTable/{OwpMrtTableTopToolbar.d.ts → internal/OwpMrtTableTopToolbar.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedHeader.d.ts → internal/OwpPageCardedHeader.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebar.d.ts → internal/OwpPageCardedSidebar.d.ts} +0 -0
- /package/dist/types/components/OwpPageCarded/{OwpPageCardedSidebarContent.d.ts → internal/OwpPageCardedSidebarContent.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{constants.d.ts → constants/index.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{AnimatedCalendarContainer.d.ts → internal/AnimatedCalendarContainer.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{CalendarContainer.d.ts → internal/CalendarContainer.d.ts} +0 -0
- /package/dist/types/components/OwpPicker/{DatePickerInput.d.ts → internal/DatePickerInput.d.ts} +0 -0
- /package/dist/types/components/OwpTreeGrid/{perf.d.ts → utils/perf.d.ts} +0 -0
- /package/dist/types/components/OwpZoomImageSlider/{ZoomImage.d.ts → internal/ZoomImage.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { debounce, delay, get, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './perf';\nimport {\n type CSSProperties,\n type Dispatch,\n type RefObject,\n type SetStateAction,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './hooks/useOwpTreeGridOverlayFrame';\nimport { OwpTreeGridLoadingOverlay } from './OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './OwpTreeGridNoDataOverlay';\nimport { applyTreeGridLayoutToGrid } from './utils';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nconst TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS = 300;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n loading?: boolean;\n showLoading?: boolean;\n}\n\ntype TreeGridEventHandlers<T> = Pick<\n OwpTreeGridProps<T>,\n | 'onSelect'\n | 'onRowClick'\n | 'onRowAdd'\n | 'onRowDelete'\n | 'onRowUndelete'\n | 'onRowChange'\n | 'onClickButton'\n | 'onSave'\n | 'onReady'\n | 'onAfterValueChanged'\n>;\n\ntype TreeGridEventBindingOptions<T> = Pick<OwpTreeGridProps<T>, 'id'> & {\n latestEventHandlersRef: RefObject<TreeGridEventHandlers<T>>;\n treeGridInstanceRef: RefObject<TGrid>;\n treeGridInitStartedAtRef: RefObject<number | null>;\n latestLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedBodyDataPropRef: RefObject<OwpTreeGridBodyData<T>>;\n hasAppliedInitialLayoutRef: RefObject<boolean>;\n syncHasDisplayDataRows: (grid: TGrid | null) => void;\n setIsTreeGridReady: Dispatch<SetStateAction<boolean>>;\n};\n\ntype TreeGridInitializationInput<T> = {\n id: string;\n layoutUrl?: string;\n dataUrl?: string;\n bodyData: OwpTreeGridBodyData<T>;\n useDataUrl?: boolean;\n width?: string | number;\n height?: string | number;\n languageId: string;\n};\n\nconst TREE_GRID_TEXT_RESOURCE_URLS = {\n en: '/assets/vendors/Grid/TextEN.xml',\n kr: '/assets/vendors/Grid/TextKR.xml',\n} as const;\n\nconst appendNoCacheQuery = (url: string) => {\n return `${url}?noCache=${Date.now()}`;\n};\n\nconst getTreeGridTextResourceUrl = (languageId: string) => {\n return languageId === 'kr' ? TREE_GRID_TEXT_RESOURCE_URLS.kr : TREE_GRID_TEXT_RESOURCE_URLS.en;\n};\n\nconst resolveTreeGridDataUrl = (dataUrl?: string) => {\n return dataUrl?.includes('assets')\n ? appendNoCacheQuery(dataUrl)\n : // @ts-expect-error - API base URL env is provided by host app\n `${import.meta.env.VITE_API_BASE_URL}/${dataUrl}?noCache=${Date.now()}`;\n};\n\nconst buildTreeGridDataSource = <T,>(\n useDataUrl: boolean | undefined,\n dataUrl: string | undefined,\n bodyData: OwpTreeGridBodyData<T>,\n) => {\n if (useDataUrl) {\n return { Url: resolveTreeGridDataUrl(dataUrl) };\n }\n\n return { Data: { Body: [isEmpty(bodyData) ? [] : bodyData] } };\n};\n\nconst buildTreeGridInitializationOptions = <T,>({\n id,\n layoutUrl,\n dataUrl,\n bodyData,\n useDataUrl,\n width,\n height,\n languageId,\n}: TreeGridInitializationInput<T>) => {\n return {\n id,\n Layout: { Url: appendNoCacheQuery(layoutUrl ?? '') },\n Data: buildTreeGridDataSource(useDataUrl, dataUrl, bodyData),\n Text: {\n Url: getTreeGridTextResourceUrl(languageId),\n },\n width,\n height,\n Debug: 'Error',\n };\n};\n\nconst getTreeGridBodyData = (grid: TGrid | null) => {\n return get(grid, 'Data.Data.Data.Body.0');\n};\n\nconst getTreeGridBodyDataCount = <T,>(bodyData: OwpTreeGridBodyData<T>) => {\n return Array.isArray(bodyData) ? bodyData.length : 0;\n};\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\n/**\n * TreeGrid 추가 행 여부\n * @param row TreeGrid 행\n */\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\n/**\n * TreeGrid 본문 표시 행 여부\n * @param row TreeGrid 행\n */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\n/**\n * TreeGrid 표시 데이터 행 존재 여부\n * @param grid TreeGrid 인스턴스\n */\nconst hasTreeGridDisplayDataRows = (grid: TGrid | null) => {\n if (!grid) {\n return false;\n }\n\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n let row = grid.GetFirst();\n\n while (row) {\n if (isDisplayTreeGridRow(row)) {\n return true;\n }\n\n row = grid.GetNext(row);\n }\n\n return false;\n }\n\n return Object.values(grid.Rows ?? {}).some((row) => {\n return isDisplayTreeGridRow(row);\n });\n};\n\nconst replaceTreeGridBodyData = <T,>(\n grid: TGrid,\n bodyData: OwpTreeGridBodyData<T>,\n onReloadFinish?: (code: number) => void,\n) => {\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n const currentDataConfig = grid.Data?.Data;\n\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n grid.Data.Data = {\n ...currentDataConfig,\n Data: { Body: [bodyData || []] },\n Url: '',\n };\n\n grid.ReloadBody(onReloadFinish);\n};\n\nconst bindTreeGridEvents = <T,>({\n id,\n latestEventHandlersRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n}: TreeGridEventBindingOptions<T>) => {\n const initialEventHandlers = latestEventHandlersRef.current;\n\n window.TGSetEvent('OnRowAdd', id, (grid, row) => {\n row.CanEdit = 1;\n row.CanDelete = 1;\n\n latestEventHandlersRef.current?.onRowAdd?.(grid, row as OwpTreeGridRowModel<T>);\n });\n window.TGSetEvent('OnRowAdded', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n\n if (typeof initialEventHandlers?.onRowClick === 'function') {\n window.TGSetEvent(\n 'OnClick',\n id,\n debounce((grid, row, col, x, y, event) => {\n latestEventHandlersRef.current?.onRowClick?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n x,\n y,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onClickButton === 'function') {\n window.TGSetEvent(\n 'OnClickButton',\n id,\n debounce((grid, row, col, event) => {\n latestEventHandlersRef.current?.onClickButton?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onRowDelete === 'function') {\n window.TGSetEvent('OnRowDelete', id, (grid, row, deleteType) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowDelete?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n deleteType,\n );\n });\n } else {\n window.TGSetEvent('OnRowDelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n if (typeof initialEventHandlers?.onRowUndelete === 'function') {\n window.TGSetEvent('OnRowUndelete', id, (grid, row) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowUndelete?.(grid, row as OwpTreeGridRowModel<T>);\n });\n } else {\n window.TGSetEvent('OnRowUndelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n if (\n typeof initialEventHandlers?.onAfterValueChanged === 'function' ||\n typeof initialEventHandlers?.onRowChange === 'function'\n ) {\n window.TGSetEvent('OnAfterValueChanged', id, (grid, row, col, value) => {\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row as OwpTreeGridRowModel<T>, col, value);\n });\n }\n if (typeof initialEventHandlers?.onSelect === 'function') {\n window.TGSetEvent(\n 'OnSelect',\n id,\n debounce((grid) => {\n const selectedRows = (grid.GetSelRows() ?? []) as OwpTreeGridSelectedRows<T>;\n latestEventHandlersRef.current?.onSelect?.(selectedRows);\n }, 100),\n );\n }\n if (typeof initialEventHandlers?.onSave === 'function') {\n window.TGSetEvent('OnSave', id, (grid, row, autoupdate) => {\n latestEventHandlersRef.current?.onSave?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n autoupdate,\n );\n });\n }\n\n window.TGSetEvent(\n 'OnReady',\n id,\n debounce((grid) => {\n if (!hasAppliedInitialLayoutRef.current) {\n const latestLayoutOverrides = latestLayoutOverridesRef.current;\n\n hasAppliedInitialLayoutRef.current = true;\n applyTreeGridLayoutToGrid(grid, latestLayoutOverrides);\n treeGridInstanceRef.current = grid;\n appliedLayoutOverridesRef.current = latestLayoutOverrides;\n appliedBodyDataPropRef.current = getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>;\n syncHasDisplayDataRows(grid);\n setIsTreeGridReady(true);\n measureTreeGridPerf(id, 'TreeGrid init ready', treeGridInitStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(\n getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>,\n ),\n });\n treeGridInitStartedAtRef.current = null;\n latestEventHandlersRef.current?.onReady?.(grid);\n }\n }, 100),\n );\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 loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n 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 treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","TREE_GRID_TEXT_RESOURCE_URLS","appendNoCacheQuery","__name","url","getTreeGridTextResourceUrl","languageId","resolveTreeGridDataUrl","dataUrl","buildTreeGridDataSource","useDataUrl","bodyData","isEmpty","buildTreeGridInitializationOptions","id","layoutUrl","width","height","getTreeGridBodyData","grid","get","getTreeGridBodyDataCount","isVisibleTreeGridRow","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","hasTreeGridDisplayDataRows","replaceTreeGridBodyData","onReloadFinish","currentDataConfig","_a","bindTreeGridEvents","latestEventHandlersRef","treeGridInstanceRef","treeGridInitStartedAtRef","latestLayoutOverridesRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","syncHasDisplayDataRows","setIsTreeGridReady","initialEventHandlers","_b","debounce","col","x","y","event","deleteType","value","valueChangedHandler","selectedRows","autoupdate","latestLayoutOverrides","applyTreeGridLayoutToGrid","measureTreeGridPerf","OwpTreeGrid","containerStyle","containerClassName","className","style","layoutOverrides","data","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","loading","showLoading","t","useOwpTranslation","useRef","treeGridContainerRef","bodyReloadStartedAtRef","latestBodyDataPropRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","isTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","TREE_GRID_BODY_ROWS_CHANGED_EVENT","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","reloadSequence","runBodyReload","bodyDataToApply","startedAt","remainingVisibleTime","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpTreeGrid.js","sources":["../../../src/components/OwpTreeGrid/OwpTreeGrid.tsx"],"sourcesContent":["import { useOwpTranslation } from '@/hooks/useOwpTranslation';\nimport { useGetCurrentLanguage } from '@/hooks/useCurrentLanguage';\nimport {\n TREE_GRID_BODY_ROWS_CHANGED_EVENT,\n type TreeGridBodyRowsChangedEventDetail,\n} from '@/utils/treeGridBodyRowsEvent';\nimport { delay, isEmpty, isEqual, omit } from 'es-toolkit/compat';\n// Temporary TreeGrid perf instrumentation import. Remove with ./utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n logTreeGridPerf,\n measureTreeGridPerf,\n} from './utils/perf';\nimport {\n type CSSProperties,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useOwpTreeGridOverlayFrame } from './hooks/useOwpTreeGridOverlayFrame';\nimport {\n bindTreeGridEvents,\n buildTreeGridInitializationOptions,\n getTreeGridBodyDataCount,\n hasTreeGridDisplayDataRows,\n replaceTreeGridBodyData,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,\n type TreeGridEventHandlers,\n} from './internal/treeGridRuntime';\nimport { applyTreeGridLayoutToGrid } from './internal/treeGridLayout';\nimport { OwpTreeGridLoadingOverlay } from './internal/OwpTreeGridLoadingOverlay';\nimport { OwpTreeGridNoDataOverlay } from './internal/OwpTreeGridNoDataOverlay';\n\ntype TreeGridLayoutScalarValue = string | number;\ntype TreeGridNestedLayoutFields = Record<string, TreeGridLayoutScalarValue>;\ntype TreeGridLayoutFields = Record<string, TreeGridLayoutScalarValue | TreeGridNestedLayoutFields>;\ntype TreeGridSectionFields = Record<string, TreeGridLayoutScalarValue>;\n\nexport interface OwpTreeGridLayout {\n Header?: TreeGridLayoutFields;\n Toolbar?: TreeGridSectionFields;\n Foot?: TreeGridSectionFields;\n}\n\nexport type OwpTreeGridLayoutConfig = OwpTreeGridLayout;\nexport type THeader = OwpTreeGridLayoutConfig;\nexport type OwpTreeGridBodyData<T> = Record<string, never> | [] | undefined | T[];\nexport type OwpTreeGridData<T> = OwpTreeGridBodyData<T>;\nexport type TData<T> = OwpTreeGridBodyData<T>;\nexport type OwpTreeGridRowModel<T> = TRow & T;\nexport type OwpTreeGridSelectedRows<T> = OwpTreeGridRowModel<T>[];\n\ntype OwpTreeGridSelectHandler<T> = (selectedRows: OwpTreeGridSelectedRows<T>) => void;\ntype OwpTreeGridRowAddHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridRowDeleteHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n deleteType: number,\n) => void;\ntype OwpTreeGridRowUndeleteHandler<T> = (grid: TGrid, row: OwpTreeGridRowModel<T>) => void;\ntype OwpTreeGridButtonClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n event: Event,\n) => void;\ntype OwpTreeGridRowClickHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n x: number,\n y: number,\n event: Event,\n) => void;\ntype OwpTreeGridSaveHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n autoupdate: boolean | number,\n) => void;\ntype OwpTreeGridCellValue = unknown;\ntype OwpTreeGridAfterValueChangedHandler<T> = (\n grid: TGrid,\n row: OwpTreeGridRowModel<T>,\n col: string,\n value: OwpTreeGridCellValue,\n) => void;\n\nexport interface OwpTreeGridProps<T> {\n id: string;\n className?: string;\n containerStyle?: CSSProperties;\n containerClassName?: string;\n layoutUrl?: string;\n dataUrl?: string;\n layoutOverrides?: OwpTreeGridLayoutConfig;\n data?: OwpTreeGridBodyData<T>;\n style?: CSSProperties;\n height?: string | number;\n width?: string | number;\n useDataUrl?: boolean;\n onSelect?: OwpTreeGridSelectHandler<T>;\n onRowAdd?: OwpTreeGridRowAddHandler<T>;\n onRowDelete?: OwpTreeGridRowDeleteHandler<T>;\n onRowUndelete?: OwpTreeGridRowUndeleteHandler<T>;\n onRowChange?: OwpTreeGridAfterValueChangedHandler<T>;\n onClickButton?: OwpTreeGridButtonClickHandler<T>;\n onReady?: (grid: TGrid) => void;\n onRowClick?: OwpTreeGridRowClickHandler<T>;\n onSave?: OwpTreeGridSaveHandler<T>;\n onAfterValueChanged?: OwpTreeGridAfterValueChangedHandler<T>;\n highlightEditableCells?: boolean;\n highlightChangedCells?: boolean;\n loading?: boolean;\n showLoading?: boolean;\n}\n\n/**\n * OwpTreeGrid 컴포넌트\n * @param id 식별자\n * @param containerStyle containerStyle 값\n * @param containerClassName containerClassName 값\n * @param className CSS 클래스명\n * @param style 스타일 객체\n * @param height height 값\n */\nconst OwpTreeGrid = <T,>({\n id = 'treeGridWrapper',\n containerStyle,\n containerClassName,\n className,\n style,\n height = '100%',\n width = '100%',\n layoutUrl,\n dataUrl,\n layoutOverrides,\n data,\n useDataUrl,\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n highlightEditableCells = true,\n highlightChangedCells = true,\n loading,\n showLoading = true,\n}: OwpTreeGridProps<T>) => {\n const { t } = useOwpTranslation();\n const treeGridInstanceRef = useRef<TGrid>(null);\n const treeGridContainerRef = useRef<HTMLDivElement | null>(null);\n const treeGridInitStartedAtRef = useRef<number | null>(null);\n const bodyReloadStartedAtRef = useRef<number | null>(null);\n const latestLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(layoutOverrides);\n const latestBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(data);\n const latestEventHandlersRef = useRef<TreeGridEventHandlers<T>>({\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n });\n const stagedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasStagedBodyDataPropRef = useRef(false);\n const appliedLayoutOverridesRef = useRef<OwpTreeGridLayoutConfig | undefined>(undefined);\n const appliedBodyDataPropRef = useRef<OwpTreeGridBodyData<T>>(undefined);\n const hasAppliedInitialLayoutRef = useRef(false);\n const bodyReloadSequenceRef = useRef(0);\n const bindingLoadingStartedAtRef = useRef<number | null>(null);\n const bindingLoadingHideTimeoutRef = useRef<number | undefined>(undefined);\n const bodyReloadStartTimeoutRef = useRef<number | undefined>(undefined);\n const highlightEditableCellsRef = useRef(highlightEditableCells);\n const highlightChangedCellsRef = useRef(highlightChangedCells);\n const [isTreeGridReady, setIsTreeGridReady] = useState(false);\n const [isBindingLoadingVisible, setIsBindingLoadingVisible] = useState(false);\n const [hasDisplayDataRows, setHasDisplayDataRows] = useState(false);\n const currentLanguage = useGetCurrentLanguage();\n const currentLanguageIdRef = useRef(currentLanguage.id);\n const isPendingBodyReload =\n showLoading &&\n data !== undefined &&\n isTreeGridReady &&\n appliedBodyDataPropRef.current !== data;\n const isInternalLoadingVisible = showLoading && (isBindingLoadingVisible || isPendingBodyReload);\n const isLoadingOverlayVisible = (showLoading && loading === true) || isInternalLoadingVisible;\n const isNoDataVisible =\n !isLoadingOverlayVisible && data !== undefined && isEmpty(data) && !hasDisplayDataRows;\n\n const syncHasDisplayDataRows = (grid: TGrid | null) => {\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(grid));\n };\n\n latestLayoutOverridesRef.current = layoutOverrides;\n latestBodyDataPropRef.current = data;\n highlightEditableCellsRef.current = highlightEditableCells;\n highlightChangedCellsRef.current = highlightChangedCells;\n latestEventHandlersRef.current = {\n onSelect,\n onRowClick,\n onRowAdd,\n onRowDelete,\n onRowUndelete,\n onRowChange,\n onClickButton,\n onSave,\n onReady,\n onAfterValueChanged,\n };\n\n const overlayFrame = useOwpTreeGridOverlayFrame({\n visible: isLoadingOverlayVisible || isNoDataVisible,\n containerRef: treeGridContainerRef,\n treeGridInstanceRef,\n debugId: id,\n });\n\n const clearBindingLoadingHideTimeout = () => {\n if (bindingLoadingHideTimeoutRef.current !== undefined) {\n window.clearTimeout(bindingLoadingHideTimeoutRef.current);\n bindingLoadingHideTimeoutRef.current = undefined;\n }\n };\n\n const clearBodyReloadStartTimeout = () => {\n if (bodyReloadStartTimeoutRef.current !== undefined) {\n window.clearTimeout(bodyReloadStartTimeoutRef.current);\n bodyReloadStartTimeoutRef.current = undefined;\n }\n };\n\n useEffect(() => {\n const handleBodyRowsChanged = (event: Event) => {\n const customEvent = event as CustomEvent<TreeGridBodyRowsChangedEventDetail>;\n\n if (customEvent.detail?.gridId !== id) {\n return;\n }\n\n setHasDisplayDataRows(hasTreeGridDisplayDataRows(treeGridInstanceRef.current));\n };\n\n window.addEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n\n return () => {\n window.removeEventListener(TREE_GRID_BODY_ROWS_CHANGED_EVENT, handleBodyRowsChanged);\n };\n }, [id]);\n\n useEffect(() => {\n if (!showLoading) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }\n }, [showLoading]);\n\n useEffect(() => {\n if (\n currentLanguage.id !== currentLanguageIdRef.current &&\n !isEmpty(treeGridInstanceRef.current)\n ) {\n treeGridInstanceRef.current?.Dispose();\n treeGridInstanceRef.current = null;\n currentLanguageIdRef.current = currentLanguage.id;\n }\n\n if (!isEmpty(treeGridInstanceRef.current)) {\n return;\n }\n\n bindTreeGridEvents({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n });\n\n treeGridInitStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'init');\n logTreeGridPerf(id, 'TreeGrid init start', {\n useDataUrl: Boolean(useDataUrl),\n bodyRowCount: getTreeGridBodyDataCount(data),\n });\n\n window.TreeGrid(\n buildTreeGridInitializationOptions({\n id,\n layoutUrl,\n dataUrl,\n bodyData: data,\n useDataUrl,\n width,\n height,\n languageId: currentLanguage.id,\n }),\n id,\n id,\n );\n\n return () => {\n delay(() => {\n treeGridInstanceRef.current?.Dispose();\n }, 200);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useLayoutEffect(() => {\n const treeGrid = treeGridInstanceRef.current;\n const nextLayoutOverrides = latestLayoutOverridesRef.current;\n const nextBodyData = latestBodyDataPropRef.current;\n\n if (isEmpty(treeGrid) || !isTreeGridReady) {\n return;\n }\n\n const shouldApplyLayoutOverrides =\n appliedLayoutOverridesRef.current !== nextLayoutOverrides &&\n !isEqual(appliedLayoutOverridesRef.current, nextLayoutOverrides);\n const shouldApplyBodyData =\n appliedBodyDataPropRef.current !== nextBodyData &&\n (!hasStagedBodyDataPropRef.current || stagedBodyDataPropRef.current !== nextBodyData);\n\n if (!shouldApplyLayoutOverrides && !shouldApplyBodyData) {\n return;\n }\n\n if (shouldApplyLayoutOverrides) {\n const layoutApplyStartedAt = getTreeGridPerfTimestamp();\n\n applyTreeGridLayoutToGrid(treeGrid, nextLayoutOverrides, shouldApplyBodyData);\n appliedLayoutOverridesRef.current = nextLayoutOverrides;\n measureTreeGridPerf(id, 'apply layout', layoutApplyStartedAt, {\n disableBodyReload: Boolean(shouldApplyBodyData),\n });\n }\n\n if (shouldApplyBodyData) {\n const reloadSequence = bodyReloadSequenceRef.current + 1;\n const runBodyReload = () => {\n const bodyDataToApply = stagedBodyDataPropRef.current;\n\n bodyReloadStartTimeoutRef.current = undefined;\n bodyReloadStartedAtRef.current = getTreeGridPerfTimestamp();\n countTreeGridPerf(id, 'reload');\n logTreeGridPerf(id, 'ReloadBody start', {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n\n replaceTreeGridBodyData(treeGrid, bodyDataToApply, () => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n appliedBodyDataPropRef.current = bodyDataToApply;\n syncHasDisplayDataRows(treeGrid);\n measureTreeGridPerf(id, 'ReloadBody end', bodyReloadStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(bodyDataToApply),\n });\n bodyReloadStartedAtRef.current = null;\n\n if (stagedBodyDataPropRef.current === bodyDataToApply) {\n stagedBodyDataPropRef.current = undefined;\n hasStagedBodyDataPropRef.current = false;\n }\n\n const startedAt = bindingLoadingStartedAtRef.current;\n\n if (!showLoading || startedAt === null) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n const remainingVisibleTime = Math.max(\n 0,\n TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS - (Date.now() - startedAt),\n );\n\n clearBindingLoadingHideTimeout();\n\n if (remainingVisibleTime === 0) {\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n bindingLoadingHideTimeoutRef.current = undefined;\n bindingLoadingStartedAtRef.current = null;\n setIsBindingLoadingVisible(false);\n }, remainingVisibleTime);\n });\n };\n\n bodyReloadSequenceRef.current = reloadSequence;\n stagedBodyDataPropRef.current = nextBodyData;\n hasStagedBodyDataPropRef.current = true;\n\n if (showLoading && nextBodyData !== undefined) {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n bindingLoadingStartedAtRef.current = Date.now();\n setIsBindingLoadingVisible(true);\n bodyReloadStartTimeoutRef.current = window.setTimeout(() => {\n if (bodyReloadSequenceRef.current !== reloadSequence) {\n return;\n }\n\n runBodyReload();\n }, 0);\n } else {\n runBodyReload();\n }\n }\n }, [isTreeGridReady, layoutOverrides, data, showLoading, id]);\n\n useEffect(() => {\n return () => {\n clearBodyReloadStartTimeout();\n clearBindingLoadingHideTimeout();\n };\n }, []);\n\n const resolvedContainerStyle: CSSProperties = {\n height,\n width,\n ...containerStyle,\n };\n\n if (showLoading || isNoDataVisible) {\n resolvedContainerStyle.position =\n containerStyle?.position && containerStyle.position !== 'static'\n ? containerStyle.position\n : 'relative';\n resolvedContainerStyle.isolation = 'isolate';\n }\n\n return (\n <div ref={treeGridContainerRef} className={containerClassName} style={resolvedContainerStyle}>\n <div id={id} className={className} style={omit(style, ['height', 'width'])} />\n <OwpTreeGridNoDataOverlay\n visible={isNoDataVisible}\n message={t('Message.조회된 결과가 없습니다.')}\n overlayFrame={overlayFrame}\n />\n <OwpTreeGridLoadingOverlay visible={isLoadingOverlayVisible} overlayFrame={overlayFrame} />\n </div>\n );\n};\n\nexport { OwpTreeGrid };\n"],"names":["OwpTreeGrid","__name","id","containerStyle","containerClassName","className","style","height","width","layoutUrl","dataUrl","layoutOverrides","data","useDataUrl","onSelect","onRowClick","onRowAdd","onRowDelete","onRowUndelete","onRowChange","onClickButton","onSave","onReady","onAfterValueChanged","highlightEditableCells","highlightChangedCells","loading","showLoading","t","useOwpTranslation","treeGridInstanceRef","useRef","treeGridContainerRef","treeGridInitStartedAtRef","bodyReloadStartedAtRef","latestLayoutOverridesRef","latestBodyDataPropRef","latestEventHandlersRef","stagedBodyDataPropRef","hasStagedBodyDataPropRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","bodyReloadSequenceRef","bindingLoadingStartedAtRef","bindingLoadingHideTimeoutRef","bodyReloadStartTimeoutRef","highlightEditableCellsRef","highlightChangedCellsRef","isTreeGridReady","setIsTreeGridReady","useState","isBindingLoadingVisible","setIsBindingLoadingVisible","hasDisplayDataRows","setHasDisplayDataRows","currentLanguage","useGetCurrentLanguage","currentLanguageIdRef","isPendingBodyReload","isLoadingOverlayVisible","isNoDataVisible","isEmpty","syncHasDisplayDataRows","grid","hasTreeGridDisplayDataRows","overlayFrame","useOwpTreeGridOverlayFrame","clearBindingLoadingHideTimeout","clearBodyReloadStartTimeout","useEffect","handleBodyRowsChanged","event","_a","TREE_GRID_BODY_ROWS_CHANGED_EVENT","bindTreeGridEvents","getTreeGridPerfTimestamp","countTreeGridPerf","logTreeGridPerf","getTreeGridBodyDataCount","buildTreeGridInitializationOptions","delay","useLayoutEffect","treeGrid","nextLayoutOverrides","nextBodyData","shouldApplyLayoutOverrides","isEqual","shouldApplyBodyData","layoutApplyStartedAt","applyTreeGridLayoutToGrid","measureTreeGridPerf","reloadSequence","runBodyReload","bodyDataToApply","replaceTreeGridBodyData","startedAt","remainingVisibleTime","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","resolvedContainerStyle","jsx","omit","OwpTreeGridNoDataOverlay","OwpTreeGridLoadingOverlay"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var A = Object.defineProperty;
|
|
2
2
|
var l = (i, o) => A(i, "name", { value: o, configurable: !0 });
|
|
3
3
|
import { useState as g, useLayoutEffect as _ } from "react";
|
|
4
|
-
import { countTreeGridPerf as O, isTreeGridPerfEnabled as b, getTreeGridPerfTimestamp as F, measureTreeGridPerf as G } from "../perf.js";
|
|
4
|
+
import { countTreeGridPerf as O, isTreeGridPerfEnabled as b, getTreeGridPerfTimestamp as F, measureTreeGridPerf as G } from "../utils/perf.js";
|
|
5
5
|
import { isEqual as L } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/predicate/isEqual.js";
|
|
6
6
|
const N = 2147483646, P = 2147483647, R = /* @__PURE__ */ l((i, o) => {
|
|
7
7
|
const r = (o == null ? void 0 : o.MainTag) ?? i, a = Array.from(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOwpTreeGridOverlayFrame.js","sources":["../../../../src/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.ts"],"sourcesContent":["import { isEqual } from 'es-toolkit/compat';\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n// Temporary TreeGrid perf instrumentation import. Remove with ../perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n isTreeGridPerfEnabled,\n measureTreeGridPerf,\n} from '../perf';\n\nexport type OwpTreeGridOverlayFrame = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\ntype UseOwpTreeGridOverlayFrameInput = {\n visible: boolean;\n containerRef: RefObject<HTMLDivElement | null>;\n treeGridInstanceRef: RefObject<TGrid>;\n debugId?: string;\n};\n\nexport const TREE_GRID_NO_DATA_OVERLAY_Z_INDEX = 2147483646;\nexport const TREE_GRID_LOADING_OVERLAY_Z_INDEX = 2147483647;\n\nconst getTreeGridMainTableElement = (containerElement: HTMLDivElement, grid: TGrid | null) => {\n const mainTagElement = grid?.MainTag as HTMLElement | null | undefined;\n const scopedRootElement = mainTagElement ?? containerElement;\n const mainTableElements = Array.from(\n scopedRootElement.querySelectorAll<HTMLTableElement>('table.TSMainTable'),\n );\n\n const tableElements =\n mainTableElements.length > 0\n ? mainTableElements\n : Array.from(scopedRootElement.querySelectorAll<HTMLTableElement>('table'));\n\n return tableElements.reduce<HTMLTableElement | null>((largestTableElement, tableElement) => {\n const tableRect = tableElement.getBoundingClientRect();\n const largestTableRect = largestTableElement?.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return largestTableElement;\n }\n\n if (!largestTableRect) {\n return tableElement;\n }\n\n return tableRect.width * tableRect.height > largestTableRect.width * largestTableRect.height\n ? tableElement\n : largestTableElement;\n }, null);\n};\n\nconst getTreeGridOverlayFrame = (\n containerElement: HTMLDivElement,\n grid: TGrid | null,\n): OwpTreeGridOverlayFrame => {\n const containerRect = containerElement.getBoundingClientRect();\n const fallbackWidth = containerElement.clientWidth || containerRect.width;\n const fallbackHeight = containerElement.clientHeight || containerRect.height;\n const mainTableElement = getTreeGridMainTableElement(containerElement, grid);\n\n if (!mainTableElement) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n const tableRect = mainTableElement.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n return {\n left: tableRect.left - containerRect.left,\n top: tableRect.top - containerRect.top,\n width: tableRect.width,\n height: tableRect.height,\n };\n};\n\n/**\n * TreeGrid overlay frame hook\n * @param visible overlay visibility\n * @param containerRef TreeGrid container ref\n * @param treeGridInstanceRef TreeGrid instance ref\n */\nconst useOwpTreeGridOverlayFrame = ({\n visible,\n containerRef,\n treeGridInstanceRef,\n debugId,\n}: UseOwpTreeGridOverlayFrameInput) => {\n const [overlayFrame, setOverlayFrame] = useState<OwpTreeGridOverlayFrame>({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n\n useLayoutEffect(() => {\n if (!visible) {\n return;\n }\n\n const containerElement = containerRef.current;\n\n if (!containerElement) {\n return;\n }\n\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n let observedMainTableElement: HTMLTableElement | null = null;\n const scrollListenerOptions = { capture: true } as const;\n\n const syncObservedMainTableElement = (nextMainTableElement: HTMLTableElement | null) => {\n if (!resizeObserver || observedMainTableElement === nextMainTableElement) {\n observedMainTableElement = nextMainTableElement;\n return;\n }\n\n if (observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n observedMainTableElement = nextMainTableElement;\n\n if (observedMainTableElement) {\n resizeObserver.observe(observedMainTableElement);\n }\n };\n\n const updateOverlayFrame = () => {\n const startedAt =\n debugId && isTreeGridPerfEnabled() ? getTreeGridPerfTimestamp() : null;\n const treeGrid = treeGridInstanceRef.current;\n const mainTableElement = getTreeGridMainTableElement(containerElement, treeGrid);\n const nextOverlayFrame = getTreeGridOverlayFrame(containerElement, treeGrid);\n\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay update');\n }\n\n syncObservedMainTableElement(mainTableElement);\n\n setOverlayFrame((currentOverlayFrame) =>\n isEqual(currentOverlayFrame, nextOverlayFrame) ? currentOverlayFrame : nextOverlayFrame,\n );\n\n if (debugId) {\n measureTreeGridPerf(debugId, 'overlay update end', startedAt);\n }\n };\n\n const scheduleOverlayFrameUpdate = () => {\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay schedule');\n }\n\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n animationFrameId = window.requestAnimationFrame(() => {\n animationFrameId = undefined;\n updateOverlayFrame();\n });\n };\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(scheduleOverlayFrameUpdate);\n resizeObserver.observe(containerElement);\n }\n\n const mutationObserver = new MutationObserver(scheduleOverlayFrameUpdate);\n mutationObserver.observe(containerElement, { childList: true, subtree: true });\n window.addEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.addEventListener('scroll', scheduleOverlayFrameUpdate, scrollListenerOptions);\n updateOverlayFrame();\n\n return () => {\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n window.removeEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.removeEventListener(\n 'scroll',\n scheduleOverlayFrameUpdate,\n scrollListenerOptions,\n );\n mutationObserver.disconnect();\n\n if (resizeObserver && observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n resizeObserver?.disconnect();\n };\n }, [containerRef, treeGridInstanceRef, visible, debugId]);\n\n return overlayFrame;\n};\n\nexport { useOwpTreeGridOverlayFrame };\n"],"names":["TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","TREE_GRID_LOADING_OVERLAY_Z_INDEX","getTreeGridMainTableElement","__name","containerElement","grid","scopedRootElement","mainTableElements","largestTableElement","tableElement","tableRect","largestTableRect","getTreeGridOverlayFrame","containerRect","fallbackWidth","fallbackHeight","mainTableElement","useOwpTreeGridOverlayFrame","visible","containerRef","treeGridInstanceRef","debugId","overlayFrame","setOverlayFrame","useState","useLayoutEffect","animationFrameId","resizeObserver","observedMainTableElement","scrollListenerOptions","syncObservedMainTableElement","nextMainTableElement","updateOverlayFrame","startedAt","isTreeGridPerfEnabled","getTreeGridPerfTimestamp","treeGrid","nextOverlayFrame","countTreeGridPerf","currentOverlayFrame","isEqual","measureTreeGridPerf","scheduleOverlayFrameUpdate","mutationObserver"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useOwpTreeGridOverlayFrame.js","sources":["../../../../src/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.ts"],"sourcesContent":["import { isEqual } from 'es-toolkit/compat';\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n// Temporary TreeGrid perf instrumentation import. Remove with ../utils/perf after profiling is finished.\nimport {\n countTreeGridPerf,\n getTreeGridPerfTimestamp,\n isTreeGridPerfEnabled,\n measureTreeGridPerf,\n} from '../utils/perf';\n\nexport type OwpTreeGridOverlayFrame = {\n left: number;\n top: number;\n width: number;\n height: number;\n};\n\ntype UseOwpTreeGridOverlayFrameInput = {\n visible: boolean;\n containerRef: RefObject<HTMLDivElement | null>;\n treeGridInstanceRef: RefObject<TGrid>;\n debugId?: string;\n};\n\nexport const TREE_GRID_NO_DATA_OVERLAY_Z_INDEX = 2147483646;\nexport const TREE_GRID_LOADING_OVERLAY_Z_INDEX = 2147483647;\n\nconst getTreeGridMainTableElement = (containerElement: HTMLDivElement, grid: TGrid | null) => {\n const mainTagElement = grid?.MainTag as HTMLElement | null | undefined;\n const scopedRootElement = mainTagElement ?? containerElement;\n const mainTableElements = Array.from(\n scopedRootElement.querySelectorAll<HTMLTableElement>('table.TSMainTable'),\n );\n\n const tableElements =\n mainTableElements.length > 0\n ? mainTableElements\n : Array.from(scopedRootElement.querySelectorAll<HTMLTableElement>('table'));\n\n return tableElements.reduce<HTMLTableElement | null>((largestTableElement, tableElement) => {\n const tableRect = tableElement.getBoundingClientRect();\n const largestTableRect = largestTableElement?.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return largestTableElement;\n }\n\n if (!largestTableRect) {\n return tableElement;\n }\n\n return tableRect.width * tableRect.height > largestTableRect.width * largestTableRect.height\n ? tableElement\n : largestTableElement;\n }, null);\n};\n\nconst getTreeGridOverlayFrame = (\n containerElement: HTMLDivElement,\n grid: TGrid | null,\n): OwpTreeGridOverlayFrame => {\n const containerRect = containerElement.getBoundingClientRect();\n const fallbackWidth = containerElement.clientWidth || containerRect.width;\n const fallbackHeight = containerElement.clientHeight || containerRect.height;\n const mainTableElement = getTreeGridMainTableElement(containerElement, grid);\n\n if (!mainTableElement) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n const tableRect = mainTableElement.getBoundingClientRect();\n\n if (tableRect.width <= 0 || tableRect.height <= 0) {\n return {\n left: 0,\n top: 0,\n width: fallbackWidth,\n height: fallbackHeight,\n };\n }\n\n return {\n left: tableRect.left - containerRect.left,\n top: tableRect.top - containerRect.top,\n width: tableRect.width,\n height: tableRect.height,\n };\n};\n\n/**\n * TreeGrid overlay frame hook\n * @param visible overlay visibility\n * @param containerRef TreeGrid container ref\n * @param treeGridInstanceRef TreeGrid instance ref\n */\nconst useOwpTreeGridOverlayFrame = ({\n visible,\n containerRef,\n treeGridInstanceRef,\n debugId,\n}: UseOwpTreeGridOverlayFrameInput) => {\n const [overlayFrame, setOverlayFrame] = useState<OwpTreeGridOverlayFrame>({\n left: 0,\n top: 0,\n width: 0,\n height: 0,\n });\n\n useLayoutEffect(() => {\n if (!visible) {\n return;\n }\n\n const containerElement = containerRef.current;\n\n if (!containerElement) {\n return;\n }\n\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n let observedMainTableElement: HTMLTableElement | null = null;\n const scrollListenerOptions = { capture: true } as const;\n\n const syncObservedMainTableElement = (nextMainTableElement: HTMLTableElement | null) => {\n if (!resizeObserver || observedMainTableElement === nextMainTableElement) {\n observedMainTableElement = nextMainTableElement;\n return;\n }\n\n if (observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n observedMainTableElement = nextMainTableElement;\n\n if (observedMainTableElement) {\n resizeObserver.observe(observedMainTableElement);\n }\n };\n\n const updateOverlayFrame = () => {\n const startedAt =\n debugId && isTreeGridPerfEnabled() ? getTreeGridPerfTimestamp() : null;\n const treeGrid = treeGridInstanceRef.current;\n const mainTableElement = getTreeGridMainTableElement(containerElement, treeGrid);\n const nextOverlayFrame = getTreeGridOverlayFrame(containerElement, treeGrid);\n\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay update');\n }\n\n syncObservedMainTableElement(mainTableElement);\n\n setOverlayFrame((currentOverlayFrame) =>\n isEqual(currentOverlayFrame, nextOverlayFrame) ? currentOverlayFrame : nextOverlayFrame,\n );\n\n if (debugId) {\n measureTreeGridPerf(debugId, 'overlay update end', startedAt);\n }\n };\n\n const scheduleOverlayFrameUpdate = () => {\n if (debugId) {\n countTreeGridPerf(debugId, 'overlay schedule');\n }\n\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n animationFrameId = window.requestAnimationFrame(() => {\n animationFrameId = undefined;\n updateOverlayFrame();\n });\n };\n\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(scheduleOverlayFrameUpdate);\n resizeObserver.observe(containerElement);\n }\n\n const mutationObserver = new MutationObserver(scheduleOverlayFrameUpdate);\n mutationObserver.observe(containerElement, { childList: true, subtree: true });\n window.addEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.addEventListener('scroll', scheduleOverlayFrameUpdate, scrollListenerOptions);\n updateOverlayFrame();\n\n return () => {\n if (animationFrameId !== undefined) {\n window.cancelAnimationFrame(animationFrameId);\n }\n\n window.removeEventListener('resize', scheduleOverlayFrameUpdate);\n containerElement.removeEventListener(\n 'scroll',\n scheduleOverlayFrameUpdate,\n scrollListenerOptions,\n );\n mutationObserver.disconnect();\n\n if (resizeObserver && observedMainTableElement) {\n resizeObserver.unobserve(observedMainTableElement);\n }\n\n resizeObserver?.disconnect();\n };\n }, [containerRef, treeGridInstanceRef, visible, debugId]);\n\n return overlayFrame;\n};\n\nexport { useOwpTreeGridOverlayFrame };\n"],"names":["TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","TREE_GRID_LOADING_OVERLAY_Z_INDEX","getTreeGridMainTableElement","__name","containerElement","grid","scopedRootElement","mainTableElements","largestTableElement","tableElement","tableRect","largestTableRect","getTreeGridOverlayFrame","containerRect","fallbackWidth","fallbackHeight","mainTableElement","useOwpTreeGridOverlayFrame","visible","containerRef","treeGridInstanceRef","debugId","overlayFrame","setOverlayFrame","useState","useLayoutEffect","animationFrameId","resizeObserver","observedMainTableElement","scrollListenerOptions","syncObservedMainTableElement","nextMainTableElement","updateOverlayFrame","startedAt","isTreeGridPerfEnabled","getTreeGridPerfTimestamp","treeGrid","nextOverlayFrame","countTreeGridPerf","currentOverlayFrame","isEqual","measureTreeGridPerf","scheduleOverlayFrameUpdate","mutationObserver"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var r = Object.defineProperty;
|
|
2
2
|
var i = (e, t) => r(e, "name", { value: t, configurable: !0 });
|
|
3
|
-
import { jsx as n } from "
|
|
3
|
+
import { jsx as n } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import o from "@mui/material/CircularProgress";
|
|
5
|
-
import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "
|
|
5
|
+
import { TREE_GRID_LOADING_OVERLAY_Z_INDEX as s } from "../hooks/useOwpTreeGridOverlayFrame.js";
|
|
6
6
|
const c = /* @__PURE__ */ i(({ visible: e, overlayFrame: t }) => e ? /* @__PURE__ */ n(
|
|
7
7
|
"div",
|
|
8
8
|
{
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OwpTreeGridLoadingOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.tsx"],"sourcesContent":["import CircularProgress from '@mui/material/CircularProgress';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n} from '../hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridLoadingOverlayProps = {\n visible: boolean;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid loading overlay\n */\nconst OwpTreeGridLoadingOverlay = ({ visible, overlayFrame }: OwpTreeGridLoadingOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_LOADING_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <CircularProgress color=\"secondary\" size={44} thickness={3.6} />\n </div>\n );\n};\n\nexport { OwpTreeGridLoadingOverlay };\n"],"names":["OwpTreeGridLoadingOverlay","__name","visible","overlayFrame","jsx","TREE_GRID_LOADING_OVERLAY_Z_INDEX","CircularProgress"],"mappings":";;;;;AAcA,MAAMA,IAA4B,gBAAAC,EAAA,CAAC,EAAE,SAAAC,GAAS,cAAAC,QACvCD,IAKH,gBAAAE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,4BAACC,GAAA,EAAiB,OAAM,aAAY,MAAM,IAAI,WAAW,IAAA,CAAK;AAAA,EAAA;AAAA,IAnBzD,MAFuB;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
var r = Object.defineProperty;
|
|
2
2
|
var n = (e, i) => r(e, "name", { value: i, configurable: !0 });
|
|
3
|
-
import { jsx as o } from "
|
|
3
|
+
import { jsx as o } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import p from "@mui/material/Typography";
|
|
5
|
-
import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "
|
|
5
|
+
import { TREE_GRID_NO_DATA_OVERLAY_Z_INDEX as l } from "../hooks/useOwpTreeGridOverlayFrame.js";
|
|
6
6
|
const c = /* @__PURE__ */ n(({
|
|
7
7
|
visible: e,
|
|
8
8
|
message: i,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OwpTreeGridNoDataOverlay.js","sources":["../../../../src/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.tsx"],"sourcesContent":["import Typography from '@mui/material/Typography';\nimport {\n type OwpTreeGridOverlayFrame,\n TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n} from '../hooks/useOwpTreeGridOverlayFrame';\n\ntype OwpTreeGridNoDataOverlayProps = {\n visible: boolean;\n message: string;\n overlayFrame: OwpTreeGridOverlayFrame;\n};\n\n/**\n * TreeGrid no-data overlay\n * @param visible overlay visibility\n * @param message no-data message\n * @param overlayFrame overlay frame\n */\nconst OwpTreeGridNoDataOverlay = ({\n visible,\n message,\n overlayFrame,\n}: OwpTreeGridNoDataOverlayProps) => {\n if (!visible) {\n return null;\n }\n\n return (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n left: overlayFrame.left,\n top: overlayFrame.top,\n width: overlayFrame.width,\n height: overlayFrame.height,\n zIndex: TREE_GRID_NO_DATA_OVERLAY_Z_INDEX,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n pointerEvents: 'none',\n }}\n >\n <Typography\n sx={{\n color: '#111112',\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n lineHeight: '16px',\n letterSpacing: '0.04em',\n }}\n >\n {message}\n </Typography>\n </div>\n );\n};\n\nexport { OwpTreeGridNoDataOverlay };\n"],"names":["OwpTreeGridNoDataOverlay","__name","visible","message","overlayFrame","jsx","TREE_GRID_NO_DATA_OVERLAY_Z_INDEX","Typography"],"mappings":";;;;;AAkBA,MAAMA,IAA2B,gBAAAC,EAAA,CAAC;AAAA,EAChC,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AACF,MACOF,IAKH,gBAAAG;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAMD,EAAa;AAAA,MACnB,KAAKA,EAAa;AAAA,MAClB,OAAOA,EAAa;AAAA,MACpB,QAAQA,EAAa;AAAA,MACrB,QAAQE;AAAA,MACR,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,eAAe;AAAA,IAAA;AAAA,IAGjB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,eAAe;AAAA,QAAA;AAAA,QAGhB,UAAAJ;AAAA,MAAA;AAAA,IAAA;AAAA,EACH;AAAA,IA7BK,MANsB;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeGridLayout.js","sources":["../../../../src/components/OwpTreeGrid/internal/treeGridLayout.ts"],"sourcesContent":["import { isPlainObject } from 'es-toolkit/compat';\nimport { type OwpTreeGridLayoutConfig } from '../OwpTreeGrid';\n\ntype TreeGridHeaderLayoutConfig = NonNullable<OwpTreeGridLayoutConfig['Header']>;\ntype TreeGridSectionConfig = Record<string, unknown>;\ntype TreeGridLayoutNode = TreeGridSectionConfig & { nextSibling?: TreeGridLayoutNode };\n\nexport const TREE_GRID_HEADER_SECTION = 'Header';\nexport const TREE_GRID_TOOLBAR_SECTION = 'Toolbar';\nexport const TREE_GRID_FOOT_SECTION = 'Foot';\nexport const TREE_GRID_NEXT_SIBLING_KEY = 'nextSibling';\nexport const TREE_GRID_LAYOUT_SECTION_KEYS = [\n TREE_GRID_HEADER_SECTION,\n TREE_GRID_TOOLBAR_SECTION,\n TREE_GRID_FOOT_SECTION,\n] as const;\n\nexport const HEADER = TREE_GRID_HEADER_SECTION;\nexport const TOOLBAR = TREE_GRID_TOOLBAR_SECTION;\nexport const FOOTER = TREE_GRID_FOOT_SECTION;\nexport const NEXT_SIBLING = TREE_GRID_NEXT_SIBLING_KEY;\n\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nlet treeGridXmlParser: DOMParser | undefined;\n\nconst assignTreeGridSectionFields = (\n targetSection: TRow,\n sectionConfig: TreeGridSectionConfig,\n) => {\n const mutableTargetSection = targetSection as unknown as TreeGridSectionConfig;\n\n for (const fieldName in sectionConfig) {\n if (!hasOwnProperty.call(sectionConfig, fieldName) || fieldName === TREE_GRID_NEXT_SIBLING_KEY) {\n continue;\n }\n\n const fieldValue = sectionConfig[fieldName];\n\n if (fieldValue === undefined) {\n continue;\n }\n\n mutableTargetSection[fieldName] = fieldValue;\n }\n};\n\n/**\n * applyTreeGridSubHeaderLayoutText 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param headerLayout headerLayout 값\n */\nexport const applyTreeGridSubHeaderLayoutText = (\n grid: TTGrid,\n headerLayout?: TreeGridHeaderLayoutConfig,\n) => {\n if (!headerLayout || !grid?.Header) {\n return;\n }\n\n let currentHeaderLayout = headerLayout[TREE_GRID_NEXT_SIBLING_KEY] as TreeGridLayoutNode | undefined;\n let currentGridHeader = grid.Header.nextSibling;\n\n while (currentHeaderLayout && currentGridHeader) {\n assignTreeGridSectionFields(currentGridHeader, currentHeaderLayout);\n currentHeaderLayout = currentHeaderLayout.nextSibling;\n currentGridHeader = currentGridHeader.nextSibling;\n }\n};\n\nexport const applySubHeaderLayoutTextToGrid = applyTreeGridSubHeaderLayoutText;\nexport const changeSubHeaderLayoutTextByGrid = applyTreeGridSubHeaderLayoutText;\n\n/**\n * parseTreeGridXmlToJson 파싱 함수\n * @param xmlString XML 문자열\n */\nexport const parseTreeGridXmlToJson = (xmlString?: string) => {\n try {\n if (!xmlString || typeof DOMParser !== 'function') {\n return undefined;\n }\n\n treeGridXmlParser ??= new DOMParser();\n\n const parsedXml = treeGridXmlParser.parseFromString(xmlString, 'text/xml');\n const childElements = parsedXml.documentElement?.children;\n\n if (!childElements?.length) {\n return undefined;\n }\n\n const parsedItems = new Array<TreeGridSectionConfig>(childElements.length);\n\n for (let nodeIndex = 0; nodeIndex < childElements.length; nodeIndex += 1) {\n const attributes = childElements[nodeIndex].attributes;\n const item: TreeGridSectionConfig = {};\n\n for (let attrIndex = 0; attrIndex < attributes.length; attrIndex += 1) {\n const attribute = attributes[attrIndex];\n item[attribute.name] = attribute.value;\n }\n\n parsedItems[nodeIndex] = item;\n }\n\n return parsedItems;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n};\nexport const convertXmlToJson = parseTreeGridXmlToJson;\n\n/**\n * applyTreeGridLayoutToGrid 적용 함수\n * @param grid TreeGrid 인스턴스\n * @param layoutConfig 레이아웃 설정\n * @param disableBodyReload disableBodyReload 값\n */\nexport const applyTreeGridLayoutToGrid = (\n grid: TTGrid | TGrid,\n layoutConfig?: OwpTreeGridLayoutConfig,\n disableBodyReload?: boolean,\n) => {\n if (!layoutConfig || !grid) {\n return;\n }\n\n // @ts-expect-error - TreeGrid header block metadata is not declared in bundled types\n const hasSubHeaderBlock = (grid?.Header?.Block ?? 0) > 0;\n const headerLayout = layoutConfig.Header;\n const footerRow = grid.Foot?.lastChild;\n\n if (hasSubHeaderBlock && headerLayout && isPlainObject(headerLayout)) {\n applyTreeGridSubHeaderLayoutText(grid, headerLayout);\n }\n\n for (const sectionKey of TREE_GRID_LAYOUT_SECTION_KEYS) {\n const sectionLayout = layoutConfig[sectionKey] as TreeGridSectionConfig | undefined;\n\n if (!sectionLayout || !isPlainObject(sectionLayout)) {\n continue;\n }\n\n if (sectionKey === TREE_GRID_FOOT_SECTION && footerRow) {\n assignTreeGridSectionFields(footerRow, sectionLayout);\n continue;\n }\n\n const sectionTarget = grid[sectionKey];\n\n if (!sectionTarget) {\n continue;\n }\n\n assignTreeGridSectionFields(sectionTarget, sectionLayout);\n }\n\n if (!disableBodyReload) {\n grid.ReloadBody();\n }\n};\n"],"names":["TREE_GRID_HEADER_SECTION","TREE_GRID_TOOLBAR_SECTION","TREE_GRID_FOOT_SECTION","TREE_GRID_NEXT_SIBLING_KEY","TREE_GRID_LAYOUT_SECTION_KEYS","hasOwnProperty","treeGridXmlParser","assignTreeGridSectionFields","__name","targetSection","sectionConfig","mutableTargetSection","fieldName","fieldValue","applyTreeGridSubHeaderLayoutText","grid","headerLayout","currentHeaderLayout","currentGridHeader","parseTreeGridXmlToJson","xmlString","childElements","_a","parsedItems","nodeIndex","attributes","item","attrIndex","attribute","error","applyTreeGridLayoutToGrid","layoutConfig","disableBodyReload","hasSubHeaderBlock","footerRow","_b","isPlainObject","sectionKey","sectionLayout","sectionTarget"],"mappings":";;;AAOO,MAAMA,IAA2B,UAC3BC,IAA4B,WAC5BC,IAAyB,QACzBC,IAA6B,eAC7BC,IAAgC;AAAA,EAC3CJ;AAAA,EACAC;AAAA,EACAC;AACF,GAOMG,IAAiB,OAAO,UAAU;AACxC,IAAIC;AAEJ,MAAMC,IAA8B,gBAAAC,EAAA,CAClCC,GACAC,MACG;AACH,QAAMC,IAAuBF;AAE7B,aAAWG,KAAaF,GAAe;AACrC,QAAI,CAACL,EAAe,KAAKK,GAAeE,CAAS,KAAKA,MAAcT;AAClE;AAGF,UAAMU,IAAaH,EAAcE,CAAS;AAE1C,IAAIC,MAAe,WAInBF,EAAqBC,CAAS,IAAIC;AAAA,EACpC;AACF,GAnBoC,gCA0BvBC,IAAmC,gBAAAN,EAAA,CAC9CO,GACAC,MACG;AACH,MAAI,CAACA,KAAgB,EAACD,KAAA,QAAAA,EAAM;AAC1B;AAGF,MAAIE,IAAsBD,EAAab,CAA0B,GAC7De,IAAoBH,EAAK,OAAO;AAEpC,SAAOE,KAAuBC;AAC5B,IAAAX,EAA4BW,GAAmBD,CAAmB,GAClEA,IAAsBA,EAAoB,aAC1CC,IAAoBA,EAAkB;AAE1C,GAhBgD,qCAyBnCC,IAAyB,gBAAAX,EAAA,CAACY,MAAuB;;AAC5D,MAAI;AACF,QAAI,CAACA,KAAa,OAAO,aAAc;AACrC;AAGF,IAAAd,UAAsB,IAAI,UAAA;AAG1B,UAAMe,KAAgBC,IADJhB,EAAkB,gBAAgBc,GAAW,UAAU,EACzC,oBAAV,gBAAAE,EAA2B;AAEjD,QAAI,EAACD,KAAA,QAAAA,EAAe;AAClB;AAGF,UAAME,IAAc,IAAI,MAA6BF,EAAc,MAAM;AAEzE,aAASG,IAAY,GAAGA,IAAYH,EAAc,QAAQG,KAAa,GAAG;AACxE,YAAMC,IAAaJ,EAAcG,CAAS,EAAE,YACtCE,IAA8B,CAAA;AAEpC,eAASC,IAAY,GAAGA,IAAYF,EAAW,QAAQE,KAAa,GAAG;AACrE,cAAMC,IAAYH,EAAWE,CAAS;AACtC,QAAAD,EAAKE,EAAU,IAAI,IAAIA,EAAU;AAAA,MACnC;AAEA,MAAAL,EAAYC,CAAS,IAAIE;AAAA,IAC3B;AAEA,WAAOH;AAAA,EACT,SAASM,GAAO;AACd,YAAQ,MAAMA,CAAK;AACnB;AAAA,EACF;AACF,GAlCsC,2BA2CzBC,IAA4B,gBAAAtB,EAAA,CACvCO,GACAgB,GACAC,MACG;;AACH,MAAI,CAACD,KAAgB,CAAChB;AACpB;AAIF,QAAMkB,OAAqBX,IAAAP,KAAA,gBAAAA,EAAM,WAAN,gBAAAO,EAAc,UAAS,KAAK,GACjDN,IAAee,EAAa,QAC5BG,KAAYC,IAAApB,EAAK,SAAL,gBAAAoB,EAAW;AAE7B,EAAIF,KAAqBjB,KAAgBoB,EAAcpB,CAAY,KACjEF,EAAiCC,GAAMC,CAAY;AAGrD,aAAWqB,KAAcjC,GAA+B;AACtD,UAAMkC,IAAgBP,EAAaM,CAAU;AAE7C,QAAI,CAACC,KAAiB,CAACF,EAAcE,CAAa;AAChD;AAGF,QAAID,MAAenC,KAA0BgC,GAAW;AACtD,MAAA3B,EAA4B2B,GAAWI,CAAa;AACpD;AAAA,IACF;AAEA,UAAMC,IAAgBxB,EAAKsB,CAAU;AAErC,IAAKE,KAILhC,EAA4BgC,GAAeD,CAAa;AAAA,EAC1D;AAEA,EAAKN,KACHjB,EAAK,WAAA;AAET,GA1CyC;"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
var b = Object.defineProperty;
|
|
2
|
+
var G = (e, t) => b(e, "name", { value: t, configurable: !0 });
|
|
3
|
+
import { TREEGRID_INPUT_CELL_COLOR as L } from "../../../constants/treeGrid.js";
|
|
4
|
+
import { highlightTreeGridCellById as h } from "../../../utils/treeGridUtil.js";
|
|
5
|
+
import { applyTreeGridLayoutToGrid as x } from "./treeGridLayout.js";
|
|
6
|
+
import { measureTreeGridPerf as N } from "../utils/perf.js";
|
|
7
|
+
import { debounce as D } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/function/debounce.js";
|
|
8
|
+
import { get as A } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/object/get.js";
|
|
9
|
+
import { isEmpty as k } from "../../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
|
|
10
|
+
const U = Number.parseInt(
|
|
11
|
+
L.replace("#", ""),
|
|
12
|
+
16
|
|
13
|
+
), g = 300, _ = {
|
|
14
|
+
en: "/assets/vendors/Grid/TextEN.xml",
|
|
15
|
+
kr: "/assets/vendors/Grid/TextKR.xml"
|
|
16
|
+
}, E = /* @__PURE__ */ G((e) => `${e}?noCache=${Date.now()}`, "appendNoCacheQuery"), V = /* @__PURE__ */ G((e) => e === "kr" ? _.kr : _.en, "getTreeGridTextResourceUrl"), $ = /* @__PURE__ */ G((e) => e != null && e.includes("assets") ? E(e) : (
|
|
17
|
+
// @ts-expect-error - API base URL env is provided by host app
|
|
18
|
+
`undefined/${e}?noCache=${Date.now()}`
|
|
19
|
+
), "resolveTreeGridDataUrl"), a = /* @__PURE__ */ G((e, t, T) => e ? { Url: $(t) } : { Data: { Body: [k(T) ? [] : T] } }, "buildTreeGridDataSource"), H = /* @__PURE__ */ G(({
|
|
20
|
+
id: e,
|
|
21
|
+
layoutUrl: t,
|
|
22
|
+
dataUrl: T,
|
|
23
|
+
bodyData: f,
|
|
24
|
+
useDataUrl: w,
|
|
25
|
+
width: l,
|
|
26
|
+
height: S,
|
|
27
|
+
languageId: R
|
|
28
|
+
}) => ({
|
|
29
|
+
id: e,
|
|
30
|
+
Layout: { Url: E(t ?? "") },
|
|
31
|
+
Data: a(w, T, f),
|
|
32
|
+
Text: {
|
|
33
|
+
Url: V(R)
|
|
34
|
+
},
|
|
35
|
+
width: l,
|
|
36
|
+
height: S,
|
|
37
|
+
Debug: "Error"
|
|
38
|
+
}), "buildTreeGridInitializationOptions"), y = /* @__PURE__ */ G((e) => A(e, "Data.Data.Data.Body.0"), "getTreeGridBodyData"), F = /* @__PURE__ */ G((e) => Array.isArray(e) ? e.length : 0, "getTreeGridBodyDataCount"), v = /* @__PURE__ */ G((e) => {
|
|
39
|
+
const t = e == null ? void 0 : e.Visible;
|
|
40
|
+
return !!e && t !== 0 && t !== !1 && t !== "0";
|
|
41
|
+
}, "isVisibleTreeGridRow"), P = /* @__PURE__ */ G((e) => {
|
|
42
|
+
const t = e == null ? void 0 : e.Added;
|
|
43
|
+
return !!e && t !== 0 && t !== !1 && t !== "0" && t !== void 0;
|
|
44
|
+
}, "isAddedTreeGridRow"), O = /* @__PURE__ */ G((e) => !e || e.Fixed === "Foot" || !v(e) ? !1 : e.Kind === "Data" || P(e), "isDisplayTreeGridRow"), K = /* @__PURE__ */ G((e, t, T) => !t || !T || !O(t) ? !1 : e.CanEdit(t, T) === 1, "isEditableTreeGridCell"), M = /* @__PURE__ */ G((e, t, T) => {
|
|
45
|
+
const f = e.GetAttribute(t, T, "Color");
|
|
46
|
+
return f != null && f !== "";
|
|
47
|
+
}, "hasExplicitTreeGridCellColor"), j = /* @__PURE__ */ G((e, t, T) => !t || !K(e, t, T) || M(e, t, T) ? null : U, "getEditableTreeGridCellDefaultColor"), ee = /* @__PURE__ */ G((e) => {
|
|
48
|
+
if (!e)
|
|
49
|
+
return !1;
|
|
50
|
+
if (typeof e.GetFirst == "function" && typeof e.GetNext == "function") {
|
|
51
|
+
let t = e.GetFirst();
|
|
52
|
+
for (; t; ) {
|
|
53
|
+
if (O(t))
|
|
54
|
+
return !0;
|
|
55
|
+
t = e.GetNext(t);
|
|
56
|
+
}
|
|
57
|
+
return !1;
|
|
58
|
+
}
|
|
59
|
+
return Object.values(e.Rows ?? {}).some((t) => O(t));
|
|
60
|
+
}, "hasTreeGridDisplayDataRows"), te = /* @__PURE__ */ G((e, t, T) => {
|
|
61
|
+
var w;
|
|
62
|
+
const f = (w = e.Data) == null ? void 0 : w.Data;
|
|
63
|
+
e.Data.Data = {
|
|
64
|
+
...f,
|
|
65
|
+
Data: { Body: [t || []] },
|
|
66
|
+
Url: ""
|
|
67
|
+
}, e.ReloadBody(T);
|
|
68
|
+
}, "replaceTreeGridBodyData"), oe = /* @__PURE__ */ G(({
|
|
69
|
+
id: e,
|
|
70
|
+
latestEventHandlersRef: t,
|
|
71
|
+
highlightEditableCellsRef: T,
|
|
72
|
+
highlightChangedCellsRef: f,
|
|
73
|
+
treeGridInstanceRef: w,
|
|
74
|
+
treeGridInitStartedAtRef: l,
|
|
75
|
+
latestLayoutOverridesRef: S,
|
|
76
|
+
appliedLayoutOverridesRef: R,
|
|
77
|
+
appliedBodyDataPropRef: B,
|
|
78
|
+
hasAppliedInitialLayoutRef: p,
|
|
79
|
+
syncHasDisplayDataRows: s,
|
|
80
|
+
setIsTreeGridReady: I
|
|
81
|
+
}) => {
|
|
82
|
+
const c = t.current;
|
|
83
|
+
window.TGSetEvent("OnRowAdd", e, (o, u) => {
|
|
84
|
+
var r, n;
|
|
85
|
+
u.CanEdit = 1, u.CanDelete = 1, (n = (r = t.current) == null ? void 0 : r.onRowAdd) == null || n.call(r, o, u);
|
|
86
|
+
}), window.TGSetEvent("OnRowAdded", e, (o) => {
|
|
87
|
+
s(o);
|
|
88
|
+
}), typeof (c == null ? void 0 : c.onRowClick) == "function" && window.TGSetEvent(
|
|
89
|
+
"OnClick",
|
|
90
|
+
e,
|
|
91
|
+
D((o, u, r, n, i, C) => {
|
|
92
|
+
var d, m;
|
|
93
|
+
(m = (d = t.current) == null ? void 0 : d.onRowClick) == null || m.call(
|
|
94
|
+
d,
|
|
95
|
+
o,
|
|
96
|
+
u,
|
|
97
|
+
r,
|
|
98
|
+
n,
|
|
99
|
+
i,
|
|
100
|
+
C
|
|
101
|
+
);
|
|
102
|
+
}, 300)
|
|
103
|
+
), typeof (c == null ? void 0 : c.onClickButton) == "function" && window.TGSetEvent(
|
|
104
|
+
"OnClickButton",
|
|
105
|
+
e,
|
|
106
|
+
D((o, u, r, n) => {
|
|
107
|
+
var i, C;
|
|
108
|
+
(C = (i = t.current) == null ? void 0 : i.onClickButton) == null || C.call(
|
|
109
|
+
i,
|
|
110
|
+
o,
|
|
111
|
+
u,
|
|
112
|
+
r,
|
|
113
|
+
n
|
|
114
|
+
);
|
|
115
|
+
}, 300)
|
|
116
|
+
), typeof (c == null ? void 0 : c.onRowDelete) == "function" ? window.TGSetEvent("OnRowDelete", e, (o, u, r) => {
|
|
117
|
+
var n, i;
|
|
118
|
+
s(o), (i = (n = t.current) == null ? void 0 : n.onRowDelete) == null || i.call(
|
|
119
|
+
n,
|
|
120
|
+
o,
|
|
121
|
+
u,
|
|
122
|
+
r
|
|
123
|
+
);
|
|
124
|
+
}) : window.TGSetEvent("OnRowDelete", e, (o) => {
|
|
125
|
+
s(o);
|
|
126
|
+
}), typeof (c == null ? void 0 : c.onRowUndelete) == "function" ? window.TGSetEvent("OnRowUndelete", e, (o, u) => {
|
|
127
|
+
var r, n;
|
|
128
|
+
s(o), (n = (r = t.current) == null ? void 0 : r.onRowUndelete) == null || n.call(r, o, u);
|
|
129
|
+
}) : window.TGSetEvent("OnRowUndelete", e, (o) => {
|
|
130
|
+
s(o);
|
|
131
|
+
}), window.TGSetEvent("OnGetDefaultColor", e, (o, u, r) => T.current ? j(o, u, r) : null), window.TGSetEvent("OnAfterValueChanged", e, (o, u, r, n) => {
|
|
132
|
+
var C, d;
|
|
133
|
+
f.current && h(e, { row: u, col: r });
|
|
134
|
+
const i = ((C = t.current) == null ? void 0 : C.onAfterValueChanged) ?? ((d = t.current) == null ? void 0 : d.onRowChange);
|
|
135
|
+
i == null || i(o, u, r, n);
|
|
136
|
+
}), typeof (c == null ? void 0 : c.onSelect) == "function" && window.TGSetEvent(
|
|
137
|
+
"OnSelect",
|
|
138
|
+
e,
|
|
139
|
+
D((o) => {
|
|
140
|
+
var r, n;
|
|
141
|
+
const u = o.GetSelRows() ?? [];
|
|
142
|
+
(n = (r = t.current) == null ? void 0 : r.onSelect) == null || n.call(r, u);
|
|
143
|
+
}, 100)
|
|
144
|
+
), typeof (c == null ? void 0 : c.onSave) == "function" && window.TGSetEvent("OnSave", e, (o, u, r) => {
|
|
145
|
+
var n, i;
|
|
146
|
+
(i = (n = t.current) == null ? void 0 : n.onSave) == null || i.call(
|
|
147
|
+
n,
|
|
148
|
+
o,
|
|
149
|
+
u,
|
|
150
|
+
r
|
|
151
|
+
);
|
|
152
|
+
}), window.TGSetEvent(
|
|
153
|
+
"OnReady",
|
|
154
|
+
e,
|
|
155
|
+
D((o) => {
|
|
156
|
+
var u, r;
|
|
157
|
+
if (!p.current) {
|
|
158
|
+
const n = S.current;
|
|
159
|
+
p.current = !0, x(o, n), w.current = o, R.current = n, B.current = y(o), s(o), I(!0), N(e, "TreeGrid init ready", l.current, {
|
|
160
|
+
bodyRowCount: F(
|
|
161
|
+
y(o)
|
|
162
|
+
)
|
|
163
|
+
}), l.current = null, (r = (u = t.current) == null ? void 0 : u.onReady) == null || r.call(u, o);
|
|
164
|
+
}
|
|
165
|
+
}, 100)
|
|
166
|
+
);
|
|
167
|
+
}, "bindTreeGridEvents");
|
|
168
|
+
export {
|
|
169
|
+
g as TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS,
|
|
170
|
+
oe as bindTreeGridEvents,
|
|
171
|
+
H as buildTreeGridInitializationOptions,
|
|
172
|
+
F as getTreeGridBodyDataCount,
|
|
173
|
+
ee as hasTreeGridDisplayDataRows,
|
|
174
|
+
te as replaceTreeGridBodyData
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=treeGridRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeGridRuntime.js","sources":["../../../../src/components/OwpTreeGrid/internal/treeGridRuntime.ts"],"sourcesContent":["import { TREEGRID_INPUT_CELL_COLOR } from '@/constants/treeGrid';\nimport { highlightTreeGridCellById } from '@/utils/treeGridUtil';\nimport { debounce, get, isEmpty } from 'es-toolkit/compat';\nimport {\n type Dispatch,\n type RefObject,\n type SetStateAction,\n} from 'react';\nimport type {\n OwpTreeGridBodyData,\n OwpTreeGridLayoutConfig,\n OwpTreeGridProps,\n OwpTreeGridRowModel,\n OwpTreeGridSelectedRows,\n} from '../OwpTreeGrid';\nimport { applyTreeGridLayoutToGrid } from './treeGridLayout';\nimport {\n measureTreeGridPerf,\n} from '../utils/perf';\n\nconst TREE_GRID_INPUT_CELL_COLOR_VALUE = Number.parseInt(\n TREEGRID_INPUT_CELL_COLOR.replace('#', ''),\n 16,\n);\n\nexport const TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS = 300;\n\ntype TreeGridInitializationInput<T> = {\n id: string;\n layoutUrl?: string;\n dataUrl?: string;\n bodyData: OwpTreeGridBodyData<T>;\n useDataUrl?: boolean;\n width?: string | number;\n height?: string | number;\n languageId: string;\n};\n\nexport type TreeGridEventHandlers<T> = Pick<\n OwpTreeGridProps<T>,\n | 'onSelect'\n | 'onRowClick'\n | 'onRowAdd'\n | 'onRowDelete'\n | 'onRowUndelete'\n | 'onRowChange'\n | 'onClickButton'\n | 'onSave'\n | 'onReady'\n | 'onAfterValueChanged'\n>;\n\nexport type TreeGridEventBindingOptions<T> = Pick<OwpTreeGridProps<T>, 'id'> & {\n latestEventHandlersRef: RefObject<TreeGridEventHandlers<T>>;\n highlightEditableCellsRef: RefObject<boolean>;\n highlightChangedCellsRef: RefObject<boolean>;\n treeGridInstanceRef: RefObject<TGrid>;\n treeGridInitStartedAtRef: RefObject<number | null>;\n latestLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedLayoutOverridesRef: RefObject<OwpTreeGridLayoutConfig | undefined>;\n appliedBodyDataPropRef: RefObject<OwpTreeGridBodyData<T>>;\n hasAppliedInitialLayoutRef: RefObject<boolean>;\n syncHasDisplayDataRows: (grid: TGrid | null) => void;\n setIsTreeGridReady: Dispatch<SetStateAction<boolean>>;\n};\n\nconst TREE_GRID_TEXT_RESOURCE_URLS = {\n en: '/assets/vendors/Grid/TextEN.xml',\n kr: '/assets/vendors/Grid/TextKR.xml',\n} as const;\n\nconst appendNoCacheQuery = (url: string) => {\n return `${url}?noCache=${Date.now()}`;\n};\n\nconst getTreeGridTextResourceUrl = (languageId: string) => {\n return languageId === 'kr' ? TREE_GRID_TEXT_RESOURCE_URLS.kr : TREE_GRID_TEXT_RESOURCE_URLS.en;\n};\n\nconst resolveTreeGridDataUrl = (dataUrl?: string) => {\n return dataUrl?.includes('assets')\n ? appendNoCacheQuery(dataUrl)\n : // @ts-expect-error - API base URL env is provided by host app\n `${import.meta.env.VITE_API_BASE_URL}/${dataUrl}?noCache=${Date.now()}`;\n};\n\nconst buildTreeGridDataSource = <T,>(\n useDataUrl: boolean | undefined,\n dataUrl: string | undefined,\n bodyData: OwpTreeGridBodyData<T>,\n) => {\n if (useDataUrl) {\n return { Url: resolveTreeGridDataUrl(dataUrl) };\n }\n\n return { Data: { Body: [isEmpty(bodyData) ? [] : bodyData] } };\n};\n\n/**\n * TreeGrid 초기화 옵션 생성\n * @param input 초기화 입력값\n */\nexport const buildTreeGridInitializationOptions = <T,>({\n id,\n layoutUrl,\n dataUrl,\n bodyData,\n useDataUrl,\n width,\n height,\n languageId,\n}: TreeGridInitializationInput<T>) => {\n return {\n id,\n Layout: { Url: appendNoCacheQuery(layoutUrl ?? '') },\n Data: buildTreeGridDataSource(useDataUrl, dataUrl, bodyData),\n Text: {\n Url: getTreeGridTextResourceUrl(languageId),\n },\n width,\n height,\n Debug: 'Error',\n };\n};\n\nconst getTreeGridBodyData = (grid: TGrid | null) => {\n return get(grid, 'Data.Data.Data.Body.0');\n};\n\n/**\n * TreeGrid Body 데이터 건수\n * @param bodyData TreeGrid Body 데이터\n */\nexport const getTreeGridBodyDataCount = <T,>(bodyData: OwpTreeGridBodyData<T>) => {\n return Array.isArray(bodyData) ? bodyData.length : 0;\n};\n\nconst isVisibleTreeGridRow = (row: TRow | null | undefined) => {\n const visible = (row as { Visible?: unknown } | null)?.Visible;\n\n return !!row && visible !== 0 && visible !== false && visible !== '0';\n};\n\n/**\n * TreeGrid 추가 행 여부\n * @param row TreeGrid 행\n */\nconst isAddedTreeGridRow = (row: TRow | null | undefined) => {\n const added = (row as { Added?: unknown } | null)?.Added;\n\n return !!row && added !== 0 && added !== false && added !== '0' && added !== undefined;\n};\n\n/**\n * TreeGrid 본문 표시 행 여부\n * @param row TreeGrid 행\n */\nconst isDisplayTreeGridRow = (row: TRow | null | undefined) => {\n if (!row || row.Fixed === 'Foot' || !isVisibleTreeGridRow(row)) {\n return false;\n }\n\n return row.Kind === 'Data' || isAddedTreeGridRow(row);\n};\n\n/**\n * TreeGrid 셀 편집 가능 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst isEditableTreeGridCell = (grid: TGrid, row: TRow | null | undefined, col: string) => {\n if (!row || !col || !isDisplayTreeGridRow(row)) {\n return false;\n }\n\n return grid.CanEdit(row, col) === 1;\n};\n\n/**\n * TreeGrid 셀 명시 색상 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst hasExplicitTreeGridCellColor = (grid: TGrid, row: TRow, col: string) => {\n const color = grid.GetAttribute(row, col, 'Color');\n\n return color !== undefined && color !== null && color !== '';\n};\n\n/**\n * TreeGrid 입력 셀 기본 배경색 계산\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 행\n * @param col TreeGrid 컬럼 키\n */\nconst getEditableTreeGridCellDefaultColor = (\n grid: TGrid,\n row: TRow | null | undefined,\n col: string,\n) => {\n if (\n !row ||\n !isEditableTreeGridCell(grid, row, col) ||\n hasExplicitTreeGridCellColor(grid, row, col)\n ) {\n return null;\n }\n\n return TREE_GRID_INPUT_CELL_COLOR_VALUE;\n};\n\n/**\n * TreeGrid 표시 데이터 행 존재 여부\n * @param grid TreeGrid 인스턴스\n */\nexport const hasTreeGridDisplayDataRows = (grid: TGrid | null) => {\n if (!grid) {\n return false;\n }\n\n if (typeof grid.GetFirst === 'function' && typeof grid.GetNext === 'function') {\n let row = grid.GetFirst();\n\n while (row) {\n if (isDisplayTreeGridRow(row)) {\n return true;\n }\n\n row = grid.GetNext(row);\n }\n\n return false;\n }\n\n return Object.values(grid.Rows ?? {}).some((row) => {\n return isDisplayTreeGridRow(row);\n });\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param grid TreeGrid 인스턴스\n * @param bodyData 새 Body 데이터\n * @param onReloadFinish 재로드 완료 콜백\n */\nexport const replaceTreeGridBodyData = <T,>(\n grid: TGrid,\n bodyData: OwpTreeGridBodyData<T>,\n onReloadFinish?: (code: number) => void,\n) => {\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n const currentDataConfig = grid.Data?.Data;\n\n // @ts-expect-error - TreeGrid Data.Data shape is not reflected in bundled types\n grid.Data.Data = {\n ...currentDataConfig,\n Data: { Body: [bodyData || []] },\n Url: '',\n };\n\n grid.ReloadBody(onReloadFinish);\n};\n\n/**\n * TreeGrid 이벤트 바인딩\n * @param options 이벤트 바인딩 옵션\n */\nexport const bindTreeGridEvents = <T,>({\n id,\n latestEventHandlersRef,\n highlightEditableCellsRef,\n highlightChangedCellsRef,\n treeGridInstanceRef,\n treeGridInitStartedAtRef,\n latestLayoutOverridesRef,\n appliedLayoutOverridesRef,\n appliedBodyDataPropRef,\n hasAppliedInitialLayoutRef,\n syncHasDisplayDataRows,\n setIsTreeGridReady,\n}: TreeGridEventBindingOptions<T>) => {\n const initialEventHandlers = latestEventHandlersRef.current;\n\n window.TGSetEvent('OnRowAdd', id, (grid, row) => {\n row.CanEdit = 1;\n row.CanDelete = 1;\n\n latestEventHandlersRef.current?.onRowAdd?.(grid, row as OwpTreeGridRowModel<T>);\n });\n window.TGSetEvent('OnRowAdded', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n\n if (typeof initialEventHandlers?.onRowClick === 'function') {\n window.TGSetEvent(\n 'OnClick',\n id,\n debounce((grid, row, col, x, y, event) => {\n latestEventHandlersRef.current?.onRowClick?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n x,\n y,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onClickButton === 'function') {\n window.TGSetEvent(\n 'OnClickButton',\n id,\n debounce((grid, row, col, event) => {\n latestEventHandlersRef.current?.onClickButton?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n col,\n event,\n );\n }, 300),\n );\n }\n\n if (typeof initialEventHandlers?.onRowDelete === 'function') {\n window.TGSetEvent('OnRowDelete', id, (grid, row, deleteType) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowDelete?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n deleteType,\n );\n });\n } else {\n window.TGSetEvent('OnRowDelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n if (typeof initialEventHandlers?.onRowUndelete === 'function') {\n window.TGSetEvent('OnRowUndelete', id, (grid, row) => {\n syncHasDisplayDataRows(grid);\n latestEventHandlersRef.current?.onRowUndelete?.(grid, row as OwpTreeGridRowModel<T>);\n });\n } else {\n window.TGSetEvent('OnRowUndelete', id, (grid) => {\n syncHasDisplayDataRows(grid);\n });\n }\n window.TGSetEvent('OnGetDefaultColor', id, (grid, row, col) => {\n if (!highlightEditableCellsRef.current) {\n return null;\n }\n\n return getEditableTreeGridCellDefaultColor(grid, row, col);\n });\n window.TGSetEvent('OnAfterValueChanged', id, (grid, row, col, value) => {\n if (highlightChangedCellsRef.current) {\n highlightTreeGridCellById(id, { row, col });\n }\n\n const valueChangedHandler =\n latestEventHandlersRef.current?.onAfterValueChanged ??\n latestEventHandlersRef.current?.onRowChange;\n\n valueChangedHandler?.(grid, row as OwpTreeGridRowModel<T>, col, value);\n });\n if (typeof initialEventHandlers?.onSelect === 'function') {\n window.TGSetEvent(\n 'OnSelect',\n id,\n debounce((grid) => {\n const selectedRows = (grid.GetSelRows() ?? []) as OwpTreeGridSelectedRows<T>;\n latestEventHandlersRef.current?.onSelect?.(selectedRows);\n }, 100),\n );\n }\n if (typeof initialEventHandlers?.onSave === 'function') {\n window.TGSetEvent('OnSave', id, (grid, row, autoupdate) => {\n latestEventHandlersRef.current?.onSave?.(\n grid,\n row as OwpTreeGridRowModel<T>,\n autoupdate,\n );\n });\n }\n\n window.TGSetEvent(\n 'OnReady',\n id,\n debounce((grid) => {\n if (!hasAppliedInitialLayoutRef.current) {\n const latestLayoutOverrides = latestLayoutOverridesRef.current;\n\n hasAppliedInitialLayoutRef.current = true;\n applyTreeGridLayoutToGrid(grid, latestLayoutOverrides);\n treeGridInstanceRef.current = grid;\n appliedLayoutOverridesRef.current = latestLayoutOverrides;\n appliedBodyDataPropRef.current = getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>;\n syncHasDisplayDataRows(grid);\n setIsTreeGridReady(true);\n measureTreeGridPerf(id, 'TreeGrid init ready', treeGridInitStartedAtRef.current, {\n bodyRowCount: getTreeGridBodyDataCount(\n getTreeGridBodyData(grid) as OwpTreeGridBodyData<T>,\n ),\n });\n treeGridInitStartedAtRef.current = null;\n latestEventHandlersRef.current?.onReady?.(grid);\n }\n }, 100),\n );\n};\n"],"names":["TREE_GRID_INPUT_CELL_COLOR_VALUE","TREEGRID_INPUT_CELL_COLOR","TREE_GRID_BINDING_LOADING_MIN_VISIBLE_MS","TREE_GRID_TEXT_RESOURCE_URLS","appendNoCacheQuery","__name","url","getTreeGridTextResourceUrl","languageId","resolveTreeGridDataUrl","dataUrl","buildTreeGridDataSource","useDataUrl","bodyData","isEmpty","buildTreeGridInitializationOptions","id","layoutUrl","width","height","getTreeGridBodyData","grid","get","getTreeGridBodyDataCount","isVisibleTreeGridRow","row","visible","isAddedTreeGridRow","added","isDisplayTreeGridRow","isEditableTreeGridCell","col","hasExplicitTreeGridCellColor","color","getEditableTreeGridCellDefaultColor","hasTreeGridDisplayDataRows","replaceTreeGridBodyData","onReloadFinish","currentDataConfig","_a","bindTreeGridEvents","latestEventHandlersRef","highlightEditableCellsRef","highlightChangedCellsRef","treeGridInstanceRef","treeGridInitStartedAtRef","latestLayoutOverridesRef","appliedLayoutOverridesRef","appliedBodyDataPropRef","hasAppliedInitialLayoutRef","syncHasDisplayDataRows","setIsTreeGridReady","initialEventHandlers","_b","debounce","x","y","event","deleteType","value","highlightTreeGridCellById","valueChangedHandler","selectedRows","autoupdate","latestLayoutOverrides","applyTreeGridLayoutToGrid","measureTreeGridPerf"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"perf.js","sources":["../../../../src/components/OwpTreeGrid/utils/perf.ts"],"sourcesContent":["/** Temporary TreeGrid perf instrumentation. Remove after profiling is no longer needed. */\ntype TreeGridPerfWindow = Window & {\n __OWP_TREE_GRID_PERF__?: boolean;\n};\n\nexport const TREE_GRID_PERF_FLAG = '__OWP_TREE_GRID_PERF__';\n\n/**\n * TreeGrid 성능 계측 활성 여부\n */\nexport const isTreeGridPerfEnabled = () => {\n return typeof window !== 'undefined' && Boolean((window as TreeGridPerfWindow)[TREE_GRID_PERF_FLAG]);\n};\n\n/**\n * TreeGrid 성능 계측 타임스탬프 반환\n */\nexport const getTreeGridPerfTimestamp = () => {\n return typeof performance !== 'undefined' ? performance.now() : Date.now();\n};\n\n/**\n * TreeGrid 성능 계측 카운트 로그\n * @param gridId TreeGrid 인스턴스 ID\n * @param label 계측 라벨\n */\nexport const countTreeGridPerf = (gridId: string, label: string) => {\n if (!isTreeGridPerfEnabled()) {\n return;\n }\n\n console.count(`[OwpTreeGrid:${gridId}] ${label}`);\n};\n\n/**\n * TreeGrid 성능 계측 디버그 로그\n * @param gridId TreeGrid 인스턴스 ID\n * @param label 계측 라벨\n * @param payload 부가 정보\n */\nexport const logTreeGridPerf = (\n gridId: string,\n label: string,\n payload?: Record<string, unknown>,\n) => {\n if (!isTreeGridPerfEnabled()) {\n return;\n }\n\n if (payload) {\n console.info(`[OwpTreeGrid:${gridId}] ${label}`, payload);\n return;\n }\n\n console.info(`[OwpTreeGrid:${gridId}] ${label}`);\n};\n\n/**\n * TreeGrid 성능 계측 측정 로그\n * @param gridId TreeGrid 인스턴스 ID\n * @param label 계측 라벨\n * @param startedAt 시작 시각\n * @param payload 부가 정보\n */\nexport const measureTreeGridPerf = (\n gridId: string,\n label: string,\n startedAt: number | null,\n payload?: Record<string, unknown>,\n) => {\n if (!isTreeGridPerfEnabled() || startedAt === null) {\n return;\n }\n\n const durationMs = Number((getTreeGridPerfTimestamp() - startedAt).toFixed(1));\n\n if (payload) {\n console.info(`[OwpTreeGrid:${gridId}] ${label}`, { durationMs, ...payload });\n return;\n }\n\n console.info(`[OwpTreeGrid:${gridId}] ${label}`, { durationMs });\n};\n"],"names":["TREE_GRID_PERF_FLAG","isTreeGridPerfEnabled","__name","getTreeGridPerfTimestamp","countTreeGridPerf","gridId","label","logTreeGridPerf","payload","measureTreeGridPerf","startedAt","durationMs"],"mappings":";;AAKO,MAAMA,IAAsB,0BAKtBC,IAAwB,gBAAAC,EAAA,MAC5B,OAAO,SAAW,OAAe,EAAS,OAA8BF,CAAmB,GAD/D,0BAOxBG,IAA2B,gBAAAD,EAAA,MAC/B,OAAO,cAAgB,MAAc,YAAY,IAAA,IAAQ,KAAK,IAAA,GAD/B,6BAS3BE,IAAoB,gBAAAF,EAAA,CAACG,GAAgBC,MAAkB;AAClE,EAAKL,OAIL,QAAQ,MAAM,gBAAgBI,CAAM,KAAKC,CAAK,EAAE;AAClD,GANiC,sBAcpBC,IAAkB,gBAAAL,EAAA,CAC7BG,GACAC,GACAE,MACG;AACH,MAAKP,KAIL;AAAA,QAAIO,GAAS;AACX,cAAQ,KAAK,gBAAgBH,CAAM,KAAKC,CAAK,IAAIE,CAAO;AACxD;AAAA,IACF;AAEA,YAAQ,KAAK,gBAAgBH,CAAM,KAAKC,CAAK,EAAE;AAAA;AACjD,GAf+B,oBAwBlBG,IAAsB,gBAAAP,EAAA,CACjCG,GACAC,GACAI,GACAF,MACG;AACH,MAAI,CAACP,EAAA,KAA2BS,MAAc;AAC5C;AAGF,QAAMC,IAAa,QAAQR,EAAA,IAA6BO,GAAW,QAAQ,CAAC,CAAC;AAE7E,MAAIF,GAAS;AACX,YAAQ,KAAK,gBAAgBH,CAAM,KAAKC,CAAK,IAAI,EAAE,YAAAK,GAAY,GAAGH,EAAA,CAAS;AAC3E;AAAA,EACF;AAEA,UAAQ,KAAK,gBAAgBH,CAAM,KAAKC,CAAK,IAAI,EAAE,YAAAK,GAAY;AACjE,GAlBmC;"}
|
|
@@ -6,7 +6,7 @@ import m from "../../node_modules/.pnpm/@mui_icons-material@7.3.9_@mui_material@
|
|
|
6
6
|
import { Stack as N, Button as t, Typography as a } from "@mui/material";
|
|
7
7
|
import { clsx as x } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
8
8
|
import { useState as k } from "react";
|
|
9
|
-
import s from "./ZoomImage.js";
|
|
9
|
+
import s from "./internal/ZoomImage.js";
|
|
10
10
|
const Z = /* @__PURE__ */ e(({
|
|
11
11
|
className: c,
|
|
12
12
|
imageHeight: d,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpZoomImageSlider.js","sources":["../../../src/components/OwpZoomImageSlider/OwpZoomImageSlider.tsx"],"sourcesContent":["import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport { Button, Stack, Typography } from '@mui/material';\nimport clsx from 'clsx';\nimport { ReactNode, useState } from 'react';\nimport ZoomImage from './ZoomImage';\n\ninterface OwpZoomImageSliderProps {\n className?: string;\n imageHeight?: number;\n title?: ReactNode | string | undefined;\n rightActions?: ReactNode | undefined;\n isScannerPositionRight?: boolean;\n imageList?: string[];\n}\n\n/**\n * OwpZoomImageSlider 컴포넌트\n * @param className CSS 클래스명\n * @param imageHeight imageHeight 값\n * @param title 제목\n * @param rightActions rightActions 값\n * @param isScannerPositionRight isScannerPositionRight 값\n * @param imageList imageList 목록\n */\nconst OwpZoomImageSlider = ({\n className,\n imageHeight,\n title,\n rightActions,\n isScannerPositionRight,\n imageList,\n}: OwpZoomImageSliderProps) => {\n const [activeImageIndex, setActiveImageIndex] = useState(0);\n\n return (\n <div className={clsx('flex flex-col gap-12 w-full', className)}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <div className=\"flex items-center\">\n <Typography variant=\"h6\">{title}</Typography>\n <div className=\"pl-20 flex gap-8\">\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setActiveImageIndex((prev) => prev - 1)}\n disabled={activeImageIndex === 0}\n >\n <ArrowBackIosNewIcon />\n </Button>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setActiveImageIndex((prev) => prev + 1)}\n disabled={!imageList?.length || activeImageIndex === imageList.length - 1}\n >\n <ArrowForwardIosIcon />\n </Button>\n </div>\n </div>\n <div className={clsx('flex items-center', !rightActions && 'mr-24')}>\n {Boolean(imageList?.length) && (\n <Typography variant=\"h6\">\n {activeImageIndex + 1} / {imageList?.length}\n </Typography>\n )}\n </div>\n {rightActions}\n </Stack>\n {Boolean(imageList?.length) && (\n <ZoomImage\n imageHeight={imageHeight}\n isScannerPositionRight={isScannerPositionRight}\n src={imageList?.[activeImageIndex] ?? ''}\n />\n )}\n </div>\n );\n};\n\nexport { OwpZoomImageSlider };\n"],"names":["OwpZoomImageSlider","__name","className","imageHeight","title","rightActions","isScannerPositionRight","imageList","activeImageIndex","setActiveImageIndex","useState","clsx","jsxs","Stack","jsx","Typography","Button","prev","ArrowBackIosNewIcon","ArrowForwardIosIcon","ZoomImage"],"mappings":";;;;;;;;;AAyBA,MAAMA,IAAqB,gBAAAC,EAAA,CAAC;AAAA,EAC1B,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,WAAAC;AACF,MAA+B;AAC7B,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAS,CAAC;AAE1D,2BACG,OAAA,EAAI,WAAWC,EAAK,+BAA+BT,CAAS,GAC3D,UAAA;AAAA,IAAA,gBAAAU,EAACC,KAAM,WAAU,OAAM,gBAAe,iBAAgB,YAAW,UAC/D,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,gBAAAE,EAACC,GAAA,EAAW,SAAQ,MAAM,UAAAX,GAAM;AAAA,QAChC,gBAAAQ,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,gBAAAf,EAAA,MAAMQ,EAAoB,CAACQ,MAASA,IAAO,CAAC,GAA5C;AAAA,cACT,UAAUT,MAAqB;AAAA,cAE/B,4BAACU,GAAA,CAAA,CAAoB;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAJ;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,gBAAAf,EAAA,MAAMQ,EAAoB,CAACQ,MAASA,IAAO,CAAC,GAA5C;AAAA,cACT,UAAU,EAACV,KAAA,QAAAA,EAAW,WAAUC,MAAqBD,EAAU,SAAS;AAAA,cAExE,4BAACY,GAAA,CAAA,CAAoB;AAAA,YAAA;AAAA,UAAA;AAAA,QACvB,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBACC,OAAA,EAAI,WAAWR,EAAK,qBAAqB,CAACN,KAAgB,OAAO,GAC/D,UAAA,GAAQE,KAAA,QAAAA,EAAW,WAClB,gBAAAK,EAACG,GAAA,EAAW,SAAQ,MACjB,UAAA;AAAA,QAAAP,IAAmB;AAAA,QAAE;AAAA,QAAID,KAAA,gBAAAA,EAAW;AAAA,MAAA,EAAA,CACvC,EAAA,CAEJ;AAAA,MACCF;AAAA,IAAA,GACH;AAAA,IACC,GAAQE,KAAA,QAAAA,EAAW,WAClB,gBAAAO;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,aAAAjB;AAAA,QACA,wBAAAG;AAAA,QACA,MAAKC,KAAA,gBAAAA,EAAYC,OAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EACxC,GAEJ;AAEJ,GApD2B;"}
|
|
1
|
+
{"version":3,"file":"OwpZoomImageSlider.js","sources":["../../../src/components/OwpZoomImageSlider/OwpZoomImageSlider.tsx"],"sourcesContent":["import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew';\nimport ArrowForwardIosIcon from '@mui/icons-material/ArrowForwardIos';\nimport { Button, Stack, Typography } from '@mui/material';\nimport clsx from 'clsx';\nimport { ReactNode, useState } from 'react';\nimport ZoomImage from './internal/ZoomImage';\n\ninterface OwpZoomImageSliderProps {\n className?: string;\n imageHeight?: number;\n title?: ReactNode | string | undefined;\n rightActions?: ReactNode | undefined;\n isScannerPositionRight?: boolean;\n imageList?: string[];\n}\n\n/**\n * OwpZoomImageSlider 컴포넌트\n * @param className CSS 클래스명\n * @param imageHeight imageHeight 값\n * @param title 제목\n * @param rightActions rightActions 값\n * @param isScannerPositionRight isScannerPositionRight 값\n * @param imageList imageList 목록\n */\nconst OwpZoomImageSlider = ({\n className,\n imageHeight,\n title,\n rightActions,\n isScannerPositionRight,\n imageList,\n}: OwpZoomImageSliderProps) => {\n const [activeImageIndex, setActiveImageIndex] = useState(0);\n\n return (\n <div className={clsx('flex flex-col gap-12 w-full', className)}>\n <Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n <div className=\"flex items-center\">\n <Typography variant=\"h6\">{title}</Typography>\n <div className=\"pl-20 flex gap-8\">\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setActiveImageIndex((prev) => prev - 1)}\n disabled={activeImageIndex === 0}\n >\n <ArrowBackIosNewIcon />\n </Button>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => setActiveImageIndex((prev) => prev + 1)}\n disabled={!imageList?.length || activeImageIndex === imageList.length - 1}\n >\n <ArrowForwardIosIcon />\n </Button>\n </div>\n </div>\n <div className={clsx('flex items-center', !rightActions && 'mr-24')}>\n {Boolean(imageList?.length) && (\n <Typography variant=\"h6\">\n {activeImageIndex + 1} / {imageList?.length}\n </Typography>\n )}\n </div>\n {rightActions}\n </Stack>\n {Boolean(imageList?.length) && (\n <ZoomImage\n imageHeight={imageHeight}\n isScannerPositionRight={isScannerPositionRight}\n src={imageList?.[activeImageIndex] ?? ''}\n />\n )}\n </div>\n );\n};\n\nexport { OwpZoomImageSlider };\n"],"names":["OwpZoomImageSlider","__name","className","imageHeight","title","rightActions","isScannerPositionRight","imageList","activeImageIndex","setActiveImageIndex","useState","clsx","jsxs","Stack","jsx","Typography","Button","prev","ArrowBackIosNewIcon","ArrowForwardIosIcon","ZoomImage"],"mappings":";;;;;;;;;AAyBA,MAAMA,IAAqB,gBAAAC,EAAA,CAAC;AAAA,EAC1B,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,WAAAC;AACF,MAA+B;AAC7B,QAAM,CAACC,GAAkBC,CAAmB,IAAIC,EAAS,CAAC;AAE1D,2BACG,OAAA,EAAI,WAAWC,EAAK,+BAA+BT,CAAS,GAC3D,UAAA;AAAA,IAAA,gBAAAU,EAACC,KAAM,WAAU,OAAM,gBAAe,iBAAgB,YAAW,UAC/D,UAAA;AAAA,MAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,QAAA,gBAAAE,EAACC,GAAA,EAAW,SAAQ,MAAM,UAAAX,GAAM;AAAA,QAChC,gBAAAQ,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,gBAAAf,EAAA,MAAMQ,EAAoB,CAACQ,MAASA,IAAO,CAAC,GAA5C;AAAA,cACT,UAAUT,MAAqB;AAAA,cAE/B,4BAACU,GAAA,CAAA,CAAoB;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvB,gBAAAJ;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS,gBAAAf,EAAA,MAAMQ,EAAoB,CAACQ,MAASA,IAAO,CAAC,GAA5C;AAAA,cACT,UAAU,EAACV,KAAA,QAAAA,EAAW,WAAUC,MAAqBD,EAAU,SAAS;AAAA,cAExE,4BAACY,GAAA,CAAA,CAAoB;AAAA,YAAA;AAAA,UAAA;AAAA,QACvB,EAAA,CACF;AAAA,MAAA,GACF;AAAA,wBACC,OAAA,EAAI,WAAWR,EAAK,qBAAqB,CAACN,KAAgB,OAAO,GAC/D,UAAA,GAAQE,KAAA,QAAAA,EAAW,WAClB,gBAAAK,EAACG,GAAA,EAAW,SAAQ,MACjB,UAAA;AAAA,QAAAP,IAAmB;AAAA,QAAE;AAAA,QAAID,KAAA,gBAAAA,EAAW;AAAA,MAAA,EAAA,CACvC,EAAA,CAEJ;AAAA,MACCF;AAAA,IAAA,GACH;AAAA,IACC,GAAQE,KAAA,QAAAA,EAAW,WAClB,gBAAAO;AAAA,MAACM;AAAA,MAAA;AAAA,QACC,aAAAjB;AAAA,QACA,wBAAAG;AAAA,QACA,MAAKC,KAAA,gBAAAA,EAAYC,OAAqB;AAAA,MAAA;AAAA,IAAA;AAAA,EACxC,GAEJ;AAEJ,GApD2B;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var k = Object.defineProperty;
|
|
2
2
|
var t = (e, a) => k(e, "name", { value: a, configurable: !0 });
|
|
3
|
-
import { jsx as o, jsxs as I } from "
|
|
3
|
+
import { jsx as o, jsxs as I } from "../../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
4
|
import { useRef as L, useState as x } from "react";
|
|
5
5
|
const l = 200, u = 200, r = 2, R = /* @__PURE__ */ t(({ position: e }) => /* @__PURE__ */ o(
|
|
6
6
|
"div",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZoomImage.js","sources":["../../../../src/components/OwpZoomImageSlider/internal/ZoomImage.tsx"],"sourcesContent":["import { type MouseEvent, useRef, useState } from 'react';\n\ninterface Position {\n left: number;\n top: number;\n}\n\nconst scannerWidth = 200;\nconst scannerHeight = 200;\nconst zoomFactor = 2; // 200% 확대\n\nconst Scanner = ({ position }: { position: Position }) => {\n return (\n <div\n className=\"border border-gray-700 bg-white opacity-50 cursor-crosshair\"\n style={{\n ...position,\n position: 'absolute',\n zIndex: 1,\n width: scannerWidth,\n height: scannerHeight,\n }}\n />\n );\n};\n\ninterface ZoomImageProps {\n imageHeight?: number;\n src: string;\n isScannerPositionRight?: boolean;\n}\n\nconst ZoomImage = ({ imageHeight = 400, isScannerPositionRight, src }: ZoomImageProps) => {\n const imageRef = useRef<HTMLImageElement>(null);\n const [scannerPosition, setScannerPosition] = useState<Position | null>();\n const [zoomStyle, setZoomStyle] = useState({});\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!imageRef.current) return;\n\n const { left, top, width, height } = imageRef.current.getBoundingClientRect();\n\n \n const x = e.clientX - left;\n const y = e.clientY - top;\n\n \n let scannerLeft = x - scannerWidth / 2;\n let scannerTop = y - scannerHeight / 2;\n\n \n scannerLeft = Math.max(0, Math.min(width - scannerWidth, scannerLeft));\n scannerTop = Math.max(0, Math.min(height - scannerHeight, scannerTop));\n\n setScannerPosition({ left: scannerLeft, top: scannerTop });\n\n \n const img = imageRef.current;\n const imgWidth = img.width;\n const imgHeight = img.height;\n setZoomStyle({\n position: 'absolute',\n [isScannerPositionRight ? 'right' : 'left']:\n -(width < imageHeight ? imageHeight : width) - 20,\n top: 0,\n zIndex: 100,\n backgroundImage: `url(${src})`,\n backgroundPosition: `-${scannerLeft * zoomFactor}px -${scannerTop * zoomFactor}px`,\n backgroundSize: `${imgWidth * zoomFactor}px ${imgHeight * zoomFactor}px`,\n backgroundRepeat: 'no-repeat',\n width: `${imageHeight}px`,\n height: `${imageHeight}px`,\n display: 'block',\n });\n };\n\n const handleMouseLeave = () => {\n setScannerPosition(null);\n setZoomStyle({ display: 'none' });\n };\n\n return (\n <div className=\"flex justify-center items-center w-full h-full\">\n <div className=\"relative\" onMouseMove={handleMouseMove} onMouseLeave={handleMouseLeave}>\n <img ref={imageRef} style={{ height: imageHeight }} src={src} alt=\"zoom\" />\n {scannerPosition && <Scanner position={scannerPosition} />}\n <div style={zoomStyle} />\n </div>\n </div>\n );\n};\n\nexport default ZoomImage;\n"],"names":["scannerWidth","scannerHeight","zoomFactor","Scanner","__name","position","jsx","ZoomImage","imageHeight","isScannerPositionRight","src","imageRef","useRef","scannerPosition","setScannerPosition","useState","zoomStyle","setZoomStyle","jsxs","e","left","top","width","height","x","y","scannerLeft","scannerTop","img","imgWidth","imgHeight"],"mappings":";;;;AAOA,MAAMA,IAAe,KACfC,IAAgB,KAChBC,IAAa,GAEbC,IAAU,gBAAAC,EAAA,CAAC,EAAE,UAAAC,QAEf,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV,OAAO;AAAA,MACL,GAAGD;AAAA,MACH,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAOL;AAAA,MACP,QAAQC;AAAA,IAAA;AAAA,EACV;AAAA,GAVU,YAqBVM,IAAY,gBAAAH,EAAA,CAAC,EAAE,aAAAI,IAAc,KAAK,wBAAAC,GAAwB,KAAAC,QAA0B;AACxF,QAAMC,IAAWC,EAAyB,IAAI,GACxC,CAACC,GAAiBC,CAAkB,IAAIC,EAAA,GACxC,CAACC,GAAWC,CAAY,IAAIF,EAAS,CAAA,CAAE;AA8C7C,SACE,gBAAAT,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAU,YAAW,aA9CN,gBAAAd,EAAA,CAACe,MAAkB;AACzC,QAAI,CAACR,EAAS,QAAS;AAEvB,UAAM,EAAE,MAAAS,GAAM,KAAAC,GAAK,OAAAC,GAAO,QAAAC,MAAWZ,EAAS,QAAQ,sBAAA,GAGhDa,IAAIL,EAAE,UAAUC,GAChBK,IAAIN,EAAE,UAAUE;AAGtB,QAAIK,IAAcF,IAAIxB,IAAe,GACjC2B,IAAaF,IAAIxB,IAAgB;AAGrC,IAAAyB,IAAc,KAAK,IAAI,GAAG,KAAK,IAAIJ,IAAQtB,GAAc0B,CAAW,CAAC,GACrEC,IAAa,KAAK,IAAI,GAAG,KAAK,IAAIJ,IAAStB,GAAe0B,CAAU,CAAC,GAErEb,EAAmB,EAAE,MAAMY,GAAa,KAAKC,GAAY;AAGzD,UAAMC,IAAMjB,EAAS,SACfkB,IAAWD,EAAI,OACfE,IAAYF,EAAI;AACtB,IAAAX,EAAa;AAAA,MACX,UAAU;AAAA,MACV,CAACR,IAAyB,UAAU,MAAM,GACxC,EAAEa,IAAQd,IAAcA,IAAcc,KAAS;AAAA,MACjD,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,iBAAiB,OAAOZ,CAAG;AAAA,MAC3B,oBAAoB,IAAIgB,IAAcxB,CAAU,OAAOyB,IAAazB,CAAU;AAAA,MAC9E,gBAAgB,GAAG2B,IAAW3B,CAAU,MAAM4B,IAAY5B,CAAU;AAAA,MACpE,kBAAkB;AAAA,MAClB,OAAO,GAAGM,CAAW;AAAA,MACrB,QAAQ,GAAGA,CAAW;AAAA,MACtB,SAAS;AAAA,IAAA,CACV;AAAA,EACH,GArCwB,oBA8CoC,cAPnC,gBAAAJ,EAAA,MAAM;AAC7B,IAAAU,EAAmB,IAAI,GACvBG,EAAa,EAAE,SAAS,QAAQ;AAAA,EAClC,GAHyB,qBAQnB,UAAA;AAAA,IAAA,gBAAAX,EAAC,OAAA,EAAI,KAAKK,GAAU,OAAO,EAAE,QAAQH,EAAA,GAAe,KAAAE,GAAU,KAAI,OAAA,CAAO;AAAA,IACxEG,KAAmB,gBAAAP,EAACH,GAAA,EAAQ,UAAUU,EAAA,CAAiB;AAAA,IACxD,gBAAAP,EAAC,OAAA,EAAI,OAAOU,EAAA,CAAW;AAAA,EAAA,EAAA,CACzB,EAAA,CACF;AAEJ,GA1DkB;"}
|