es-grid-template 1.4.9 → 1.5.1

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.
@@ -2,4 +2,4 @@ import styled from "styled-components";
2
2
  export const GridStyle = styled.div.withConfig({
3
3
  displayName: "GridStyle",
4
4
  componentId: "es-grid-template__sc-sueu2e-0"
5
- })(["height:", ";.ui-rc-table.ui-rc-table-virtual.ui-rc-table-scroll-horizontal{.ui-rc-table-container{&:has(.ui-rc-table-tbody-virtual-scrollbar-horizontal){padding-bottom:8px;border-bottom:1px solid #e0e0e0;}}}.ui-rc-table-container{.ui-rc-table-tbody-virtual.ui-rc-table-tbody{min-height:", ";}}.ui-rc-toolbar-bottom{position:relative;padding:.25rem 1rem;background-color:#ffffff;&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;visibility:visible;right:0;}.toolbar-button{border-radius:0;.ant-btn{border-radius:0;}}}.ui-rc-pagination{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0;margin:0;padding:.75rem 1rem;background-color:#ffffff;.ui-rc-pagination-total-text{order:2;margin-left:auto;}&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:50px;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:50px;bottom:0;visibility:visible;right:0;}&.pagination-template{position:relative;&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;visibility:visible;right:0;}}}.react-resizable{position:relative;background-clip:padding-box;}.rc-resizable-handle{position:absolute;right:0px;bottom:0;z-index:1;width:5px;height:100%;cursor:col-resize;&.none{cursor:auto;display:none;}}"], props => props.$heightTable ? `${props.$heightTable}px` : undefined, props => props.$heightScroll ? `${props.$heightScroll}px` : undefined);
5
+ })(["height:", ";.ui-rc-table.ui-rc-table-virtual.ui-rc-table-scroll-horizontal{.ui-rc-table-container{&:has(.ui-rc-table-tbody-virtual-scrollbar-horizontal){padding-bottom:8px;border-bottom:1px solid #e0e0e0;}}}.ui-rc-table-container{.ui-rc-table-tbody-virtual.ui-rc-table-tbody{min-height:", ";}.ui-rc-table-body{&:has(.ui-rc-table-placeholder){height:", ";}table{height:100%;.ui-rc-table-placeholder{vertical-align:top;}}}.ui-rc-table-placeholder{}}.ui-rc-toolbar-bottom{position:relative;padding:.25rem 1rem;background-color:#ffffff;&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;visibility:visible;right:0;}.toolbar-button{border-radius:0;.ant-btn{border-radius:0;}}}.ui-rc-pagination{border-bottom:1px solid #e0e0e0;border-top:1px solid #e0e0e0;margin:0;padding:.75rem 1rem;background-color:#ffffff;.ui-rc-pagination-total-text{order:2;margin-left:auto;}&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:50px;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:50px;bottom:0;visibility:visible;right:0;}&.pagination-template{position:relative;&::before{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;left:0;}&::after{content:\"\";position:absolute;border-left:1px solid #e0e0e0;height:100%;bottom:0;visibility:visible;right:0;}}}.react-resizable{position:relative;background-clip:padding-box;}.rc-resizable-handle{position:absolute;right:0px;bottom:0;z-index:1;width:5px;height:100%;cursor:col-resize;&.none{cursor:auto;display:none;}}"], props => props.$heightTable ? `${props.$heightTable}px` : undefined, props => props.$heightScroll ? `${props.$heightScroll}px` : undefined, props => props.$heightScroll ? `${props.$heightScroll - 1}px` : undefined);
@@ -4,6 +4,8 @@ import type { GridTableProps } from "./type";
4
4
  import 'dayjs/locale/es';
5
5
  import 'dayjs/locale/vi';
6
6
  import './styles.scss';
7
+ import 'rc-master-ui/es/date-range-picker/styles/index.less';
8
+ import 'rc-master-ui/assets/index.css';
7
9
  export declare const SELECTION_COLUMN: {};
8
10
  declare const InternalTable: <RecordType extends object>(props: GridTableProps<RecordType>) => React.JSX.Element;
9
11
  export default InternalTable;
@@ -11,9 +11,13 @@ import GridEdit from "./table/GridEdit";
11
11
  import Grid from "./table/Grid";
12
12
  import en from "rc-master-ui/es/date-picker/locale/en_US";
13
13
  import vi from "rc-master-ui/es/date-picker/locale/vi_VN";
14
+ import enDr from "rc-master-ui/es/locales/en_US";
15
+ import viDr from "rc-master-ui/es/locales/vi_VN";
14
16
  // import useColumns from "./hooks/useColumns";
15
17
 
16
18
  import "./styles.scss";
19
+ import 'rc-master-ui/es/date-range-picker/styles/index.less';
20
+ import 'rc-master-ui/assets/index.css';
17
21
  import { flatColumns2, renderContent, renderFilter } from "./hooks/columns";
18
22
  import Group from "./table/Group";
19
23
  import Swal from "sweetalert2";
@@ -202,6 +206,7 @@ const InternalTable = props => {
202
206
  // }, [height, id])
203
207
 
204
208
  const local = lang && lang === 'en' ? en : vi;
209
+ const dateRangeLocale = lang && lang === 'en' ? enDr : viDr;
205
210
  const buddhistLocale = {
206
211
  ...local,
207
212
  lang: {
@@ -319,7 +324,7 @@ const InternalTable = props => {
319
324
  style: {
320
325
  marginBottom: 8
321
326
  }
322
- }, renderFilter(column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue, propDataSourceFilter ?? [], buddhistLocale, locale, t)), /*#__PURE__*/React.createElement(Space, {
327
+ }, renderFilter(column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue, propDataSourceFilter ?? [], buddhistLocale, locale, t, format, dateRangeLocale)), /*#__PURE__*/React.createElement(Space, {
323
328
  style: {
324
329
  justifyContent: 'end',
325
330
  width: '100%'
@@ -705,7 +710,7 @@ const InternalTable = props => {
705
710
  }
706
711
  if (commandClick) {
707
712
  commandClick({
708
- id,
713
+ id: idCommand,
709
714
  rowId: rowData.rowId,
710
715
  rowData,
711
716
  index,
@@ -717,7 +722,7 @@ const InternalTable = props => {
717
722
  // server ~~ không làm gì
718
723
  if (commandClick) {
719
724
  commandClick({
720
- id,
725
+ id: idCommand,
721
726
  rowId: rowData.rowId,
722
727
  rowData,
723
728
  index,
@@ -485,7 +485,7 @@ const TableGrid = props => {
485
485
 
486
486
  // const dec = (col.format?.decimalScale || col.format?.decimalScale === 0) ? col.format?.decimalScale : format?.decimalScale
487
487
  const dec = cellFormat?.decimalScale;
488
- const sumValue = col.type === 'number' ? sumDataByField(dataSource, col?.key) : 0;
488
+ const sumValue = col.type === 'number' ? sumDataByField(filterDataByColumns4(dataSource, filterStates), col?.key) : 0;
489
489
  const value = !isEmpty(sumValue) ? dec || dec === 0 ? parseFloat(Number(sumValue).toFixed(dec)).toString() : sumValue.toString() : '0';
490
490
  const cellValue = col.type === 'number' && col.isSummary !== false ? value : '';
491
491
  const numericFormatProps = {
@@ -6,4 +6,4 @@ export declare function flatColumns<RecordType>(columns: ColumnsTable<RecordType
6
6
  export declare const flatColumns2: <RecordType>(columns: ColumnsTable<RecordType>) => ColumnsTable<RecordType>;
7
7
  export declare const getValueCell: <T>(column: ColumnTable<T>, value: any, format?: IFormat) => any;
8
8
  export declare const renderContent: <T>(column: ColumnTable<T>, value: any, record: any, index: number, format?: IFormat) => React.JSX.Element;
9
- export declare const renderFilter: <RecordType>(column: ColumnTable<RecordType>, selectedKeys: string[], setSelectedKeys: any, confirm: any, visible: boolean, searchValue: string, setSearchValue: any, dataSourceFilter: any[], buddhistLocale: any, locale?: TableLocale, t?: any, format?: IFormat) => React.JSX.Element;
9
+ export declare const renderFilter: <RecordType>(column: ColumnTable<RecordType>, selectedKeys: string[], setSelectedKeys: any, confirm: any, visible: boolean, searchValue: string, setSearchValue: any, dataSourceFilter: any[], buddhistLocale: any, locale?: TableLocale, t?: any, format?: IFormat, dateRangeLocale?: any) => React.JSX.Element;
@@ -1,17 +1,15 @@
1
- import { checkDecimalSeparator, checkThousandSeparator, convertDateToDayjs, convertDayjsToDate, getDatepickerFormat, getDateString, getTypeFilter, isColor, isEmpty } from "../utils";
1
+ import { checkDecimalSeparator, checkThousandSeparator, convertDateToDayjs, convertDayjsToDate, convertFormat, getDatepickerFormat, getDateString, getTypeFilter, isColor, isEmpty } from "../utils";
2
2
  import { numericFormatter } from "react-numeric-component";
3
3
  import dayjs from "dayjs";
4
4
  import moment from "moment/moment";
5
5
  import React, { Fragment } from "react";
6
- import { DatePicker, Empty, Input, Select } from "rc-master-ui";
6
+ import { CustomProvider, DatePicker, DateRangePicker, Empty, Input, Select } from "rc-master-ui";
7
7
  import CheckboxFilter from "../../CheckboxFilter";
8
8
  import { SELECTION_COLUMN } from "rc-master-ui/es/table/hooks/useSelection";
9
9
  import NumberRange from "../../number-range";
10
10
  import NumberInput from "../../number";
11
11
  // import {Typography} from "antd";
12
- const {
13
- RangePicker
14
- } = DatePicker;
12
+ // const {RangePicker} = DatePicker
15
13
 
16
14
  // const { Text } = Typography;
17
15
 
@@ -125,11 +123,11 @@ export const renderContent = (column, value, record, index, format) => {
125
123
  field: column.field
126
124
  }) : column.template : content);
127
125
  };
128
- export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue, dataSourceFilter, buddhistLocale, locale, t, format) => {
126
+ export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, visible, searchValue, setSearchValue, dataSourceFilter, buddhistLocale, locale, t, format, dateRangeLocale) => {
129
127
  const cellFormat = column.format ? typeof column.format === 'function' ? column.format({}) : column.format : format;
130
128
  const type = getTypeFilter(column);
131
129
  const dateFormat = getDatepickerFormat(column?.typeFilter ?? column?.type, cellFormat) ?? 'DD/MM/YYYY';
132
- const dateRangeFormat = getDatepickerFormat(column?.type, cellFormat) ?? 'DD/MM/YYYY';
130
+ const dateRangeFormat = convertFormat(getDatepickerFormat(column?.type, cellFormat) ?? 'DD/MM/YYYY');
133
131
  const find = dataSourceFilter?.find(it => it.key === column?.field);
134
132
  const options = find ? find.data : [];
135
133
  switch (type) {
@@ -176,35 +174,25 @@ export const renderFilter = (column, selectedKeys, setSelectedKeys, confirm, vis
176
174
  }
177
175
  }))));
178
176
  case 'DateRange':
179
- const dateRangeValue = [selectedKeys[0] ? convertDateToDayjs(new Date(selectedKeys[0]), dateRangeFormat) : '', selectedKeys[1] ? convertDateToDayjs(new Date(selectedKeys[1]), dateRangeFormat) : ''];
177
+ // const dateRangeValue: any = [selectedKeys[0] ? convertDateToDayjs(new Date(selectedKeys[0]), dateRangeFormat) : '', selectedKeys[1] ? convertDateToDayjs(new Date(selectedKeys[1]), dateRangeFormat) : '']
178
+ const dateRangeValue = selectedKeys && selectedKeys.length > 0 ? [selectedKeys[0] ? new Date(selectedKeys[0]) : '', selectedKeys[1] ? new Date(selectedKeys[1]) : ''] : null;
180
179
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
181
180
  className: 'mb-1'
182
- }, /*#__PURE__*/React.createElement(RangePicker, {
183
- format: {
184
- format: dateRangeFormat,
185
- type: 'mask'
186
- }
187
- // defaultValue={dateRangeValue}
188
- ,
189
- value: dateRangeValue,
190
- locale: buddhistLocale
191
- // placeholder={['Ngày bắt đầu', 'Ngày kết thúc']}
192
- ,
193
- popupStyle: {
194
- zIndex: 9999
181
+ }, /*#__PURE__*/React.createElement(CustomProvider, {
182
+ locale: dateRangeLocale
183
+ }, /*#__PURE__*/React.createElement(DateRangePicker
184
+ // placeholder={['Ngày bắt đầu', 'Ngày bắt đầu']}
185
+ , {
186
+ style: {
187
+ width: 300
195
188
  },
196
- onChange: (value, dateString) => {
197
- const newDateRangeValue = dateString[0] ? [dateString[0] ? moment(convertDayjsToDate(dateString[0], dateRangeFormat)).format() : '', dateString[1] ? moment(convertDayjsToDate(dateString[1], dateRangeFormat)).format() : ''] : '';
198
-
199
- // setSelectedKeys(newDateValue ? [newDateValue] : [])
189
+ format: dateRangeFormat,
190
+ value: dateRangeValue,
191
+ onChange: value => {
192
+ const newDateRangeValue = value ? [value[0] ? moment(value[0]).format() : '', value[1] ? moment(value[0]).format() : ''] : [];
200
193
  setSelectedKeys(newDateRangeValue);
201
- },
202
- style: {
203
- width: '100%'
204
194
  }
205
- // popupClassName={'adv-popup-container'}
206
- // getPopupContainer={() => menuRef.current}
207
- }))));
195
+ })))));
208
196
  case 'Week':
209
197
  const weekValue = !isEmpty(selectedKeys[0]) ? dayjs(selectedKeys[0], dateFormat) : null;
210
198
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
@@ -36,7 +36,9 @@ export declare const getFormat: (colFormat?: IFormat, format?: IFormat) => {
36
36
  monthFormat: string;
37
37
  yearFormat: string;
38
38
  };
39
+ export declare function convertFormat(formatStr: string): string;
39
40
  export declare const getDatepickerFormat: (type: EditType | TypeFilter | IColumnType, format?: IFormat) => string;
41
+ export declare const getDateRangeFormat: (type: EditType | TypeFilter | IColumnType, format?: IFormat) => string;
40
42
  export declare const customWeekStartEndFormat: (value: any, weekFormat: string) => string;
41
43
  export declare const getTypeFilter: (col: ColumnTable<any>) => TypeFilter;
42
44
  export declare const updateArrayByKey: (arr: any[], element: any, key: string) => any[];
@@ -190,12 +190,56 @@ export const getFormat = (colFormat, format) => {
190
190
  yearFormat: colFormat?.yearFormat ?? format?.yearFormat
191
191
  };
192
192
  };
193
+ export function convertFormat(formatStr) {
194
+ // return formatStr.split('').map((char, i) => {
195
+ // if (char === 'D' || char === 'd') {
196
+ // return 'd'; // ngày: lowercase
197
+ // }
198
+ // if (char === 'Y' || char === 'y') {
199
+ // return 'y'; // năm: lowercase
200
+ // }
201
+ // if (char === 'M' || char === 'm') {
202
+ // return char; // tháng: giữ nguyên
203
+ // }
204
+ // return char; // separator
205
+ // }).join('');
206
+
207
+ return formatStr.split('').map(char => {
208
+ if (char === 'D' || char === 'd') return 'd';
209
+ if (char === 'Y' || char === 'y') return 'y';
210
+ if ('Hhmsa'.includes(char)) return char; // giờ, phút, giây, am/pm
211
+ if (char === 'M' || char === 'm') return char; // tháng: giữ nguyên
212
+ return char; // dấu phân cách
213
+ }).join('');
214
+ }
193
215
  export const getDatepickerFormat = (type, format) => {
194
216
  const typeFormat = type ? type.toLowerCase() : '';
195
217
  switch (typeFormat) {
196
218
  case "date":
197
219
  case "daterange":
198
- return format?.dateFormat ?? 'DD/MM/YYYY';
220
+ return format?.dateFormat ?? 'dd/MM/YYYY';
221
+ case "datetime":
222
+ return format?.datetimeFormat ?? 'dd/MM/YYYY HH:mm';
223
+ case "week":
224
+ return format?.weekFormat ?? 'dd/MM';
225
+ case "month":
226
+ return format?.monthFormat ?? 'MM/YYYY';
227
+ case "quarter":
228
+ return format?.dateFormat ?? 'dd/MM/YYYY';
229
+ case "year":
230
+ return format?.yearFormat ?? 'YYYY';
231
+ case "time":
232
+ return format?.timeFormat ?? 'HH:mm';
233
+ default:
234
+ return 'dd/MM/YYYY';
235
+ }
236
+ };
237
+ export const getDateRangeFormat = (type, format) => {
238
+ const typeFormat = type ? type.toLowerCase() : '';
239
+ switch (typeFormat) {
240
+ case "date":
241
+ case "daterange":
242
+ return convertFormat(format?.dateFormat ?? 'DD/MM/YYYY');
199
243
  case "datetime":
200
244
  return format?.datetimeFormat ?? 'DD/MM/YYYY HH:mm';
201
245
  case "week":
@@ -1341,3 +1341,7 @@ $fontFamily: "Montserrat",Helvetica,Arial,serif !default;
1341
1341
  display: none;
1342
1342
  }
1343
1343
  }
1344
+
1345
+ .rs-picker-popup {
1346
+ z-index: 1660;
1347
+ }