aq-fe-framework 0.1.862 → 0.1.863

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.
@@ -22,4 +22,4 @@ interface MyDataTableProps<TData extends MRT_RowData> extends MRT_TableOptions<T
22
22
  }
23
23
  declare function MyDataTable<TData extends MRT_RowData>({ rowActionSize, columns, data, setSelectedRow, isError, isLoading, pagination, idSelectionOne, setIdSelectionOne, renderTopToolbarCustomActions, visibleFields, ...rest }: MyDataTableProps<TData>): react_jsx_runtime.JSX.Element;
24
24
 
25
- export { type MyDataTableInternalProps as M, type PaginationState as P, type MyDataTableProps as a, MyDataTable as b };
25
+ export { type MyDataTableProps as M, type PaginationState as P, type MyDataTableInternalProps as a, MyDataTable as b };
@@ -0,0 +1,197 @@
1
+ // src/utils/utils_converter.ts
2
+ function utils_converter_mapEnumToSelectData(enumObj, labelMap) {
3
+ return Object.entries(enumObj).filter(([key, value]) => isNaN(Number(key))).map(([_, value]) => {
4
+ var _a;
5
+ const stringValue = value.toString();
6
+ return {
7
+ value: stringValue,
8
+ label: (_a = labelMap[stringValue]) != null ? _a : `Kh\xF4ng r\xF5 (${stringValue})`
9
+ };
10
+ });
11
+ }
12
+ var utils_converter_getLabelByValue = (data, value) => {
13
+ const numericValue = Number(value);
14
+ return data[numericValue] || "Kh\xF4ng x\xE1c \u0111\u1ECBnh";
15
+ };
16
+ var utils_converter_getKeyByValue = (obj, value) => {
17
+ var _a;
18
+ return (_a = Object.entries(obj).find(([_, v]) => v === value)) == null ? void 0 : _a[0];
19
+ };
20
+ function utils_converter_enumToSelectOptions(enumObject) {
21
+ const result = [];
22
+ const numericEnumKeys = Object.keys(enumObject).filter((key) => isNaN(Number(key)));
23
+ for (const key of numericEnumKeys) {
24
+ const enumValue = enumObject[key];
25
+ if (typeof enumValue === "number") {
26
+ result.push({
27
+ value: String(enumValue),
28
+ label: key
29
+ });
30
+ }
31
+ }
32
+ return result;
33
+ }
34
+ function utils_converter_youTubeUrlToEmbed(url) {
35
+ try {
36
+ const urlObj = new URL(url);
37
+ const videoId = urlObj.searchParams.get("v");
38
+ if (videoId) {
39
+ return `https://www.youtube.com/embed/${videoId}`;
40
+ }
41
+ if (url.includes("/embed/")) {
42
+ return url;
43
+ }
44
+ return "";
45
+ } catch (e) {
46
+ return "";
47
+ }
48
+ }
49
+
50
+ // src/utils/utils_excel.ts
51
+ import saveAs from "file-saver";
52
+ import * as XLSX from "xlsx";
53
+ function isObjectPath(path) {
54
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*(\.[a-zA-Z_$][a-zA-Z0-9_$]*)+$/.test(path);
55
+ }
56
+ function getValueByPath(obj, path) {
57
+ if (isObjectPath(path)) {
58
+ return path.split(".").reduce((acc, key) => acc == null ? void 0 : acc[key], obj);
59
+ }
60
+ return obj == null ? void 0 : obj[path];
61
+ }
62
+ async function utils_excel_exportExcel({
63
+ workbook,
64
+ sheetName,
65
+ data,
66
+ config
67
+ }) {
68
+ const sheet = workbook.addWorksheet(sheetName);
69
+ const fieldKeys = config.map((item) => String(item.fieldKey));
70
+ const headerMappings = {};
71
+ const markedColumns = [];
72
+ config.forEach((item) => {
73
+ const fieldKeyStr = String(item.fieldKey);
74
+ headerMappings[fieldKeyStr] = item.fieldName;
75
+ if (item.isRequired) markedColumns.push(fieldKeyStr);
76
+ });
77
+ sheet.columns = fieldKeys.map((fieldKey) => ({
78
+ key: fieldKey,
79
+ width: 20
80
+ }));
81
+ const displayRow = sheet.addRow(
82
+ fieldKeys.map(
83
+ (fieldKey) => markedColumns.includes(fieldKey) ? `${headerMappings[fieldKey]} *` : headerMappings[fieldKey] || fieldKey
84
+ )
85
+ );
86
+ const keyRow = sheet.addRow(fieldKeys);
87
+ data.forEach((row) => {
88
+ const rowData = {};
89
+ config.forEach(({ fieldKey, formatter }) => {
90
+ const fieldKeyStr = String(fieldKey);
91
+ const rawValue = getValueByPath(row, fieldKeyStr);
92
+ rowData[fieldKeyStr] = formatter ? formatter(rawValue, row) : rawValue;
93
+ });
94
+ sheet.addRow(rowData);
95
+ });
96
+ for (let i = 1; i <= fieldKeys.length; i++) {
97
+ const cell = displayRow.getCell(i);
98
+ cell.font = { bold: true };
99
+ cell.fill = {
100
+ type: "pattern",
101
+ pattern: "solid",
102
+ fgColor: { argb: "FFE0E0E0" }
103
+ };
104
+ }
105
+ for (let i = 1; i <= fieldKeys.length; i++) {
106
+ const cell = keyRow.getCell(i);
107
+ cell.font = { italic: true };
108
+ cell.fill = {
109
+ type: "pattern",
110
+ pattern: "solid",
111
+ fgColor: { argb: "FFF0F0F0" }
112
+ };
113
+ }
114
+ if (markedColumns.length > 0) {
115
+ for (let i = 1; i <= fieldKeys.length; i++) {
116
+ const cell = displayRow.getCell(i);
117
+ const text = cell.value;
118
+ if (typeof text === "string" && text.endsWith(" *")) {
119
+ cell.value = {
120
+ richText: [
121
+ {
122
+ text: text.slice(0, -2),
123
+ font: { bold: true }
124
+ },
125
+ {
126
+ text: " *",
127
+ font: { bold: true, color: { argb: "FFFF0000" } }
128
+ }
129
+ ]
130
+ };
131
+ }
132
+ }
133
+ }
134
+ return workbook;
135
+ }
136
+ async function utils_excel_download({
137
+ workbook,
138
+ name
139
+ }) {
140
+ const buffer = await workbook.xlsx.writeBuffer();
141
+ const blob = new Blob([buffer], {
142
+ type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
143
+ });
144
+ saveAs(blob, name);
145
+ }
146
+ async function utils_excel_parseToJson(file, titleIndex, dataStartIndex) {
147
+ const buffer = await file.arrayBuffer();
148
+ const workbook = XLSX.read(buffer);
149
+ const sheet = workbook.Sheets[workbook.SheetNames[0]];
150
+ const raw = XLSX.utils.sheet_to_json(sheet, { header: 1 });
151
+ const headers = raw[titleIndex - 1];
152
+ const rows = raw.slice(dataStartIndex - 1);
153
+ const data = rows.map((row) => {
154
+ const obj = {};
155
+ headers.forEach((header, i) => {
156
+ obj[header] = row[i];
157
+ });
158
+ return obj;
159
+ });
160
+ return {
161
+ data,
162
+ // 👈 ép kiểu an toàn vì bạn biết nó đúng
163
+ headers
164
+ };
165
+ }
166
+ function utils_excel_handleExport(data, exportConfig, fileName) {
167
+ const processedData = data.map((row) => {
168
+ const newRow = {};
169
+ exportConfig.fields.forEach(({ fieldName, formatFunction }) => {
170
+ const value = row[fieldName];
171
+ newRow[fieldName] = formatFunction ? formatFunction(value, row) : value;
172
+ });
173
+ return newRow;
174
+ });
175
+ const headers = {};
176
+ exportConfig.fields.forEach(({ fieldName, header }) => {
177
+ headers[fieldName] = header;
178
+ });
179
+ const worksheet = XLSX.utils.json_to_sheet(processedData);
180
+ const headerRow = exportConfig.fields.map(({ fieldName }) => headers[fieldName]);
181
+ XLSX.utils.sheet_add_aoa(worksheet, [headerRow], { origin: "A1" });
182
+ const workbook = XLSX.utils.book_new();
183
+ XLSX.utils.book_append_sheet(workbook, worksheet, "Exported Data");
184
+ XLSX.writeFile(workbook, `${fileName}.xlsx`);
185
+ }
186
+
187
+ export {
188
+ utils_converter_mapEnumToSelectData,
189
+ utils_converter_getLabelByValue,
190
+ utils_converter_getKeyByValue,
191
+ utils_converter_enumToSelectOptions,
192
+ utils_converter_youTubeUrlToEmbed,
193
+ utils_excel_exportExcel,
194
+ utils_excel_download,
195
+ utils_excel_parseToJson,
196
+ utils_excel_handleExport
197
+ };
@@ -37,141 +37,6 @@ function utils_currency_formatWithSuffix(amount, suffix = "") {
37
37
  return `${formattedAmount}${suffix}`;
38
38
  }
39
39
 
40
- // src/utils/utils_excel.ts
41
- import saveAs from "file-saver";
42
- import * as XLSX from "xlsx";
43
- function isObjectPath(path) {
44
- return /^[a-zA-Z_$][a-zA-Z0-9_$]*(\.[a-zA-Z_$][a-zA-Z0-9_$]*)+$/.test(path);
45
- }
46
- function getValueByPath(obj, path) {
47
- if (isObjectPath(path)) {
48
- return path.split(".").reduce((acc, key) => acc == null ? void 0 : acc[key], obj);
49
- }
50
- return obj == null ? void 0 : obj[path];
51
- }
52
- async function utils_excel_exportExcel({
53
- workbook,
54
- sheetName,
55
- data,
56
- config
57
- }) {
58
- const sheet = workbook.addWorksheet(sheetName);
59
- const fieldKeys = config.map((item) => String(item.fieldKey));
60
- const headerMappings = {};
61
- const markedColumns = [];
62
- config.forEach((item) => {
63
- const fieldKeyStr = String(item.fieldKey);
64
- headerMappings[fieldKeyStr] = item.fieldName;
65
- if (item.isRequired) markedColumns.push(fieldKeyStr);
66
- });
67
- sheet.columns = fieldKeys.map((fieldKey) => ({
68
- key: fieldKey,
69
- width: 20
70
- }));
71
- const displayRow = sheet.addRow(
72
- fieldKeys.map(
73
- (fieldKey) => markedColumns.includes(fieldKey) ? `${headerMappings[fieldKey]} *` : headerMappings[fieldKey] || fieldKey
74
- )
75
- );
76
- const keyRow = sheet.addRow(fieldKeys);
77
- data.forEach((item) => {
78
- const rowData = {};
79
- fieldKeys.forEach((fieldKey) => {
80
- rowData[fieldKey] = getValueByPath(item, fieldKey);
81
- });
82
- sheet.addRow(rowData);
83
- });
84
- for (let i = 1; i <= fieldKeys.length; i++) {
85
- const cell = displayRow.getCell(i);
86
- cell.font = { bold: true };
87
- cell.fill = {
88
- type: "pattern",
89
- pattern: "solid",
90
- fgColor: { argb: "FFE0E0E0" }
91
- };
92
- }
93
- for (let i = 1; i <= fieldKeys.length; i++) {
94
- const cell = keyRow.getCell(i);
95
- cell.font = { italic: true };
96
- cell.fill = {
97
- type: "pattern",
98
- pattern: "solid",
99
- fgColor: { argb: "FFF0F0F0" }
100
- };
101
- }
102
- if (markedColumns.length > 0) {
103
- for (let i = 1; i <= fieldKeys.length; i++) {
104
- const cell = displayRow.getCell(i);
105
- const text = cell.value;
106
- if (typeof text === "string" && text.endsWith(" *")) {
107
- cell.value = {
108
- richText: [
109
- {
110
- text: text.slice(0, -2),
111
- font: { bold: true }
112
- },
113
- {
114
- text: " *",
115
- font: { bold: true, color: { argb: "FFFF0000" } }
116
- }
117
- ]
118
- };
119
- }
120
- }
121
- }
122
- return workbook;
123
- }
124
- async function utils_excel_download({
125
- workbook,
126
- name
127
- }) {
128
- const buffer = await workbook.xlsx.writeBuffer();
129
- const blob = new Blob([buffer], {
130
- type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
131
- });
132
- saveAs(blob, name);
133
- }
134
- async function utils_excel_parseToJson(file, titleIndex, dataStartIndex) {
135
- const buffer = await file.arrayBuffer();
136
- const workbook = XLSX.read(buffer);
137
- const sheet = workbook.Sheets[workbook.SheetNames[0]];
138
- const raw = XLSX.utils.sheet_to_json(sheet, { header: 1 });
139
- const headers = raw[titleIndex - 1];
140
- const rows = raw.slice(dataStartIndex - 1);
141
- const data = rows.map((row) => {
142
- const obj = {};
143
- headers.forEach((header, i) => {
144
- obj[header] = row[i];
145
- });
146
- return obj;
147
- });
148
- return {
149
- data,
150
- // 👈 ép kiểu an toàn vì bạn biết nó đúng
151
- headers
152
- };
153
- }
154
- function utils_excel_handleExport(data, exportConfig, fileName) {
155
- const processedData = data.map((row) => {
156
- const newRow = {};
157
- exportConfig.fields.forEach(({ fieldName, formatFunction }) => {
158
- const value = row[fieldName];
159
- newRow[fieldName] = formatFunction ? formatFunction(value, row) : value;
160
- });
161
- return newRow;
162
- });
163
- const headers = {};
164
- exportConfig.fields.forEach(({ fieldName, header }) => {
165
- headers[fieldName] = header;
166
- });
167
- const worksheet = XLSX.utils.json_to_sheet(processedData);
168
- const headerRow = exportConfig.fields.map(({ fieldName }) => headers[fieldName]);
169
- XLSX.utils.sheet_add_aoa(worksheet, [headerRow], { origin: "A1" });
170
- const workbook = XLSX.utils.book_new();
171
- XLSX.utils.book_append_sheet(workbook, worksheet, "Exported Data");
172
- XLSX.writeFile(workbook, `${fileName}.xlsx`);
173
- }
174
-
175
40
  // src/utils/utils_field.ts
176
41
  function utils_field_extractAQBaseField(values) {
177
42
  const { id, name, code, concurrencyStamp } = values || {};
@@ -180,7 +45,7 @@ function utils_field_extractAQBaseField(values) {
180
45
 
181
46
  // src/utils/utils_file.ts
182
47
  import Docxtemplater from "docxtemplater";
183
- import { saveAs as saveAs2 } from "file-saver";
48
+ import { saveAs } from "file-saver";
184
49
  import PizZip from "pizzip";
185
50
  function utils_file_fileToAQDocumentType(file) {
186
51
  return new Promise((resolve, reject) => {
@@ -237,7 +102,7 @@ async function utils_file_docxtemplaterDownload({
237
102
  const doc = new Docxtemplater(zip);
238
103
  doc.render(data);
239
104
  const buffer = doc.getZip().generate({ type: "blob" });
240
- saveAs2(buffer, fileName || "output.docx");
105
+ saveAs(buffer, fileName || "output.docx");
241
106
  }
242
107
  function utils_file_base64ToFile(base64, filename) {
243
108
  const [meta, content] = base64.split(",");
@@ -389,10 +254,6 @@ var utils_validator_validateCode = (value) => {
389
254
 
390
255
  export {
391
256
  utils_pdf_download,
392
- utils_excel_exportExcel,
393
- utils_excel_download,
394
- utils_excel_parseToJson,
395
- utils_excel_handleExport,
396
257
  utils_aq_mapBaseEntityToDomain,
397
258
  utils_aq_mapDomainToEntity,
398
259
  utils_currency_formatWithSuffix,
@@ -169,33 +169,87 @@ function createBaseUrl(baseUrl) {
169
169
  }
170
170
 
171
171
  // src/hooks/custom-hooks/createMapper.ts
172
- function createMapper(config) {
173
- return {
174
- toAPI: (uiData) => {
175
- const apiData = {};
176
- for (const [uiKey, mapping] of Object.entries(config)) {
177
- const { apiKey, toAPI } = mapping;
178
- if (typeof toAPI === "function") {
179
- apiData[apiKey] = toAPI(uiData[uiKey], uiData);
172
+ function createMapper(fieldMap) {
173
+ const toUi = (raw) => {
174
+ const result = {};
175
+ Object.entries(fieldMap).forEach(
176
+ ([uiKey, mapping]) => {
177
+ if (typeof mapping === "string") {
178
+ result[uiKey] = raw[mapping];
180
179
  } else {
181
- apiData[apiKey] = uiData[uiKey];
180
+ result[uiKey] = mapping.fromApi(raw);
182
181
  }
183
182
  }
184
- return apiData;
185
- },
186
- toUI: (apiData) => {
187
- const uiData = {};
188
- for (const [uiKey, mapping] of Object.entries(config)) {
189
- const { apiKey, toUI } = mapping;
190
- if (typeof toUI === "function") {
191
- uiData[uiKey] = toUI(apiData[apiKey], apiData);
183
+ );
184
+ return result;
185
+ };
186
+ const toApi = (ui, base = {}) => {
187
+ let result = __spreadValues({}, base);
188
+ Object.entries(fieldMap).forEach(
189
+ ([uiKey, mapping]) => {
190
+ const value = ui[uiKey];
191
+ if (value === void 0) return;
192
+ if (typeof mapping === "string") {
193
+ result[mapping] = value;
192
194
  } else {
193
- uiData[uiKey] = apiData[apiKey];
195
+ result = __spreadValues(__spreadValues({}, result), mapping.toApi(value, result));
194
196
  }
195
197
  }
196
- return uiData;
198
+ );
199
+ return result;
200
+ };
201
+ return { toUi, toApi };
202
+ }
203
+
204
+ // src/api/config/baseAxios.ts
205
+ import axios from "axios";
206
+ var baseAxios = axios.create({
207
+ baseURL: ""
208
+ // server
209
+ // baseURL: process.env.NEXT_PUBLIC_API_LOCAL, // local debug
210
+ });
211
+ baseAxios.interceptors.request.use(
212
+ (config) => {
213
+ var _a, _b;
214
+ const tokenData = localStorage.getItem("useStore_Authenticate");
215
+ const state = JSON.parse(tokenData);
216
+ const token = (_b = (_a = state == null ? void 0 : state.state) == null ? void 0 : _a.state) == null ? void 0 : _b.token;
217
+ if (token) {
218
+ config.headers.Authorization = `Bearer ${token}`;
219
+ }
220
+ return config;
221
+ },
222
+ (error) => {
223
+ return Promise.reject(error);
224
+ }
225
+ );
226
+ var baseAxios_default = baseAxios;
227
+
228
+ // src/hooks/custom-hooks/createRepository.ts
229
+ function createRepository(baseUrl, mapper, extra) {
230
+ const base = {
231
+ async getAll() {
232
+ const { data } = await baseAxios_default.get(baseUrl);
233
+ return data.map(mapper.toUi);
234
+ },
235
+ async getById(id) {
236
+ const { data } = await baseAxios_default.get(`${baseUrl}/${id}`);
237
+ return mapper.toUi(data);
238
+ },
239
+ async create(item) {
240
+ const { data } = await baseAxios_default.post(baseUrl, mapper.toApi(item));
241
+ return mapper.toUi(data);
242
+ },
243
+ async update(id, item) {
244
+ const { data } = await baseAxios_default.put(`${baseUrl}/${id}`, mapper.toApi(item));
245
+ return mapper.toUi(data);
246
+ },
247
+ async delete(id) {
248
+ await baseAxios_default.delete(`${baseUrl}/${id}`);
197
249
  }
198
250
  };
251
+ const custom = extra ? extra(baseAxios_default) : {};
252
+ return __spreadValues(__spreadValues({}, base), custom);
199
253
  }
200
254
 
201
255
  // src/hooks/custom-hooks/useConfig.ts
@@ -347,30 +401,6 @@ function useCrudService(service, queryKey) {
347
401
  };
348
402
  }
349
403
 
350
- // src/api/config/baseAxios.ts
351
- import axios from "axios";
352
- var baseAxios = axios.create({
353
- baseURL: ""
354
- // server
355
- // baseURL: process.env.NEXT_PUBLIC_API_LOCAL, // local debug
356
- });
357
- baseAxios.interceptors.request.use(
358
- (config) => {
359
- var _a, _b;
360
- const tokenData = localStorage.getItem("useStore_Authenticate");
361
- const state = JSON.parse(tokenData);
362
- const token = (_b = (_a = state == null ? void 0 : state.state) == null ? void 0 : _a.state) == null ? void 0 : _b.token;
363
- if (token) {
364
- config.headers.Authorization = `Bearer ${token}`;
365
- }
366
- return config;
367
- },
368
- (error) => {
369
- return Promise.reject(error);
370
- }
371
- );
372
- var baseAxios_default = baseAxios;
373
-
374
404
  // src/hooks/custom-hooks/useLoadAxiosConfig.ts
375
405
  import { useEffect as useEffect2, useState as useState3 } from "react";
376
406
  var useLoadAxiosConfig = ({
@@ -429,11 +459,12 @@ export {
429
459
  createBaseApi,
430
460
  createBaseUrl,
431
461
  createMapper,
462
+ baseAxios_default,
463
+ createRepository,
432
464
  useConfig,
433
465
  useMyReactMutation,
434
466
  useMyReactQuery,
435
467
  useCrudService,
436
- baseAxios_default,
437
468
  useLoadAxiosConfig,
438
469
  useQ_AQ_GetAQModule
439
470
  };
@@ -1,6 +1,14 @@
1
1
  import {
2
- utils_converter_mapEnumToSelectData
3
- } from "./chunk-7NNLZDND.mjs";
2
+ utils_converter_mapEnumToSelectData,
3
+ utils_excel_download,
4
+ utils_excel_exportExcel
5
+ } from "./chunk-ENU27ON2.mjs";
6
+ import {
7
+ utils_date_dateToDDMMYYYString,
8
+ utils_date_formatToDateTimeStartEnd,
9
+ utils_date_formatToDateTimeString,
10
+ utils_date_getHHmm
11
+ } from "./chunk-QSWIVDXC.mjs";
4
12
 
5
13
  // src/utils-v2/utils_converter.ts
6
14
  var utils_converter = {
@@ -21,14 +29,7 @@ var utils_currency = {
21
29
 
22
30
  // src/utils-v2/utils_date.ts
23
31
  var utils_date = {
24
- toDDMMYYY(date) {
25
- const parsedDate = typeof date === "string" ? new Date(date) : date;
26
- if (!(parsedDate instanceof Date) || isNaN(parsedDate.getTime())) return "";
27
- const day = String(parsedDate.getDate()).padStart(2, "0");
28
- const month = String(parsedDate.getMonth() + 1).padStart(2, "0");
29
- const year = parsedDate.getFullYear();
30
- return `${day}/${month}/${year}`;
31
- },
32
+ toDDMMYYY: utils_date_dateToDDMMYYYString,
32
33
  toMMYYY(date) {
33
34
  const parsedDate = typeof date === "string" ? new Date(date) : date;
34
35
  if (!(parsedDate instanceof Date) || isNaN(parsedDate.getTime())) return "";
@@ -36,33 +37,15 @@ var utils_date = {
36
37
  const year = parsedDate.getFullYear();
37
38
  return `${month}/${year}`;
38
39
  },
39
- formatToDateTimeStartEnd(startDate, endDate) {
40
- const startday = String(startDate.getDate()).padStart(2, "0");
41
- const startmonth = String(startDate.getMonth() + 1).padStart(2, "0");
42
- const startyear = startDate.getFullYear();
43
- const starthour = String(startDate.getHours()).padStart(2, "0");
44
- const startminute = String(startDate.getMinutes()).padStart(2, "0");
45
- const endhour = String(endDate.getHours()).padStart(2, "0");
46
- const endminuate = String(endDate.getMinutes()).padStart(2, "0");
47
- return `${startday}/${startmonth}/${startyear} [${starthour}:${startminute} - ${endhour}:${endminuate}]`;
48
- },
49
- getHHmm(date) {
50
- if (!(date instanceof Date) || isNaN(date.getTime())) return "";
51
- const hour = String(date.getHours()).padStart(2, "0");
52
- const minute = String(date.getMinutes()).padStart(2, "0");
53
- return `${hour}:${minute}`;
54
- },
55
- formatToDateTimeString(date, WithSeconds) {
56
- const parsedDate = typeof date === "string" ? new Date(date) : date;
57
- if (!(parsedDate instanceof Date) || isNaN(parsedDate.getTime())) return "";
58
- const day = String(parsedDate.getDate()).padStart(2, "0");
59
- const month = String(parsedDate.getMonth() + 1).padStart(2, "0");
60
- const year = parsedDate.getFullYear();
61
- const hours = String(parsedDate.getHours()).padStart(2, "0");
62
- const minutes = String(parsedDate.getMinutes()).padStart(2, "0");
63
- const seconds = String(parsedDate.getSeconds()).padStart(2, "0");
64
- return `${day}/${month}/${year} - ${hours}:${minutes}${WithSeconds && `:${seconds}`}`;
65
- }
40
+ formatToDateTimeStartEnd: utils_date_formatToDateTimeStartEnd,
41
+ getHHmm: utils_date_getHHmm,
42
+ formatToDateTimeString: utils_date_formatToDateTimeString
43
+ };
44
+
45
+ // src/utils-v2/utils_excel.ts
46
+ var utils_excel = {
47
+ addSheet: utils_excel_exportExcel,
48
+ download: utils_excel_download
66
49
  };
67
50
 
68
51
  // src/utils-v2/utils_mantineReactTable.ts
@@ -141,6 +124,7 @@ export {
141
124
  utils_converter,
142
125
  utils_currency,
143
126
  utils_date,
127
+ utils_excel,
144
128
  utils_mantineReactTable,
145
129
  utils_text,
146
130
  utils_time