@pdg/react-table 1.0.69 → 1.0.71
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/@util/companyNo.d.ts +6 -0
- package/dist/@util/index.d.ts +2 -0
- package/dist/@util/personalNo.d.ts +6 -0
- package/dist/InfoTable/InfoTable.types.d.ts +6 -0
- package/dist/Table/Table.types.d.ts +5 -0
- package/dist/TableBodyCell/TableBodyCell.types.d.ts +4 -0
- package/dist/TableBodyRow/TableBodyRow.types.d.ts +5 -1
- package/dist/index.esm.js +96 -9
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +96 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/********************************************************************************************************************
|
|
2
|
+
* 사업자등록번호 하이픈 추가
|
|
3
|
+
* @param companyNo 사업자등록번호
|
|
4
|
+
* @returns 하이픈이 추가된 사업자등록번호
|
|
5
|
+
* ******************************************************************************************************************/
|
|
6
|
+
export declare function companyNoAutoDash(companyNo: string): string;
|
package/dist/@util/index.d.ts
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/********************************************************************************************************************
|
|
2
|
+
* 주민등록번호에 하이픈 추가하는 함수
|
|
3
|
+
* @param personalNo 주민등록번호
|
|
4
|
+
* @returns 하이픈 추가된 주민등록번호
|
|
5
|
+
* ******************************************************************************************************************/
|
|
6
|
+
export declare function personalNoAutoDash(personalNo: string): string;
|
|
@@ -4,11 +4,17 @@ import { CommonSxProps } from '../@types';
|
|
|
4
4
|
export interface InfoTableInfo {
|
|
5
5
|
[key: string]: any;
|
|
6
6
|
}
|
|
7
|
+
export type InfoTableItemType = 'text' | 'number' | 'tel' | 'url' | 'email' | 'date' | 'datetime' | 'date-hour' | 'date-minute';
|
|
7
8
|
export interface InfoTableItem<T = InfoTableInfo> {
|
|
8
9
|
label: ReactNode;
|
|
9
10
|
name?: keyof T;
|
|
11
|
+
type?: InfoTableItemType;
|
|
10
12
|
ellipsis?: boolean;
|
|
11
13
|
className?: string;
|
|
14
|
+
dateFormat?: string;
|
|
15
|
+
dateTwoLine?: boolean;
|
|
16
|
+
numberPrefix?: string;
|
|
17
|
+
numberSuffix?: string;
|
|
12
18
|
style?: CommonSxProps['style'];
|
|
13
19
|
sx?: BoxProps['sx'];
|
|
14
20
|
labelClassName?: string;
|
|
@@ -91,7 +91,12 @@ export interface TableProps<T = TableItem> extends CommonSxProps {
|
|
|
91
91
|
};
|
|
92
92
|
sortable?: boolean;
|
|
93
93
|
onClick?(item: T, index: number): void;
|
|
94
|
+
onGetBodyRowClassName?(item: T, index: number): CommonSxProps['className'] | undefined;
|
|
95
|
+
onGetBodyRowStyle?(item: T, index: number): CommonSxProps['style'] | undefined;
|
|
94
96
|
onGetBodyRowSx?(item: T, index: number): CommonSxProps['sx'] | undefined;
|
|
97
|
+
onGetBodyColumnClassName?(column: TableColumn<T>, item: T, index: number): CommonSxProps['className'] | undefined;
|
|
98
|
+
onGetBodyColumnStyle?(column: TableColumn<T>, item: T, index: number): CommonSxProps['style'] | undefined;
|
|
99
|
+
onGetBodyColumnSx?(column: TableColumn<T>, item: T, index: number): CommonSxProps['sx'] | undefined;
|
|
95
100
|
onPageChange?(page: number): void;
|
|
96
101
|
onSortChange?(items: T[]): void;
|
|
97
102
|
onCheckChange?(columnId: string, items: T[]): void;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { TableColumn, TableItem, TableProps } from '../Table/Table.types';
|
|
2
|
+
import { CommonSxProps } from '../@types';
|
|
2
3
|
export interface TableBodyCellCommands {
|
|
3
4
|
setChecked(checked: boolean): void;
|
|
4
5
|
setCheckDisabled(disabled: boolean): void;
|
|
5
6
|
}
|
|
6
7
|
export interface TableBodyCellProps {
|
|
8
|
+
className?: CommonSxProps['className'];
|
|
9
|
+
style?: CommonSxProps['style'];
|
|
10
|
+
sx?: CommonSxProps['sx'];
|
|
7
11
|
index: number;
|
|
8
12
|
item: TableItem;
|
|
9
13
|
column: TableColumn;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { TableCellProps, TableRowProps } from '@mui/material';
|
|
2
2
|
import { TableColumn, TableItem, TableProps } from '../Table';
|
|
3
3
|
import { TableBodyCellProps } from '../TableBodyCell';
|
|
4
|
+
import { CommonSxProps } from '../@types';
|
|
4
5
|
export interface TableBodyRowProps extends Omit<TableRowProps, 'id' | 'onClick'> {
|
|
5
6
|
id: string | number;
|
|
6
7
|
index: number;
|
|
7
8
|
defaultAlign?: TableCellProps['align'];
|
|
8
9
|
defaultEllipsis?: boolean;
|
|
9
10
|
sortable?: boolean;
|
|
10
|
-
columns: TableColumn
|
|
11
|
+
columns: TableColumn[];
|
|
11
12
|
item: TableItem;
|
|
12
13
|
onClick: TableProps['onClick'];
|
|
13
14
|
onCheckChange: TableBodyCellProps['onCheckChange'];
|
|
15
|
+
onGetColumnClassName?(column: TableColumn, item: TableItem, index: number): CommonSxProps['className'] | undefined;
|
|
16
|
+
onGetColumnStyle?(column: TableColumn, item: TableItem, index: number): CommonSxProps['style'] | undefined;
|
|
17
|
+
onGetColumnSx?(column: TableColumn, item: TableItem, index: number): CommonSxProps['sx'] | undefined;
|
|
14
18
|
}
|
|
15
19
|
export declare const TableBodyRowDefaultProps: {};
|
package/dist/index.esm.js
CHANGED
|
@@ -2953,7 +2953,7 @@ var TableCommonCell = function (_a) {
|
|
|
2953
2953
|
var templateObject_1$3;var StyledButtonsBox = styled(Box)(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"], ["\n display: flex;\n flex-wrap: wrap;\n gap: 5px;\n"])));
|
|
2954
2954
|
var TableBodyCell = function (_a) {
|
|
2955
2955
|
// Use ---------------------------------------------------------------------------------------------------------------
|
|
2956
|
-
var item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick, onCheckChange = _a.onCheckChange;
|
|
2956
|
+
var className = _a.className, style = _a.style, sx = _a.sx, item = _a.item, index = _a.index, column = _a.column, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, onClick = _a.onClick, onCheckChange = _a.onCheckChange;
|
|
2957
2957
|
var _b = useTableState(), menuOpen = _b.menuOpen, setItemColumnChecked = _b.setItemColumnChecked, setItemColumnCheckDisabled = _b.setItemColumnCheckDisabled, setItemColumnCommands = _b.setItemColumnCommands;
|
|
2958
2958
|
// State -------------------------------------------------------------------------------------------------------------
|
|
2959
2959
|
var _c = useState(false), checked = _c[0], setChecked = _c[1];
|
|
@@ -3118,7 +3118,7 @@ var TableBodyCell = function (_a) {
|
|
|
3118
3118
|
}
|
|
3119
3119
|
}, [column, onClick]);
|
|
3120
3120
|
// Render ----------------------------------------------------------------------------------------------------------
|
|
3121
|
-
return (React__default.createElement(TableCommonCell, { type: 'body', className: 'TableBodyCell', column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, !isHidden && data));
|
|
3121
|
+
return (React__default.createElement(TableCommonCell, { type: 'body', className: classNames('TableBodyCell', className), style: style, sx: sx, column: column, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, item: item, index: index, onClick: column.onClick || onClick ? handleClick : undefined }, !isHidden && data));
|
|
3122
3122
|
};
|
|
3123
3123
|
var templateObject_1$2;var StyledBodyRow = styled(TableRow)(function (_a) {
|
|
3124
3124
|
var theme = _a.theme;
|
|
@@ -3134,9 +3134,9 @@ var templateObject_1$2;var StyledBodyRow = styled(TableRow)(function (_a) {
|
|
|
3134
3134
|
var TableBodyRow = function (_a) {
|
|
3135
3135
|
var className = _a.className, style = _a.style,
|
|
3136
3136
|
//--------------------------------------------------------------------------------------------------------------------
|
|
3137
|
-
id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, onCheckChange = _a.onCheckChange,
|
|
3137
|
+
id = _a.id, index = _a.index, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, sortable = _a.sortable, columns = _a.columns, item = _a.item, onClick = _a.onClick, onCheckChange = _a.onCheckChange, onGetColumnClassName = _a.onGetColumnClassName, onGetColumnStyle = _a.onGetColumnStyle, onGetColumnSx = _a.onGetColumnSx,
|
|
3138
3138
|
// -------------------------------------------------------------------------------------------------------------------
|
|
3139
|
-
props = __rest$2(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick", "onCheckChange"]);
|
|
3139
|
+
props = __rest$2(_a, ["className", "style", "id", "index", "defaultAlign", "defaultEllipsis", "sortable", "columns", "item", "onClick", "onCheckChange", "onGetColumnClassName", "onGetColumnStyle", "onGetColumnSx"]);
|
|
3140
3140
|
var _b = useSortable({ id: id }), attributes = _b.attributes, listeners = _b.listeners, setNodeRef = _b.setNodeRef, transform = _b.transform, transition = _b.transition;
|
|
3141
3141
|
var finalStyle = useMemo(function () {
|
|
3142
3142
|
return sortable
|
|
@@ -3146,7 +3146,7 @@ var TableBodyRow = function (_a) {
|
|
|
3146
3146
|
return sortable
|
|
3147
3147
|
? __assign$3(__assign$3({ ref: setNodeRef }, attributes), listeners) : {};
|
|
3148
3148
|
}, [attributes, listeners, setNodeRef, sortable]);
|
|
3149
|
-
return (React__default.createElement(StyledBodyRow, __assign$3({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick, onCheckChange: onCheckChange })); })));
|
|
3149
|
+
return (React__default.createElement(StyledBodyRow, __assign$3({ className: classNames('TableBodyRow', className), style: finalStyle }, props, sortableProps), columns.map(function (column, columnIdx) { return (React__default.createElement(TableBodyCell, { className: onGetColumnClassName ? onGetColumnClassName(column, item, index) : undefined, sx: onGetColumnSx ? onGetColumnSx(column, item, index) : undefined, style: onGetColumnStyle ? onGetColumnStyle(column, item, index) : undefined, key: columnIdx, index: index, item: item, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, column: column, onClick: onClick, onCheckChange: onCheckChange })); })));
|
|
3150
3150
|
};
|
|
3151
3151
|
TableBodyRow.displayName = 'TableBodyRow';
|
|
3152
3152
|
TableBodyRow.defaultProps = TableBodyRowDefaultProps;var TableFooterCell = function (_a) {
|
|
@@ -3470,7 +3470,7 @@ var templateObject_1$1;function columnFilter(v) {
|
|
|
3470
3470
|
var _columnId = 0;
|
|
3471
3471
|
var Table = React__default.forwardRef(function (_a, ref) {
|
|
3472
3472
|
// Ref ---------------------------------------------------------------------------------------------------------------
|
|
3473
|
-
var caption = _a.caption, topHeadRows = _a.topHeadRows, initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, initStickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable = _a.sortable, onClick = _a.onClick, onGetBodyRowSx = _a.onGetBodyRowSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange, onCheckChange = _a.onCheckChange,
|
|
3473
|
+
var caption = _a.caption, topHeadRows = _a.topHeadRows, initColumns = _a.columns, initItems = _a.items, initPaging = _a.paging, pagingAlign = _a.pagingAlign, defaultAlign = _a.defaultAlign, defaultEllipsis = _a.defaultEllipsis, initStickyHeader = _a.stickyHeader, height = _a.height, minHeight = _a.minHeight, maxHeight = _a.maxHeight, fullHeight = _a.fullHeight, showOddColor = _a.showOddColor, showEvenColor = _a.showEvenColor, cellPadding = _a.cellPadding, footer = _a.footer, noData = _a.noData, pagination = _a.pagination, sortable = _a.sortable, onClick = _a.onClick, onGetBodyRowClassName = _a.onGetBodyRowClassName, onGetBodyRowStyle = _a.onGetBodyRowStyle, onGetBodyRowSx = _a.onGetBodyRowSx, onGetBodyColumnClassName = _a.onGetBodyColumnClassName, onGetBodyColumnStyle = _a.onGetBodyColumnStyle, onGetBodyColumnSx = _a.onGetBodyColumnSx, onPageChange = _a.onPageChange, onSortChange = _a.onSortChange, onCheckChange = _a.onCheckChange,
|
|
3474
3474
|
// ---------------------------------------------------------------------------------------------------------------
|
|
3475
3475
|
className = _a.className, initStyle = _a.style, sx = _a.sx;
|
|
3476
3476
|
var localHeaderDataRef = useRef({});
|
|
@@ -3930,7 +3930,7 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
3930
3930
|
return finalColumns && (React__default.createElement(TableTopHead, { caption: caption, rows: topHeadRows, columns: finalColumns, defaultAlign: defaultAlign, onCheckChange: handleHeadCheckChange }));
|
|
3931
3931
|
}, [caption, defaultAlign, finalColumns, handleHeadCheckChange, topHeadRows]);
|
|
3932
3932
|
var tableBody = useMemo(function () {
|
|
3933
|
-
return finalColumns && (React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color'),
|
|
3933
|
+
return finalColumns && (React__default.createElement(TableBody, null, sortableItems ? (sortableItems.length > 0 ? (React__default.createElement(SortableContext, { items: sortableItems, strategy: verticalListSortingStrategy }, sortableItems.map(function (item, idx) { return (React__default.createElement(TableBodyRow, { key: item.id, className: classNames(!!showOddColor && 'odd-color', !!showEvenColor && 'even-color', onGetBodyRowClassName ? onGetBodyRowClassName(item, idx) : undefined), style: onGetBodyRowStyle ? onGetBodyRowStyle(item, idx) : undefined, sx: onGetBodyRowSx ? onGetBodyRowSx(item, idx) : undefined, onGetColumnClassName: onGetBodyColumnClassName, onGetColumnStyle: onGetBodyColumnStyle, onGetColumnSx: onGetBodyColumnSx, hover: true, id: item.id, index: idx, defaultAlign: defaultAlign, defaultEllipsis: defaultEllipsis, sortable: sortable, columns: finalColumns, item: item, onClick: onClick, onCheckChange: handleBodyCheckChange })); }))) : (React__default.createElement(StyledBodyRow$1, null,
|
|
3934
3934
|
React__default.createElement(TableCell, { colSpan: finalColumns.length, style: { flex: 1 } }, noData ? (noData) : (React__default.createElement(StyledNoDataDiv, null,
|
|
3935
3935
|
React__default.createElement("div", null,
|
|
3936
3936
|
React__default.createElement(Icon, null, "error")),
|
|
@@ -3942,6 +3942,11 @@ var Table = React__default.forwardRef(function (_a, ref) {
|
|
|
3942
3942
|
handleBodyCheckChange,
|
|
3943
3943
|
noData,
|
|
3944
3944
|
onClick,
|
|
3945
|
+
onGetBodyColumnClassName,
|
|
3946
|
+
onGetBodyColumnStyle,
|
|
3947
|
+
onGetBodyColumnSx,
|
|
3948
|
+
onGetBodyRowClassName,
|
|
3949
|
+
onGetBodyRowStyle,
|
|
3945
3950
|
onGetBodyRowSx,
|
|
3946
3951
|
showEvenColor,
|
|
3947
3952
|
showOddColor,
|
|
@@ -4878,9 +4883,91 @@ var lib = CopyToClipboard;var InfoTable = function (_a) {
|
|
|
4878
4883
|
finalSizeProps.lg = item.lg;
|
|
4879
4884
|
if (item.xl)
|
|
4880
4885
|
finalSizeProps.xl = item.xl;
|
|
4881
|
-
var data =
|
|
4882
|
-
if (item.
|
|
4886
|
+
var data = undefined;
|
|
4887
|
+
if (item.name !== undefined) {
|
|
4888
|
+
if (info[item.name] !== undefined) {
|
|
4889
|
+
if (info[item.name] instanceof Date) {
|
|
4890
|
+
data = dayjs(info[item.name]).format('YYYY-MM-DD HH:mm:ss');
|
|
4891
|
+
}
|
|
4892
|
+
else if (info[item.name] instanceof dayjs) {
|
|
4893
|
+
data = info[item.name].format('YYYY-MM-DD HH:mm:ss');
|
|
4894
|
+
}
|
|
4895
|
+
else {
|
|
4896
|
+
data = info[item.name];
|
|
4897
|
+
}
|
|
4898
|
+
}
|
|
4899
|
+
}
|
|
4900
|
+
if (item.onRender) {
|
|
4883
4901
|
data = item.onRender(info);
|
|
4902
|
+
}
|
|
4903
|
+
else if (notEmpty(data)) {
|
|
4904
|
+
switch (item.type) {
|
|
4905
|
+
case 'number':
|
|
4906
|
+
if (typeof data === 'string' || typeof data === 'number') {
|
|
4907
|
+
data = numberWithThousandSeparator(data);
|
|
4908
|
+
if (item.numberPrefix) {
|
|
4909
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4910
|
+
React__default.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, item.numberPrefix),
|
|
4911
|
+
data));
|
|
4912
|
+
}
|
|
4913
|
+
if (item.numberSuffix) {
|
|
4914
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4915
|
+
data,
|
|
4916
|
+
React__default.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, item.numberSuffix)));
|
|
4917
|
+
}
|
|
4918
|
+
}
|
|
4919
|
+
break;
|
|
4920
|
+
case 'tel':
|
|
4921
|
+
if (typeof data === 'string') {
|
|
4922
|
+
data = getTelAutoDash(data);
|
|
4923
|
+
}
|
|
4924
|
+
break;
|
|
4925
|
+
case 'email':
|
|
4926
|
+
if (typeof data === 'string') {
|
|
4927
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4928
|
+
React__default.createElement("a", { href: "mailto:".concat(data) }, data)));
|
|
4929
|
+
}
|
|
4930
|
+
break;
|
|
4931
|
+
case 'url':
|
|
4932
|
+
if (typeof data === 'string' && data.toLowerCase().startsWith('http')) {
|
|
4933
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4934
|
+
React__default.createElement("a", { href: data, target: '_blank' }, data)));
|
|
4935
|
+
}
|
|
4936
|
+
break;
|
|
4937
|
+
case 'date':
|
|
4938
|
+
if (typeof data === 'string' || typeof data === 'number') {
|
|
4939
|
+
data = dayjs(data, item.dateFormat).format('YYYY-MM-DD');
|
|
4940
|
+
}
|
|
4941
|
+
break;
|
|
4942
|
+
case 'datetime':
|
|
4943
|
+
if (typeof data === 'string' || typeof data === 'number') {
|
|
4944
|
+
var dt = dayjs(data, item.dateFormat);
|
|
4945
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4946
|
+
React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
|
|
4947
|
+
item.dateTwoLine ? React__default.createElement("br", null) : ' ',
|
|
4948
|
+
React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
|
|
4949
|
+
}
|
|
4950
|
+
break;
|
|
4951
|
+
case 'date-hour':
|
|
4952
|
+
if (typeof data === 'string' || typeof data === 'number') {
|
|
4953
|
+
var dt = dayjs(data, item.dateFormat);
|
|
4954
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4955
|
+
React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
|
|
4956
|
+
item.dateTwoLine ? React__default.createElement("br", null) : ' ',
|
|
4957
|
+
React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
|
|
4958
|
+
}
|
|
4959
|
+
break;
|
|
4960
|
+
case 'date-minute':
|
|
4961
|
+
if (typeof data === 'string' || typeof data === 'number') {
|
|
4962
|
+
var dt = dayjs(data, item.dateFormat);
|
|
4963
|
+
data = (React__default.createElement(React__default.Fragment, null,
|
|
4964
|
+
React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
|
|
4965
|
+
item.dateTwoLine ? React__default.createElement("br", null) : ' ',
|
|
4966
|
+
React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
|
|
4967
|
+
}
|
|
4968
|
+
break;
|
|
4969
|
+
}
|
|
4970
|
+
}
|
|
4884
4971
|
if (empty(data))
|
|
4885
4972
|
data = item.onRenderEmpty ? item.onRenderEmpty(info) : React__default.createElement(React__default.Fragment, null, "\u00A0");
|
|
4886
4973
|
var copyToClipboardText_1 = item.clipboardText || (typeof data === 'string' ? data : typeof data === 'number' ? data.toString() : '');
|