@owp/core 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index10.js +2 -2
- package/dist/_virtual/index12.js +2 -2
- package/dist/_virtual/index13.js +2 -2
- package/dist/_virtual/index14.js +2 -2
- package/dist/_virtual/index15.js +2 -2
- package/dist/_virtual/index5.js +2 -2
- package/dist/components/OwpDialog/OwpDialog.js +30 -32
- package/dist/components/OwpDialog/OwpDialog.js.map +1 -1
- package/dist/components/OwpLayout/OwpLayout.js +39 -39
- package/dist/components/OwpLayout/OwpLayout.js.map +1 -1
- package/dist/components/OwpMrtTable/OwpMrtTable.js +393 -255
- package/dist/components/OwpMrtTable/OwpMrtTable.js.map +1 -1
- package/dist/components/OwpTable/OwpDataTable.js +45 -45
- package/dist/components/OwpTable/OwpDataTable.js.map +1 -1
- package/dist/components/OwpTable/OwpTable.js +6 -6
- package/dist/components/OwpTable/OwpTable.js.map +1 -1
- package/dist/components/OwpTable/OwpVerticalTable.js +55 -53
- package/dist/components/OwpTable/OwpVerticalTable.js.map +1 -1
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js +169 -148
- package/dist/components/OwpTreeGrid/OwpTreeGrid.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js +1 -1
- package/dist/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.js.map +1 -1
- package/dist/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.js +1 -1
- package/dist/components/OwpTreeGrid/internal/hooks/useOwpTreeGridOverlayFrame.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js +84 -0
- package/dist/components/OwpTreeGrid/internal/treeGridColumnEditRules.js.map +1 -0
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js +114 -103
- package/dist/components/OwpTreeGrid/internal/treeGridRuntime.js.map +1 -1
- package/dist/components/OwpTreeGrid/internal/utils/perf.js.map +1 -0
- package/dist/constants/storageKeys.js +1 -0
- package/dist/constants/storageKeys.js.map +1 -1
- package/dist/hooks/useCurrentUserSeq.js +11 -0
- package/dist/hooks/useCurrentUserSeq.js.map +1 -0
- package/dist/hooks.js +67 -64
- package/dist/hooks.js.map +1 -1
- package/dist/index.js +58 -59
- package/dist/layout/Layout.js +24 -24
- package/dist/layout/Layout.js.map +1 -1
- package/dist/layout/themeLayouts.js.map +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE128/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE39/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/CODE93/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/EAN_UPC/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/GenericBarcode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/ITF/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/MSI/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/codabar/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/barcodes/pharmacode/index.js +1 -1
- package/dist/node_modules/.pnpm/jsbarcode@3.12.1/node_modules/jsbarcode/bin/renderers/index.js +1 -1
- package/dist/node_modules/.pnpm/react-is@16.13.1/node_modules/react-is/index.js +1 -1
- package/dist/owp-app.css +1 -1
- package/dist/types/components/OwpDialog/OwpDialog.d.ts +1 -9
- package/dist/types/components/OwpMrtTable/OwpMrtTable.d.ts +9 -0
- package/dist/types/components/OwpTable/OwpVerticalTable.d.ts +3 -1
- package/dist/types/components/OwpTreeGrid/OwpTreeGrid.d.ts +7 -1
- package/dist/types/components/OwpTreeGrid/index.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridLoadingOverlay.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/OwpTreeGridNoDataOverlay.d.ts +1 -1
- package/dist/types/components/OwpTreeGrid/internal/treeGridColumnEditRules.d.ts +60 -0
- package/dist/types/components/OwpTreeGrid/internal/treeGridRuntime.d.ts +7 -2
- package/dist/types/constants/storageKeys.d.ts +1 -0
- package/dist/types/hooks/index.d.ts +1 -0
- package/dist/types/hooks/useCurrentUserSeq.d.ts +8 -0
- package/dist/types/layout/Layout.d.ts +2 -0
- package/dist/types/layout/themeLayouts.d.ts +2 -0
- package/dist/types/utils/treeGridExportExcelUtil.d.ts +0 -4
- package/dist/types/utils/treeGridUtil.d.ts +0 -59
- package/dist/utils/treeGridExportExcelUtil.js +57 -58
- package/dist/utils/treeGridExportExcelUtil.js.map +1 -1
- package/dist/utils/treeGridUtil.js +69 -83
- package/dist/utils/treeGridUtil.js.map +1 -1
- package/dist/utils.js +71 -86
- package/package.json +2 -2
- package/dist/components/OwpTreeGrid/hooks/useOwpTreeGridOverlayFrame.js.map +0 -1
- package/dist/components/OwpTreeGrid/utils/perf.js.map +0 -1
- /package/dist/components/OwpTreeGrid/{utils → internal/utils}/perf.js +0 -0
- /package/dist/types/components/OwpTreeGrid/{hooks → internal/hooks}/useOwpTreeGridOverlayFrame.d.ts +0 -0
- /package/dist/types/components/OwpTreeGrid/{utils → internal/utils}/perf.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpDataTable.js","sources":["../../../src/components/OwpTable/OwpDataTable.tsx"],"sourcesContent":["import { Divider, TextField, Typography, TypographyProps } from '@mui/material';\nimport Checkbox, { checkboxClasses } from '@mui/material/Checkbox';\nimport { grey } from '@mui/material/colors';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell, { TableCellProps } from '@mui/material/TableCell';\nimport TableContainer, { TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport { SxProps, Theme } from '@mui/material/styles';\nimport { isArray, isBoolean, isEmpty, isEqual, isNumber, uniqueId } from 'es-toolkit/compat';\nimport { ChangeEvent, MouseEvent, ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { OwpNumberField } from '../OwpNumberField';\n\ntype Row = object;\ntype TableCellAlign = NonNullable<TableCellProps['align']>;\n\ninterface HeadCell {\n enablePadding?: boolean;\n id: string;\n label: string;\n sx?: TypographyProps['sx'];\n inputLabel?: string;\n rangeKey?: string;\n rangeLabel?: { start: string; end: string };\n align?: string;\n valueAlign?: string;\n canTextField?: boolean;\n textFieldType?: string;\n}\n\ninterface DataTableHeadProps {\n sx?: TableCellProps['sx'];\n headCells: HeadCell[];\n numSelected: number;\n onRequestSort: (event: MouseEvent<unknown>, property: string) => void;\n onSelectAllClick: (event: ChangeEvent<HTMLInputElement>) => void;\n order: Order;\n orderBy: string;\n rowCount: number;\n canCheckbox?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n}\n\ninterface OwpDataTableProps<T extends Row = Row> {\n className?: string;\n sx?: TableContainerProps['sx'];\n headSx?: TableCellProps['sx'];\n headCells: HeadCell[];\n rows?: T[];\n canCheckbox?: boolean;\n canTotalCountRow?: boolean;\n selected?: T[];\n onSelect?: (rows: T[] | []) => void;\n onBlur?: (evt: OwpDataTableBlurEvent, dataIndex: number) => void;\n canSelectingSingle?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n fixedRowCount?: number;\n}\n\nconst defaultHeadCellsSx = {\n bgcolor: '#586980',\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n} as const;\n\nconst headerBorderRight = {\n borderRight: `1px solid ${grey['A200']}`,\n};\n\nconst rowBorderRight = {\n borderRight: `1px solid ${grey[400]}`,\n};\n\nconst defaultSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: grey['A100'],\n },\n '&.MuiTableSortLabel-root:hover': {\n color: grey['A100'],\n },\n '&.Mui-active': {\n color: grey['A100'],\n },\n '& .MuiTableSortLabel-icon': {\n color: `${grey['A100']} !important`,\n },\n} as const;\n\nconst tableRadiusZeroSx = {\n borderRadius: 0,\n} as const;\n\nconst lastRowRadiusZeroSx = {\n '& > th, & > td': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\nconst treeGridCellBaseSx = {\n ...treeGridFontSx,\n boxSizing: 'border-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n} as const;\n\nconst treeGridHeaderCellSx = {\n ...treeGridCellBaseSx,\n bgcolor: '#586980',\n borderBottom: '1px solid #6F7F94',\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n p: '7px 2px 6px 10px',\n} as const;\n\nconst treeGridSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n display: 'flex',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n fontWeight: 'inherit',\n justifyContent: 'center',\n lineHeight: 'inherit',\n overflow: 'hidden',\n position: 'relative',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n margin: 0,\n position: 'absolute',\n right: 0,\n },\n} as const;\n\nconst treeGridBodyCellSx = {\n ...treeGridCellBaseSx,\n borderBottom: '1px solid #CDD8E4',\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n p: '7px 10px 6px',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\n/**\n * sx 병합 유틸\n * @param styles 병합 대상 sx 목록\n */\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\n/**\n * 고정 row 수 계산\n * @param fixedRowCount 고정 row 수\n */\nconst getFixedRowCount = (fixedRowCount?: number) => {\n if (!isNumber(fixedRowCount) || fixedRowCount < 1) {\n return undefined;\n }\n\n return fixedRowCount;\n};\n\n/**\n * 빈 row 목록 생성\n * @param count 생성 수\n */\nconst createEmptyRows = (count: number) => Array.from({ length: count }, () => ({}) as Row);\n\n/**\n * TableCell align 정규화\n * @param align align 값\n * @param fallback 기본 align 값\n */\nconst getTableCellAlign = (align: string | undefined, fallback: TableCellAlign): TableCellAlign => {\n switch (align) {\n case 'center':\n case 'right':\n case 'left':\n case 'inherit':\n case 'justify':\n return align;\n default:\n return fallback;\n }\n};\n\n/**\n * row 값 조회\n * @param row row 값\n * @param key 조회 key\n */\nconst getRowValue = (row: Row, key?: string) => {\n if (!key) {\n return undefined;\n }\n\n return (row as Record<string, unknown>)?.[key];\n};\n\nconst getComparableValue = (value: unknown) => {\n if (typeof value === 'string' || isNumber(value)) {\n return value;\n }\n\n return undefined;\n};\n\nfunction descendingComparator(a: Row, b: Row, orderBy: string) {\n const aValue = getComparableValue(getRowValue(a, orderBy));\n const bValue = getComparableValue(getRowValue(b, orderBy));\n\n if (bValue == null && aValue == null) {\n return 0;\n }\n if (bValue == null) {\n return -1;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue < aValue) {\n return -1;\n }\n if (bValue > aValue) {\n return 1;\n }\n return 0;\n}\n\ntype Order = 'asc' | 'desc';\ntype OwpDataTableBlurEvent = Record<string, unknown> & {\n target: {\n value: string | number | undefined;\n };\n};\n\nfunction getComparator(order: Order, orderBy: string): (a: Row, b: Row) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\ntype RowRangeValue = {\n start?: string | number;\n end?: string | number;\n};\n\nconst getRowRangeValue = (row: Row, rangeKey?: string) => {\n if (!rangeKey) {\n return undefined;\n }\n\n return getRowValue(row, rangeKey) as RowRangeValue | undefined;\n};\n\nconst getRangeLabel = (row: Row, cell: HeadCell) => {\n if (!(cell.inputLabel ?? cell.rangeKey)) {\n return '';\n }\n\n const rangeValue = getRowRangeValue(row, cell.rangeKey);\n\n return `${cell.rangeLabel?.start ? `${cell.rangeLabel?.start}: ` : ''}${rangeValue?.start} ~ ${cell.rangeLabel?.end ? `${cell.rangeLabel?.end}: ` : ''}${rangeValue?.end}`;\n};\n\nconst getRowTabIndex = (row: Row, fallbackIndex: number) => {\n const rowIndex = getRowValue(row, 'index');\n\n return isNumber(rowIndex) ? rowIndex : fallbackIndex;\n};\n\nconst getEditableCellSx = (valueAlign?: HeadCell['valueAlign']) => ({\n '& input': {\n textAlign: valueAlign ?? 'center',\n },\n height: 34,\n});\n\nfunction DataTableHead(props: DataTableHeadProps) {\n const {\n sx,\n headCells,\n onSelectAllClick,\n order,\n orderBy,\n numSelected,\n rowCount,\n onRequestSort,\n canCheckbox,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle,\n } = props;\n const createSortHandler = (property: string) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n <TableRow\n sx={mergeSx(canUseTreeGridStyle && { height: 33 }, canTableRadiusZero && tableRadiusZeroSx)}\n >\n {canCheckbox && (\n <TableCell\n padding=\"checkbox\"\n className=\"text-white\"\n sx={mergeSx(\n {\n ...defaultHeadCellsSx,\n ...headerBorderRight,\n },\n canUseTreeGridStyle && treeGridHeaderCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Checkbox\n color=\"default\"\n sx={mergeSx(\n {\n [`&, &.${checkboxClasses.checked}`]: {\n color: grey[50],\n },\n },\n canUseTreeGridStyle && { p: 0 },\n )}\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n />\n </TableCell>\n )}\n {headCells.map((headCell, index) => (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'pl-20'}\n key={headCell.id}\n align={getTableCellAlign(headCell.align, 'center')}\n padding={headCell.enablePadding ? 'normal' : 'none'}\n sortDirection={orderBy === headCell.id ? order : false}\n sx={mergeSx(\n {\n ...defaultHeadCellsSx,\n ...(headCells.length - 1 !== index && headerBorderRight),\n },\n canUseTreeGridStyle && treeGridHeaderCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n canUseTreeGridStyle && headCell?.sx,\n )}\n >\n {canUseOrderBy ? (\n <TableSortLabel\n sx={canUseTreeGridStyle ? treeGridSortLabelSx : defaultSortLabelSx}\n active={orderBy === headCell.id}\n direction={orderBy === headCell.id ? order : 'asc'}\n onClick={createSortHandler(headCell.id)}\n >\n {canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography className=\"text-white text-lg font-medium\" sx={headCell?.sx}>\n {headCell.label}\n </Typography>\n )}\n </TableSortLabel>\n ) : canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography className=\"text-white text-lg font-medium\" sx={headCell?.sx}>\n {headCell.label}\n </Typography>\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\n/**\n * OwpDataTable 컴포넌트\n * @param className CSS 클래스명\n * @param sx sx 값\n * @param headSx headSx 값\n * @param headCells headCells 값\n * @param rows 행 데이터 목록\n * @param selected selected 값\n * @param canTableRadiusZero 테이블 radius 0 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param fixedRowCount 고정 row 수\n */\nexport function OwpDataTable<T extends Row = Row>({\n className,\n sx,\n headSx,\n headCells,\n rows,\n selected,\n canCheckbox,\n canTotalCountRow,\n canSelectingSingle,\n canUseOrderBy = true,\n canTableRadiusZero = false,\n canUseTreeGridStyle = false,\n fixedRowCount,\n onSelect,\n onBlur,\n}: OwpDataTableProps<T>) {\n const [order, setOrder] = useState<Order>('asc');\n const [orderBy, setOrderBy] = useState<string>('');\n const [selectedRows, setSelectedRows] = useState<T[] | []>([]);\n const tableIdRef = useRef(uniqueId('owp-data-table'));\n const useFixedRowCount = useMemo(() => getFixedRowCount(fixedRowCount), [fixedRowCount]);\n const resolvedRows = useMemo(() => {\n const nextRows = isArray(rows) ? rows : [];\n\n return useFixedRowCount ? nextRows.slice(0, useFixedRowCount) : nextRows;\n }, [rows, useFixedRowCount]);\n const resolvedHeadCells = useMemo(() => headCells ?? [], [headCells]);\n const useCheckBox = isBoolean(canCheckbox) ? canCheckbox : true;\n const useTotalCountRow = isBoolean(canTotalCountRow) ? canTotalCountRow : true;\n\n useEffect(() => {\n if (!isEmpty(selected)) {\n setSelectedRows(selected);\n }\n }, [selected]);\n\n useEffect(() => {\n onSelect?.(selectedRows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRows]);\n\n const handleRequestSort = (_: MouseEvent<unknown>, property: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n };\n\n const handleSelectAllClick = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n setSelectedRows(resolvedRows);\n return;\n }\n setSelectedRows([]);\n };\n\n const handleClick = (_: MouseEvent<unknown>, row: T) => {\n if (canSelectingSingle) {\n setSelectedRows([row]);\n return;\n }\n setSelectedRows((prev: T[]) => {\n const isIncluded = !!prev.find((item) => isEqual(item, row));\n return isIncluded ? prev?.filter((item: T) => !isEqual(item, row)) : [...prev, row];\n });\n };\n\n const visibleRows = useMemo(\n () => [...resolvedRows].sort(getComparator(order, orderBy)),\n [order, orderBy, resolvedRows],\n );\n const displayRows = useMemo(() => {\n if (!useFixedRowCount || visibleRows.length >= useFixedRowCount) {\n return visibleRows;\n }\n\n return [...visibleRows, ...createEmptyRows(useFixedRowCount - visibleRows.length)];\n }, [useFixedRowCount, visibleRows]);\n\n return (\n <Paper\n className={className}\n sx={mergeSx({ width: '100%' }, canTableRadiusZero && tableRadiusZeroSx)}\n >\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n sx={mergeSx(\n { height: useFixedRowCount ? 'auto' : 500, borderRadius: 2 },\n useFixedRowCount && { overflowY: 'hidden' },\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Table\n stickyHeader={!canUseTreeGridStyle}\n sx={mergeSx({ minWidth: 200 }, canTableRadiusZero && tableRadiusZeroSx)}\n aria-labelledby=\"owp-data-table\"\n >\n <DataTableHead\n sx={headSx}\n headCells={resolvedHeadCells}\n numSelected={selectedRows.length}\n order={order}\n orderBy={orderBy}\n onSelectAllClick={handleSelectAllClick}\n canCheckbox={!canSelectingSingle && useCheckBox}\n canUseOrderBy={canUseOrderBy}\n canTableRadiusZero={canTableRadiusZero}\n canUseTreeGridStyle={canUseTreeGridStyle}\n onRequestSort={handleRequestSort}\n rowCount={resolvedRows.length}\n />\n <TableBody sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n {displayRows.map((row, index) => {\n const isItemSelected = selectedRows.some((item) => isEqual(item, row));\n const isLastRow = displayRows.length - 1 === index;\n const isPlaceholderRow = useFixedRowCount ? index >= visibleRows.length : false;\n const labelId = `${tableIdRef.current}-${index}`;\n\n return (\n <TableRow\n hover\n role={canUseTreeGridStyle ? undefined : 'checkbox'}\n aria-checked={canUseTreeGridStyle ? undefined : isItemSelected}\n tabIndex={-1}\n key={`${labelId}-row-${index}`}\n selected={isItemSelected}\n sx={mergeSx(\n { cursor: isPlaceholderRow ? 'default' : 'pointer' },\n canUseTreeGridStyle && { height: 30 },\n canTableRadiusZero && tableRadiusZeroSx,\n canTableRadiusZero && isLastRow && lastRowRadiusZeroSx,\n )}\n >\n {useCheckBox && (\n <TableCell\n padding=\"checkbox\"\n onClick={(event) => {\n if (!isPlaceholderRow) {\n handleClick(event, row as T);\n }\n }}\n sx={mergeSx(\n rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n <Checkbox\n color=\"default\"\n checked={isItemSelected}\n disabled={isPlaceholderRow}\n sx={mergeSx(canUseTreeGridStyle && { p: 0 })}\n />\n </TableCell>\n )}\n {resolvedHeadCells.map((cell, cellIndex) => {\n const _key = `${labelId}-row-${index}-cell-${cellIndex}`;\n const rangeLabel = getRangeLabel(row, cell);\n const rowTabIndex = getRowTabIndex(row, index);\n const cellValue = getRowValue(row, String(cell?.id));\n if (cellIndex === 0) {\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n component={canUseTreeGridStyle ? 'td' : 'th'}\n id={labelId}\n scope={canUseTreeGridStyle ? undefined : 'row'}\n padding=\"none\"\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n resolvedHeadCells.length > 1 && rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cellValue as ReactNode}\n </TableCell>\n );\n }\n\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n resolvedHeadCells.length - 1 !== cellIndex && rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cell?.canTextField ? (\n cell?.textFieldType === 'number' ? (\n <OwpNumberField\n variant=\"standard\"\n decimalScale={2}\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(cell?.valueAlign)}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n isAllowed={(values) => {\n const { floatValue } = values;\n const end = getRowRangeValue(row, cell?.rangeKey)?.end;\n\n if (isNumber(floatValue) && isNumber(end)) {\n return floatValue <= end;\n }\n\n return true;\n }}\n value={cellValue as string | number | undefined}\n onBlur={(evt) => {\n const start = getRowRangeValue(row, cell?.rangeKey)?.start;\n const nextValue = evt.target.value?.replace(/,/g, '');\n\n onBlur?.(\n {\n ...evt,\n target: {\n ...evt.target,\n value:\n isNumber(start) && nextValue !== ''\n ? Number(start > Number(nextValue) ? start : nextValue)\n : nextValue,\n },\n },\n rowTabIndex,\n );\n }}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(cell?.valueAlign)}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n type={cell?.textFieldType ?? 'text'}\n defaultValue={\n cellValue as string | number | readonly string[] | undefined\n }\n onBlur={(evt) =>\n onBlur?.(\n { ...evt, target: { ...evt.target, value: evt.target.value } },\n rowTabIndex,\n )\n }\n />\n )\n ) : (\n (cellValue as ReactNode)\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n {useTotalCountRow && <Divider sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)} />}\n {useTotalCountRow && (\n <Typography\n className=\"h-[30px] w-full pr-12 my-8\"\n align=\"right\"\n sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}\n >\n 전체: {resolvedRows.length.toLocaleString()} 건\n </Typography>\n )}\n </Paper>\n );\n}\n"],"names":["defaultHeadCellsSx","headerBorderRight","grey","rowBorderRight","defaultSortLabelSx","tableRadiusZeroSx","lastRowRadiusZeroSx","treeGridFontSx","treeGridCellBaseSx","treeGridHeaderCellSx","treeGridSortLabelSx","treeGridBodyCellSx","treeGridFontFaceStyles","mergeSx","__name","styles","acc","style","isArray","getFixedRowCount","fixedRowCount","isNumber","createEmptyRows","count","getTableCellAlign","align","fallback","getRowValue","row","key","getComparableValue","value","descendingComparator","a","b","orderBy","aValue","bValue","getComparator","order","getRowRangeValue","rangeKey","getRangeLabel","cell","rangeValue","_a","_b","_c","_d","getRowTabIndex","fallbackIndex","rowIndex","getEditableCellSx","valueAlign","DataTableHead","props","sx","headCells","onSelectAllClick","numSelected","rowCount","onRequestSort","canCheckbox","canUseOrderBy","canTableRadiusZero","canUseTreeGridStyle","createSortHandler","property","event","TableHead","jsxs","TableRow","jsx","TableCell","Checkbox","checkboxClasses","headCell","index","TableSortLabel","Typography","OwpDataTable","className","headSx","rows","selected","canTotalCountRow","canSelectingSingle","onSelect","onBlur","setOrder","useState","setOrderBy","selectedRows","setSelectedRows","tableIdRef","useRef","uniqueId","useFixedRowCount","useMemo","resolvedRows","nextRows","resolvedHeadCells","useCheckBox","isBoolean","useTotalCountRow","useEffect","isEmpty","handleRequestSort","_","handleSelectAllClick","handleClick","prev","item","isEqual","visibleRows","displayRows","Paper","GlobalStyles","TableContainer","Table","TableBody","isItemSelected","isLastRow","isPlaceholderRow","labelId","cellIndex","_key","rangeLabel","rowTabIndex","cellValue","OwpNumberField","values","floatValue","end","evt","start","nextValue","TextField","Divider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpDataTable.js","sources":["../../../src/components/OwpTable/OwpDataTable.tsx"],"sourcesContent":["import { Divider, TextField, Typography, TypographyProps } from '@mui/material';\nimport Checkbox, { checkboxClasses } from '@mui/material/Checkbox';\nimport { grey } from '@mui/material/colors';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell, { TableCellProps } from '@mui/material/TableCell';\nimport TableContainer, { TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\nimport { SxProps, Theme } from '@mui/material/styles';\nimport { isArray, isBoolean, isEmpty, isEqual, isNumber, uniqueId } from 'es-toolkit/compat';\nimport { ChangeEvent, MouseEvent, ReactNode, useEffect, useMemo, useRef, useState } from 'react';\nimport { OwpNumberField } from '../OwpNumberField';\n\ntype Row = object;\ntype TableCellAlign = NonNullable<TableCellProps['align']>;\n\ninterface HeadCell {\n enablePadding?: boolean;\n id: string;\n label: string;\n sx?: TypographyProps['sx'];\n inputLabel?: string;\n rangeKey?: string;\n rangeLabel?: { start: string; end: string };\n align?: string;\n valueAlign?: string;\n canTextField?: boolean;\n textFieldType?: string;\n}\n\ninterface DataTableHeadProps {\n sx?: TableCellProps['sx'];\n headCells: HeadCell[];\n numSelected: number;\n onRequestSort: (event: MouseEvent<unknown>, property: string) => void;\n onSelectAllClick: (event: ChangeEvent<HTMLInputElement>) => void;\n order: Order;\n orderBy: string;\n rowCount: number;\n canCheckbox?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n}\n\ninterface OwpDataTableProps<T extends Row = Row> {\n className?: string;\n sx?: TableContainerProps['sx'];\n headSx?: TableCellProps['sx'];\n headCells: HeadCell[];\n rows?: T[];\n canCheckbox?: boolean;\n canTotalCountRow?: boolean;\n selected?: T[];\n onSelect?: (rows: T[] | []) => void;\n onBlur?: (evt: OwpDataTableBlurEvent, dataIndex: number) => void;\n canSelectingSingle?: boolean;\n canUseOrderBy?: boolean;\n canTableRadiusZero?: boolean;\n canUseTreeGridStyle?: boolean;\n fixedRowCount?: number;\n}\n\nconst defaultHeadCellsSx = {\n bgcolor: '#586980',\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n} as const;\n\nconst headerBorderRight = {\n borderRight: `1px solid ${grey['A200']}`,\n};\n\nconst rowBorderRight = {\n borderRight: `1px solid ${grey[400]}`,\n};\n\nconst defaultSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: grey['A100'],\n },\n '&.MuiTableSortLabel-root:hover': {\n color: grey['A100'],\n },\n '&.Mui-active': {\n color: grey['A100'],\n },\n '& .MuiTableSortLabel-icon': {\n color: `${grey['A100']} !important`,\n },\n} as const;\n\nconst tableRadiusZeroSx = {\n borderRadius: 0,\n} as const;\n\nconst lastRowRadiusZeroSx = {\n '& > th, & > td': {\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\nconst treeGridCellBaseSx = {\n ...treeGridFontSx,\n boxSizing: 'border-box',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n} as const;\n\nconst treeGridHeaderCellSx = {\n ...treeGridCellBaseSx,\n bgcolor: '#586980',\n borderBottom: '1px solid #6F7F94',\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n p: '7px 2px 6px 10px',\n} as const;\n\nconst treeGridSortLabelSx = {\n '&.MuiTableSortLabel-root': {\n color: 'inherit',\n display: 'flex',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n fontWeight: 'inherit',\n justifyContent: 'center',\n lineHeight: 'inherit',\n overflow: 'hidden',\n position: 'relative',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n width: '100%',\n },\n '&.MuiTableSortLabel-root:hover': {\n color: 'inherit',\n },\n '&.Mui-active': {\n color: 'inherit',\n },\n '& .MuiTableSortLabel-icon': {\n color: 'currentColor !important',\n margin: 0,\n position: 'absolute',\n right: 0,\n },\n} as const;\n\nconst treeGridBodyCellSx = {\n ...treeGridCellBaseSx,\n borderBottom: '1px solid #CDD8E4',\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n p: '7px 10px 6px',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\n/**\n * sx 병합 유틸\n * @param styles 병합 대상 sx 목록\n */\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\n/**\n * 고정 row 수 계산\n * @param fixedRowCount 고정 row 수\n */\nconst getFixedRowCount = (fixedRowCount?: number) => {\n if (!isNumber(fixedRowCount) || fixedRowCount < 1) {\n return undefined;\n }\n\n return fixedRowCount;\n};\n\n/**\n * 빈 row 목록 생성\n * @param count 생성 수\n */\nconst createEmptyRows = (count: number) => Array.from({ length: count }, () => ({}) as Row);\n\n/**\n * TableCell align 정규화\n * @param align align 값\n * @param fallback 기본 align 값\n */\nconst getTableCellAlign = (align: string | undefined, fallback: TableCellAlign): TableCellAlign => {\n switch (align) {\n case 'center':\n case 'right':\n case 'left':\n case 'inherit':\n case 'justify':\n return align;\n default:\n return fallback;\n }\n};\n\n/**\n * row 값 조회\n * @param row row 값\n * @param key 조회 key\n */\nconst getRowValue = (row: Row, key?: string) => {\n if (!key) {\n return undefined;\n }\n\n return (row as Record<string, unknown>)?.[key];\n};\n\nconst getComparableValue = (value: unknown) => {\n if (typeof value === 'string' || isNumber(value)) {\n return value;\n }\n\n return undefined;\n};\n\nfunction descendingComparator(a: Row, b: Row, orderBy: string) {\n const aValue = getComparableValue(getRowValue(a, orderBy));\n const bValue = getComparableValue(getRowValue(b, orderBy));\n\n if (bValue == null && aValue == null) {\n return 0;\n }\n if (bValue == null) {\n return -1;\n }\n if (aValue == null) {\n return 1;\n }\n if (bValue < aValue) {\n return -1;\n }\n if (bValue > aValue) {\n return 1;\n }\n return 0;\n}\n\ntype Order = 'asc' | 'desc';\ntype OwpDataTableBlurEvent = Record<string, unknown> & {\n target: {\n value: string | number | undefined;\n };\n};\n\nfunction getComparator(order: Order, orderBy: string): (a: Row, b: Row) => number {\n return order === 'desc'\n ? (a, b) => descendingComparator(a, b, orderBy)\n : (a, b) => -descendingComparator(a, b, orderBy);\n}\n\ntype RowRangeValue = {\n start?: string | number;\n end?: string | number;\n};\n\nconst getRowRangeValue = (row: Row, rangeKey?: string) => {\n if (!rangeKey) {\n return undefined;\n }\n\n return getRowValue(row, rangeKey) as RowRangeValue | undefined;\n};\n\nconst getRangeLabel = (row: Row, cell: HeadCell) => {\n if (!(cell.inputLabel ?? cell.rangeKey)) {\n return '';\n }\n\n const rangeValue = getRowRangeValue(row, cell.rangeKey);\n\n return `${cell.rangeLabel?.start ? `${cell.rangeLabel?.start}: ` : ''}${rangeValue?.start} ~ ${cell.rangeLabel?.end ? `${cell.rangeLabel?.end}: ` : ''}${rangeValue?.end}`;\n};\n\nconst getRowTabIndex = (row: Row, fallbackIndex: number) => {\n const rowIndex = getRowValue(row, 'index');\n\n return isNumber(rowIndex) ? rowIndex : fallbackIndex;\n};\n\nconst getEditableCellSx = (valueAlign?: HeadCell['valueAlign']) => ({\n '& input': {\n textAlign: valueAlign ?? 'center',\n },\n height: 34,\n});\n\nfunction DataTableHead(props: DataTableHeadProps) {\n const {\n sx,\n headCells,\n onSelectAllClick,\n order,\n orderBy,\n numSelected,\n rowCount,\n onRequestSort,\n canCheckbox,\n canUseOrderBy = true,\n canTableRadiusZero,\n canUseTreeGridStyle,\n } = props;\n const createSortHandler = (property: string) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n <TableRow\n sx={mergeSx(canUseTreeGridStyle && { height: 33 }, canTableRadiusZero && tableRadiusZeroSx)}\n >\n {canCheckbox && (\n <TableCell\n padding=\"checkbox\"\n className=\"text-white\"\n sx={mergeSx(\n {\n ...defaultHeadCellsSx,\n ...headerBorderRight,\n },\n canUseTreeGridStyle && treeGridHeaderCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Checkbox\n color=\"default\"\n sx={mergeSx(\n {\n [`&, &.${checkboxClasses.checked}`]: {\n color: grey[50],\n },\n },\n canUseTreeGridStyle && { p: 0 },\n )}\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={onSelectAllClick}\n />\n </TableCell>\n )}\n {headCells.map((headCell, index) => (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'pl-20'}\n key={headCell.id}\n align={getTableCellAlign(headCell.align, 'center')}\n padding={headCell.enablePadding ? 'normal' : 'none'}\n sortDirection={orderBy === headCell.id ? order : false}\n sx={mergeSx(\n {\n ...defaultHeadCellsSx,\n ...(headCells.length - 1 !== index && headerBorderRight),\n },\n canUseTreeGridStyle && treeGridHeaderCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n canUseTreeGridStyle && headCell?.sx,\n )}\n >\n {canUseOrderBy ? (\n <TableSortLabel\n sx={canUseTreeGridStyle ? treeGridSortLabelSx : defaultSortLabelSx}\n active={orderBy === headCell.id}\n direction={orderBy === headCell.id ? order : 'asc'}\n onClick={createSortHandler(headCell.id)}\n >\n {canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography className=\"text-white text-lg font-medium\" sx={headCell?.sx}>\n {headCell.label}\n </Typography>\n )}\n </TableSortLabel>\n ) : canUseTreeGridStyle ? (\n headCell.label\n ) : (\n <Typography className=\"text-white text-lg font-medium\" sx={headCell?.sx}>\n {headCell.label}\n </Typography>\n )}\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\n/**\n * OwpDataTable 컴포넌트\n * @param className CSS 클래스명\n * @param sx sx 값\n * @param headSx headSx 값\n * @param headCells headCells 값\n * @param rows 행 데이터 목록\n * @param selected selected 값\n * @param canTableRadiusZero 테이블 radius 0 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param fixedRowCount 고정 row 수\n */\nexport function OwpDataTable<T extends Row = Row>({\n className,\n sx,\n headSx,\n headCells,\n rows,\n selected,\n canCheckbox,\n canTotalCountRow,\n canSelectingSingle,\n canUseOrderBy = true,\n canTableRadiusZero = false,\n canUseTreeGridStyle = false,\n fixedRowCount,\n onSelect,\n onBlur,\n}: OwpDataTableProps<T>) {\n const [order, setOrder] = useState<Order>('asc');\n const [orderBy, setOrderBy] = useState<string>('');\n const [selectedRows, setSelectedRows] = useState<T[] | []>([]);\n const tableIdRef = useRef(uniqueId('owp-data-table'));\n const useFixedRowCount = useMemo(() => getFixedRowCount(fixedRowCount), [fixedRowCount]);\n const resolvedRows = useMemo(() => {\n const nextRows = isArray(rows) ? rows : [];\n\n return useFixedRowCount ? nextRows.slice(0, useFixedRowCount) : nextRows;\n }, [rows, useFixedRowCount]);\n const resolvedHeadCells = useMemo(() => headCells ?? [], [headCells]);\n const useCheckBox = isBoolean(canCheckbox) ? canCheckbox : true;\n const useTotalCountRow = isBoolean(canTotalCountRow) ? canTotalCountRow : true;\n\n useEffect(() => {\n if (!isEmpty(selected)) {\n setSelectedRows(selected);\n }\n }, [selected]);\n\n useEffect(() => {\n onSelect?.(selectedRows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedRows]);\n\n const handleRequestSort = (_: MouseEvent<unknown>, property: string) => {\n const isAsc = orderBy === property && order === 'asc';\n setOrder(isAsc ? 'desc' : 'asc');\n setOrderBy(property);\n };\n\n const handleSelectAllClick = (event: ChangeEvent<HTMLInputElement>) => {\n if (event.target.checked) {\n setSelectedRows(resolvedRows);\n return;\n }\n setSelectedRows([]);\n };\n\n const handleClick = (_: MouseEvent<unknown>, row: T) => {\n if (canSelectingSingle) {\n setSelectedRows([row]);\n return;\n }\n setSelectedRows((prev: T[]) => {\n const isIncluded = !!prev.find((item) => isEqual(item, row));\n return isIncluded ? prev?.filter((item: T) => !isEqual(item, row)) : [...prev, row];\n });\n };\n\n const visibleRows = useMemo(\n () => [...resolvedRows].sort(getComparator(order, orderBy)),\n [order, orderBy, resolvedRows],\n );\n const displayRows = useMemo(() => {\n if (!useFixedRowCount || visibleRows.length >= useFixedRowCount) {\n return visibleRows;\n }\n\n return [...visibleRows, ...createEmptyRows(useFixedRowCount - visibleRows.length)];\n }, [useFixedRowCount, visibleRows]);\n\n return (\n <Paper\n className={className}\n sx={mergeSx({ width: '100%' }, canTableRadiusZero && tableRadiusZeroSx)}\n >\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n sx={mergeSx(\n { height: useFixedRowCount ? 'auto' : 500, borderRadius: 2 },\n useFixedRowCount && { overflowY: 'hidden' },\n canTableRadiusZero && tableRadiusZeroSx,\n sx,\n )}\n >\n <Table\n stickyHeader={!canUseTreeGridStyle}\n sx={mergeSx({ minWidth: 200 }, canTableRadiusZero && tableRadiusZeroSx)}\n aria-labelledby=\"owp-data-table\"\n >\n <DataTableHead\n sx={headSx}\n headCells={resolvedHeadCells}\n numSelected={selectedRows.length}\n order={order}\n orderBy={orderBy}\n onSelectAllClick={handleSelectAllClick}\n canCheckbox={!canSelectingSingle && useCheckBox}\n canUseOrderBy={canUseOrderBy}\n canTableRadiusZero={canTableRadiusZero}\n canUseTreeGridStyle={canUseTreeGridStyle}\n onRequestSort={handleRequestSort}\n rowCount={resolvedRows.length}\n />\n <TableBody sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}>\n {displayRows.map((row, index) => {\n const isItemSelected = selectedRows.some((item) => isEqual(item, row));\n const isLastRow = displayRows.length - 1 === index;\n const isPlaceholderRow = useFixedRowCount ? index >= visibleRows.length : false;\n const labelId = `${tableIdRef.current}-${index}`;\n\n return (\n <TableRow\n hover\n role={canUseTreeGridStyle ? undefined : 'checkbox'}\n aria-checked={canUseTreeGridStyle ? undefined : isItemSelected}\n tabIndex={-1}\n key={`${labelId}-row-${index}`}\n selected={isItemSelected}\n sx={mergeSx(\n { cursor: isPlaceholderRow ? 'default' : 'pointer' },\n canUseTreeGridStyle && { height: 30 },\n canTableRadiusZero && tableRadiusZeroSx,\n canTableRadiusZero && isLastRow && lastRowRadiusZeroSx,\n )}\n >\n {useCheckBox && (\n <TableCell\n padding=\"checkbox\"\n onClick={(event) => {\n if (!isPlaceholderRow) {\n handleClick(event, row as T);\n }\n }}\n sx={mergeSx(\n rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n <Checkbox\n color=\"default\"\n checked={isItemSelected}\n disabled={isPlaceholderRow}\n sx={mergeSx(canUseTreeGridStyle && { p: 0 })}\n />\n </TableCell>\n )}\n {resolvedHeadCells.map((cell, cellIndex) => {\n const _key = `${labelId}-row-${index}-cell-${cellIndex}`;\n const rangeLabel = getRangeLabel(row, cell);\n const rowTabIndex = getRowTabIndex(row, index);\n const cellValue = getRowValue(row, String(cell?.id));\n if (cellIndex === 0) {\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n component={canUseTreeGridStyle ? 'td' : 'th'}\n id={labelId}\n scope={canUseTreeGridStyle ? undefined : 'row'}\n padding=\"none\"\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n resolvedHeadCells.length > 1 && rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cellValue as ReactNode}\n </TableCell>\n );\n }\n\n return (\n <TableCell\n className={canUseTreeGridStyle ? undefined : 'px-4'}\n key={_key}\n role={canUseTreeGridStyle ? 'cell' : undefined}\n align={getTableCellAlign(cell.valueAlign, 'left')}\n sx={mergeSx(\n resolvedHeadCells.length - 1 !== cellIndex && rowBorderRight,\n canUseTreeGridStyle && treeGridBodyCellSx,\n canTableRadiusZero && tableRadiusZeroSx,\n )}\n >\n {cell?.canTextField ? (\n cell?.textFieldType === 'number' ? (\n <OwpNumberField\n variant=\"standard\"\n decimalScale={2}\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(cell?.valueAlign)}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n isAllowed={(values) => {\n const { floatValue } = values;\n const end = getRowRangeValue(row, cell?.rangeKey)?.end;\n\n if (isNumber(floatValue) && isNumber(end)) {\n return floatValue <= end;\n }\n\n return true;\n }}\n value={cellValue as string | number | undefined}\n onBlur={(evt) => {\n const start = getRowRangeValue(row, cell?.rangeKey)?.start;\n const nextValue = evt.target.value?.replace(/,/g, '');\n\n onBlur?.(\n {\n ...evt,\n target: {\n ...evt.target,\n value:\n isNumber(start) && nextValue !== ''\n ? Number(start > Number(nextValue) ? start : nextValue)\n : nextValue,\n },\n },\n rowTabIndex,\n );\n }}\n />\n ) : (\n <TextField\n variant=\"standard\"\n label={rangeLabel}\n fullWidth\n size=\"small\"\n sx={getEditableCellSx(cell?.valueAlign)}\n slotProps={{\n input: {\n tabIndex: rowTabIndex,\n },\n inputLabel: {\n shrink: true,\n },\n }}\n type={cell?.textFieldType ?? 'text'}\n defaultValue={\n cellValue as string | number | readonly string[] | undefined\n }\n onBlur={(evt) =>\n onBlur?.(\n { ...evt, target: { ...evt.target, value: evt.target.value } },\n rowTabIndex,\n )\n }\n />\n )\n ) : (\n (cellValue as ReactNode)\n )}\n </TableCell>\n );\n })}\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </TableContainer>\n {useTotalCountRow && <Divider sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)} />}\n {useTotalCountRow && (\n <Typography\n className=\"w-full py-8 pr-12\"\n align=\"right\"\n sx={mergeSx(canTableRadiusZero && tableRadiusZeroSx)}\n >\n 전체: {resolvedRows.length.toLocaleString()} 건\n </Typography>\n )}\n </Paper>\n );\n}\n"],"names":["defaultHeadCellsSx","headerBorderRight","grey","rowBorderRight","defaultSortLabelSx","tableRadiusZeroSx","lastRowRadiusZeroSx","treeGridFontSx","treeGridCellBaseSx","treeGridHeaderCellSx","treeGridSortLabelSx","treeGridBodyCellSx","treeGridFontFaceStyles","mergeSx","__name","styles","acc","style","isArray","getFixedRowCount","fixedRowCount","isNumber","createEmptyRows","count","getTableCellAlign","align","fallback","getRowValue","row","key","getComparableValue","value","descendingComparator","a","b","orderBy","aValue","bValue","getComparator","order","getRowRangeValue","rangeKey","getRangeLabel","cell","rangeValue","_a","_b","_c","_d","getRowTabIndex","fallbackIndex","rowIndex","getEditableCellSx","valueAlign","DataTableHead","props","sx","headCells","onSelectAllClick","numSelected","rowCount","onRequestSort","canCheckbox","canUseOrderBy","canTableRadiusZero","canUseTreeGridStyle","createSortHandler","property","event","TableHead","jsxs","TableRow","jsx","TableCell","Checkbox","checkboxClasses","headCell","index","TableSortLabel","Typography","OwpDataTable","className","headSx","rows","selected","canTotalCountRow","canSelectingSingle","onSelect","onBlur","setOrder","useState","setOrderBy","selectedRows","setSelectedRows","tableIdRef","useRef","uniqueId","useFixedRowCount","useMemo","resolvedRows","nextRows","resolvedHeadCells","useCheckBox","isBoolean","useTotalCountRow","useEffect","isEmpty","handleRequestSort","_","handleSelectAllClick","handleClick","prev","item","isEqual","visibleRows","displayRows","Paper","GlobalStyles","TableContainer","Table","TableBody","isItemSelected","isLastRow","isPlaceholderRow","labelId","cellIndex","_key","rangeLabel","rowTabIndex","cellValue","OwpNumberField","values","floatValue","end","evt","start","nextValue","TextField","Divider"],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ import { useMemo as u } from "react";
|
|
|
15
15
|
import { isNumber as B } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isNumber.js";
|
|
16
16
|
import { isArray as c } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isArray.js";
|
|
17
17
|
import { isEmpty as W } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isEmpty.js";
|
|
18
|
-
const
|
|
18
|
+
const g = /* @__PURE__ */ l((t) => t ? Object.keys(t).filter((o) => !o.includes("Span")) : [], "getTableColumnKeys"), x = /* @__PURE__ */ l((t, o) => t[`${o}Sx`] ?? {}, "getTableCellSx"), w = /* @__PURE__ */ l((t, o, r) => t[`${o}${r}`] ?? void 0, "getTableCellSpan"), A = /* @__PURE__ */ l((...t) => t.reduce((o, r) => r ? [...o, ...c(r) ? r : [r]] : o, []), "mergeSx"), H = {
|
|
19
19
|
border: 0,
|
|
20
20
|
borderRadius: 0,
|
|
21
21
|
overflow: "visible"
|
|
@@ -35,7 +35,7 @@ const x = /* @__PURE__ */ l((t) => t ? Object.keys(t).filter((o) => !o.includes(
|
|
|
35
35
|
function I({ totalCount: t }) {
|
|
36
36
|
return /* @__PURE__ */ f(y, { children: [
|
|
37
37
|
/* @__PURE__ */ e(L, {}),
|
|
38
|
-
/* @__PURE__ */ f(v, { className: "
|
|
38
|
+
/* @__PURE__ */ f(v, { className: "w-full py-8 pr-12", align: "right", children: [
|
|
39
39
|
"전체: ",
|
|
40
40
|
B(t) ? t.toLocaleString() : 0,
|
|
41
41
|
" 건"
|
|
@@ -169,7 +169,7 @@ function lo({
|
|
|
169
169
|
() => c(o) ? o : W(o) ? [] : [o],
|
|
170
170
|
[o]
|
|
171
171
|
), b = u(
|
|
172
|
-
() =>
|
|
172
|
+
() => g(c(o) ? o[0] : o),
|
|
173
173
|
[o]
|
|
174
174
|
);
|
|
175
175
|
return /* @__PURE__ */ f(
|
|
@@ -179,11 +179,11 @@ function lo({
|
|
|
179
179
|
footerSlot: t ? /* @__PURE__ */ e(I, { totalCount: typeof a > "u" ? r.length : a }) : void 0,
|
|
180
180
|
className: C(n.tableLayout && "w-full", n.className),
|
|
181
181
|
children: [
|
|
182
|
-
/* @__PURE__ */ e(j, { children: s.map((i, d) => /* @__PURE__ */ e(T, { children:
|
|
182
|
+
/* @__PURE__ */ e(j, { children: s.map((i, d) => /* @__PURE__ */ e(T, { children: g(i).map((p) => /* @__PURE__ */ e(
|
|
183
183
|
h,
|
|
184
184
|
{
|
|
185
185
|
className: "whitespace-pre-wrap",
|
|
186
|
-
sx:
|
|
186
|
+
sx: x(i, p),
|
|
187
187
|
colSpan: w(i, p, "ColSpan"),
|
|
188
188
|
rowSpan: w(i, p, "RowSpan"),
|
|
189
189
|
align: "center",
|
|
@@ -197,7 +197,7 @@ function lo({
|
|
|
197
197
|
h,
|
|
198
198
|
{
|
|
199
199
|
className: "whitespace-pre-wrap h-64",
|
|
200
|
-
sx:
|
|
200
|
+
sx: x(p, m),
|
|
201
201
|
align: "center",
|
|
202
202
|
children: p[m]
|
|
203
203
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpTable.js","sources":["../../../src/components/OwpTable/OwpTable.tsx"],"sourcesContent":["import { Divider, styled, Typography, type SxProps, type Theme } from '@mui/material';\nimport clsx from 'clsx';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table, { type TableProps } from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer, { type TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { isArray, isEmpty, isNumber } from 'es-toolkit/compat';\nimport { type ReactNode, useMemo } from 'react';\n\ntype OwpTableCellValue = string | number;\ntype OwpTableHeaderRow = Record<string, OwpTableCellValue>;\ntype OwpTableRowData = Record<string, unknown>;\n\nconst getTableColumnKeys = (row?: Record<string, unknown>) => {\n if (!row) {\n return [];\n }\n\n return Object.keys(row).filter((keyName) => !keyName.includes('Span'));\n};\n\nconst getTableCellSx = (row: Record<string, unknown>, keyName: string) => {\n return (row[`${keyName}Sx`] as SxProps<Theme>) ?? {};\n};\n\nconst getTableCellSpan = (\n row: Record<string, unknown>,\n keyName: string,\n spanType: 'ColSpan' | 'RowSpan',\n) => {\n return (row[`${keyName}${spanType}`] as number | undefined) ?? undefined;\n};\n\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\nconst treeGridContainerSx = {\n border: 0,\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\ninterface StyledTableProps extends TableProps {\n canBodyFullHeight?: boolean;\n canUseTreeGridStyle?: boolean;\n containerProps?: TableContainerProps;\n footerSlot?: ReactNode;\n tableLayout?: 'auto' | 'fixed';\n title?: string;\n children: ReactNode;\n}\n\ntype StyledTableInnerProps = Pick<StyledTableProps, 'canBodyFullHeight' | 'canUseTreeGridStyle'>;\n\n/**\n * 총 row 수 표시 영역\n * @param totalCount 전체 row 수\n */\nexport function OwpTableTotalCount({ totalCount }: { totalCount?: number }) {\n return (\n <>\n <Divider />\n <Typography className=\"h-[30px] w-full pr-12 my-8\" align=\"right\">\n 전체: {isNumber(totalCount) ? totalCount.toLocaleString() : 0} 건\n </Typography>\n </>\n );\n}\n\n/**\n * StyledTable 스타일 컴포넌트\n * @param canBodyFullHeight body full height 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param children 하위 콘텐츠\n * @param containerProps containerProps props\n * @param footerSlot footer 영역\n * @param tableLayout tableLayout 값\n */\nexport const StyledTable = ({\n canBodyFullHeight,\n canUseTreeGridStyle,\n children,\n className,\n containerProps,\n footerSlot,\n tableLayout,\n ...tableProps\n}: StyledTableProps) => {\n return (\n <>\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n component={Paper}\n variant=\"outlined\"\n {...containerProps}\n sx={mergeSx(\n canUseTreeGridStyle && treeGridContainerSx,\n canBodyFullHeight && { height: '100%' },\n containerProps?.sx,\n )}\n >\n <StyledTableInner\n {...tableProps}\n canBodyFullHeight={canBodyFullHeight}\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx(\n canBodyFullHeight && 'h-full',\n tableLayout === 'fixed' ? 'table-fixed' : tableLayout === 'auto' ? 'table-auto' : '',\n className,\n )}\n >\n {children}\n </StyledTableInner>\n {footerSlot}\n </TableContainer>\n </>\n );\n};\n\nconst StyledTableInner = styled(Table, {\n shouldForwardProp: (prop) => prop !== 'canBodyFullHeight' && prop !== 'canUseTreeGridStyle',\n})<StyledTableInnerProps>(({ theme, canBodyFullHeight, canUseTreeGridStyle }) => ({\n ...(canBodyFullHeight && {\n height: '100%',\n }),\n ...(canBodyFullHeight && {\n '& .MuiTableBody-root': {\n height: '100%',\n },\n '& .MuiTableBody-root > .MuiTableRow-root': {\n height: '100%',\n },\n }),\n '& .MuiTableCell-root': canUseTreeGridStyle\n ? {\n boxSizing: 'border-box',\n ...treeGridFontSx,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n }\n : {\n fontSize: '1.7rem',\n padding: '7px 10px',\n borderLeft: 'none',\n borderRight: 'none',\n },\n ...(!canUseTreeGridStyle && {\n '& .MuiTableRow-root > .MuiTableCell-root + .MuiTableCell-root': {\n borderLeft: `1px solid ${theme.palette.divider}`,\n },\n }),\n '& th': canUseTreeGridStyle\n ? {\n ...treeGridFontSx,\n backgroundColor: '#586980',\n borderTop: '1px solid #6F7F94',\n borderBottom: '1px solid #6F7F94',\n borderLeft: 0,\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n padding: '7px 2px 6px 10px',\n '&:first-of-type': {\n borderLeft: '1px solid #6F7F94',\n },\n }\n : {\n backgroundColor: theme.palette.grey[200],\n fontWeight: 600,\n },\n '& td': canUseTreeGridStyle\n ? {\n borderBottom: '1px solid #CDD8E4',\n borderLeft: 0,\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n padding: '7px 10px 6px',\n '&:first-of-type': {\n borderLeft: '1px solid #CDD8E4',\n },\n }\n : {},\n ...(canUseTreeGridStyle && {\n '& tbody > tr:first-of-type > th:first-of-type': {\n borderTopLeftRadius: 'inherit',\n },\n '& tbody > tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: 'inherit',\n },\n }),\n}));\n\nexport const StyledTableRow = styled(TableRow)`\n /* &:last-child th,\n &:last-child td {\n border-bottom: 0;\n } */\n`;\n\ninterface OwpTableProps<T> extends Omit<StyledTableProps, 'children'> {\n canTotalCountRow?: boolean;\n headers: OwpTableHeaderRow | OwpTableHeaderRow[];\n rows: T[];\n totalCount?: number;\n}\n\n/**\n * OwpTable 컴포넌트\n * @param canTotalCountRow 전체 row 수 표시 여부\n * @param headers headers 값\n * @param rows 행 데이터 목록\n * @param totalCount 전체 row 수\n */\nexport function OwpTable<T>({\n canTotalCountRow = false,\n headers,\n rows,\n totalCount,\n ...restTableProps\n}: OwpTableProps<T>) {\n const resolvedHeaderRows = useMemo(\n () => (isArray(headers) ? headers : isEmpty(headers) ? [] : [headers]),\n [headers],\n );\n const commonKeyListData = useMemo(\n () => getTableColumnKeys(isArray(headers) ? headers[0] : headers),\n [headers],\n );\n\n return (\n <StyledTable\n {...restTableProps}\n footerSlot={\n canTotalCountRow ? (\n <OwpTableTotalCount totalCount={typeof totalCount === 'undefined' ? rows.length : totalCount} />\n ) : undefined\n }\n className={clsx(restTableProps.tableLayout && 'w-full', restTableProps.className)}\n >\n <TableHead>\n {resolvedHeaderRows.map((headerData, index) => (\n <StyledTableRow key={`table-header-${index}`}>\n {getTableColumnKeys(headerData).map((keyName) => (\n <TableCell\n key={`table-header-${index}-${keyName}`}\n className=\"whitespace-pre-wrap\"\n sx={getTableCellSx(headerData, keyName)}\n colSpan={getTableCellSpan(headerData, keyName, 'ColSpan')}\n rowSpan={getTableCellSpan(headerData, keyName, 'RowSpan')}\n align=\"center\"\n >\n {headerData[keyName]}\n </TableCell>\n ))}\n </StyledTableRow>\n ))}\n </TableHead>\n <TableBody>\n {rows.map((row, index) => {\n const currentRow = row as OwpTableRowData;\n\n return (\n <StyledTableRow key={`table-row-${index}`}>\n {commonKeyListData.map((keyName) => (\n <TableCell\n key={`table-row-cell-${index}-${keyName}`}\n className=\"whitespace-pre-wrap h-64\"\n sx={getTableCellSx(currentRow, keyName)}\n align=\"center\"\n >\n {currentRow[keyName] as ReactNode}\n </TableCell>\n ))}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["getTableColumnKeys","__name","row","keyName","getTableCellSx","getTableCellSpan","spanType","mergeSx","styles","acc","style","isArray","treeGridContainerSx","treeGridFontFaceStyles","treeGridFontSx","OwpTableTotalCount","totalCount","jsxs","Fragment","jsx","Divider","Typography","isNumber","StyledTable","canBodyFullHeight","canUseTreeGridStyle","children","className","containerProps","footerSlot","tableLayout","tableProps","GlobalStyles","TableContainer","Paper","StyledTableInner","clsx","styled","Table","prop","theme","StyledTableRow","TableRow","OwpTable","canTotalCountRow","headers","rows","restTableProps","resolvedHeaderRows","useMemo","isEmpty","commonKeyListData","TableHead","headerData","index","TableCell","TableBody","currentRow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OwpTable.js","sources":["../../../src/components/OwpTable/OwpTable.tsx"],"sourcesContent":["import { Divider, styled, Typography, type SxProps, type Theme } from '@mui/material';\nimport clsx from 'clsx';\nimport GlobalStyles from '@mui/material/GlobalStyles';\nimport Paper from '@mui/material/Paper';\nimport Table, { type TableProps } from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer, { type TableContainerProps } from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { isArray, isEmpty, isNumber } from 'es-toolkit/compat';\nimport { type ReactNode, useMemo } from 'react';\n\ntype OwpTableCellValue = string | number;\ntype OwpTableHeaderRow = Record<string, OwpTableCellValue>;\ntype OwpTableRowData = Record<string, unknown>;\n\nconst getTableColumnKeys = (row?: Record<string, unknown>) => {\n if (!row) {\n return [];\n }\n\n return Object.keys(row).filter((keyName) => !keyName.includes('Span'));\n};\n\nconst getTableCellSx = (row: Record<string, unknown>, keyName: string) => {\n return (row[`${keyName}Sx`] as SxProps<Theme>) ?? {};\n};\n\nconst getTableCellSpan = (\n row: Record<string, unknown>,\n keyName: string,\n spanType: 'ColSpan' | 'RowSpan',\n) => {\n return (row[`${keyName}${spanType}`] as number | undefined) ?? undefined;\n};\n\nconst mergeSx = (...styles: Array<SxProps<Theme> | undefined | false>): SxProps<Theme> =>\n styles.reduce<Array<Exclude<SxProps<Theme>, readonly unknown[]>>>((acc, style) => {\n if (!style) {\n return acc;\n }\n\n return [...acc, ...(isArray(style) ? style : [style])];\n }, []) as SxProps<Theme>;\n\nconst treeGridContainerSx = {\n border: 0,\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFontFaceStyles = {\n '@font-face': {\n fontFamily: 'RobotoLight',\n fontStyle: 'normal',\n fontWeight: 'normal',\n src: \"url('/assets/vendors/Grid/Styles/Roboto-Light.ttf') format('truetype')\",\n },\n} as const;\n\nconst treeGridFontSx = {\n fontFamily: 'RobotoLight, sans-serif',\n fontSize: '14px',\n fontWeight: 'normal',\n lineHeight: '16px',\n} as const;\n\ninterface StyledTableProps extends TableProps {\n canBodyFullHeight?: boolean;\n canUseTreeGridStyle?: boolean;\n containerProps?: TableContainerProps;\n footerSlot?: ReactNode;\n tableLayout?: 'auto' | 'fixed';\n title?: string;\n children: ReactNode;\n}\n\ntype StyledTableInnerProps = Pick<StyledTableProps, 'canBodyFullHeight' | 'canUseTreeGridStyle'>;\n\n/**\n * 총 row 수 표시 영역\n * @param totalCount 전체 row 수\n */\nexport function OwpTableTotalCount({ totalCount }: { totalCount?: number }) {\n return (\n <>\n <Divider />\n <Typography className=\"w-full py-8 pr-12\" align=\"right\">\n 전체: {isNumber(totalCount) ? totalCount.toLocaleString() : 0} 건\n </Typography>\n </>\n );\n}\n\n/**\n * StyledTable 스타일 컴포넌트\n * @param canBodyFullHeight body full height 사용 여부\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n * @param children 하위 콘텐츠\n * @param containerProps containerProps props\n * @param footerSlot footer 영역\n * @param tableLayout tableLayout 값\n */\nexport const StyledTable = ({\n canBodyFullHeight,\n canUseTreeGridStyle,\n children,\n className,\n containerProps,\n footerSlot,\n tableLayout,\n ...tableProps\n}: StyledTableProps) => {\n return (\n <>\n {canUseTreeGridStyle && <GlobalStyles styles={treeGridFontFaceStyles} />}\n <TableContainer\n component={Paper}\n variant=\"outlined\"\n {...containerProps}\n sx={mergeSx(\n canUseTreeGridStyle && treeGridContainerSx,\n canBodyFullHeight && { height: '100%' },\n containerProps?.sx,\n )}\n >\n <StyledTableInner\n {...tableProps}\n canBodyFullHeight={canBodyFullHeight}\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx(\n canBodyFullHeight && 'h-full',\n tableLayout === 'fixed' ? 'table-fixed' : tableLayout === 'auto' ? 'table-auto' : '',\n className,\n )}\n >\n {children}\n </StyledTableInner>\n {footerSlot}\n </TableContainer>\n </>\n );\n};\n\nconst StyledTableInner = styled(Table, {\n shouldForwardProp: (prop) => prop !== 'canBodyFullHeight' && prop !== 'canUseTreeGridStyle',\n})<StyledTableInnerProps>(({ theme, canBodyFullHeight, canUseTreeGridStyle }) => ({\n ...(canBodyFullHeight && {\n height: '100%',\n }),\n ...(canBodyFullHeight && {\n '& .MuiTableBody-root': {\n height: '100%',\n },\n '& .MuiTableBody-root > .MuiTableRow-root': {\n height: '100%',\n },\n }),\n '& .MuiTableCell-root': canUseTreeGridStyle\n ? {\n boxSizing: 'border-box',\n ...treeGridFontSx,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n whiteSpace: 'nowrap',\n }\n : {\n fontSize: '1.7rem',\n padding: '7px 10px',\n borderLeft: 'none',\n borderRight: 'none',\n },\n ...(!canUseTreeGridStyle && {\n '& .MuiTableRow-root > .MuiTableCell-root + .MuiTableCell-root': {\n borderLeft: `1px solid ${theme.palette.divider}`,\n },\n }),\n '& th': canUseTreeGridStyle\n ? {\n ...treeGridFontSx,\n backgroundColor: '#586980',\n borderTop: '1px solid #6F7F94',\n borderBottom: '1px solid #6F7F94',\n borderLeft: 0,\n borderRight: '1px solid #6F7F94',\n color: 'white',\n height: 33,\n minHeight: 33,\n padding: '7px 2px 6px 10px',\n '&:first-of-type': {\n borderLeft: '1px solid #6F7F94',\n },\n }\n : {\n backgroundColor: theme.palette.grey[200],\n fontWeight: 600,\n },\n '& td': canUseTreeGridStyle\n ? {\n borderBottom: '1px solid #CDD8E4',\n borderLeft: 0,\n borderRight: '1px solid #CDD8E4',\n color: '#111112',\n padding: '7px 10px 6px',\n '&:first-of-type': {\n borderLeft: '1px solid #CDD8E4',\n },\n }\n : {},\n ...(canUseTreeGridStyle && {\n '& tbody > tr:first-of-type > th:first-of-type': {\n borderTopLeftRadius: 'inherit',\n },\n '& tbody > tr:first-of-type > td:last-of-type': {\n borderTopRightRadius: 'inherit',\n },\n }),\n}));\n\nexport const StyledTableRow = styled(TableRow)`\n /* &:last-child th,\n &:last-child td {\n border-bottom: 0;\n } */\n`;\n\ninterface OwpTableProps<T> extends Omit<StyledTableProps, 'children'> {\n canTotalCountRow?: boolean;\n headers: OwpTableHeaderRow | OwpTableHeaderRow[];\n rows: T[];\n totalCount?: number;\n}\n\n/**\n * OwpTable 컴포넌트\n * @param canTotalCountRow 전체 row 수 표시 여부\n * @param headers headers 값\n * @param rows 행 데이터 목록\n * @param totalCount 전체 row 수\n */\nexport function OwpTable<T>({\n canTotalCountRow = false,\n headers,\n rows,\n totalCount,\n ...restTableProps\n}: OwpTableProps<T>) {\n const resolvedHeaderRows = useMemo(\n () => (isArray(headers) ? headers : isEmpty(headers) ? [] : [headers]),\n [headers],\n );\n const commonKeyListData = useMemo(\n () => getTableColumnKeys(isArray(headers) ? headers[0] : headers),\n [headers],\n );\n\n return (\n <StyledTable\n {...restTableProps}\n footerSlot={\n canTotalCountRow ? (\n <OwpTableTotalCount totalCount={typeof totalCount === 'undefined' ? rows.length : totalCount} />\n ) : undefined\n }\n className={clsx(restTableProps.tableLayout && 'w-full', restTableProps.className)}\n >\n <TableHead>\n {resolvedHeaderRows.map((headerData, index) => (\n <StyledTableRow key={`table-header-${index}`}>\n {getTableColumnKeys(headerData).map((keyName) => (\n <TableCell\n key={`table-header-${index}-${keyName}`}\n className=\"whitespace-pre-wrap\"\n sx={getTableCellSx(headerData, keyName)}\n colSpan={getTableCellSpan(headerData, keyName, 'ColSpan')}\n rowSpan={getTableCellSpan(headerData, keyName, 'RowSpan')}\n align=\"center\"\n >\n {headerData[keyName]}\n </TableCell>\n ))}\n </StyledTableRow>\n ))}\n </TableHead>\n <TableBody>\n {rows.map((row, index) => {\n const currentRow = row as OwpTableRowData;\n\n return (\n <StyledTableRow key={`table-row-${index}`}>\n {commonKeyListData.map((keyName) => (\n <TableCell\n key={`table-row-cell-${index}-${keyName}`}\n className=\"whitespace-pre-wrap h-64\"\n sx={getTableCellSx(currentRow, keyName)}\n align=\"center\"\n >\n {currentRow[keyName] as ReactNode}\n </TableCell>\n ))}\n </StyledTableRow>\n );\n })}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["getTableColumnKeys","__name","row","keyName","getTableCellSx","getTableCellSpan","spanType","mergeSx","styles","acc","style","isArray","treeGridContainerSx","treeGridFontFaceStyles","treeGridFontSx","OwpTableTotalCount","totalCount","jsxs","Fragment","jsx","Divider","Typography","isNumber","StyledTable","canBodyFullHeight","canUseTreeGridStyle","children","className","containerProps","footerSlot","tableLayout","tableProps","GlobalStyles","TableContainer","Paper","StyledTableInner","clsx","styled","Table","prop","theme","StyledTableRow","TableRow","OwpTable","canTotalCountRow","headers","rows","restTableProps","resolvedHeaderRows","useMemo","isEmpty","commonKeyListData","TableHead","headerData","index","TableCell","TableBody","currentRow"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
import { jsxs as
|
|
4
|
-
import { TableCell as
|
|
5
|
-
import { clsx as
|
|
6
|
-
import
|
|
7
|
-
import { Fragment as
|
|
8
|
-
import { StyledTableRow as
|
|
9
|
-
import { isNaN as
|
|
10
|
-
import { toNumber as
|
|
11
|
-
const y = 28,
|
|
1
|
+
var D = Object.defineProperty;
|
|
2
|
+
var o = (r, e) => D(r, "name", { value: e, configurable: !0 });
|
|
3
|
+
import { jsxs as f, jsx as s } from "../../node_modules/.pnpm/@emotion_react@11.14.0_@types_react@19.2.14_react@19.2.4/node_modules/@emotion/react/jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js";
|
|
4
|
+
import { TableCell as u, TableBody as x, Checkbox as S } from "@mui/material";
|
|
5
|
+
import { clsx as T } from "../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js";
|
|
6
|
+
import N from "dayjs";
|
|
7
|
+
import { Fragment as H } from "react";
|
|
8
|
+
import { StyledTableRow as M, StyledTable as c } from "./OwpTable.js";
|
|
9
|
+
import { isNaN as k } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/predicate/isNaN.js";
|
|
10
|
+
import { toNumber as F } from "../../node_modules/.pnpm/es-toolkit@1.39.10/node_modules/es-toolkit/dist/compat/util/toNumber.js";
|
|
11
|
+
const y = 28, V = {
|
|
12
12
|
"&&": {
|
|
13
13
|
fontFamily: "inherit",
|
|
14
14
|
fontSize: "1.7rem",
|
|
@@ -17,78 +17,80 @@ const y = 28, F = {
|
|
|
17
17
|
minHeight: "unset",
|
|
18
18
|
padding: "7px 10px"
|
|
19
19
|
}
|
|
20
|
-
},
|
|
20
|
+
}, E = {
|
|
21
21
|
borderRadius: 0,
|
|
22
22
|
overflow: "visible"
|
|
23
|
-
},
|
|
23
|
+
}, h = {
|
|
24
24
|
borderTop: "1px solid #CDD8E4"
|
|
25
|
-
},
|
|
26
|
-
const
|
|
25
|
+
}, j = /* @__PURE__ */ o((r, e) => r == null ? void 0 : r[e], "getVerticalTableValue"), z = /* @__PURE__ */ o((r, e) => typeof e == "function" ? e(r) : k(F(r)) ? r === "Y" : !!Number(r), "getCheckboxChecked"), B = /* @__PURE__ */ o((r) => r.withTime ? "YYYY-MM-DD HH:mm" : r.withTimeAndSec ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD", "getDateFormat"), L = /* @__PURE__ */ o((r, e, m) => {
|
|
26
|
+
const i = j(e, r.key);
|
|
27
27
|
return typeof r.render == "function" ? r.render() : r.useCheckbox ? /* @__PURE__ */ s(
|
|
28
|
-
|
|
28
|
+
S,
|
|
29
29
|
{
|
|
30
|
-
checked:
|
|
31
|
-
sx: { "& .MuiSvgIcon-root": { fontSize: (
|
|
30
|
+
checked: z(i, r.validate),
|
|
31
|
+
sx: { "& .MuiSvgIcon-root": { fontSize: (m == null ? void 0 : m.fontSize) ?? y } }
|
|
32
32
|
}
|
|
33
|
-
) : r.useDate ?
|
|
33
|
+
) : r.useDate ? i && N(i).format(B(r)) : r.disableLocaleString ? i : i == null ? void 0 : i.toLocaleString();
|
|
34
34
|
}, "renderVerticalTableCellValue");
|
|
35
|
-
function
|
|
35
|
+
function W({
|
|
36
36
|
layout: r,
|
|
37
|
-
titleWidth:
|
|
38
|
-
titleSx:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
titleWidth: e,
|
|
38
|
+
titleSx: m,
|
|
39
|
+
treeGridTitleCellSx: i,
|
|
40
|
+
cellSx: a,
|
|
41
|
+
data: d,
|
|
42
|
+
colGroupSlot: b,
|
|
43
|
+
className: w,
|
|
44
|
+
tableLayout: Y = "fixed",
|
|
45
|
+
canUseTreeGridStyle: n = !1
|
|
45
46
|
}) {
|
|
46
|
-
return /* @__PURE__ */
|
|
47
|
-
|
|
47
|
+
return /* @__PURE__ */ f(
|
|
48
|
+
c,
|
|
48
49
|
{
|
|
49
|
-
canUseTreeGridStyle:
|
|
50
|
-
className:
|
|
51
|
-
containerProps: { sx:
|
|
52
|
-
tableLayout:
|
|
50
|
+
canUseTreeGridStyle: n,
|
|
51
|
+
className: T("w-full", w),
|
|
52
|
+
containerProps: { sx: n ? E : void 0 },
|
|
53
|
+
tableLayout: Y,
|
|
53
54
|
children: [
|
|
54
|
-
|
|
55
|
-
/* @__PURE__ */ s(
|
|
55
|
+
b,
|
|
56
|
+
/* @__PURE__ */ s(x, { children: r.map((C, p) => /* @__PURE__ */ s(M, { children: C.map((t, g) => /* @__PURE__ */ f(H, { children: [
|
|
56
57
|
/* @__PURE__ */ s(
|
|
57
|
-
|
|
58
|
+
u,
|
|
58
59
|
{
|
|
59
60
|
component: "th",
|
|
60
61
|
className: "whitespace-pre-wrap",
|
|
61
|
-
width:
|
|
62
|
+
width: e ?? 200,
|
|
62
63
|
sx: {
|
|
63
|
-
...
|
|
64
|
-
...
|
|
65
|
-
...
|
|
64
|
+
...n ? V : {},
|
|
65
|
+
...n ? i ?? {} : {},
|
|
66
|
+
...n && p === 0 ? h : {},
|
|
67
|
+
...m ?? {}
|
|
66
68
|
},
|
|
67
|
-
rowSpan:
|
|
68
|
-
children:
|
|
69
|
+
rowSpan: t == null ? void 0 : t.rowSpan,
|
|
70
|
+
children: t.title
|
|
69
71
|
}
|
|
70
72
|
),
|
|
71
73
|
/* @__PURE__ */ s(
|
|
72
|
-
|
|
74
|
+
u,
|
|
73
75
|
{
|
|
74
76
|
className: "whitespace-pre-wrap",
|
|
75
77
|
sx: {
|
|
76
|
-
...
|
|
77
|
-
...
|
|
78
|
+
...n && p === 0 ? h : {},
|
|
79
|
+
...a ?? {}
|
|
78
80
|
},
|
|
79
|
-
style: (
|
|
80
|
-
colSpan:
|
|
81
|
-
rowSpan:
|
|
82
|
-
children:
|
|
81
|
+
style: (t == null ? void 0 : t.style) ?? {},
|
|
82
|
+
colSpan: t == null ? void 0 : t.colSpan,
|
|
83
|
+
rowSpan: t == null ? void 0 : t.rowSpan,
|
|
84
|
+
children: L(t, d, a)
|
|
83
85
|
}
|
|
84
86
|
)
|
|
85
|
-
] }, `owp-vertical-cell-${p}-${
|
|
87
|
+
] }, `owp-vertical-cell-${p}-${g}`)) }, `owp-vertical-col-${p}`)) })
|
|
86
88
|
]
|
|
87
89
|
}
|
|
88
90
|
);
|
|
89
91
|
}
|
|
90
|
-
|
|
92
|
+
o(W, "OwpVerticalTable");
|
|
91
93
|
export {
|
|
92
|
-
|
|
94
|
+
W as OwpVerticalTable
|
|
93
95
|
};
|
|
94
96
|
//# sourceMappingURL=OwpVerticalTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OwpVerticalTable.js","sources":["../../../src/components/OwpTable/OwpVerticalTable.tsx"],"sourcesContent":["import { Checkbox, TableBody, TableCell, type TableCellProps } from '@mui/material';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\nimport { isNaN, toNumber } from 'es-toolkit/compat';\nimport { Fragment, type CSSProperties, type ReactNode } from 'react';\nimport { StyledTable, StyledTableRow } from './OwpTable';\n\ntype OwpVerticalTableCell = {\n title: string;\n key: string;\n disableLocaleString?: boolean;\n useDate?: boolean;\n withTime?: boolean;\n withTimeAndSec?: boolean;\n useCheckbox?: boolean;\n colSpan?: number;\n rowSpan?: number;\n style?: CSSProperties;\n render?: () => ReactNode;\n validate?: (v?: number | string) => boolean;\n};\n\ntype OwpVerticalTableValue = string | number | '';\ntype OwpVerticalTableDataRecord = Record<string, OwpVerticalTableValue | undefined>;\n\ninterface OwpVerticalTableProps {\n layout: OwpVerticalTableCell[][];\n data?: OwpVerticalTableDataRecord;\n titleSx?: TableCellProps['sx'];\n cellSx?: TableCellProps['sx'] & CSSProperties;\n titleWidth?: number | string;\n colGroupSlot?: ReactNode;\n className?: string;\n tableLayout?: 'auto' | 'fixed';\n canUseTreeGridStyle?: boolean;\n}\n\nconst DEFAULT_CHECKBOX_FONT_SIZE = 28;\n\nconst
|
|
1
|
+
{"version":3,"file":"OwpVerticalTable.js","sources":["../../../src/components/OwpTable/OwpVerticalTable.tsx"],"sourcesContent":["import { Checkbox, TableBody, TableCell, type TableCellProps } from '@mui/material';\nimport clsx from 'clsx';\nimport dayjs from 'dayjs';\nimport { isNaN, toNumber } from 'es-toolkit/compat';\nimport { Fragment, type CSSProperties, type ReactNode } from 'react';\nimport { StyledTable, StyledTableRow } from './OwpTable';\n\ntype OwpVerticalTableCell = {\n title: string;\n key: string;\n disableLocaleString?: boolean;\n useDate?: boolean;\n withTime?: boolean;\n withTimeAndSec?: boolean;\n useCheckbox?: boolean;\n colSpan?: number;\n rowSpan?: number;\n style?: CSSProperties;\n render?: () => ReactNode;\n validate?: (v?: number | string) => boolean;\n};\n\ntype OwpVerticalTableValue = string | number | '';\ntype OwpVerticalTableDataRecord = Record<string, OwpVerticalTableValue | undefined>;\n\ninterface OwpVerticalTableProps {\n layout: OwpVerticalTableCell[][];\n data?: OwpVerticalTableDataRecord;\n titleSx?: TableCellProps['sx'];\n treeGridTitleCellSx?: TableCellProps['sx'] & CSSProperties;\n cellSx?: TableCellProps['sx'] & CSSProperties;\n titleWidth?: number | string;\n colGroupSlot?: ReactNode;\n className?: string;\n tableLayout?: 'auto' | 'fixed';\n canUseTreeGridStyle?: boolean;\n}\n\nconst DEFAULT_CHECKBOX_FONT_SIZE = 28;\n\nconst defaultTreeGridTitleCellSx = {\n '&&': {\n fontFamily: 'inherit',\n fontSize: '1.7rem',\n fontWeight: 600,\n lineHeight: 'normal',\n minHeight: 'unset',\n padding: '7px 10px',\n },\n} as const;\n\nconst treeGridContainerSx = {\n borderRadius: 0,\n overflow: 'visible',\n} as const;\n\nconst treeGridFirstRowCellSx = {\n borderTop: '1px solid #CDD8E4',\n} as const;\n\nconst getVerticalTableValue = (data: OwpVerticalTableProps['data'], key: string) => {\n return data?.[key];\n};\n\nconst getCheckboxChecked = (\n value: OwpVerticalTableValue | undefined,\n validate?: OwpVerticalTableCell['validate'],\n) => {\n if (typeof validate === 'function') {\n return validate(value);\n }\n\n if (isNaN(toNumber(value))) {\n return value === 'Y';\n }\n\n return Boolean(Number(value));\n};\n\nconst getDateFormat = (cell: OwpVerticalTableCell) => {\n if (cell.withTime) {\n return 'YYYY-MM-DD HH:mm';\n }\n\n if (cell.withTimeAndSec) {\n return 'YYYY-MM-DD HH:mm:ss';\n }\n\n return 'YYYY-MM-DD';\n};\n\nconst renderVerticalTableCellValue = (\n cell: OwpVerticalTableCell,\n data: OwpVerticalTableProps['data'],\n cellSx?: OwpVerticalTableProps['cellSx'],\n): ReactNode => {\n const value = getVerticalTableValue(data, cell.key);\n\n if (typeof cell.render === 'function') {\n return cell.render();\n }\n\n if (cell.useCheckbox) {\n return (\n <Checkbox\n checked={getCheckboxChecked(value, cell.validate)}\n sx={{ '& .MuiSvgIcon-root': { fontSize: cellSx?.fontSize ?? DEFAULT_CHECKBOX_FONT_SIZE } }}\n />\n );\n }\n\n if (cell.useDate) {\n return value ? dayjs(value).format(getDateFormat(cell)) : value;\n }\n\n if (cell.disableLocaleString) {\n return value;\n }\n\n return value?.toLocaleString();\n};\n\n/**\n * OwpVerticalTable 컴포넌트\n * @param layout layout 값\n * @param titleWidth titleWidth 값\n * @param titleSx titleSx 값\n * @param treeGridTitleCellSx TreeGrid title cell sx 값\n * @param cellSx cellSx 값\n * @param data 데이터\n * @param colGroupSlot colGroupSlot 값\n * @param className className 값\n * @param tableLayout tableLayout 값\n * @param canUseTreeGridStyle TreeGrid 스타일 사용 여부\n */\nexport function OwpVerticalTable({\n layout,\n titleWidth,\n titleSx,\n treeGridTitleCellSx,\n cellSx,\n data,\n colGroupSlot,\n className,\n tableLayout = 'fixed',\n canUseTreeGridStyle = false,\n}: OwpVerticalTableProps) {\n return (\n <StyledTable\n canUseTreeGridStyle={canUseTreeGridStyle}\n className={clsx('w-full', className)}\n containerProps={{ sx: canUseTreeGridStyle ? treeGridContainerSx : undefined }}\n tableLayout={tableLayout}\n >\n {colGroupSlot}\n <TableBody>\n {layout.map((cols, rowIndex) => (\n <StyledTableRow key={`owp-vertical-col-${rowIndex}`}>\n {cols.map((col, colIndex) => (\n <Fragment key={`owp-vertical-cell-${rowIndex}-${colIndex}`}>\n <TableCell\n component=\"th\"\n className=\"whitespace-pre-wrap\"\n width={titleWidth ?? 200}\n sx={{\n ...(canUseTreeGridStyle ? defaultTreeGridTitleCellSx : {}),\n ...(canUseTreeGridStyle ? (treeGridTitleCellSx ?? {}) : {}),\n ...(canUseTreeGridStyle && rowIndex === 0 ? treeGridFirstRowCellSx : {}),\n ...(titleSx ?? {}),\n }}\n rowSpan={col?.rowSpan}\n >\n {col.title}\n </TableCell>\n <TableCell\n className=\"whitespace-pre-wrap\"\n sx={{\n ...(canUseTreeGridStyle && rowIndex === 0 ? treeGridFirstRowCellSx : {}),\n ...(cellSx ?? {}),\n }}\n style={col?.style ?? {}}\n colSpan={col?.colSpan}\n rowSpan={col?.rowSpan}\n >\n {renderVerticalTableCellValue(col, data, cellSx)}\n </TableCell>\n </Fragment>\n ))}\n </StyledTableRow>\n ))}\n </TableBody>\n </StyledTable>\n );\n}\n"],"names":["DEFAULT_CHECKBOX_FONT_SIZE","defaultTreeGridTitleCellSx","treeGridContainerSx","treeGridFirstRowCellSx","getVerticalTableValue","__name","data","key","getCheckboxChecked","value","validate","isNaN","toNumber","getDateFormat","cell","renderVerticalTableCellValue","cellSx","jsx","Checkbox","dayjs","OwpVerticalTable","layout","titleWidth","titleSx","treeGridTitleCellSx","colGroupSlot","className","tableLayout","canUseTreeGridStyle","jsxs","StyledTable","clsx","TableBody","cols","rowIndex","StyledTableRow","col","colIndex","Fragment","TableCell"],"mappings":"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"}
|