@owp/core 2.5.26 → 2.5.28
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/index16.js +4 -4
- package/dist/_virtual/index17.js +4 -4
- package/dist/_virtual/index18.js +4 -4
- package/dist/_virtual/index19.js +4 -4
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js +19 -19
- package/dist/components/OwpExportExcelButton/OwpExportExcelButton.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +334 -287
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpPicker/OwpDatePicker.js +251 -243
- package/dist/components/OwpPicker/OwpDatePicker.js.map +1 -1
- package/dist/components/OwpPicker/internal/useOwpPickerPopperTransition.js +13 -12
- package/dist/components/OwpPicker/internal/useOwpPickerPopperTransition.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +151 -156
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/internal/OwpTableTotalCount.js +23 -16
- package/dist/components/OwpTable/internal/OwpTableTotalCount.js.map +1 -1
- package/dist/components/OwpTable/internal/treeGridTableStyle.js +29 -28
- package/dist/components/OwpTable/internal/treeGridTableStyle.js.map +1 -1
- package/dist/components/OwpTable/utils/tableSx.js +11 -10
- package/dist/components/OwpTable/utils/tableSx.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +297 -265
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js +310 -291
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +1039 -385
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js +435 -186
- package/dist/components/OwpTreeGrid/internal/treeGridTheme.js.map +1 -1
- package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js +10 -10
- package/dist/components/OwpTreeGridExportExcelButton/OwpTreeGridExportExcelButton.js.map +1 -1
- package/dist/features/themePreview/defs/ThemePreviewGridDef.xml.js +1 -1
- package/dist/features/themePreview/defs/ThemePreviewGridDef.xml.js.map +1 -1
- package/dist/features/themePreview/defs/ThemePreviewReadonlyGridDef.xml.js +1 -1
- package/dist/features/themePreview/defs/ThemePreviewReadonlyGridDef.xml.js.map +1 -1
- package/dist/layout/components/logo/Logo.js +40 -53
- package/dist/layout/components/logo/Logo.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyle.js +27 -37
- package/dist/layout/components/navbar/style/NavbarStyle.js.map +1 -1
- package/dist/layout/components/navbar/style/NavbarStyleContent.js +67 -42
- package/dist/layout/components/navbar/style/NavbarStyleContent.js.map +1 -1
- package/dist/layout/components/toggles/NavigationSearchToggle.js +3 -3
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/constants.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/constants.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
- package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.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/OwpPicker/internal/useOwpPickerPopperTransition.d.ts +1 -0
- package/dist/types/components/OwpTable/internal/OwpTableTotalCount.d.ts +11 -4
- package/dist/types/components/OwpTable/internal/treeGridTableStyle.d.ts +5 -0
- package/dist/types/components/OwpTable/utils/tableSx.d.ts +15 -0
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +11 -1
- package/dist/types/components/OwpTreeGrid/internal/hooks/useOwpTreeGridDatePickerEditor.d.ts +5 -2
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +14 -4
- package/dist/types/components/OwpTreeGrid/internal/treeGridTheme.d.ts +5 -0
- package/dist/types/utils/treeGridUtil.d.ts +4 -0
- package/dist/utils/treeGridUtil.js +154 -145
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/package.json +1 -1
- package/treegrid/TextKR.xml +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_CHANGED_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/internal/treeGridLayout';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/internal/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_CHANGED_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n backgroundColor?: string;\n};\ntype TreeGridAddedRowMetadata = TRow & {\n [TREEGRID_ADDED_ROW_BY_ID_FLAG]?: boolean | number;\n [TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY]?: Record<string, string>;\n [TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?: Record<\n string,\n { className: unknown; color: unknown }\n >;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\nconst TREEGRID_TIME_DATE_FORMAT_PATTERN = /^H{1,2}(?::m{1,2})?(?::s{1,2})?$/;\nconst TREEGRID_ADDED_ROW_BY_ID_FLAG = '__owpAddedByAddTreeGridRowById';\nconst TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY = '__owpAddedRowHighlightColumns';\nconst TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY = '__owpAddedRowInitialValueKeys';\nconst TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY = '__owpAddedRowBaselineValues';\nconst TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY = '__owpCellStyleBaselineValues';\n\nconst normalizeTreeGridStringValues = (value: unknown) => {\n if (!isArray(value)) {\n return [];\n }\n\n return value.filter((item): item is string => typeof item === 'string' && item !== '');\n};\n\nconst normalizeTreeGridAddedRowHighlightColumns = normalizeTreeGridStringValues;\n\n/**\n * addTreeGridRowById 생성 행 마킹\n * @param row 대상 행\n */\nconst markTreeGridRowAddedById = (row: TRow | null | undefined) => {\n if (!row) {\n return;\n }\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BY_ID_FLAG] = 1;\n};\n\n/**\n * addTreeGridRowById 생성 행 여부\n * @param row 대상 행\n */\nexport const isTreeGridRowAddedById = (row: TRow | null | undefined) => {\n const addedById = (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_BY_ID_FLAG];\n\n return !!row && addedById !== 0 && addedById !== false && addedById !== undefined;\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 누적\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const appendTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n\n if (currentColumns.includes(col)) {\n return;\n }\n\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = [...currentColumns, col];\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 제거\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const removeTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n const nextColumns = currentColumns.filter((column) => column !== col);\n\n if (nextColumns.length) {\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = nextColumns;\n return;\n }\n\n delete targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY];\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 조회\n * @param row 대상 행\n */\nexport const getTreeGridAddedRowHighlightColumns = (row: TRow | null | undefined) => {\n return normalizeTreeGridAddedRowHighlightColumns(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n};\n\n/**\n * TreeGrid 셀 비교 값 조회\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const getTreeGridCellComparableValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n) => {\n const cellType = grid.GetType?.(row, col) || grid.Cols?.[col]?.Type || '';\n const rawValue =\n grid.GetValue?.(row, col) ?? (row as unknown as Record<string, unknown>)[col];\n\n if (cellType === 'Enum' || cellType === 'Select') {\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n }\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null) {\n return `${displayValue}`;\n }\n } catch {\n // GetString 미지원 셀 fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * addTreeGridRowById 생성 행 기준값 저장\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n */\nconst markTreeGridAddedRowBaselineValues = (grid: TGrid, row: TRow) => {\n const baselineValues = Object.fromEntries(\n Object.keys(grid.Cols ?? {}).map((col) => [\n col,\n getTreeGridCellComparableValue(grid, row, col),\n ]),\n );\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY] = baselineValues;\n};\n\n/**\n * addTreeGridRowById 생성 행 기준값 조회\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const getTreeGridAddedRowBaselineValue = (\n row: TRow | null | undefined,\n col: string,\n) => {\n return (row as TreeGridAddedRowMetadata | null)?.[\n TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY\n ]?.[col];\n};\n\n/**\n * TreeGrid 셀 하이라이트 전 스타일 저장\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst preserveTreeGridCellStyleBaseline = (grid: TGrid, row: TRow, col: string) => {\n const targetRow = row as TreeGridAddedRowMetadata;\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY] ??= {};\n\n if (targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col]) {\n return;\n }\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY][col] = {\n className: grid.GetAttribute(row, col, 'Class'),\n color: grid.GetAttribute(row, col, 'Color'),\n };\n};\n\n/**\n * TreeGrid 셀 하이라이트 전 스타일 조회\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst getTreeGridCellStyleBaseline = (row: TRow, col: string) => {\n return (row as TreeGridAddedRowMetadata)[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col];\n};\n\n/**\n * TreeGrid 엑셀 내보내기 유틸 로더\n */\nconst loadExportTreeGridExcel = async () => {\n const { exportTreeGridExcel } = await import('./treeGridExportExcelUtil');\n\n return exportTreeGridExcel;\n};\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * TreeGrid 시간 전용 Date 포맷 여부\n * @param format TreeGrid 날짜 포맷\n */\nconst isTreeGridTimeDateFormat = (format: unknown) =>\n typeof format === 'string' && TREEGRID_TIME_DATE_FORMAT_PATTERN.test(format.trim());\n\n/**\n * TreeGrid 시간 전용 Date 컬럼 여부\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst isTreeGridTimeDateColumn = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n const column = grid.Cols?.[col];\n\n return (\n column?.Type === 'Date' &&\n (isTreeGridTimeDateFormat(rowRecord[`${col}EditFormat`]) ||\n isTreeGridTimeDateFormat(rowRecord[`${col}Format`]) ||\n isTreeGridTimeDateFormat(column.EditFormat) ||\n isTreeGridTimeDateFormat(column.Format))\n );\n};\n\n/**\n * TreeGrid 시간 전용 Date 표시 값 조회\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst getTreeGridTimeDateDisplayValue = (grid: TGrid, row: TRow, col: string) => {\n const rawValue = (row as unknown as Record<string, unknown>)[col];\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null && `${displayValue}` !== '') {\n return `${displayValue}`;\n }\n } catch {\n // GetString 미지원 셀 fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * TreeGrid 외부 반환 행 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n */\nconst normalizeTreeGridExternalRow = <T>(grid: TGrid, row: TRow & T) => {\n const normalizedRow = { ...row } as TRow & T;\n\n Object.keys(grid.Cols ?? {}).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, row, col)) {\n return;\n }\n\n (normalizedRow as Record<string, unknown>)[col] = getTreeGridTimeDateDisplayValue(grid, row, col);\n });\n\n return normalizedRow;\n};\n\n/**\n * TreeGrid 외부 반환 행 목록 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param rows 대상 행 목록\n */\nexport const normalizeTreeGridExternalRows = <T>(grid: TGrid, rows: Array<TRow & T>) =>\n rows.map((row) => normalizeTreeGridExternalRow(grid, row));\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param grid TreeGrid 인스턴스\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(grid: TGrid, row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n const initialValueKeys = Object.keys(initialValues as Record<string, unknown>).filter(Boolean);\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY] = initialValueKeys;\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n if (grid.Cols?.[rowKey]?.Type === 'Date' && typeof rowValue === 'string') {\n grid.SetString(row, rowKey, rowValue, 0);\n return;\n }\n\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * TreeGrid 숨김 값 여부\n * @param value Visible 속성값\n */\nconst isHiddenTreeGridValue = (value: unknown) => {\n return value === 0 || value === false || value === '0';\n};\n\n/**\n * TreeGrid 표시 컬럼 여부\n * @param grid TreeGrid 인스턴스\n * @param key 컬럼 키\n */\nconst isVisibleTreeGridColumn = (grid: TGrid | undefined, key: string) => {\n return !isHiddenTreeGridValue(grid?.Cols?.[key]?.Visible);\n};\n\n/**\n * addTreeGridRowById 생성 행 초기값 키 여부\n * @param row 대상 행\n * @param key 컬럼 키\n */\nconst isTreeGridAddedRowInitialValueKey = (row: TRow | null | undefined, key: string) => {\n return normalizeTreeGridStringValues(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY],\n ).includes(key);\n};\n\n/**\n * TreeGrid 변경 행 원본 조회\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n */\nconst getLiveTreeGridChangedRow = (grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return typeof row.id === 'string'\n ? (grid?.Rows as unknown as Record<string, TRow> | undefined)?.[row.id]\n : null;\n};\n\n/**\n * 추가 행 데이터 키 포함 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n * @param key 컬럼 키\n */\nconst shouldIncludeAddedRowDataKey = (\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n key: string,\n) => {\n if (!isTreeGridDataKey(key) || isEmpty(row[key])) {\n return false;\n }\n\n if (isVisibleTreeGridColumn(grid, key)) {\n return true;\n }\n\n return isTreeGridAddedRowInitialValueKey(getLiveTreeGridChangedRow(grid, row), key);\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => shouldIncludeAddedRowDataKey(grid, row, key))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(\n grid: TGrid | undefined,\n rows: TreeGridChangedRow[],\n status: TreeGridChangeStatus,\n) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) =>\n status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(grid, row),\n )\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 변경 행 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param rows 변경 행 목록\n */\nconst normalizeTreeGridChangedRows = (grid: TGrid | undefined, rows: TreeGridChangedRow[]) => {\n if (!grid) {\n return rows;\n }\n\n return rows.map((row) => {\n const liveRow =\n typeof row.id === 'string'\n ? (grid.Rows as unknown as Record<string, TRow>)[row.id]\n : null;\n\n if (!liveRow) {\n return row;\n }\n\n const normalizedRow = { ...row };\n\n Object.keys(row).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, liveRow, col)) {\n return;\n }\n\n normalizedRow[col] = getTreeGridTimeDateDisplayValue(grid, liveRow, col);\n });\n\n return normalizedRow;\n });\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return grid ? (normalizeTreeGridExternalRows<T>(grid, getDataRows(grid) as Array<TRow & T>) as T) : [];\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n markTreeGridRowAddedById(newRow);\n assignInitialRowValues(grid, newRow, initialValues);\n markTreeGridAddedRowBaselineValues(grid, newRow);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(\n grid,\n normalizeTreeGridChangedRows(grid, changesData as TreeGridChangedRow[]),\n status,\n ),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void loadExportTreeGridExcel().then((exportTreeGridExcel) =>\n exportTreeGridExcel(grid, { exportName: title ?? '' }),\n );\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return grid && selectedRows\n ? (normalizeTreeGridExternalRows<T>(grid, selectedRows as Array<TRow & T>) as T)\n : [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n preserveTreeGridCellStyleBaseline(grid, row, col);\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_CHANGED_CLASS);\n grid.SetValue(row, `${col}Color`, targetOption.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR);\n grid.RefreshCell(row, col);\n};\n\n/**\n * 특정 셀 강조 스타일 제거\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조 해제 대상 행\n * @param targetOption.col 강조 해제 대상 컬럼\n */\nexport const clearTreeGridCellHighlightById = (\n gridId: string,\n targetOption: Pick<TreeGridHighlightTargetOption, 'row' | 'col'>,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n const styleBaseline = getTreeGridCellStyleBaseline(row, col);\n\n grid.SetValue(row, `${col}Class`, styleBaseline?.className ?? '');\n grid.SetValue(row, `${col}Color`, styleBaseline?.color ?? '');\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n"],"names":["TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","TREEGRID_TIME_DATE_FORMAT_PATTERN","TREEGRID_ADDED_ROW_BY_ID_FLAG","TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY","TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY","TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY","TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY","normalizeTreeGridStringValues","__name","value","isArray","item","normalizeTreeGridAddedRowHighlightColumns","markTreeGridRowAddedById","row","isTreeGridRowAddedById","addedById","appendTreeGridAddedRowHighlightColumn","col","targetRow","currentColumns","removeTreeGridAddedRowHighlightColumn","nextColumns","column","getTreeGridAddedRowHighlightColumns","getTreeGridCellComparableValue","grid","cellType","_a","_c","_b","rawValue","_d","displayValue","_e","markTreeGridAddedRowBaselineValues","baselineValues","getTreeGridAddedRowBaselineValue","preserveTreeGridCellStyleBaseline","getTreeGridCellStyleBaseline","loadExportTreeGridExcel","exportTreeGridExcel","getDataRows","isTreeGridTimeDateFormat","format","isTreeGridTimeDateColumn","rowRecord","getTreeGridTimeDateDisplayValue","normalizeTreeGridExternalRow","normalizedRow","normalizeTreeGridExternalRows","rows","resolveRowInsertionTarget","options","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","initialValues","isPlainObject","initialValueKeys","rowKey","rowValue","isTreeGridDataKey","key","prefix","isHiddenTreeGridValue","isVisibleTreeGridColumn","isTreeGridAddedRowInitialValueKey","getLiveTreeGridChangedRow","shouldIncludeAddedRowDataKey","isEmpty","normalizeAddedRow","without","getChangedRowsByStatus","status","get","omit","normalizeTreeGridChangedRows","liveRow","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","selectedRows","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","clearTreeGridCellHighlightById","styleBaseline","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"treeGridUtil.js","sources":["../../src/utils/treeGridUtil.ts"],"sourcesContent":["import {\n TREEGRID_CELL_CHANGED_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n} from '@/constants/treeGrid';\nimport { parseTreeGridXmlToJson } from '@/components/OwpTreeGrid/internal/treeGridLayout';\nimport { emitTreeGridBodyRowsChanged } from '@/utils/internal/treeGridBodyRowsEvent';\nimport { isPlainObject } from 'es-toolkit';\nimport { get, isArray, isEmpty, lowerCase, omit, without } from 'es-toolkit/compat';\n\nexport {\n TREEGRID_CELL_CHANGED_CLASS,\n TREEGRID_CELL_HIGHLIGHT_COLOR,\n TREEGRID_INPUT_CELL_COLOR,\n TREEGRID_WARNING_CELL_COLOR,\n};\n\ntype TreeGridInsertPosition = 'above' | 'below' | 'top' | 'last';\n\ntype TreeGridAddRowOptions<T> = {\n canSelect?: boolean;\n insertPosition?: TreeGridInsertPosition;\n parent?: TRow & T;\n anchorRow?: TRow & T;\n initialValues?: T;\n editableColumns?: readonly string[];\n};\n\ntype TreeGridColumnVisibilityOptions = {\n targetKey: string;\n canVisible: boolean;\n};\n\ntype TreeGridHighlightTargetOption = {\n row: TRow;\n col: string;\n backgroundColor?: string;\n refresh?: boolean;\n};\ntype TreeGridAddedRowMetadata = TRow & {\n [TREEGRID_ADDED_ROW_BY_ID_FLAG]?: boolean | number;\n [TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY]?: string[];\n [TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY]?: Record<string, string>;\n [TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?: Record<\n string,\n { className: unknown; color: unknown }\n >;\n};\n\ntype TreeGridChangeStatus = 'Added' | 'Changed';\ntype TreeGridChangedRow = Record<string, unknown>;\n\nconst TREEGRID_CHANGE_STATUSES: TreeGridChangeStatus[] = ['Added', 'Changed'];\nconst TREEGRID_DATA_KEY_PREFIXES = ['OWP', 'IPX'];\nconst TREEGRID_TIME_DATE_FORMAT_PATTERN = /^H{1,2}(?::m{1,2})?(?::s{1,2})?$/;\nconst TREEGRID_ADDED_ROW_BY_ID_FLAG = '__owpAddedByAddTreeGridRowById';\nconst TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY = '__owpAddedRowHighlightColumns';\nconst TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY = '__owpAddedRowInitialValueKeys';\nconst TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY = '__owpAddedRowBaselineValues';\nconst TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY = '__owpCellStyleBaselineValues';\n\nconst normalizeTreeGridStringValues = (value: unknown) => {\n if (!isArray(value)) {\n return [];\n }\n\n return value.filter((item): item is string => typeof item === 'string' && item !== '');\n};\n\nconst normalizeTreeGridAddedRowHighlightColumns = normalizeTreeGridStringValues;\n\n/**\n * addTreeGridRowById 생성 행 마킹\n * @param row 대상 행\n */\nconst markTreeGridRowAddedById = (row: TRow | null | undefined) => {\n if (!row) {\n return;\n }\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BY_ID_FLAG] = 1;\n};\n\n/**\n * addTreeGridRowById 생성 행 여부\n * @param row 대상 행\n */\nexport const isTreeGridRowAddedById = (row: TRow | null | undefined) => {\n const addedById = (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_BY_ID_FLAG];\n\n return !!row && addedById !== 0 && addedById !== false && addedById !== undefined;\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 누적\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const appendTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n\n if (currentColumns.includes(col)) {\n return;\n }\n\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = [...currentColumns, col];\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 제거\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const removeTreeGridAddedRowHighlightColumn = (\n row: TRow | null | undefined,\n col: string,\n) => {\n if (!row || !col) {\n return;\n }\n\n const targetRow = row as TreeGridAddedRowMetadata;\n const currentColumns = normalizeTreeGridAddedRowHighlightColumns(\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n const nextColumns = currentColumns.filter((column) => column !== col);\n\n if (nextColumns.length) {\n targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY] = nextColumns;\n return;\n }\n\n delete targetRow[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY];\n};\n\n/**\n * addTreeGridRowById 생성 행 하이라이트 컬럼 조회\n * @param row 대상 행\n */\nexport const getTreeGridAddedRowHighlightColumns = (row: TRow | null | undefined) => {\n return normalizeTreeGridAddedRowHighlightColumns(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY],\n );\n};\n\n/**\n * TreeGrid 셀 비교 값 조회\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const getTreeGridCellComparableValue = (\n grid: TGrid,\n row: TRow,\n col: string,\n) => {\n const cellType = grid.GetType?.(row, col) || grid.Cols?.[col]?.Type || '';\n const rawValue =\n grid.GetValue?.(row, col) ?? (row as unknown as Record<string, unknown>)[col];\n\n if (cellType === 'Enum' || cellType === 'Select') {\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n }\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null) {\n return `${displayValue}`;\n }\n } catch {\n // GetString 미지원 셀 fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * addTreeGridRowById 생성 행 기준값 저장\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n */\nconst markTreeGridAddedRowBaselineValues = (grid: TGrid, row: TRow) => {\n const baselineValues = Object.fromEntries(\n Object.keys(grid.Cols ?? {}).map((col) => [\n col,\n getTreeGridCellComparableValue(grid, row, col),\n ]),\n );\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY] = baselineValues;\n};\n\n/**\n * addTreeGridRowById 생성 행 기준값 조회\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nexport const getTreeGridAddedRowBaselineValue = (\n row: TRow | null | undefined,\n col: string,\n) => {\n return (row as TreeGridAddedRowMetadata | null)?.[\n TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY\n ]?.[col];\n};\n\n/**\n * TreeGrid 셀 하이라이트 전 스타일 저장\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst preserveTreeGridCellStyleBaseline = (grid: TGrid, row: TRow, col: string) => {\n const targetRow = row as TreeGridAddedRowMetadata;\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY] ??= {};\n\n if (targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col]) {\n return;\n }\n\n targetRow[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY][col] = {\n className: grid.GetAttribute(row, col, 'Class'),\n color: grid.GetAttribute(row, col, 'Color'),\n };\n};\n\n/**\n * TreeGrid 셀 하이라이트 전 스타일 조회\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst getTreeGridCellStyleBaseline = (row: TRow, col: string) => {\n return (row as TreeGridAddedRowMetadata)[TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY]?.[col];\n};\n\n/**\n * TreeGrid 엑셀 내보내기 유틸 로더\n */\nconst loadExportTreeGridExcel = async () => {\n const { exportTreeGridExcel } = await import('./treeGridExportExcelUtil');\n\n return exportTreeGridExcel;\n};\n\n/**\n * TreeGrid 데이터 행 목록 추출\n * @param grid TreeGrid 인스턴스\n */\nconst getDataRows = (grid: TGrid | undefined) => {\n return Object.values(grid?.Rows ?? {}).filter((item) => item.Kind === 'Data');\n};\n\n/**\n * TreeGrid 시간 전용 Date 포맷 여부\n * @param format TreeGrid 날짜 포맷\n */\nconst isTreeGridTimeDateFormat = (format: unknown) =>\n typeof format === 'string' && TREEGRID_TIME_DATE_FORMAT_PATTERN.test(format.trim());\n\n/**\n * TreeGrid 시간 전용 Date 컬럼 여부\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst isTreeGridTimeDateColumn = (grid: TGrid, row: TRow, col: string) => {\n const rowRecord = row as unknown as Record<string, unknown>;\n const column = grid.Cols?.[col];\n\n return (\n column?.Type === 'Date' &&\n (isTreeGridTimeDateFormat(rowRecord[`${col}EditFormat`]) ||\n isTreeGridTimeDateFormat(rowRecord[`${col}Format`]) ||\n isTreeGridTimeDateFormat(column.EditFormat) ||\n isTreeGridTimeDateFormat(column.Format))\n );\n};\n\n/**\n * TreeGrid 시간 전용 Date 표시 값 조회\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n * @param col 대상 컬럼\n */\nconst getTreeGridTimeDateDisplayValue = (grid: TGrid, row: TRow, col: string) => {\n const rawValue = (row as unknown as Record<string, unknown>)[col];\n\n try {\n const displayValue = grid.GetString?.(row, col);\n\n if (displayValue !== undefined && displayValue !== null && `${displayValue}` !== '') {\n return `${displayValue}`;\n }\n } catch {\n // GetString 미지원 셀 fallback\n }\n\n return rawValue === undefined || rawValue === null ? '' : `${rawValue}`;\n};\n\n/**\n * TreeGrid 외부 반환 행 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param row 대상 행\n */\nconst normalizeTreeGridExternalRow = <T>(grid: TGrid, row: TRow & T) => {\n const normalizedRow = { ...row } as TRow & T;\n\n Object.keys(grid.Cols ?? {}).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, row, col)) {\n return;\n }\n\n (normalizedRow as Record<string, unknown>)[col] = getTreeGridTimeDateDisplayValue(grid, row, col);\n });\n\n return normalizedRow;\n};\n\n/**\n * TreeGrid 외부 반환 행 목록 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param rows 대상 행 목록\n */\nexport const normalizeTreeGridExternalRows = <T>(grid: TGrid, rows: Array<TRow & T>) =>\n rows.map((row) => normalizeTreeGridExternalRow(grid, row));\n\n/**\n * 신규 행 추가 대상 계산\n * @param grid TreeGrid 인스턴스\n * @param options 행 추가 옵션\n */\nconst resolveRowInsertionTarget = <T>(grid: TGrid, options?: TreeGridAddRowOptions<T>) => {\n const insertPosition = options?.insertPosition ?? 'top';\n const parent = options?.parent;\n const anchorRow = options?.anchorRow;\n\n let resolvedParent = parent ?? (anchorRow ? anchorRow.parentNode : null) ?? grid.GetFirst();\n let next = null;\n\n switch (insertPosition) {\n case 'top':\n next = grid.GetFirst();\n break;\n\n case 'last':\n resolvedParent = grid.GetNext(grid.GetLast(), grid.RowCount > 0 ? grid.RowCount + 1 : 0);\n next = resolvedParent;\n break;\n\n case 'above':\n next = anchorRow ?? grid.GetFirst();\n break;\n\n case 'below':\n next = anchorRow?.nextSibling ?? grid.GetFirst();\n break;\n }\n\n return { resolvedParent, next };\n};\n\n/**\n * 신규 행 초기값 반영\n * @param grid TreeGrid 인스턴스\n * @param row 생성된 TreeGrid 행\n * @param initialValues 신규 행 초기값\n */\nconst assignInitialRowValues = <T>(grid: TGrid, row: TRow, initialValues?: T) => {\n if (!isPlainObject(initialValues)) {\n return;\n }\n\n const initialValueKeys = Object.keys(initialValues as Record<string, unknown>).filter(Boolean);\n\n (row as TreeGridAddedRowMetadata)[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY] = initialValueKeys;\n\n Object.entries(initialValues as Record<string, unknown>).forEach(([rowKey, rowValue]) => {\n if (grid.Cols?.[rowKey]?.Type === 'Date' && typeof rowValue === 'string') {\n grid.SetString(row, rowKey, rowValue, 0);\n return;\n }\n\n (row as unknown as Record<string, unknown>)[rowKey] = rowValue;\n });\n};\n\n/**\n * 신규 행 셀 단위 편집 가능 컬럼 반영\n * @param grid TreeGrid 인스턴스\n * @param row 생성된 TreeGrid 행\n * @param editableColumns 편집 가능 처리할 컬럼 키 목록\n */\nconst assignEditableAddedRowColumns = (\n grid: TGrid,\n row: TRow,\n editableColumns?: readonly string[],\n) => {\n const targetColumns = normalizeTreeGridStringValues(editableColumns);\n\n if (!targetColumns.length) {\n return;\n }\n\n const rowRecord = row as unknown as Record<string, unknown>;\n\n targetColumns.forEach((col) => {\n if (!grid.Cols?.[col]) {\n return;\n }\n\n rowRecord[`${col}CanEdit`] = 1;\n });\n};\n\n/**\n * 변경 데이터 컬럼 키 여부 확인\n * @param key 컬럼 키\n */\nconst isTreeGridDataKey = (key: string) => {\n return TREEGRID_DATA_KEY_PREFIXES.some((prefix) => key.startsWith(prefix));\n};\n\n/**\n * TreeGrid 숨김 값 여부\n * @param value Visible 속성값\n */\nconst isHiddenTreeGridValue = (value: unknown) => {\n return value === 0 || value === false || value === '0';\n};\n\n/**\n * TreeGrid 표시 컬럼 여부\n * @param grid TreeGrid 인스턴스\n * @param key 컬럼 키\n */\nconst isVisibleTreeGridColumn = (grid: TGrid | undefined, key: string) => {\n return !isHiddenTreeGridValue(grid?.Cols?.[key]?.Visible);\n};\n\n/**\n * addTreeGridRowById 생성 행 초기값 키 여부\n * @param row 대상 행\n * @param key 컬럼 키\n */\nconst isTreeGridAddedRowInitialValueKey = (row: TRow | null | undefined, key: string) => {\n return normalizeTreeGridStringValues(\n (row as TreeGridAddedRowMetadata | null)?.[TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY],\n ).includes(key);\n};\n\n/**\n * TreeGrid 변경 행 원본 조회\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n */\nconst getLiveTreeGridChangedRow = (grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return typeof row.id === 'string'\n ? (grid?.Rows as unknown as Record<string, TRow> | undefined)?.[row.id]\n : null;\n};\n\n/**\n * 추가 행 데이터 키 포함 여부\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n * @param key 컬럼 키\n */\nconst shouldIncludeAddedRowDataKey = (\n grid: TGrid | undefined,\n row: TreeGridChangedRow,\n key: string,\n) => {\n if (!isTreeGridDataKey(key) || isEmpty(row[key])) {\n return false;\n }\n\n if (isVisibleTreeGridColumn(grid, key)) {\n return true;\n }\n\n return isTreeGridAddedRowInitialValueKey(getLiveTreeGridChangedRow(grid, row), key);\n};\n\n/**\n * 추가 행 데이터 정규화\n * @param grid TreeGrid 인스턴스\n * @param row TreeGrid 변경 행 데이터\n */\nconst normalizeAddedRow = <T>(grid: TGrid | undefined, row: TreeGridChangedRow) => {\n return Object.fromEntries(\n without(Object.keys(row), 'id')\n .filter((key) => shouldIncludeAddedRowDataKey(grid, row, key))\n .map((key) => [key, row[key]]),\n ) as T;\n};\n\n/**\n * 변경 상태별 행 데이터 반환\n * @param rows TreeGrid 변경 행 목록\n * @param status 조회할 변경 상태\n */\nconst getChangedRowsByStatus = <T>(\n grid: TGrid | undefined,\n rows: TreeGridChangedRow[],\n status: TreeGridChangeStatus,\n) => {\n return rows\n .filter((row) => get(row, status) === '1' && row.Deleted !== '1')\n .map((row) =>\n status === 'Changed' ? omit(row, ['id', 'Changed']) : normalizeAddedRow<T>(grid, row),\n )\n .filter((row) => !isEmpty(row));\n};\n\n/**\n * TreeGrid 변경 행 Date 시간 값 정규화\n * @param grid TreeGrid 인스턴스\n * @param rows 변경 행 목록\n */\nconst normalizeTreeGridChangedRows = (grid: TGrid | undefined, rows: TreeGridChangedRow[]) => {\n if (!grid) {\n return rows;\n }\n\n return rows.map((row) => {\n const liveRow =\n typeof row.id === 'string'\n ? (grid.Rows as unknown as Record<string, TRow>)[row.id]\n : null;\n\n if (!liveRow) {\n return row;\n }\n\n const normalizedRow = { ...row };\n\n Object.keys(row).forEach((col) => {\n if (!isTreeGridTimeDateColumn(grid, liveRow, col)) {\n return;\n }\n\n normalizedRow[col] = getTreeGridTimeDateDisplayValue(grid, liveRow, col);\n });\n\n return normalizedRow;\n });\n};\n\n/**\n * TreeGrid 인스턴스 ID 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridById = (gridId: string) => {\n return Grids[gridId];\n};\n\n/**\n * TreeGrid 데이터 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridDataRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n return grid ? (normalizeTreeGridExternalRows<T>(grid, getDataRows(grid) as Array<TRow & T>) as T) : [];\n};\n\n/**\n * TreeGrid Body 데이터 교체 후 재로드\n * @param gridId TreeGrid 인스턴스 ID\n * @param rows 새로 반영할 행 데이터\n */\nexport const reloadTreeGridBodyById = (gridId: string, rows: unknown) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n // @ts-expect-error - Data property not defined in type\n const currentData = grid.Data.Data;\n\n // @ts-expect-error - Data property not defined in type\n grid.Data.Data = {\n ...currentData,\n Data: { Body: [rows || []] },\n Url: '',\n };\n grid.ReloadBody();\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 행을 특정 위치에 추가\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.canSelect 행 선택 가능 여부\n * @param options.parent 부모 행\n * @param options.anchorRow above/below용 기준 행\n * @param options.insertPosition 행 삽입 위치\n * @param options.initialValues 신규 행 초기값\n * @param options.editableColumns 신규 행 셀 단위 편집 가능 컬럼\n */\nexport const addTreeGridRowById = <T>(\n gridId: string,\n options?: TreeGridAddRowOptions<T>,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const canSelect = options?.canSelect;\n const initialValues = options?.initialValues;\n const editableColumns = options?.editableColumns;\n const { resolvedParent, next } = resolveRowInsertionTarget(grid, options);\n\n const newRow = grid.AddRow(resolvedParent, next, 1);\n\n markTreeGridRowAddedById(newRow);\n assignInitialRowValues(grid, newRow, initialValues);\n markTreeGridAddedRowBaselineValues(grid, newRow);\n\n newRow.CanEdit = 1;\n newRow.CanDelete = 1;\n newRow.CanSelect = canSelect ? 1 : 0;\n assignEditableAddedRowColumns(grid, newRow, editableColumns);\n\n grid.Focus(newRow);\n grid.RefreshRow(newRow);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * TreeGrid 추가/수정 데이터 행 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridRowChangesById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const changesData = parseTreeGridXmlToJson(grid?.GetXmlData('changes,allcols,nogrid,noio'));\n\n if (!isArray(changesData)) {\n return { added: [], changed: [] };\n }\n\n return Object.fromEntries(\n TREEGRID_CHANGE_STATUSES.map((status) => [\n lowerCase(status),\n getChangedRowsByStatus<T>(\n grid,\n normalizeTreeGridChangedRows(grid, changesData as TreeGridChangedRow[]),\n status,\n ),\n ]),\n ) as { added: T[]; changed: T[] };\n};\n\n/**\n * TreeGrid 데이터 엑셀 내보내기\n * @param gridId TreeGrid 인스턴스 ID\n * @param title 다운로드 파일명\n */\nexport const exportTreeGridToExcelById = (gridId: string, title?: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n void loadExportTreeGridExcel().then((exportTreeGridExcel) =>\n exportTreeGridExcel(grid, { exportName: title ?? '' }),\n );\n};\n\n/**\n * TreeGrid 현재 선택 행 목록 조회\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const getTreeGridSelectedRowsById = <T>(gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n const selectedRows = grid?.GetSelRows();\n\n return grid && selectedRows\n ? (normalizeTreeGridExternalRows<T>(grid, selectedRows as Array<TRow & T>) as T)\n : [];\n};\n\n/**\n * TreeGrid 컬럼 표시 여부 변경\n * @param gridId TreeGrid 인스턴스 ID\n * @param options.targetKey 표시 상태를 변경할 컬럼 키\n * @param options.canVisible 컬럼 표시 여부\n */\nexport const setTreeGridColumnVisibilityById = (\n gridId: string,\n options: TreeGridColumnVisibilityOptions,\n) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid || !options?.targetKey) {\n return;\n }\n\n const targetKey = options?.targetKey;\n const canVisible = options?.canVisible;\n\n if (canVisible) {\n grid.ShowCol(targetKey);\n return;\n }\n grid.HideCol(targetKey);\n};\n\n/**\n * 특정 셀 강조 스타일 적용\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조할 대상 행\n * @param targetOption.col 강조할 대상 컬럼\n * @param targetOption.refresh 강조 적용 후 셀 refresh 여부\n */\nexport const highlightTreeGridCellById = (\n gridId: string,\n targetOption: TreeGridHighlightTargetOption,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n preserveTreeGridCellStyleBaseline(grid, row, col);\n grid.SetValue(row, `${col}Class`, TREEGRID_CELL_CHANGED_CLASS);\n grid.SetValue(row, `${col}Color`, targetOption.backgroundColor ?? TREEGRID_CELL_HIGHLIGHT_COLOR);\n\n if (targetOption.refresh !== false) {\n grid.RefreshCell(row, col);\n }\n};\n\n/**\n * 특정 셀 강조 스타일 제거\n * @param gridId TreeGrid 인스턴스 ID\n * @param targetOption.row 강조 해제 대상 행\n * @param targetOption.col 강조 해제 대상 컬럼\n */\nexport const clearTreeGridCellHighlightById = (\n gridId: string,\n targetOption: Pick<TreeGridHighlightTargetOption, 'row' | 'col'>,\n) => {\n const grid = getTreeGridById(gridId);\n\n const row = targetOption?.row;\n const col = targetOption?.col;\n\n if (!grid || !row || !col) {\n return;\n }\n\n const styleBaseline = getTreeGridCellStyleBaseline(row, col);\n\n grid.SetValue(row, `${col}Class`, styleBaseline?.className ?? '');\n grid.SetValue(row, `${col}Color`, styleBaseline?.color ?? '');\n grid.RefreshCell(row, col);\n};\n\n/**\n * TreeGrid 현재 선택 상태 전체 해제\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridSelectionById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionDeselectAll(1, 0);\n};\n\n/**\n * 여러 TreeGrid 선택 상태 전체 해제\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridSelectionsByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridSelectionById);\n};\n\n/**\n * TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridId TreeGrid 인스턴스 ID\n */\nexport const resetTreeGridChangesById = (gridId: string) => {\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n grid.ActionUndoAll(1, 0);\n resetTreeGridSelectionById(gridId);\n window.setTimeout(() => {\n emitTreeGridBodyRowsChanged(gridId);\n }, 0);\n};\n\n/**\n * 여러 TreeGrid 변경 사항 및 선택 상태 초기화\n * @param gridIds TreeGrid 인스턴스 ID 목록\n */\nexport const resetTreeGridChangesByIds = (gridIds: string[]) => {\n gridIds.forEach(resetTreeGridChangesById);\n};\n\n/**\n * TreeGrid Enum 컬럼 옵션 반영\n * @param gridId TreeGrid 인스턴스 ID\n * @param columnName Enum을 적용할 컬럼명\n * @param options Enum 옵션 목록\n * @param valueKey Enum 값으로 사용할 필드명\n * @param labelKeys Enum 라벨로 사용할 필드 우선순위 목록\n */\nexport const setTreeGridColumnEnumOptionsById = <T extends object>(\n gridId: string,\n columnName: string,\n options: T[] | undefined,\n valueKey: keyof T & string,\n labelKeys: Array<keyof T & string>,\n) => {\n if (!options?.length) {\n return;\n }\n\n const grid = getTreeGridById(gridId);\n\n if (!grid) {\n return;\n }\n\n const enumValues = options\n .map((item) => {\n const option = item as Record<string, unknown>;\n const labelValue = labelKeys\n .map((labelKey) => option[labelKey])\n .find((value) => value !== undefined && value !== null && value !== '');\n\n return `${labelValue ?? ''}`;\n })\n .join('|');\n const enumKeys = options\n .map((item) => `${(item as Record<string, unknown>)[valueKey] ?? ''}`)\n .join('|');\n\n grid.SetAttribute(null, columnName, 'Type', 'Enum', 0, 0);\n grid.SetAttribute(null, columnName, 'Enum', `|${enumValues}`, 0, 0);\n grid.SetAttribute(null, columnName, 'EnumKeys', `|${enumKeys}`, 1, 0);\n};\n"],"names":["TREEGRID_CHANGE_STATUSES","TREEGRID_DATA_KEY_PREFIXES","TREEGRID_TIME_DATE_FORMAT_PATTERN","TREEGRID_ADDED_ROW_BY_ID_FLAG","TREEGRID_ADDED_ROW_HIGHLIGHT_COLUMNS_KEY","TREEGRID_ADDED_ROW_INITIAL_VALUE_KEYS_KEY","TREEGRID_ADDED_ROW_BASELINE_VALUES_KEY","TREEGRID_CELL_STYLE_BASELINE_VALUES_KEY","normalizeTreeGridStringValues","__name","value","isArray","item","normalizeTreeGridAddedRowHighlightColumns","markTreeGridRowAddedById","row","isTreeGridRowAddedById","addedById","appendTreeGridAddedRowHighlightColumn","col","targetRow","currentColumns","removeTreeGridAddedRowHighlightColumn","nextColumns","column","getTreeGridAddedRowHighlightColumns","getTreeGridCellComparableValue","grid","cellType","_a","_c","_b","rawValue","_d","displayValue","_e","markTreeGridAddedRowBaselineValues","baselineValues","getTreeGridAddedRowBaselineValue","preserveTreeGridCellStyleBaseline","getTreeGridCellStyleBaseline","loadExportTreeGridExcel","exportTreeGridExcel","getDataRows","isTreeGridTimeDateFormat","format","isTreeGridTimeDateColumn","rowRecord","getTreeGridTimeDateDisplayValue","normalizeTreeGridExternalRow","normalizedRow","normalizeTreeGridExternalRows","rows","resolveRowInsertionTarget","options","insertPosition","parent","anchorRow","resolvedParent","next","assignInitialRowValues","initialValues","isPlainObject","initialValueKeys","rowKey","rowValue","assignEditableAddedRowColumns","editableColumns","targetColumns","isTreeGridDataKey","key","prefix","isHiddenTreeGridValue","isVisibleTreeGridColumn","isTreeGridAddedRowInitialValueKey","getLiveTreeGridChangedRow","shouldIncludeAddedRowDataKey","isEmpty","normalizeAddedRow","without","getChangedRowsByStatus","status","get","omit","normalizeTreeGridChangedRows","liveRow","getTreeGridById","gridId","getTreeGridDataRowsById","reloadTreeGridBodyById","currentData","emitTreeGridBodyRowsChanged","addTreeGridRowById","canSelect","newRow","getTreeGridRowChangesById","changesData","parseTreeGridXmlToJson","lowerCase","exportTreeGridToExcelById","title","getTreeGridSelectedRowsById","selectedRows","setTreeGridColumnVisibilityById","targetKey","highlightTreeGridCellById","targetOption","TREEGRID_CELL_CHANGED_CLASS","TREEGRID_CELL_HIGHLIGHT_COLOR","clearTreeGridCellHighlightById","styleBaseline","resetTreeGridSelectionById","resetTreeGridSelectionsByIds","gridIds","resetTreeGridChangesById","resetTreeGridChangesByIds","setTreeGridColumnEnumOptionsById","columnName","valueKey","labelKeys","enumValues","option","labelKey","enumKeys"],"mappings":"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"}
|
package/package.json
CHANGED
package/treegrid/TextKR.xml
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<!-- All message HTML texts -->
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
<Text V13_0="" DelSelectedCols="선택 열 삭제" V12_0="" V9_2="" V7_0="" DelSelected="선택 행 삭제" V6_0="" SearchHelp="도움" V4_7="" V3_5="" V3_2="" And="및" V3_1="" NaNAskReject="입력값이 틀렸습니다, 삭제하시겠습니까?" NaNAsk="입력값이 틀렸습니다, 그래도 저장하시겠습니까?" NaNAccepted="틀린 입력값이 변경됐습니다." NaNRejected="틀린 입력값이 무시됐습니다" NaNContinue="입력값이 틀렸습니다, 변경하십시오" V13_3="" MoveRows="%d 행 이동중" V13_1="" FormulaError11="배열 수식 미적용 또는 수식 내에 예상치 못한 <b>%2</b> 셀 범위 <b>%1</b>" FormulaError10="수식 내 지원하지 않는 외부 <b>%2</b> 파일 지정 <b>%1</b>" FormulaError9="수식 내 지원하지 <b>%2</b> 않는 함수 <b>%1</b>" FormulaError8="수식 내 미지수 시트에 대한 <b>%2</b> 외부 지정 <b>%1</b>" EnterFormat="MS 엑셀과 같이 문자열 입력" ShrinkSize="그리드 전체를 표시할 공간 부족<br>그리드 스타일 크기를 줄이시겠습니까?" UniqueSheet=" (%1)" SetSize="스타일 크기 변경" ShrinkStyle="스타일 크기 초과, 스타일 크기 축소중" CompatibleStyles="적합" OnlyXlsx="열 수 없음 <b>%1</b>. 오직 <b>xlsx</b> 파일만 지원" DeleteTab=" <b>%1</b> 탭을 삭제하시겠습니까?" DeleteSheet=" <b>%1</b> 시트를 삭제하시겠습니까?" SheetsUnsupported=" xlsx파일 열기는 현재 브라우저에서 지원 안함 " ParseSheetError="<b>%1</b> 에서 데이터 분석 실패" LoadSheetError="<b>%1</b>에서 error <b>%2</b>로 인한 데이터 로딩 실패" OpenSheet="파일<b>%1</b> 데이터를 업로드 하시겠습니까 <br>또는 모든 데이터를 삭제하고 파일 <b>%1</b> 데이터를 업로드 하시겠습니까?" AddSheet="<b>%1</b> 데이터를 실제 데이터에 추가하시겠습니까?" DiscardSheet="모든 데이터를 삭제하고 파일<b>%1</b>의 데이터를 업로드 하시겠습니까?" LoadSheet="시트 읽는중..." PagerNone="..." PagerSep3=", " PagerSep2=" => " PagerSep1=" | " SetStyleErrors="수정 제한으로 인해 %1 셀은 변경 안됨" SetStyleError="수정 제한으로 변경 된 셀 없음" SetStyleSame="변경 된 셀 없음" NoMenu="가능한 행동 없음" SearchFindPrev="이전" ErrAddRoot="루트에 신규 행 추가 불가" ErrAdd="상위 %1에 신규 행 추가 불가" FormulaCircularAlert="수식은 원형 셀 지정 포함 " FormulaCircular="수식은 원형 셀 지정 포함 " EditErrorsMessageMore="<b>%1</b> 개의 문제 발견 ..." EditChangesMessageCell="셀<b>%2</b>에서 %1<br>" EditErrorsMessageCell="셀 <b>%2</b>에서 %1 <br>" EditChangesMessage="%1" EditErrorsMessage="%1" ResultText="값 <b>%1</b>은 무효값" SizeChanged="크기 제한으로 인해 값 <b>%1</b>은 변경됐습니다" FormulaRestrict="수식 <b>%1</b>은 error <i>%2</i>로 인해 제한됐습니다 " EditMaskError="값 <b>%1</b>은 제한된 문자가 포함 되어 있습니다 " NoNumber="셀 값은 숫자가 아닙니다 " NoFormat="형식 변경 불가 " NoStyle="스타일 변경 불가" CannotEdit="변경 불가 값" EmptyValue="비어 있음" NotInList="값 <b>%1</b>은 아이템 목록에 없습니다" FormulaError7="수식 <b>%1</b>의 결과는 <b>NaN</b>입니다 " FormulaError6="수식 <b>%1</b> 의 결과는 <b>null</b> 입니다" FormulaError5=" 에러<i>%2</i>로 인해 수식 계산 불가 " FormulaError4=" 에러<i>%2</i>로 인해 잘못 된 수식 <b>%1</b> " FormulaError3="수식<b>%1</b>에서 잘못 된 아이템 <b>%2</b> " FormulaError2="수식 <b>%1</b>내 잘못 된 셀 지정 " FormulaError1="수식<b>%1</b>은 분석 불가 " Paste="클립보드에서 데이터 붙이기 중..." FileIE=" IE<=9에서는 불가능 " LevelsTip="%d까지 행 확장 " V10_0="" CopyOk="성공적으로 복사 완료 " CopySlow="복사 시간이 너무 깁니다 (%d 분), Ctrl+C를 통해 다시 복사하십시오 " PagingUpdate="페이지 생성중 ..." V9_3="" CollapseCols="열 접는중 " ExpandCols="열 확장중" CalendarEdit="<i>수정 ...</i>" CalendarEmpty="<s>기본값</s>" CalendarNone="<s>없음</s>" V8_0="" RenderProgressCaptionChildren="tree 페이지 전환 중" RenderProgressCaptionCols="열 페이지 전환 중 " RenderProgressCaptionRows="행 페이지 전환 중 " DatesRepeatKeys="||w|d|h" DatesRepeatEnum="||매주|매일|매시간" DatesValue="값" DatesEndTime="끝" DatesStart="시작" DatesRepeat="반복" ErrorSave="변경 사항 서버 저장 실패!" RemoveUnused="미사용 페이지 제거 중 " DefaultsAlphabet="%d ..." V6_1="" DefaultsAll="모두 선택" PrintCaption="인새활 열 선택 " ExportCaption="내보내기할 열 선택 " ExpandProgressCancel="확장 중단 " ExpandProgressText="%d 에서 %d 행 완료 " ExpandProgressCaption="모든 행 확장 중 " ExportProgressCancel="보고 중단 " ExportProgressText="%d 에서 %d 행 완료 " ExportProgressCaption="보고서 생성 중 " PrintProgressCancel="보고서 취소 " PrintProgressText="%d 에서 %d 행 완료 " PrintProgressCaption="보고서 생성 중" RenderProgressCancel="배경화면으로 전환 중 " RenderProgressText="%d 에서 %d 페이지 완료 " ExportFinished="<center><b>보고서 생성 완료</b><br/><br/>다운로드 버튼 클릭<br/></center><br/>" DragObjectMoreCopy="<b>%d</b> 행 복사 중 " DragObjectMoreMove=" <b>%d</b> 행 이동 중" DragObjectCopy="<b>%d</b>행 복사 중" DragObjectMove=" <b>%d</b>행 이동 중" RadioFilterOff="<i>미설정</i>" DefaultsNone="모두 비우기" Password="***" ColMove="열 '%d' 이동 중" ColWidth="열 '%d'의 너비 변경 중" RenderPage="
|
|
19
|
+
<Text V13_0="" DelSelectedCols="선택 열 삭제" V12_0="" V9_2="" V7_0="" DelSelected="선택 행 삭제" V6_0="" SearchHelp="도움" V4_7="" V3_5="" V3_2="" And="및" V3_1="" NaNAskReject="입력값이 틀렸습니다, 삭제하시겠습니까?" NaNAsk="입력값이 틀렸습니다, 그래도 저장하시겠습니까?" NaNAccepted="틀린 입력값이 변경됐습니다." NaNRejected="틀린 입력값이 무시됐습니다" NaNContinue="입력값이 틀렸습니다, 변경하십시오" V13_3="" MoveRows="%d 행 이동중" V13_1="" FormulaError11="배열 수식 미적용 또는 수식 내에 예상치 못한 <b>%2</b> 셀 범위 <b>%1</b>" FormulaError10="수식 내 지원하지 않는 외부 <b>%2</b> 파일 지정 <b>%1</b>" FormulaError9="수식 내 지원하지 <b>%2</b> 않는 함수 <b>%1</b>" FormulaError8="수식 내 미지수 시트에 대한 <b>%2</b> 외부 지정 <b>%1</b>" EnterFormat="MS 엑셀과 같이 문자열 입력" ShrinkSize="그리드 전체를 표시할 공간 부족<br>그리드 스타일 크기를 줄이시겠습니까?" UniqueSheet=" (%1)" SetSize="스타일 크기 변경" ShrinkStyle="스타일 크기 초과, 스타일 크기 축소중" CompatibleStyles="적합" OnlyXlsx="열 수 없음 <b>%1</b>. 오직 <b>xlsx</b> 파일만 지원" DeleteTab=" <b>%1</b> 탭을 삭제하시겠습니까?" DeleteSheet=" <b>%1</b> 시트를 삭제하시겠습니까?" SheetsUnsupported=" xlsx파일 열기는 현재 브라우저에서 지원 안함 " ParseSheetError="<b>%1</b> 에서 데이터 분석 실패" LoadSheetError="<b>%1</b>에서 error <b>%2</b>로 인한 데이터 로딩 실패" OpenSheet="파일<b>%1</b> 데이터를 업로드 하시겠습니까 <br>또는 모든 데이터를 삭제하고 파일 <b>%1</b> 데이터를 업로드 하시겠습니까?" AddSheet="<b>%1</b> 데이터를 실제 데이터에 추가하시겠습니까?" DiscardSheet="모든 데이터를 삭제하고 파일<b>%1</b>의 데이터를 업로드 하시겠습니까?" LoadSheet="시트 읽는중..." PagerNone="..." PagerSep3=", " PagerSep2=" => " PagerSep1=" | " SetStyleErrors="수정 제한으로 인해 %1 셀은 변경 안됨" SetStyleError="수정 제한으로 변경 된 셀 없음" SetStyleSame="변경 된 셀 없음" NoMenu="가능한 행동 없음" SearchFindPrev="이전" ErrAddRoot="루트에 신규 행 추가 불가" ErrAdd="상위 %1에 신규 행 추가 불가" FormulaCircularAlert="수식은 원형 셀 지정 포함 " FormulaCircular="수식은 원형 셀 지정 포함 " EditErrorsMessageMore="<b>%1</b> 개의 문제 발견 ..." EditChangesMessageCell="셀<b>%2</b>에서 %1<br>" EditErrorsMessageCell="셀 <b>%2</b>에서 %1 <br>" EditChangesMessage="%1" EditErrorsMessage="%1" ResultText="값 <b>%1</b>은 무효값" SizeChanged="크기 제한으로 인해 값 <b>%1</b>은 변경됐습니다" FormulaRestrict="수식 <b>%1</b>은 error <i>%2</i>로 인해 제한됐습니다 " EditMaskError="값 <b>%1</b>은 제한된 문자가 포함 되어 있습니다 " NoNumber="셀 값은 숫자가 아닙니다 " NoFormat="형식 변경 불가 " NoStyle="스타일 변경 불가" CannotEdit="변경 불가 값" EmptyValue="비어 있음" NotInList="값 <b>%1</b>은 아이템 목록에 없습니다" FormulaError7="수식 <b>%1</b>의 결과는 <b>NaN</b>입니다 " FormulaError6="수식 <b>%1</b> 의 결과는 <b>null</b> 입니다" FormulaError5=" 에러<i>%2</i>로 인해 수식 계산 불가 " FormulaError4=" 에러<i>%2</i>로 인해 잘못 된 수식 <b>%1</b> " FormulaError3="수식<b>%1</b>에서 잘못 된 아이템 <b>%2</b> " FormulaError2="수식 <b>%1</b>내 잘못 된 셀 지정 " FormulaError1="수식<b>%1</b>은 분석 불가 " Paste="클립보드에서 데이터 붙이기 중..." FileIE=" IE<=9에서는 불가능 " LevelsTip="%d까지 행 확장 " V10_0="" CopyOk="성공적으로 복사 완료 " CopySlow="복사 시간이 너무 깁니다 (%d 분), Ctrl+C를 통해 다시 복사하십시오 " PagingUpdate="페이지 생성중 ..." V9_3="" CollapseCols="열 접는중 " ExpandCols="열 확장중" CalendarEdit="<i>수정 ...</i>" CalendarEmpty="<s>기본값</s>" CalendarNone="<s>없음</s>" V8_0="" RenderProgressCaptionChildren="tree 페이지 전환 중" RenderProgressCaptionCols="열 페이지 전환 중 " RenderProgressCaptionRows="행 페이지 전환 중 " DatesRepeatKeys="||w|d|h" DatesRepeatEnum="||매주|매일|매시간" DatesValue="값" DatesEndTime="끝" DatesStart="시작" DatesRepeat="반복" ErrorSave="변경 사항 서버 저장 실패!" RemoveUnused="미사용 페이지 제거 중 " DefaultsAlphabet="%d ..." V6_1="" DefaultsAll="모두 선택" PrintCaption="인새활 열 선택 " ExportCaption="내보내기할 열 선택 " ExpandProgressCancel="확장 중단 " ExpandProgressText="%d 에서 %d 행 완료 " ExpandProgressCaption="모든 행 확장 중 " ExportProgressCancel="보고 중단 " ExportProgressText="%d 에서 %d 행 완료 " ExportProgressCaption="보고서 생성 중 " PrintProgressCancel="보고서 취소 " PrintProgressText="%d 에서 %d 행 완료 " PrintProgressCaption="보고서 생성 중" RenderProgressCancel="배경화면으로 전환 중 " RenderProgressText="%d 에서 %d 페이지 완료 " ExportFinished="<center><b>보고서 생성 완료</b><br/><br/>다운로드 버튼 클릭<br/></center><br/>" DragObjectMoreCopy="<b>%d</b> 행 복사 중 " DragObjectMoreMove=" <b>%d</b> 행 이동 중" DragObjectCopy="<b>%d</b>행 복사 중" DragObjectMove=" <b>%d</b>행 이동 중" RadioFilterOff="<i>미설정</i>" DefaultsNone="모두 비우기" Password="***" ColMove="열 '%d' 이동 중" ColWidth="열 '%d'의 너비 변경 중" RenderPage="로딩 중" LoadPage="로딩 중" SetStyle="스타일 업데이트 중..." LoadStyles="스타일 로딩 중..." GanttCreate=" 간트 생성 중..." GanttUpdate="간트 업데이트 중..." V5_9="" DoRedo="재시도 중 ..." DoUndo="취소 중..." V5_6="" Printed="보고서 창으로 전환하여 프린트하십시오" V5_0_1="" Search="검색 중..." SearchClear="비우기" SearchFind="찾기" SearchMark="체크" SearchSelect="선택" SearchFilter="필터" SearchSearch="검색" Not="아닌" Or="또는" Ends="끝나는,~로 끝나는, ~으로 끝나다" Starts="시작하는,~로 시작하는,~으로 시작하다,시작하다,~로 시작하는,~으로 시작하다" Contains="포함하는,~가 있다" SearchMethodList="|Automatic|Search like Google|Search by expression" Print="<h2><center>프린트를 위한 보고서를 생성 중입니다 ...</center></h2>" Items="아이템 %d - %d" DefaultsFilterOff="(모두)" Group="그룹별로 행 분류 중..." GroupCustom="그룹하시려면, 열 캡션을 여기로 드래그 하세요 ..." V4_5="" DefaultsButton="선택 ..." DefaultsDate="날짜 선택 ..." Picture="이미지" V4_3="" ColUpdate="열 업데이트 중 ..." ColumnsCaption="표시할 열 선택 " Load="데이터 로딩 중..." Layout="레이아웃 로딩 중..." PageErr="해당 데이터 다운로드 불가!" UpdateTree="트리 업데이트 중..." UpdateValues="값 업데이트 중..." Calculate="셀 계산 중 ..." V3_0="" StartErr="치명적 오류! <br/>트리그리드 전환 불가 " UpdateCfg="설정 업데이트 중 ..." NoPages="빈" Page="페이지" Render="전환 중..." V2_6="" ExpandAll="모든 행 확장 중..." CollapseAll="모든 행 축소 중..." UpdateGrid="뷰 업데이트 중..." V2_3="" DoFilter="행 필터링 중..." SelectAll="모든 행의 선택 변경 중 " Sort="행 분류 중 ..." ExtentErr="그리드 크기 너무 작음 " V2_0=""/>
|
|
20
20
|
|
|
21
21
|
<!-- Gantt texts -->
|
|
22
22
|
|