phx-react 1.3.1667 → 1.3.1668

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,104 @@
1
+ import React from 'react';
2
+ import { ComplexAction } from '../types';
3
+ import { IEmptyStateAction } from '../EmptyStateAction';
4
+ import { SelectedButtonIcon } from '../TableV3/SelectedAction';
5
+ import { ReadonlyURLSearchParams } from 'next/navigation';
6
+ export interface MainTableV6Props {
7
+ paginationData: any;
8
+ isUnaccentSearchValue?: boolean;
9
+ sortData: any;
10
+ slectedTitle?: string | any;
11
+ selectedBtn?: Array<ComplexAction & {
12
+ icon?: SelectedButtonIcon;
13
+ }>;
14
+ pathname?: any;
15
+ list: {
16
+ keyResult: string;
17
+ query: string;
18
+ } | any;
19
+ thHeader: Array<any>;
20
+ thBody: Array<any>;
21
+ thBodyComponent?: object | any;
22
+ thBodyFilter?(): any;
23
+ editActionLink?: string;
24
+ search: {
25
+ enable: boolean;
26
+ keyResult: string;
27
+ query: string;
28
+ } | any;
29
+ selectedAllPeople?: {
30
+ enable: boolean;
31
+ title: string;
32
+ maxSelectedPeople?: number;
33
+ hideSelectedAction?: boolean;
34
+ } | any;
35
+ actionName?: any;
36
+ sort?: {
37
+ enable?: boolean;
38
+ defaultActive?: string;
39
+ sortList?: Array<any>;
40
+ } | any;
41
+ clickRow?: boolean;
42
+ clickType?: 'edit' | 'custom';
43
+ router: any;
44
+ setAggregate?: any;
45
+ sortSelectData?: any;
46
+ selectArray?: any;
47
+ pagination?: any;
48
+ routerCondition?: {
49
+ link: string;
50
+ conditionName: string;
51
+ conditionArray: Array<any>;
52
+ } | any;
53
+ onClick?(rowData: any): any;
54
+ thHeaderComponent?: any;
55
+ hidePagination?: boolean;
56
+ rowNumber?: number;
57
+ onChange?: any;
58
+ typeLoading?: {
59
+ type: 'page-with-table' | 'page-table-with-report' | 'table' | 'page-table-report-filter' | 'page-table-filter';
60
+ filterQty?: number;
61
+ reportQty?: number;
62
+ };
63
+ setHeaderLoading?: any;
64
+ directDetail?: {
65
+ enable: boolean;
66
+ onClick?(): any;
67
+ } | any;
68
+ filterLoading?: boolean;
69
+ fixedTableLayout?: boolean;
70
+ numericalOrder?: {
71
+ enable: boolean;
72
+ title: string | any;
73
+ disableSpacing?: boolean;
74
+ sticky?: boolean;
75
+ };
76
+ isQueryDataCenter?: boolean;
77
+ isQueryDevPortal?: boolean;
78
+ isSortEmpty?: boolean;
79
+ emptyStateAction?: IEmptyStateAction & {
80
+ enable: boolean;
81
+ };
82
+ isCustomHeaderSelected?: boolean;
83
+ disableSpacing?: {
84
+ disable: boolean;
85
+ indexStart: number;
86
+ };
87
+ border?: boolean;
88
+ isCenterText?: boolean;
89
+ searchValueData?(val: string): void;
90
+ stickyColumnNumber?: number;
91
+ getDataTable?(val: any): void;
92
+ stickyColumnNumberRight?: number;
93
+ isBackgroundReload?: boolean;
94
+ loaded?: (val: boolean) => void;
95
+ isResetPagination?: boolean;
96
+ tableKey?: string;
97
+ searchParams?: ReadonlyURLSearchParams;
98
+ completeState?: boolean;
99
+ completeStateTitle?: string;
100
+ completeStateDescription?: string;
101
+ type?: 'default' | 'in-card';
102
+ title?: string;
103
+ }
104
+ export declare function PHXTableV6({ actionName, clickRow, clickType, directDetail, editActionLink, filterLoading, fixedTableLayout, hidePagination, list, numericalOrder, onChange, onClick, pagination, paginationData, router, routerCondition, rowNumber, search, selectArray, selectedAllPeople, selectedBtn, setAggregate, setHeaderLoading, slectedTitle, sort, sortData, sortSelectData, thBody, thBodyComponent, thBodyFilter, thHeader, thHeaderComponent, typeLoading, isSortEmpty, emptyStateAction, isCustomHeaderSelected, isUnaccentSearchValue, disableSpacing, border, isCenterText, searchValueData, stickyColumnNumber, getDataTable, stickyColumnNumberRight, isBackgroundReload, loaded, isResetPagination, tableKey, searchParams, completeState, completeStateTitle, completeStateDescription, type, title, }: Readonly<MainTableV6Props>): React.JSX.Element;
@@ -0,0 +1,521 @@
1
+ "use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PHXTableV6 = PHXTableV6;
5
+ const tslib_1 = require("tslib");
6
+ const react_1 = require("@headlessui/react");
7
+ const solid_1 = require("@heroicons/react/24/solid");
8
+ const react_2 = tslib_1.__importStar(require("react"));
9
+ const Button_1 = require("../Button");
10
+ const EmptyRecord_1 = require("../EmptyRecord");
11
+ const useDebounce_1 = tslib_1.__importDefault(require("../Func/useDebounce"));
12
+ const Loading_1 = require("../Loading");
13
+ const Skeleton_1 = require("../Skeleton");
14
+ const types_1 = require("../types");
15
+ const PHXGrpcClientV6_1 = require("../Func/GRPC/PHXGrpcClientV6");
16
+ const sort_1 = tslib_1.__importDefault(require("../TableV3/sort"));
17
+ const RowTable_1 = require("../TableV3/RowTable");
18
+ const PaginaitonSelectedV5_1 = tslib_1.__importDefault(require("../TableV5/PaginaitonSelectedV5"));
19
+ const PaginationV5_1 = tslib_1.__importDefault(require("../TableV5/PaginationV5"));
20
+ const EmptyStateAction_1 = require("../EmptyStateAction");
21
+ const HeaderTable_1 = tslib_1.__importDefault(require("../TableV3/HeaderTable"));
22
+ const SelectedAction_1 = tslib_1.__importDefault(require("../TableV3/SelectedAction"));
23
+ const helpers_1 = require("../../helpers/helpers");
24
+ const useStickyLeft_1 = require("../TableVertical/useStickyLeft");
25
+ const CompleteState_1 = require("../CompleteState");
26
+ const EmptySearch_1 = require("../EmptySearch");
27
+ function PHXTableV6({ actionName, clickRow = true, clickType = 'edit', directDetail, editActionLink, filterLoading = false, fixedTableLayout = true, hidePagination, list, numericalOrder = {
28
+ enable: true,
29
+ title: 'STT',
30
+ disableSpacing: false,
31
+ sticky: false,
32
+ }, onChange, onClick, pagination, paginationData, router, routerCondition, rowNumber = 25, search, selectArray, selectedAllPeople, selectedBtn, setAggregate, setHeaderLoading, slectedTitle, sort, sortData, sortSelectData, thBody, thBodyComponent, thBodyFilter, thHeader, thHeaderComponent, typeLoading = { type: 'table' }, isSortEmpty = true, emptyStateAction = {
33
+ enable: false,
34
+ title: '',
35
+ description: '',
36
+ buttonContent: '',
37
+ buttonType: 'primary',
38
+ onAction: () => console.log('action'),
39
+ }, isCustomHeaderSelected = false, isUnaccentSearchValue = false, disableSpacing = { disable: false, indexStart: 0 }, border = false, isCenterText = false, searchValueData, stickyColumnNumber = 0, getDataTable, stickyColumnNumberRight = 0, isBackgroundReload = false, loaded, isResetPagination = false, tableKey = 'table', searchParams, completeState, completeStateTitle, completeStateDescription, type = 'default', title, }) {
40
+ const checkbox = (0, react_2.useRef)();
41
+ const [checked, setChecked] = (0, react_2.useState)(false);
42
+ const [indeterminate, setIndeterminate] = (0, react_2.useState)(false);
43
+ const [isMainLoading, setIsMainLoading] = (0, react_2.useState)(true);
44
+ const [dataTable, setDataTable] = (0, react_2.useState)([]);
45
+ const [selectedPeople, setSelectedPeople] = (0, react_2.useState)([]);
46
+ const [isSearchLoading, setIsSearchLoading] = (0, react_2.useState)(false);
47
+ const [searchDataResult, setSearchDataResult] = (0, react_2.useState)([]);
48
+ const [pagi, setPagi] = (0, react_2.useState)(0);
49
+ const [numericalOderInPage, setNumericalOderInPage] = (0, react_2.useState)(0);
50
+ const [count, setCount] = (0, react_2.useState)(0);
51
+ const timKiemPlacholder = 'Tìm kiếm';
52
+ const [activeMenu, setActiveMenu] = (0, react_2.useState)(sort === null || sort === void 0 ? void 0 : sort.defaultActive);
53
+ const [isSelectSort, setIsSelectSort] = (0, react_2.useState)(false);
54
+ const [isSort, setIsSort] = (0, react_2.useState)(false);
55
+ const [isSortLoading, setIsSortLoading] = (0, react_2.useState)(false);
56
+ const [numberOfFetchData, setNumberOfFetchData] = (0, react_2.useState)(0);
57
+ const [pageInfo, setPageInfo] = (0, react_2.useState)();
58
+ const [afterRecord, setAfterRecord] = (0, react_2.useState)('');
59
+ const [beforeRecord, setBeforeRecord] = (0, react_2.useState)('');
60
+ const numericalOrderDefault = {
61
+ ...numericalOrder,
62
+ sticky: !!stickyColumnNumber,
63
+ };
64
+ // @ts-ignore
65
+ const params = new URLSearchParams(searchParams);
66
+ const [searchValue, setSearchValue] = (0, react_2.useState)(params.get(`search-${tableKey}`) || '');
67
+ const [isSearch, setIsSearch] = (0, react_2.useState)(!!params.get(`search-${tableKey}`));
68
+ const entries = Object.fromEntries(params.entries());
69
+ const [rowQuantity, setRowQuantity] = (0, react_2.useState)((entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) ? Number(entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) : rowNumber);
70
+ const [isChangeRowQty, setIsChangeRowQty] = (0, react_2.useState)(false);
71
+ (0, react_2.useEffect)(() => {
72
+ if ((entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) ? Number(entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) !== rowQuantity : rowNumber !== rowQuantity) {
73
+ setRowQuantity((entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) ? Number(entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`]) : rowNumber);
74
+ if (!isChangeRowQty) {
75
+ setIsChangeRowQty(true);
76
+ }
77
+ }
78
+ }, [entries === null || entries === void 0 ? void 0 : entries[`row-${tableKey}`], rowNumber]);
79
+ const { lefts, refs } = (0, useStickyLeft_1.useStickyLefts)((numericalOrderDefault === null || numericalOrderDefault === void 0 ? void 0 : numericalOrderDefault.sticky) && selectedAllPeople && selectedAllPeople.enable
80
+ ? stickyColumnNumber + 2
81
+ : (numericalOrderDefault === null || numericalOrderDefault === void 0 ? void 0 : numericalOrderDefault.sticky) || (selectedAllPeople && selectedAllPeople.enable)
82
+ ? stickyColumnNumber + 1
83
+ : stickyColumnNumber, dataTable);
84
+ const { refs: refRights, rights } = (0, useStickyLeft_1.useStickyRights)(stickyColumnNumberRight, dataTable);
85
+ const queryHidePagi = list.query
86
+ ? list.query.replace(/first\s*:\s*\d+\s*,?|last\s*:\s*\d+\s*,?|after\s*:\s*\d+\s*,?|before\s*:\s*\d+\s*,?/g, '')
87
+ : '';
88
+ const queryWithNextPage = (after) => list.query
89
+ ? list.query
90
+ .replace(/first\s*:\s*\d+/g, `first: ${rowQuantity}`)
91
+ .replace(/\bafter\b\s*:\s*(["']).*?\1/g, after ? `after: "${after}"` : '')
92
+ .replace(/last\s*:\s*\d+/g, '')
93
+ .replace(/\bbefore\b\s*:\s*(["']).*?\1/g, '')
94
+ : '';
95
+ const queryWithPrevPage = (before) => list.query
96
+ ? list.query
97
+ .replace(/last\s*:\s*\d+/g, `last: ${rowQuantity}`)
98
+ .replace(/\bbefore\b\s*:\s*(["']).*?\1/g, before ? `before: "${before}"` : '')
99
+ .replace(/first\s*:\s*\d+/g, '')
100
+ .replace(/\bafter\b\s*:\s*(["']).*?\1/g, '')
101
+ : '';
102
+ const dataQuery = (after, before) => {
103
+ switch (true) {
104
+ case hidePagination:
105
+ return queryHidePagi;
106
+ case !!afterRecord:
107
+ return queryWithNextPage(after);
108
+ case !!beforeRecord:
109
+ return queryWithPrevPage(before);
110
+ default:
111
+ return queryWithNextPage('');
112
+ }
113
+ };
114
+ const { enable: enableEmptyStateAction, ...emptyStateActionAttribute } = emptyStateAction;
115
+ const filterQuery = (query, value) => {
116
+ const formatValue = isUnaccentSearchValue ? (0, helpers_1.unaccentValue)(value) : value;
117
+ return query.replace(/%@value%/g, `${formatValue}`);
118
+ };
119
+ const searchQuery = search && search.query ? filterQuery(search.query, searchValue.trim()) : '';
120
+ const searchQueryHidePagi = searchQuery
121
+ .replace(/last\s*:\s*\d+/g, '')
122
+ .replace(/\bbefore\b\s*:\s*(["']).*?\1/g, '')
123
+ .replace(/first\s*:\s*\d+/g, '')
124
+ .replace(/\bafter\b\s*:\s*(["']).*?\1/g, '');
125
+ const searchQueryWithNextPage = (after) => searchQuery
126
+ .replace(/first\s*:\s*\d+/g, `first: ${rowQuantity}`)
127
+ .replace(/\bafter\b\s*:\s*(["']).*?\1/g, after ? `after: "${after}"` : '')
128
+ .replace(/last\s*:\s*\d+/g, '')
129
+ .replace(/\bbefore\b\s*:\s*(["']).*?\1/g, '');
130
+ const searchQueryWithPrevPage = (before) => searchQuery
131
+ .replace(/last\s*:\s*\d+/g, `last: ${rowQuantity}`)
132
+ .replace(/\bbefore\b\s*:\s*(["']).*?\1/g, before ? `before: "${before}"` : '')
133
+ .replace(/first\s*:\s*\d+/g, '')
134
+ .replace(/\bafter\b\s*:\s*(["']).*?\1/g, '');
135
+ const searchDataQuery = (after, before) => {
136
+ switch (true) {
137
+ case hidePagination:
138
+ return searchQueryHidePagi;
139
+ case !!afterRecord:
140
+ return searchQueryWithNextPage(after);
141
+ case !!beforeRecord:
142
+ return searchQueryWithPrevPage(before);
143
+ default:
144
+ return searchQueryWithNextPage('');
145
+ }
146
+ };
147
+ const fetchSearchData = async () => {
148
+ try {
149
+ const variables = (search === null || search === void 0 ? void 0 : search.persistedId)
150
+ ? {
151
+ ...search === null || search === void 0 ? void 0 : search.variables,
152
+ first: rowQuantity,
153
+ after: afterRecord,
154
+ }
155
+ : {};
156
+ const queryFn = PHXGrpcClientV6_1.PHXClientQueryV6;
157
+ return queryFn({
158
+ query: searchDataQuery(afterRecord, beforeRecord),
159
+ variables,
160
+ persistedId: search === null || search === void 0 ? void 0 : search.persistedId,
161
+ schemaGroup: search === null || search === void 0 ? void 0 : search.schemaGroup,
162
+ });
163
+ }
164
+ catch (error) {
165
+ console.log(error);
166
+ return;
167
+ }
168
+ };
169
+ const getData = (result) => result.data;
170
+ const bindDataToTable = (dataTable) => {
171
+ // @ts-ignore
172
+ const data = [...dataTable];
173
+ setDataTable(data);
174
+ setSearchDataResult(data);
175
+ };
176
+ const [isChangePageLoading, setIsChangePageLoading] = (0, react_2.useState)(false);
177
+ const [previousValue, setPreviousValue] = (0, react_2.useState)(params.get(`search-${tableKey}`) || '');
178
+ const [currentPage, setCurrentPage] = (0, react_2.useState)(1);
179
+ const handleChangePage = (page) => {
180
+ if (page > 0 && page <= Math.ceil(count / rowQuantity)) {
181
+ setIsChangePageLoading(true);
182
+ setCurrentPage(page);
183
+ setPagi(page - 1);
184
+ paginationData(page - 1);
185
+ }
186
+ };
187
+ (0, react_2.useLayoutEffect)(() => {
188
+ const isIndeterminate = selectedPeople.length > 0 && selectedPeople.length < dataTable.length;
189
+ setChecked(selectedPeople.length === dataTable.length && dataTable.length > 0);
190
+ setIndeterminate(isIndeterminate);
191
+ // @ts-ignore
192
+ if (checkbox.current) {
193
+ checkbox.current.indeterminate = isIndeterminate;
194
+ }
195
+ }, [selectedPeople]);
196
+ function toggleAll() {
197
+ // @ts-ignore
198
+ if (searchValue) {
199
+ setSelectedPeople(checked || indeterminate ? [] : searchDataResult.filter((item) => !(item === null || item === void 0 ? void 0 : item.entered_school)));
200
+ }
201
+ else {
202
+ setSelectedPeople(checked || indeterminate ? [] : dataTable.filter((item) => !(item === null || item === void 0 ? void 0 : item.entered_school)));
203
+ }
204
+ if (onChange) {
205
+ onChange(checked || indeterminate ? [] : dataTable.filter((item) => !(item === null || item === void 0 ? void 0 : item.entered_school)));
206
+ }
207
+ setChecked(!checked && !indeterminate);
208
+ setIndeterminate(false);
209
+ }
210
+ function searchSetValue(value) {
211
+ setSearchValue(value);
212
+ if (searchValueData) {
213
+ const formatValue = isUnaccentSearchValue ? (0, helpers_1.unaccentValue)(value.trim()) : value.trim();
214
+ searchValueData(formatValue);
215
+ }
216
+ }
217
+ function brSetSelectedPeople(value) {
218
+ const maxSelectedPeople = (selectedAllPeople === null || selectedAllPeople === void 0 ? void 0 : selectedAllPeople.maxSelectedPeople) || 0; // loại bỏ item cũ, chỉ giữ lại số item mới nhất, nếu mặc định là 0 thì giữ nguyên mảng gốc
219
+ setSelectedPeople(value.slice(-maxSelectedPeople));
220
+ }
221
+ function renderInclude(person) {
222
+ // @ts-ignore
223
+ return selectedPeople.includes(person);
224
+ }
225
+ function searchChange(e) {
226
+ const value = e.target.value;
227
+ // Loại bỏ ký tự "\" từ chuỗi
228
+ const replaceSensitiveValue = value.replace(/\\/g, '');
229
+ searchSetValue(replaceSensitiveValue);
230
+ paginationData(0);
231
+ setCurrentPage(1);
232
+ setPagi(0);
233
+ setAfterRecord('');
234
+ setBeforeRecord('');
235
+ if (replaceSensitiveValue !== previousValue) {
236
+ setPreviousValue(replaceSensitiveValue);
237
+ }
238
+ if (replaceSensitiveValue.trim().length === 0) {
239
+ setSearchDataResult(dataTable);
240
+ }
241
+ params.set(`search-${tableKey}`, value);
242
+ params.set(`pagi-${tableKey}`, '1');
243
+ params.delete(`after-${tableKey}`);
244
+ params.delete(`before-${tableKey}`);
245
+ router.push(`?${params + ''}`, { scroll: false });
246
+ }
247
+ const debouncedSearch = (0, useDebounce_1.default)(searchValue, 300);
248
+ const sortOnChange = (item) => {
249
+ const isChangeSort = item.id !== activeMenu;
250
+ setIsSort(true);
251
+ sortData(item.field, item.sortDirection);
252
+ setActiveMenu(item.id);
253
+ if (isChangeSort) {
254
+ setIsSortLoading(true);
255
+ }
256
+ };
257
+ const sortSelectOnchange = (item, columnName) => {
258
+ const isChangeSort = item.id !== activeMenu;
259
+ setActiveMenu(item.id);
260
+ sortSelectData(item, columnName);
261
+ setIsSelectSort(true);
262
+ if (isChangeSort) {
263
+ setIsSortLoading(true);
264
+ }
265
+ };
266
+ const actionClickAll = () => {
267
+ actionName(selectedPeople, true);
268
+ };
269
+ const checkConditionRouter = (rowData) => {
270
+ if (routerCondition.conditionArray.some((item) => item === rowData[routerCondition.conditionName])) {
271
+ return true;
272
+ }
273
+ return false;
274
+ };
275
+ const handleSearch = async () => {
276
+ setIsSearchLoading(true);
277
+ const data = getData(await fetchSearchData());
278
+ const dataTable = search.keyResult;
279
+ setCount(data[dataTable].totalCount);
280
+ if (setAggregate) {
281
+ setAggregate(data[dataTable].totalCount);
282
+ }
283
+ if (previousValue !== searchValue) {
284
+ setCurrentPage(1);
285
+ }
286
+ setSearchDataResult(data[dataTable].nodes);
287
+ setIsSearchLoading(false);
288
+ setIsChangeRowQty(false);
289
+ setIsChangePageLoading(false);
290
+ setNumericalOderInPage(pagi);
291
+ // khi search sẽ reset những row đã select
292
+ // setSelectedPeople([]);
293
+ };
294
+ const paginationWithApplyUrl = () => {
295
+ let currentPagination = 1;
296
+ let afterParams = '';
297
+ let beforeParams = '';
298
+ if (!isResetPagination && !isChangeRowQty) {
299
+ const entries = Object.fromEntries(params.entries());
300
+ currentPagination = (entries === null || entries === void 0 ? void 0 : entries[`pagi-${tableKey}`]) ? Number(entries === null || entries === void 0 ? void 0 : entries[`pagi-${tableKey}`]) || 1 : 1;
301
+ afterParams = (entries === null || entries === void 0 ? void 0 : entries[`after-${tableKey}`]) ? (entries === null || entries === void 0 ? void 0 : entries[`after-${tableKey}`]) || '' : '';
302
+ beforeParams = (entries === null || entries === void 0 ? void 0 : entries[`before-${tableKey}`]) ? (entries === null || entries === void 0 ? void 0 : entries[`before-${tableKey}`]) || '' : '';
303
+ }
304
+ if (!isChangePageLoading && !hidePagination && !isChangeRowQty) {
305
+ setCurrentPage(currentPagination);
306
+ setPagi(currentPagination - 1);
307
+ paginationData(currentPagination - 1);
308
+ setAfterRecord(afterParams);
309
+ setBeforeRecord(beforeParams);
310
+ }
311
+ return { currentPagination, afterParams, beforeParams };
312
+ };
313
+ const queryData = async () => {
314
+ let query = dataQuery(afterRecord, beforeRecord);
315
+ const { afterParams, beforeParams, currentPagination } = paginationWithApplyUrl();
316
+ if (!isChangePageLoading) {
317
+ query = dataQuery(afterParams, beforeParams);
318
+ }
319
+ try {
320
+ const variables = (list === null || list === void 0 ? void 0 : list.persistedId)
321
+ ? {
322
+ ...list === null || list === void 0 ? void 0 : list.variables,
323
+ first: rowQuantity,
324
+ after: !isChangePageLoading ? afterParams : afterRecord,
325
+ }
326
+ : {};
327
+ const queryFn = PHXGrpcClientV6_1.PHXClientQueryV6;
328
+ const data = getData(searchValue
329
+ ? await fetchSearchData()
330
+ : await queryFn({
331
+ query,
332
+ variables,
333
+ persistedId: list === null || list === void 0 ? void 0 : list.persistedId,
334
+ schemaGroup: list === null || list === void 0 ? void 0 : list.schemaGroup,
335
+ }));
336
+ if (!data)
337
+ return;
338
+ if (!isBackgroundReload || (numberOfFetchData === 0 && isBackgroundReload)) {
339
+ setIsMainLoading(true);
340
+ }
341
+ const dataTable = list.keyResult;
342
+ bindDataToTable(data[dataTable].nodes);
343
+ setCount(data[dataTable].totalCount);
344
+ setPageInfo(data[dataTable].pageInfo);
345
+ if (setAggregate) {
346
+ setAggregate(data[dataTable].totalCount);
347
+ }
348
+ setIsMainLoading(false);
349
+ if (setHeaderLoading)
350
+ setHeaderLoading();
351
+ setIsSearchLoading(false);
352
+ setIsChangePageLoading(false);
353
+ setIsChangeRowQty(false);
354
+ setNumberOfFetchData(numberOfFetchData + 1);
355
+ loaded === null || loaded === void 0 ? void 0 : loaded(true);
356
+ if (!isChangePageLoading && !hidePagination && !isChangeRowQty) {
357
+ setNumericalOderInPage(currentPagination - 1);
358
+ }
359
+ else {
360
+ setNumericalOderInPage(pagi);
361
+ }
362
+ }
363
+ catch (e) {
364
+ console.log(e);
365
+ }
366
+ };
367
+ (0, react_2.useEffect)(() => {
368
+ if (!searchValue || numberOfFetchData === 0 || !(search === null || search === void 0 ? void 0 : search.enable)) {
369
+ queryData();
370
+ }
371
+ else if (debouncedSearch) {
372
+ handleSearch();
373
+ }
374
+ }, [pagi, debouncedSearch]);
375
+ (0, react_2.useEffect)(() => {
376
+ if (!isNaN(Number(pagination))) {
377
+ setCurrentPage(Number(pagination) + 1);
378
+ }
379
+ }, [pagination]);
380
+ (0, react_2.useEffect)(() => {
381
+ if (dataTable) {
382
+ setIsSortLoading(false);
383
+ }
384
+ if (getDataTable && dataTable.length) {
385
+ getDataTable(dataTable);
386
+ }
387
+ }, [dataTable]);
388
+ (0, react_2.useEffect)(() => {
389
+ if ((!isChangePageLoading && filterLoading && !isSortLoading) || isChangeRowQty) {
390
+ queryData();
391
+ if (!isBackgroundReload || (numberOfFetchData === 0 && isBackgroundReload)) {
392
+ setIsMainLoading(true);
393
+ }
394
+ setSelectedPeople([]);
395
+ }
396
+ if (search && search.enable && isChangePageLoading) {
397
+ setIsSearchLoading(true);
398
+ }
399
+ }, [list, afterRecord, beforeRecord, rowQuantity]);
400
+ (0, react_2.useEffect)(() => {
401
+ if (isSortLoading) {
402
+ queryData();
403
+ setSelectedPeople([]);
404
+ }
405
+ }, [sort]);
406
+ const funcItemReadOnly = thBodyComponent ? thBodyComponent === null || thBodyComponent === void 0 ? void 0 : thBodyComponent.readOnly : null;
407
+ const onClickItem = (item) => {
408
+ if (onClick && (!funcItemReadOnly || (funcItemReadOnly && !funcItemReadOnly(item)))) {
409
+ onClick(item);
410
+ }
411
+ };
412
+ return (react_2.default.createElement(react_2.default.Fragment, null,
413
+ isMainLoading ? (react_2.default.createElement(Skeleton_1.PHXSkeleton, { filterQty: typeLoading === null || typeLoading === void 0 ? void 0 : typeLoading.filterQty, reportQty: typeLoading === null || typeLoading === void 0 ? void 0 : typeLoading.reportQty, type: typeLoading.type })) : (react_2.default.createElement(react_2.default.Fragment, null,
414
+ title && react_2.default.createElement("div", { className: 'mb-4 text-sm font-semibold leading-5 text-gray-900' }, title),
415
+ react_2.default.createElement("div", { className: 'rounded-lg bg-white shadow-[0rem_.3125rem_.3125rem_-.15625rem_rgba(0,0,0,.03),0rem_.1875rem_.1875rem_-.09375rem_rgba(0,0,0,.02),0rem_.125rem_.125rem_-.0625rem_rgba(0,0,0,.02),0rem_.0625rem_.0625rem_-.03125rem_rgba(0,0,0,.03),0rem_.03125rem_.03125rem_0rem_rgba(0,0,0,.04),0rem_0rem_0rem_.0625rem_rgba(0,0,0,.06)] ring-1 ring-gray-200' },
416
+ react_2.default.createElement("div", { className: 'flex flex-col' },
417
+ (dataTable.length > 0 ||
418
+ (dataTable.length === 0 && isSearch) ||
419
+ (dataTable.length === 0 && isSelectSort) ||
420
+ (dataTable.length === 0 && isSort) ||
421
+ (dataTable.length === 0 && (sort === null || sort === void 0 ? void 0 : sort.enable))) && (react_2.default.createElement("div", { className: (0, types_1.classNames)(isSortEmpty && dataTable.length === 0 && !isSearch ? 'hidden' : 'min-w-full align-middle', (sort && sort.enable) || (search && search.enable) ? 'min-h-11' : '') },
422
+ react_2.default.createElement(react_1.Transition, { as: react_2.Fragment, enter: 'transition-[max-height,opacity] duration-300 ease-out overflow-hidden', enterFrom: 'max-h-0 opacity-0', enterTo: 'max-h-20 opacity-100', show: isSearch },
423
+ react_2.default.createElement("div", { className: (0, types_1.classNames)('flex flex-row items-center justify-center rounded-tl-lg rounded-tr-lg px-3 py-1 pl-5 ring-opacity-5', !sort || !sort.enable ? '' : '', searchDataResult.length === 0 && 'border-b', type === 'in-card' && 'bg-gray-50') },
424
+ react_2.default.createElement("div", { className: 'relative mr-2 w-11/12' },
425
+ react_2.default.createElement("input", { autoFocus: true, className: 'block w-full rounded-lg border-transparent bg-white py-1 text-xs hover:border hover:border-gray-500 focus:border-indigo-800 focus:bg-white focus:ring-indigo-800', id: 'search-value', name: 'search-value', onInput: searchChange, placeholder: timKiemPlacholder, type: 'text', value: searchValue })),
426
+ react_2.default.createElement("div", { className: 'flex w-14 justify-center pt-1' }, isSearchLoading ? react_2.default.createElement(Loading_1.PHXSpinner, null) : null),
427
+ react_2.default.createElement("div", null,
428
+ react_2.default.createElement("button", { className: 'inline-flex items-center rounded-lg border-gray-300 px-2 py-1 text-xs font-medium text-gray-700 hover:bg-gray-200', onClick: () => {
429
+ setIsSearch(false);
430
+ searchSetValue('');
431
+ params.delete(`search-${tableKey}`);
432
+ router.push(`?${params + ''}`, { scroll: false });
433
+ }, type: 'button' }, "Cancel")))),
434
+ react_2.default.createElement("div", { className: (0, types_1.classNames)((sort && sort.enable) || (search && search.enable)
435
+ ? `flex flex-row items-center rounded-tl-lg rounded-tr-lg px-3 pl-8 ${sort && sort.enable
436
+ ? `sm:justify-between ${dataTable.length === 0 || searchDataResult.length === 0 ? 'border-b' : ''}`
437
+ : 'sm:justify-end'} ${isSearch ? 'border-none py-1' : 'mb-2 py-1.5'}`
438
+ : '', isSearch && (!sort || !sort.enable) ? 'pointer-events-none opacity-0' : 'opacity-100', type === 'in-card' && 'bg-gray-50') },
439
+ sort && sort.enable ? (react_2.default.createElement(react_2.default.Fragment, null,
440
+ react_2.default.createElement(sort_1.default, { activeMenu: activeMenu, className: 'w-11/12', isSearch: isSearch, onChange: sortOnChange, onChangeSelect: sortSelectOnchange, selectArray: selectArray, sortList: sort.sortList }),
441
+ react_2.default.createElement("div", { className: 'flex justify-center lg:w-14' }, isSortLoading ? react_2.default.createElement(Loading_1.PHXSpinner, null) : null))) : null,
442
+ !isSearch && (search === null || search === void 0 ? void 0 : search.enable) && (react_2.default.createElement("div", { className: 'mr-3 flex justify-center' }, isChangePageLoading ? react_2.default.createElement(Loading_1.PHXSpinner, null) : null)),
443
+ search && search.enable && (react_2.default.createElement("div", { className: 'rounded-lg bg-white' }, !isSearch && (react_2.default.createElement("button", { className: 'ml-1 flex rounded-lg px-2 py-1 text-xs font-normal text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 active:bg-gray-200 active:pb-[0.2rem] active:pt-[0.3rem] active:shadow-[0rem_0.125rem_0.1rem_0rem_#0004_inset] sm:ml-0', onClick: () => setIsSearch(true), type: 'button' },
444
+ react_2.default.createElement(solid_1.MagnifyingGlassIcon, { className: 'h-4 w-4' })))))))),
445
+ dataTable.length > 0 || isSearch ? (react_2.default.createElement("div", { className: 'relative' }, searchDataResult.length > 0 && !isMainLoading ? (react_2.default.createElement("div", { className: '-my-2 overflow-x-auto' },
446
+ react_2.default.createElement("div", { className: (0, types_1.classNames)('min-w-full pb-2 align-middle ring-black ring-opacity-5', (search && search.enable) || (sort && sort.enable) ? '' : 'pt-0.5') },
447
+ react_2.default.createElement("div", { className: (0, types_1.classNames)('relative overflow-auto', (search && search.enable) || (sort && sort.enable)
448
+ ? 'ring-1 ring-black ring-opacity-5'
449
+ : 'mt-1.5') },
450
+ react_2.default.createElement(react_2.default.Fragment, null, selectedAllPeople && selectedAllPeople.enable ? (react_2.default.createElement(react_2.default.Fragment, null, selectedPeople.length > 0 && selectedAllPeople.title && (react_2.default.createElement("div", { className: 'absolute left-12 top-4 flex h-fit items-center space-x-3 bg-gray-50 sm:left-16' },
451
+ react_2.default.createElement(Button_1.PHXButton, { onClick: actionClickAll, secondary: true, size: 'micro' }, selectedAllPeople.title))))) : null),
452
+ react_2.default.createElement("table", { className: (0, types_1.classNames)('min-w-full divide-y divide-gray-300', fixedTableLayout ? 'table-fixed' : '', (search && search.enable) || (sort && sort.enable) ? 'border-t' : '') },
453
+ thHeaderComponent ? (react_2.default.createElement(react_2.default.Fragment, null, selectedAllPeople && selectedAllPeople.enable && isCustomHeaderSelected ? (react_2.default.createElement(react_2.default.Fragment, null, thHeaderComponent(react_2.default.createElement("th", { className: 'relative w-12 rounded-lg px-6 py-2.5 sm:w-16 sm:px-8', scope: 'col' },
454
+ react_2.default.createElement("input", { ref: checkbox, checked: checked, className: 'absolute left-4 top-1/2 -mt-2 block h-4 w-4 rounded border-[0.5px] border-gray-500 text-indigo-800 hover:cursor-pointer hover:bg-gray-100 focus:ring-transparent sm:left-6', onChange: toggleAll, type: 'checkbox' }))))) : (react_2.default.createElement(react_2.default.Fragment, null, thHeaderComponent)))) : (react_2.default.createElement("thead", null,
455
+ react_2.default.createElement(HeaderTable_1.default, { border: border, checkbox: checkbox, checked: checked, disableSpacing: disableSpacing, isCenterText: isCenterText, numericalOrder: numericalOrderDefault, selectedAllPeople: selectedAllPeople, thHeader: thHeader, toggleAll: toggleAll, lefts: lefts, refs: refs, stickyColumnNumber: stickyColumnNumber, selectedPeople: selectedPeople, stickyColumnNumberRight: stickyColumnNumberRight, rights: rights, refRights: refRights, search: search, tableKey: tableKey }))),
456
+ react_2.default.createElement("tbody", { className: 'divide-y divide-gray-200' }, searchValue === ''
457
+ ? dataTable.map((item, index) => (
458
+ // @ts-ignore
459
+ react_2.default.createElement("tr", { key: item.rowId, className: (0, types_1.classNames)(clickRow && !funcItemReadOnly ? 'hover:cursor-pointer hover:bg-gray-50' : '', renderInclude(item) && !(item === null || item === void 0 ? void 0 : item.entered_school) && (selectedAllPeople === null || selectedAllPeople === void 0 ? void 0 : selectedAllPeople.enable)
460
+ ? 'bg-gray-50'
461
+ : '', funcItemReadOnly && clickType === 'custom'
462
+ ? funcItemReadOnly(item)
463
+ ? ''
464
+ : 'hover:cursor-pointer hover:bg-gray-50'
465
+ : ''), onClick: () => {
466
+ if (clickRow) {
467
+ if (routerCondition) {
468
+ // eslint-disable-next-line no-unused-expressions
469
+ checkConditionRouter(item)
470
+ ? router.push(`${routerCondition.link}${item.rowId}`)
471
+ : router.push(`${editActionLink}${item.rowId}`);
472
+ }
473
+ else if (clickType === 'edit') {
474
+ router.push(`${editActionLink}${item.rowId}`);
475
+ }
476
+ else {
477
+ // @ts-ignore
478
+ onClickItem(item);
479
+ }
480
+ }
481
+ } }, thBody.map((bodyItem, bodyIndex) => (react_2.default.createElement(RowTable_1.RowTable, { key: bodyIndex, bodyIndex: bodyIndex, border: border, brSetSelectedPeople: brSetSelectedPeople, directDetail: directDetail, disableSpacing: disableSpacing, editActionLink: editActionLink, isCenterText: isCenterText, itemBody: item, numericalOrder: {
482
+ ...numericalOrderDefault,
483
+ order: numericalOderInPage * rowQuantity + index + 1,
484
+ }, onChange: onChange, selectedAllPeople: selectedAllPeople, selectedPeople: selectedPeople, thBody: thBody, thBodyComponent: thBodyComponent, thBodyFilter: thBodyFilter, lefts: lefts, stickyColumnNumber: stickyColumnNumber, stickyColumnNumberRight: stickyColumnNumberRight, rights: rights, hidePagination: hidePagination, dataTableAggregate: dataTable.length, itemIndex: index, tableKey: tableKey }))))))
485
+ : searchDataResult.map((item, index) => (
486
+ // @ts-ignore
487
+ react_2.default.createElement("tr", { key: item.rowId, className: (0, types_1.classNames)(clickRow && !funcItemReadOnly ? 'hover:cursor-pointer hover:bg-gray-50' : '', renderInclude(item) && !(item === null || item === void 0 ? void 0 : item.entered_school) && (selectedAllPeople === null || selectedAllPeople === void 0 ? void 0 : selectedAllPeople.enable)
488
+ ? 'bg-gray-50'
489
+ : '', funcItemReadOnly && clickType === 'custom'
490
+ ? funcItemReadOnly(item)
491
+ ? ''
492
+ : 'hover:cursor-pointer hover:bg-gray-50'
493
+ : '', hidePagination && index === searchDataResult.length - 1 && 'rounded-bl-lg'), onClick: () => {
494
+ if (clickRow) {
495
+ if (routerCondition) {
496
+ // eslint-disable-next-line no-unused-expressions
497
+ checkConditionRouter(item)
498
+ ? router.push(`${routerCondition.link}${item.rowId}`)
499
+ : router.push(`${editActionLink}${item.rowId}`);
500
+ }
501
+ else if (clickType === 'edit') {
502
+ router.push(`${editActionLink}${item.rowId}`);
503
+ }
504
+ else {
505
+ // @ts-ignore
506
+ onClickItem(item);
507
+ }
508
+ }
509
+ } }, thBody.map((bodyItem, bodyIndex) => (react_2.default.createElement(RowTable_1.RowTable, { key: bodyIndex, bodyIndex: bodyIndex, border: border, brSetSelectedPeople: brSetSelectedPeople, directDetail: directDetail, disableSpacing: disableSpacing, editActionLink: editActionLink, isCenterText: isCenterText, itemBody: item, numericalOrder: {
510
+ ...numericalOrderDefault,
511
+ order: numericalOderInPage * rowQuantity + index + 1,
512
+ }, onChange: onChange, selectedAllPeople: selectedAllPeople, selectedPeople: selectedPeople, thBody: thBody, thBodyComponent: thBodyComponent, thBodyFilter: thBodyFilter, lefts: lefts, stickyColumnNumber: stickyColumnNumber, stickyColumnNumberRight: stickyColumnNumberRight, rights: rights, hidePagination: hidePagination, dataTableAggregate: searchDataResult.length, itemIndex: index, tableKey: tableKey })))))))))))) : (react_2.default.createElement(EmptySearch_1.PHXEmptySearch, null)))) : (dataTable.length === 0 && isSearch) ||
513
+ (dataTable.length === 0 && isSelectSort) ||
514
+ (dataTable.length === 0 && isSort) ||
515
+ (dataTable.length === 0 && (sort === null || sort === void 0 ? void 0 : sort.enable)) ? (react_2.default.createElement(react_2.default.Fragment, null, enableEmptyStateAction ? react_2.default.createElement(EmptyStateAction_1.PHXEmptyStateAction, { ...emptyStateActionAttribute }) : react_2.default.createElement(EmptyRecord_1.PHXEmptyRecord, null))) : (react_2.default.createElement(react_2.default.Fragment, null, enableEmptyStateAction ? (react_2.default.createElement(EmptyStateAction_1.PHXEmptyStateAction, { ...emptyStateActionAttribute })) : completeState ? (react_2.default.createElement(CompleteState_1.PHXCompleteState, { title: completeStateTitle || 'Hoàn tất duyệt đơn!', description: completeStateDescription || 'Tất cả đơn đăng ký đã được duyệt.' })) : (react_2.default.createElement(EmptyRecord_1.PHXEmptyRecord, null))))),
516
+ dataTable.length > 0 && !hidePagination && (react_2.default.createElement("div", { className: 'flex items-center justify-between rounded-lg rounded-tl-none rounded-tr-none border-t border-gray-200 bg-[#F9FAFB] py-2 pl-7 pr-2' },
517
+ react_2.default.createElement(PaginaitonSelectedV5_1.default, { rowQuantity: rowQuantity, setIsChangeRowQty: setIsChangeRowQty, setRowQuantity: setRowQuantity, router: router, searchParams: params, tableKey: tableKey, setCurrentPage: setCurrentPage, setPagi: setPagi, paginationData: paginationData, setAfterRecord: setAfterRecord, setBeforeRecord: setBeforeRecord }),
518
+ react_2.default.createElement(PaginationV5_1.default, { count: count, currentPage: currentPage, handleChangePage: handleChangePage, pagination: pagination, router: router, rowQuantity: rowQuantity, totalPages: Math.ceil(count / rowQuantity), searchParams: params, tableKey: tableKey, setAfterRecord: setAfterRecord, setBeforeRecord: setBeforeRecord, pageInfo: pageInfo })))))),
519
+ (selectedAllPeople === null || selectedAllPeople === void 0 ? void 0 : selectedAllPeople.enable) && !(selectedAllPeople === null || selectedAllPeople === void 0 ? void 0 : selectedAllPeople.hideSelectedAction) && (react_2.default.createElement(SelectedAction_1.default, { selectedBtn: selectedBtn, selectedPeople: selectedPeople, slectedTitle: slectedTitle, toggleAll: toggleAll }))));
520
+ }
521
+ //# sourceMappingURL=TableV6.js.map