@pdg/react-table 1.0.70 → 1.0.72

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.
@@ -0,0 +1,6 @@
1
+ /********************************************************************************************************************
2
+ * 사업자등록번호 하이픈 추가
3
+ * @param companyNo 사업자등록번호
4
+ * @returns 하이픈이 추가된 사업자등록번호
5
+ * ******************************************************************************************************************/
6
+ export declare function companyNoAutoDash(companyNo: string): string;
@@ -5,3 +5,5 @@ export * from './compare';
5
5
  export * from './number';
6
6
  export * from './table';
7
7
  export * from './tel';
8
+ export * from './companyNo';
9
+ export * from './personalNo';
@@ -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' | 'company_no' | 'personal_no';
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;
@@ -8,7 +8,7 @@ export interface TableItem {
8
8
  }
9
9
  export interface TableColumn<T = TableItem> {
10
10
  id?: string;
11
- type?: 'text' | 'number' | 'tel' | 'date' | 'datetime' | 'date-hour' | 'date-minute' | 'img' | 'button' | 'buttons' | 'check';
11
+ type?: 'text' | 'number' | 'tel' | 'date' | 'datetime' | 'date-hour' | 'date-minute' | 'company_no' | 'personal_no' | 'img' | 'button' | 'buttons' | 'check';
12
12
  label?: ReactNode;
13
13
  name?: keyof T;
14
14
  align?: TableCellProps['align'];
package/dist/index.esm.js CHANGED
@@ -2787,6 +2787,30 @@ function typographyColorToSxColor(color) {
2787
2787
  }
2788
2788
  }
2789
2789
  return tmp;
2790
+ }/********************************************************************************************************************
2791
+ * 사업자등록번호 하이픈 추가
2792
+ * @param companyNo 사업자등록번호
2793
+ * @returns 하이픈이 추가된 사업자등록번호
2794
+ * ******************************************************************************************************************/
2795
+ function companyNoAutoDash(companyNo) {
2796
+ var str = companyNo.replace(/[^0-9]/g, '');
2797
+ var values = [str.slice(0, 3)];
2798
+ if (str.length > 3)
2799
+ values.push(str.slice(3, 5));
2800
+ if (str.length > 5)
2801
+ values.push(str.slice(5));
2802
+ return values.join('-');
2803
+ }/********************************************************************************************************************
2804
+ * 주민등록번호에 하이픈 추가하는 함수
2805
+ * @param personalNo 주민등록번호
2806
+ * @returns 하이픈 추가된 주민등록번호
2807
+ * ******************************************************************************************************************/
2808
+ function personalNoAutoDash(personalNo) {
2809
+ var str = personalNo.replace(/[^0-9]/g, '');
2810
+ var values = [str.slice(0, 6)];
2811
+ if (str.length > 6)
2812
+ values.push(str.slice(6));
2813
+ return values.join('-');
2790
2814
  }var TableContextDefaultValue = {
2791
2815
  menuOpen: false,
2792
2816
  openMenuId: undefined,
@@ -3037,6 +3061,16 @@ var TableBodyCell = function (_a) {
3037
3061
  data = getTelAutoDash(data);
3038
3062
  }
3039
3063
  break;
3064
+ case 'company_no':
3065
+ if (typeof data === 'string') {
3066
+ data = companyNoAutoDash(data);
3067
+ }
3068
+ break;
3069
+ case 'personal_no':
3070
+ if (typeof data === 'string') {
3071
+ data = personalNoAutoDash(data);
3072
+ }
3073
+ break;
3040
3074
  case 'check':
3041
3075
  data = (React__default.createElement(Box, { className: 'TableBoxyCell-check-box', onClick: menuOpen ? undefined : function (e) { return e.stopPropagation(); } },
3042
3076
  React__default.createElement(Checkbox, { checked: checked, disabled: checkDisabled, onChange: function (e, newChecked) {
@@ -4883,9 +4917,101 @@ var lib = CopyToClipboard;var InfoTable = function (_a) {
4883
4917
  finalSizeProps.lg = item.lg;
4884
4918
  if (item.xl)
4885
4919
  finalSizeProps.xl = item.xl;
4886
- var data = item.name !== undefined ? info[item.name] : undefined;
4887
- if (item.onRender)
4920
+ var data = undefined;
4921
+ if (item.name !== undefined) {
4922
+ if (info[item.name] !== undefined) {
4923
+ if (info[item.name] instanceof Date) {
4924
+ data = dayjs(info[item.name]).format('YYYY-MM-DD HH:mm:ss');
4925
+ }
4926
+ else if (info[item.name] instanceof dayjs) {
4927
+ data = info[item.name].format('YYYY-MM-DD HH:mm:ss');
4928
+ }
4929
+ else {
4930
+ data = info[item.name];
4931
+ }
4932
+ }
4933
+ }
4934
+ if (item.onRender) {
4888
4935
  data = item.onRender(info);
4936
+ }
4937
+ else if (notEmpty(data)) {
4938
+ switch (item.type) {
4939
+ case 'number':
4940
+ if (typeof data === 'string' || typeof data === 'number') {
4941
+ data = numberWithThousandSeparator(data);
4942
+ if (item.numberPrefix) {
4943
+ data = (React__default.createElement(React__default.Fragment, null,
4944
+ React__default.createElement("span", { style: { opacity: 0.5, marginRight: 2 } }, item.numberPrefix),
4945
+ data));
4946
+ }
4947
+ if (item.numberSuffix) {
4948
+ data = (React__default.createElement(React__default.Fragment, null,
4949
+ data,
4950
+ React__default.createElement("span", { style: { opacity: 0.5, marginLeft: 2 } }, item.numberSuffix)));
4951
+ }
4952
+ }
4953
+ break;
4954
+ case 'tel':
4955
+ if (typeof data === 'string') {
4956
+ data = getTelAutoDash(data);
4957
+ }
4958
+ break;
4959
+ case 'email':
4960
+ if (typeof data === 'string') {
4961
+ data = (React__default.createElement(React__default.Fragment, null,
4962
+ React__default.createElement("a", { href: "mailto:".concat(data) }, data)));
4963
+ }
4964
+ break;
4965
+ case 'url':
4966
+ if (typeof data === 'string' && data.toLowerCase().startsWith('http')) {
4967
+ data = (React__default.createElement(React__default.Fragment, null,
4968
+ React__default.createElement("a", { href: data, target: '_blank' }, data)));
4969
+ }
4970
+ break;
4971
+ case 'company_no':
4972
+ if (typeof data === 'string') {
4973
+ data = companyNoAutoDash(data);
4974
+ }
4975
+ break;
4976
+ case 'personal_no':
4977
+ if (typeof data === 'string') {
4978
+ data = personalNoAutoDash(data);
4979
+ }
4980
+ break;
4981
+ case 'date':
4982
+ if (typeof data === 'string' || typeof data === 'number') {
4983
+ data = dayjs(data, item.dateFormat).format('YYYY-MM-DD');
4984
+ }
4985
+ break;
4986
+ case 'datetime':
4987
+ if (typeof data === 'string' || typeof data === 'number') {
4988
+ var dt = dayjs(data, item.dateFormat);
4989
+ data = (React__default.createElement(React__default.Fragment, null,
4990
+ React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
4991
+ item.dateTwoLine ? React__default.createElement("br", null) : ' ',
4992
+ React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH:mm:ss'))));
4993
+ }
4994
+ break;
4995
+ case 'date-hour':
4996
+ if (typeof data === 'string' || typeof data === 'number') {
4997
+ var dt = dayjs(data, item.dateFormat);
4998
+ data = (React__default.createElement(React__default.Fragment, null,
4999
+ React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
5000
+ item.dateTwoLine ? React__default.createElement("br", null) : ' ',
5001
+ React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시'))));
5002
+ }
5003
+ break;
5004
+ case 'date-minute':
5005
+ if (typeof data === 'string' || typeof data === 'number') {
5006
+ var dt = dayjs(data, item.dateFormat);
5007
+ data = (React__default.createElement(React__default.Fragment, null,
5008
+ React__default.createElement("span", null, dt.format('YYYY-MM-DD')),
5009
+ item.dateTwoLine ? React__default.createElement("br", null) : ' ',
5010
+ React__default.createElement("span", { style: { opacity: 0.5 } }, dt.format('HH시 MM분'))));
5011
+ }
5012
+ break;
5013
+ }
5014
+ }
4889
5015
  if (empty(data))
4890
5016
  data = item.onRenderEmpty ? item.onRenderEmpty(info) : React__default.createElement(React__default.Fragment, null, "\u00A0");
4891
5017
  var copyToClipboardText_1 = item.clipboardText || (typeof data === 'string' ? data : typeof data === 'number' ? data.toString() : '');