@amirjalili1374/ui-kit 1.8.0 → 1.9.0-beta.0
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/components/shared/data-table-v2/CustomDataTableV2.vue.d.ts.map +1 -1
- package/dist/components/shared/data-table-v2/exportToExcel.d.ts +10 -0
- package/dist/components/shared/data-table-v2/exportToExcel.d.ts.map +1 -0
- package/dist/types/models/person.d.ts +13 -0
- package/dist/types/models/person.d.ts.map +1 -0
- package/dist/types/models/userInfo.d.ts +29 -0
- package/dist/types/models/userInfo.d.ts.map +1 -0
- package/dist/ui-kit.cjs.js +1 -1
- package/dist/ui-kit.cjs.js.map +1 -1
- package/dist/ui-kit.es.js +241 -317
- package/dist/ui-kit.es.js.map +1 -1
- package/dist/utils/greetingUtils.d.ts +4 -28
- package/dist/utils/greetingUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/components/shared/data-table-v2/components/DataTableCellContent.vue.d.ts +0 -11
- package/dist/components/shared/data-table-v2/components/DataTableCellContent.vue.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableCellDisplay.d.ts +0 -28
- package/dist/components/shared/data-table-v2/composables/useDataTableCellDisplay.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableDownload.d.ts +0 -6
- package/dist/components/shared/data-table-v2/composables/useDataTableDownload.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableExport.d.ts +0 -9
- package/dist/components/shared/data-table-v2/composables/useDataTableExport.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableFetch.d.ts +0 -31
- package/dist/components/shared/data-table-v2/composables/useDataTableFetch.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableFilters.d.ts +0 -22
- package/dist/components/shared/data-table-v2/composables/useDataTableFilters.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableHeaders.d.ts +0 -138
- package/dist/components/shared/data-table-v2/composables/useDataTableHeaders.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/composables/useDataTableSelectionBridge.d.ts +0 -41
- package/dist/components/shared/data-table-v2/composables/useDataTableSelectionBridge.d.ts.map +0 -1
- package/dist/components/shared/data-table-v2/context.d.ts +0 -4
- package/dist/components/shared/data-table-v2/context.d.ts.map +0 -1
package/dist/ui-kit.es.js
CHANGED
|
@@ -15416,6 +15416,122 @@ function computeActionColumnWidth(props) {
|
|
|
15416
15416
|
totalWidth += 32;
|
|
15417
15417
|
return Math.max(totalWidth, 200);
|
|
15418
15418
|
}
|
|
15419
|
+
async function exportTableToExcel(allHeaders, sourceItems, exportFileName) {
|
|
15420
|
+
if (!sourceItems.length) return;
|
|
15421
|
+
const XLSXmod = await import("xlsx");
|
|
15422
|
+
const XLSX = XLSXmod.default ?? XLSXmod;
|
|
15423
|
+
const headers = allHeaders.filter((h2) => h2.key && h2.title);
|
|
15424
|
+
const now = /* @__PURE__ */ new Date();
|
|
15425
|
+
const exportDate = now.toLocaleDateString("fa-IR") + " " + now.toLocaleTimeString("fa-IR", { hour: "2-digit", minute: "2-digit" });
|
|
15426
|
+
const title = exportFileName || "گزارش";
|
|
15427
|
+
const moneyTotals = {};
|
|
15428
|
+
const rows = sourceItems.map((item) => {
|
|
15429
|
+
const row = {};
|
|
15430
|
+
headers.forEach((h2) => {
|
|
15431
|
+
var _a;
|
|
15432
|
+
let value = h2.nestedKey ? (_a = item[h2.key]) == null ? void 0 : _a[h2.nestedKey] : item[h2.key];
|
|
15433
|
+
if (h2.type === "money") {
|
|
15434
|
+
const num = Number(value);
|
|
15435
|
+
value = !isNaN(num) ? num : 0;
|
|
15436
|
+
moneyTotals[h2.title] = (moneyTotals[h2.title] || 0) + value;
|
|
15437
|
+
}
|
|
15438
|
+
if (typeof value === "boolean") value = value ? "بله" : "خیر";
|
|
15439
|
+
row[h2.title] = value ?? "";
|
|
15440
|
+
});
|
|
15441
|
+
return row;
|
|
15442
|
+
});
|
|
15443
|
+
const totalRow = {};
|
|
15444
|
+
headers.forEach((h2, i) => {
|
|
15445
|
+
if (h2.type === "money") totalRow[h2.title] = moneyTotals[h2.title] || 0;
|
|
15446
|
+
else if (i === 0) totalRow[h2.title] = "جمع کل";
|
|
15447
|
+
else totalRow[h2.title] = "";
|
|
15448
|
+
});
|
|
15449
|
+
rows.push(totalRow);
|
|
15450
|
+
const ws = XLSX.utils.json_to_sheet(rows, { origin: "A4" });
|
|
15451
|
+
const range = XLSX.utils.decode_range(ws["!ref"]);
|
|
15452
|
+
ws["!freeze"] = { xSplit: 0, ySplit: 3 };
|
|
15453
|
+
ws["!autofilter"] = {
|
|
15454
|
+
ref: XLSX.utils.encode_range({
|
|
15455
|
+
s: { r: 3, c: 0 },
|
|
15456
|
+
e: range.e
|
|
15457
|
+
})
|
|
15458
|
+
};
|
|
15459
|
+
ws["!cols"] = headers.map((h2) => {
|
|
15460
|
+
let max = h2.title.length;
|
|
15461
|
+
rows.forEach((r) => {
|
|
15462
|
+
const len = String(r[h2.title] ?? "").length;
|
|
15463
|
+
if (len > max) max = len;
|
|
15464
|
+
});
|
|
15465
|
+
return { wch: max + 4 };
|
|
15466
|
+
});
|
|
15467
|
+
XLSX.utils.sheet_add_aoa(ws, [[title], [`تاریخ چاپ: ${exportDate}`], []], { origin: "A1" });
|
|
15468
|
+
ws["!merges"] = [
|
|
15469
|
+
{
|
|
15470
|
+
s: { r: 0, c: 0 },
|
|
15471
|
+
e: { r: 0, c: headers.length - 1 }
|
|
15472
|
+
}
|
|
15473
|
+
];
|
|
15474
|
+
ws["A1"].s = {
|
|
15475
|
+
font: { bold: true, sz: 16, name: "B Nazanin" },
|
|
15476
|
+
alignment: { horizontal: "center", vertical: "center" }
|
|
15477
|
+
};
|
|
15478
|
+
ws["A2"].s = {
|
|
15479
|
+
font: { name: "B Nazanin", sz: 12 },
|
|
15480
|
+
alignment: { horizontal: "left" }
|
|
15481
|
+
};
|
|
15482
|
+
const headerStyle = {
|
|
15483
|
+
font: { bold: true, name: "B Nazanin" },
|
|
15484
|
+
alignment: { horizontal: "center", vertical: "center" },
|
|
15485
|
+
fill: { fgColor: { rgb: "D9D9D9" } },
|
|
15486
|
+
border: {
|
|
15487
|
+
top: { style: "thin" },
|
|
15488
|
+
bottom: { style: "thin" },
|
|
15489
|
+
left: { style: "thin" },
|
|
15490
|
+
right: { style: "thin" }
|
|
15491
|
+
}
|
|
15492
|
+
};
|
|
15493
|
+
const zebraFill = { fgColor: { rgb: "F7F7F7" } };
|
|
15494
|
+
headers.forEach((h2, c) => {
|
|
15495
|
+
const headerCell = XLSX.utils.encode_cell({ r: 3, c });
|
|
15496
|
+
if (ws[headerCell]) ws[headerCell].s = headerStyle;
|
|
15497
|
+
for (let r = 4; r <= rows.length + 3; r++) {
|
|
15498
|
+
const addr = XLSX.utils.encode_cell({ r, c });
|
|
15499
|
+
const cell = ws[addr];
|
|
15500
|
+
if (!cell) continue;
|
|
15501
|
+
const isTotalRow = r === rows.length + 3;
|
|
15502
|
+
const zebra = r % 2 === 0;
|
|
15503
|
+
cell.s = {
|
|
15504
|
+
font: { name: "B Nazanin" },
|
|
15505
|
+
alignment: {
|
|
15506
|
+
horizontal: h2.type === "money" ? "center" : "right",
|
|
15507
|
+
vertical: "center"
|
|
15508
|
+
},
|
|
15509
|
+
border: {
|
|
15510
|
+
top: { style: "thin" },
|
|
15511
|
+
bottom: { style: "thin" },
|
|
15512
|
+
left: { style: "thin" },
|
|
15513
|
+
right: { style: "thin" }
|
|
15514
|
+
},
|
|
15515
|
+
fill: zebra && !isTotalRow ? zebraFill : void 0
|
|
15516
|
+
};
|
|
15517
|
+
if (h2.type === "money" && typeof cell.v === "number") {
|
|
15518
|
+
cell.z = "#,##0;[Red]-#,##0";
|
|
15519
|
+
}
|
|
15520
|
+
if (isTotalRow) {
|
|
15521
|
+
cell.s.font = { bold: true, name: "B Nazanin" };
|
|
15522
|
+
cell.s.fill = { fgColor: { rgb: "EFEFEF" } };
|
|
15523
|
+
}
|
|
15524
|
+
}
|
|
15525
|
+
});
|
|
15526
|
+
const wb = XLSX.utils.book_new();
|
|
15527
|
+
wb.Workbook = {
|
|
15528
|
+
Views: [{ RTL: true }]
|
|
15529
|
+
};
|
|
15530
|
+
XLSX.utils.book_append_sheet(wb, ws, "Report");
|
|
15531
|
+
const dateForFile = now.toLocaleDateString("fa-IR").replaceAll("/", "-");
|
|
15532
|
+
const fileName = `${title}_${dateForFile}.xlsx`;
|
|
15533
|
+
XLSX.writeFile(wb, fileName);
|
|
15534
|
+
}
|
|
15419
15535
|
const VAlertTitle = createSimpleFunctional("v-alert-title");
|
|
15420
15536
|
const makeIconSizeProps = propsFactory({
|
|
15421
15537
|
iconSize: [Number, String],
|
|
@@ -18770,8 +18886,9 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
18770
18886
|
if (!hasAnyActions.value) return base;
|
|
18771
18887
|
return [...base, { title: "عملیات", key: "actions", sortable: false, width: computeActionColumnWidth(props) }];
|
|
18772
18888
|
};
|
|
18773
|
-
const
|
|
18774
|
-
const
|
|
18889
|
+
const tableHeaders = computed(() => buildTableHeaders());
|
|
18890
|
+
const groupedHeaders = tableHeaders;
|
|
18891
|
+
const normalHeaders = tableHeaders;
|
|
18775
18892
|
const hasAutocomplete2 = (header) => {
|
|
18776
18893
|
return Boolean(header.autocompleteItems);
|
|
18777
18894
|
};
|
|
@@ -18815,57 +18932,9 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
18815
18932
|
return void 0;
|
|
18816
18933
|
}
|
|
18817
18934
|
};
|
|
18818
|
-
const resolveAutocompleteItemTitle2 = (header) => {
|
|
18819
|
-
return header.autocompleteItemTitle ?? "title";
|
|
18820
|
-
};
|
|
18821
|
-
const resolveAutocompleteItemValue2 = (header) => {
|
|
18822
|
-
return header.autocompleteItemValue ?? "value";
|
|
18823
|
-
};
|
|
18824
|
-
const resolveAutocompleteReturnObject2 = (header) => {
|
|
18825
|
-
const value = header.autocompleteReturnObject;
|
|
18826
|
-
return value !== false;
|
|
18827
|
-
};
|
|
18828
|
-
const resolveAutocompleteMultiple2 = (header) => {
|
|
18829
|
-
return header.autocompleteMultiple === true;
|
|
18830
|
-
};
|
|
18831
18935
|
const formHeaders = computed(() => {
|
|
18832
18936
|
return props.headers.filter((header) => !header.excludeFromForm);
|
|
18833
18937
|
});
|
|
18834
|
-
const getHeaderType2 = (header) => {
|
|
18835
|
-
if (header.type) {
|
|
18836
|
-
return header.type.toLowerCase();
|
|
18837
|
-
}
|
|
18838
|
-
if (header.isDate) return "date";
|
|
18839
|
-
if (header.textarea) return "textarea";
|
|
18840
|
-
if (header.toggleSwitch) return "toggle";
|
|
18841
|
-
return void 0;
|
|
18842
|
-
};
|
|
18843
|
-
const isDateHeader2 = (header) => {
|
|
18844
|
-
const type = getHeaderType2(header);
|
|
18845
|
-
return type === "date";
|
|
18846
|
-
};
|
|
18847
|
-
const isMoneyHeader2 = (header) => {
|
|
18848
|
-
const type = getHeaderType2(header);
|
|
18849
|
-
return type === "money";
|
|
18850
|
-
};
|
|
18851
|
-
const isTextareaHeader2 = (header) => {
|
|
18852
|
-
const type = getHeaderType2(header);
|
|
18853
|
-
return type === "textarea";
|
|
18854
|
-
};
|
|
18855
|
-
const isToggleHeader2 = (header) => {
|
|
18856
|
-
const type = getHeaderType2(header);
|
|
18857
|
-
return type === "toggle" || type === "toggleswitch";
|
|
18858
|
-
};
|
|
18859
|
-
const getFieldInputType2 = (header) => {
|
|
18860
|
-
const type = getHeaderType2(header);
|
|
18861
|
-
if (type && !["date", "textarea", "money", "toggle", "toggleswitch", "autocomplete"].includes(type)) {
|
|
18862
|
-
return type;
|
|
18863
|
-
}
|
|
18864
|
-
return void 0;
|
|
18865
|
-
};
|
|
18866
|
-
const resolveHeaderKey2 = (header) => header.key;
|
|
18867
|
-
const resolveHeaderTitle2 = (header) => header.title;
|
|
18868
|
-
const isHeaderDisabled2 = (header) => header.editable === false;
|
|
18869
18938
|
const getUniqueValue = (item) => {
|
|
18870
18939
|
if (typeof props.uniqueKey === "function") {
|
|
18871
18940
|
return props.uniqueKey(item);
|
|
@@ -18925,120 +18994,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
18925
18994
|
};
|
|
18926
18995
|
const handleExportClientSide = async () => {
|
|
18927
18996
|
const sourceItems = (props.items && props.items.length ? props.items : items.value) ?? [];
|
|
18928
|
-
|
|
18929
|
-
const XLSXmod = await import("xlsx");
|
|
18930
|
-
const XLSX = XLSXmod.default ?? XLSXmod;
|
|
18931
|
-
const headers = props.headers.filter((h2) => h2.key && h2.title);
|
|
18932
|
-
const now = /* @__PURE__ */ new Date();
|
|
18933
|
-
const exportDate = now.toLocaleDateString("fa-IR") + " " + now.toLocaleTimeString("fa-IR", { hour: "2-digit", minute: "2-digit" });
|
|
18934
|
-
const title = props.exportFileName || "گزارش";
|
|
18935
|
-
const moneyTotals = {};
|
|
18936
|
-
const rows = sourceItems.map((item) => {
|
|
18937
|
-
const row = {};
|
|
18938
|
-
headers.forEach((h2) => {
|
|
18939
|
-
var _a;
|
|
18940
|
-
let value = h2.nestedKey ? (_a = item[h2.key]) == null ? void 0 : _a[h2.nestedKey] : item[h2.key];
|
|
18941
|
-
if (h2.type === "money") {
|
|
18942
|
-
const num = Number(value);
|
|
18943
|
-
value = !isNaN(num) ? num : 0;
|
|
18944
|
-
moneyTotals[h2.title] = (moneyTotals[h2.title] || 0) + value;
|
|
18945
|
-
}
|
|
18946
|
-
if (typeof value === "boolean") value = value ? "بله" : "خیر";
|
|
18947
|
-
row[h2.title] = value ?? "";
|
|
18948
|
-
});
|
|
18949
|
-
return row;
|
|
18950
|
-
});
|
|
18951
|
-
const totalRow = {};
|
|
18952
|
-
headers.forEach((h2, i) => {
|
|
18953
|
-
if (h2.type === "money") totalRow[h2.title] = moneyTotals[h2.title] || 0;
|
|
18954
|
-
else if (i === 0) totalRow[h2.title] = "جمع کل";
|
|
18955
|
-
else totalRow[h2.title] = "";
|
|
18956
|
-
});
|
|
18957
|
-
rows.push(totalRow);
|
|
18958
|
-
const ws = XLSX.utils.json_to_sheet(rows, { origin: "A4" });
|
|
18959
|
-
const range = XLSX.utils.decode_range(ws["!ref"]);
|
|
18960
|
-
ws["!freeze"] = { xSplit: 0, ySplit: 3 };
|
|
18961
|
-
ws["!autofilter"] = {
|
|
18962
|
-
ref: XLSX.utils.encode_range({
|
|
18963
|
-
s: { r: 3, c: 0 },
|
|
18964
|
-
e: range.e
|
|
18965
|
-
})
|
|
18966
|
-
};
|
|
18967
|
-
ws["!cols"] = headers.map((h2) => {
|
|
18968
|
-
let max = h2.title.length;
|
|
18969
|
-
rows.forEach((r) => {
|
|
18970
|
-
const len = String(r[h2.title] ?? "").length;
|
|
18971
|
-
if (len > max) max = len;
|
|
18972
|
-
});
|
|
18973
|
-
return { wch: max + 4 };
|
|
18974
|
-
});
|
|
18975
|
-
XLSX.utils.sheet_add_aoa(ws, [[title], [`تاریخ چاپ: ${exportDate}`], []], { origin: "A1" });
|
|
18976
|
-
ws["!merges"] = [
|
|
18977
|
-
{
|
|
18978
|
-
s: { r: 0, c: 0 },
|
|
18979
|
-
e: { r: 0, c: headers.length - 1 }
|
|
18980
|
-
}
|
|
18981
|
-
];
|
|
18982
|
-
ws["A1"].s = {
|
|
18983
|
-
font: { bold: true, sz: 16, name: "B Nazanin" },
|
|
18984
|
-
alignment: { horizontal: "center", vertical: "center" }
|
|
18985
|
-
};
|
|
18986
|
-
ws["A2"].s = {
|
|
18987
|
-
font: { name: "B Nazanin", sz: 12 },
|
|
18988
|
-
alignment: { horizontal: "left" }
|
|
18989
|
-
};
|
|
18990
|
-
const headerStyle = {
|
|
18991
|
-
font: { bold: true, name: "B Nazanin" },
|
|
18992
|
-
alignment: { horizontal: "center", vertical: "center" },
|
|
18993
|
-
fill: { fgColor: { rgb: "D9D9D9" } },
|
|
18994
|
-
border: {
|
|
18995
|
-
top: { style: "thin" },
|
|
18996
|
-
bottom: { style: "thin" },
|
|
18997
|
-
left: { style: "thin" },
|
|
18998
|
-
right: { style: "thin" }
|
|
18999
|
-
}
|
|
19000
|
-
};
|
|
19001
|
-
const zebraFill = { fgColor: { rgb: "F7F7F7" } };
|
|
19002
|
-
headers.forEach((h2, c) => {
|
|
19003
|
-
const headerCell = XLSX.utils.encode_cell({ r: 3, c });
|
|
19004
|
-
if (ws[headerCell]) ws[headerCell].s = headerStyle;
|
|
19005
|
-
for (let r = 4; r <= rows.length + 3; r++) {
|
|
19006
|
-
const addr = XLSX.utils.encode_cell({ r, c });
|
|
19007
|
-
const cell = ws[addr];
|
|
19008
|
-
if (!cell) continue;
|
|
19009
|
-
const isTotalRow = r === rows.length + 3;
|
|
19010
|
-
const zebra = r % 2 === 0;
|
|
19011
|
-
cell.s = {
|
|
19012
|
-
font: { name: "B Nazanin" },
|
|
19013
|
-
alignment: {
|
|
19014
|
-
horizontal: h2.type === "money" ? "center" : "right",
|
|
19015
|
-
vertical: "center"
|
|
19016
|
-
},
|
|
19017
|
-
border: {
|
|
19018
|
-
top: { style: "thin" },
|
|
19019
|
-
bottom: { style: "thin" },
|
|
19020
|
-
left: { style: "thin" },
|
|
19021
|
-
right: { style: "thin" }
|
|
19022
|
-
},
|
|
19023
|
-
fill: zebra && !isTotalRow ? zebraFill : void 0
|
|
19024
|
-
};
|
|
19025
|
-
if (h2.type === "money" && typeof cell.v === "number") {
|
|
19026
|
-
cell.z = "#,##0;[Red]-#,##0";
|
|
19027
|
-
}
|
|
19028
|
-
if (isTotalRow) {
|
|
19029
|
-
cell.s.font = { bold: true, name: "B Nazanin" };
|
|
19030
|
-
cell.s.fill = { fgColor: { rgb: "EFEFEF" } };
|
|
19031
|
-
}
|
|
19032
|
-
}
|
|
19033
|
-
});
|
|
19034
|
-
const wb = XLSX.utils.book_new();
|
|
19035
|
-
wb.Workbook = {
|
|
19036
|
-
Views: [{ RTL: true }]
|
|
19037
|
-
};
|
|
19038
|
-
XLSX.utils.book_append_sheet(wb, ws, "Report");
|
|
19039
|
-
const dateForFile = now.toLocaleDateString("fa-IR").replaceAll("/", "-");
|
|
19040
|
-
const fileName = `${title}_${dateForFile}.xlsx`;
|
|
19041
|
-
XLSX.writeFile(wb, fileName);
|
|
18997
|
+
await exportTableToExcel(props.headers, sourceItems, props.exportFileName);
|
|
19042
18998
|
};
|
|
19043
18999
|
const handleExport = async () => {
|
|
19044
19000
|
var _a, _b, _c;
|
|
@@ -19206,7 +19162,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19206
19162
|
items.value = serverData.map((item) => {
|
|
19207
19163
|
const newItem = { ...item };
|
|
19208
19164
|
props.headers.forEach((header) => {
|
|
19209
|
-
if (
|
|
19165
|
+
if (isDateHeader(header) && newItem[header.key]) {
|
|
19210
19166
|
try {
|
|
19211
19167
|
newItem[header.key] = DateConverter.toShamsi(newItem[header.key]);
|
|
19212
19168
|
} catch (e) {
|
|
@@ -19323,7 +19279,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19323
19279
|
const formattedItems = newItems.map((item) => {
|
|
19324
19280
|
const newItem = { ...item };
|
|
19325
19281
|
props.headers.forEach((header) => {
|
|
19326
|
-
if (
|
|
19282
|
+
if (isDateHeader(header) && newItem[header.key]) {
|
|
19327
19283
|
try {
|
|
19328
19284
|
newItem[header.key] = DateConverter.toShamsi(newItem[header.key]);
|
|
19329
19285
|
} catch (error2) {
|
|
@@ -19375,7 +19331,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19375
19331
|
if (!isEditing.value) {
|
|
19376
19332
|
const defaultContext = { ...editedItem.value };
|
|
19377
19333
|
for (const header of props.headers) {
|
|
19378
|
-
if (
|
|
19334
|
+
if (isToggleHeader(header) && editedItem.value[header.key] === void 0) {
|
|
19379
19335
|
editedItem.value[header.key] = false;
|
|
19380
19336
|
defaultContext[header.key] = false;
|
|
19381
19337
|
continue;
|
|
@@ -19395,7 +19351,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19395
19351
|
if (!hasAutocomplete2(header)) return;
|
|
19396
19352
|
const enhancedHeader = header;
|
|
19397
19353
|
const currentValue = formModel.value[header.key];
|
|
19398
|
-
const valueKey =
|
|
19354
|
+
const valueKey = resolveAutocompleteItemValue(header);
|
|
19399
19355
|
if (enhancedHeader.autocompleteReturnObject === false) {
|
|
19400
19356
|
if (Array.isArray(currentValue)) {
|
|
19401
19357
|
formModel.value[header.key] = currentValue.map((item2) => item2 && typeof item2 === "object" ? item2[valueKey] ?? null : item2);
|
|
@@ -19407,7 +19363,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19407
19363
|
if (isEditing.value) {
|
|
19408
19364
|
try {
|
|
19409
19365
|
props.headers.forEach((header) => {
|
|
19410
|
-
if (
|
|
19366
|
+
if (isDateHeader(header)) {
|
|
19411
19367
|
const v = formModel.value[header.key];
|
|
19412
19368
|
if (typeof v === "string" && v.includes("/")) {
|
|
19413
19369
|
formModel.value[header.key] = DateConverter.toGregorian(v);
|
|
@@ -19455,7 +19411,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19455
19411
|
}
|
|
19456
19412
|
});
|
|
19457
19413
|
props.headers.forEach((header) => {
|
|
19458
|
-
if (
|
|
19414
|
+
if (isDateHeader(header) && dataToSave[header.key]) {
|
|
19459
19415
|
try {
|
|
19460
19416
|
const raw = dataToSave[header.key];
|
|
19461
19417
|
if (typeof raw === "string") {
|
|
@@ -19487,7 +19443,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19487
19443
|
if (hasAutocomplete2(header)) {
|
|
19488
19444
|
const enhancedHeader = header;
|
|
19489
19445
|
const currentValue = dataToSave[header.key];
|
|
19490
|
-
const valueKey =
|
|
19446
|
+
const valueKey = resolveAutocompleteItemValue(header);
|
|
19491
19447
|
if (enhancedHeader.autocompleteMultiple && Array.isArray(currentValue)) {
|
|
19492
19448
|
const autocompleteItems = resolveAutocompleteItems2(header, dataToSave);
|
|
19493
19449
|
const processedArray = currentValue.map((item) => {
|
|
@@ -19525,7 +19481,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19525
19481
|
dataToSave[header.key] = null;
|
|
19526
19482
|
} else if (enhancedHeader.autocompleteReturnObject !== false && typeof currentValue === "object") {
|
|
19527
19483
|
const autocompleteItems = resolveAutocompleteItems2(header, dataToSave);
|
|
19528
|
-
const valueKey2 =
|
|
19484
|
+
const valueKey2 = resolveAutocompleteItemValue(header);
|
|
19529
19485
|
const itemValue = valueKey2 && currentValue[valueKey2];
|
|
19530
19486
|
if (itemValue !== null && itemValue !== void 0) {
|
|
19531
19487
|
const fullItem = autocompleteItems.find((autocompleteItem) => {
|
|
@@ -19870,7 +19826,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
19870
19826
|
filterModel.value = { ...filterModel.value };
|
|
19871
19827
|
formHeaders.value.forEach((header) => {
|
|
19872
19828
|
if (hasFilterOperators(header)) {
|
|
19873
|
-
const key =
|
|
19829
|
+
const key = resolveHeaderKey(header);
|
|
19874
19830
|
if (!filterOperatorModel.value[key]) {
|
|
19875
19831
|
filterOperatorModel.value[key] = getDefaultFilterOperator(header);
|
|
19876
19832
|
}
|
|
@@ -20266,7 +20222,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
20266
20222
|
role: "region"
|
|
20267
20223
|
}, [
|
|
20268
20224
|
createVNode(VDataTable, {
|
|
20269
|
-
headers: groupedHeaders
|
|
20225
|
+
headers: unref(groupedHeaders),
|
|
20270
20226
|
items: group.items,
|
|
20271
20227
|
"items-per-page": itemsPerPage.value,
|
|
20272
20228
|
"hide-default-footer": "",
|
|
@@ -20490,7 +20446,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
20490
20446
|
], 4)
|
|
20491
20447
|
])) : (openBlock(), createBlock(VDataTable, {
|
|
20492
20448
|
key: 1,
|
|
20493
|
-
headers: normalHeaders
|
|
20449
|
+
headers: unref(normalHeaders),
|
|
20494
20450
|
items: items.value,
|
|
20495
20451
|
"items-per-page": itemsPerPage.value,
|
|
20496
20452
|
"hide-default-footer": "",
|
|
@@ -20755,57 +20711,57 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
20755
20711
|
default: withCtx(() => [
|
|
20756
20712
|
(openBlock(true), createElementBlock(Fragment, null, renderList(formHeaders.value, (header) => {
|
|
20757
20713
|
return openBlock(), createBlock(VCol, {
|
|
20758
|
-
key:
|
|
20714
|
+
key: unref(resolveHeaderKey)(header),
|
|
20759
20715
|
cols: header.cols ? typeof header.cols === "number" ? header.cols : Number(header.cols) : 4,
|
|
20760
20716
|
md: header.cols ? typeof header.cols === "number" ? header.cols : Number(header.cols) : 4
|
|
20761
20717
|
}, {
|
|
20762
20718
|
default: withCtx(() => [
|
|
20763
20719
|
!header.hidden ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
20764
|
-
|
|
20720
|
+
unref(isDateHeader)(header) ? (openBlock(), createBlock(ShamsiDatePicker, {
|
|
20765
20721
|
key: 0,
|
|
20766
|
-
modelValue: formModel.value[
|
|
20767
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20768
|
-
label:
|
|
20769
|
-
disabled:
|
|
20722
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20723
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20724
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20725
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
20770
20726
|
mode: header.dateMode || "single"
|
|
20771
20727
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "mode"])) : hasAutocomplete2(header) ? (openBlock(), createBlock(VAutocomplete, {
|
|
20772
20728
|
key: 1,
|
|
20773
|
-
modelValue: formModel.value[
|
|
20774
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20775
|
-
label:
|
|
20729
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20730
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20731
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20776
20732
|
items: resolveAutocompleteItems2(header, formModel.value.value),
|
|
20777
|
-
"item-title":
|
|
20778
|
-
"item-value":
|
|
20779
|
-
"return-object":
|
|
20780
|
-
multiple:
|
|
20781
|
-
chips:
|
|
20782
|
-
"closable-chips":
|
|
20783
|
-
disabled:
|
|
20733
|
+
"item-title": unref(resolveAutocompleteItemTitle)(header),
|
|
20734
|
+
"item-value": unref(resolveAutocompleteItemValue)(header),
|
|
20735
|
+
"return-object": unref(resolveAutocompleteReturnObject)(header),
|
|
20736
|
+
multiple: unref(resolveAutocompleteMultiple)(header),
|
|
20737
|
+
chips: unref(resolveAutocompleteMultiple)(header),
|
|
20738
|
+
"closable-chips": unref(resolveAutocompleteMultiple)(header),
|
|
20739
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
20784
20740
|
clearable: "",
|
|
20785
20741
|
variant: "outlined",
|
|
20786
20742
|
attach: "",
|
|
20787
20743
|
"menu-props": { zIndex: 2e4 }
|
|
20788
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "items", "item-title", "item-value", "return-object", "multiple", "chips", "closable-chips", "disabled"])) :
|
|
20744
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "items", "item-title", "item-value", "return-object", "multiple", "chips", "closable-chips", "disabled"])) : unref(isMoneyHeader)(header) ? (openBlock(), createBlock(_sfc_main$i, {
|
|
20789
20745
|
key: 2,
|
|
20790
|
-
modelValue: formModel.value[
|
|
20791
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20792
|
-
label:
|
|
20793
|
-
disabled:
|
|
20794
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled"])) :
|
|
20746
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20747
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20748
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20749
|
+
disabled: unref(isHeaderDisabled)(header)
|
|
20750
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled"])) : unref(isTextareaHeader)(header) ? (openBlock(), createBlock(VTextarea, {
|
|
20795
20751
|
key: 3,
|
|
20796
|
-
modelValue: formModel.value[
|
|
20797
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20798
|
-
label:
|
|
20752
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20753
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20754
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20799
20755
|
variant: "outlined",
|
|
20800
|
-
disabled:
|
|
20756
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
20801
20757
|
dir: header.dir,
|
|
20802
20758
|
"auto-grow": "",
|
|
20803
20759
|
rows: "3"
|
|
20804
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "dir"])) :
|
|
20760
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "dir"])) : unref(isToggleHeader)(header) ? (openBlock(), createBlock(ToggleSwitch, {
|
|
20805
20761
|
key: 4,
|
|
20806
|
-
modelValue: formModel.value[
|
|
20807
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20808
|
-
label:
|
|
20762
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20763
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20764
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20809
20765
|
type: "boolean",
|
|
20810
20766
|
activeColor: "#3bd32a",
|
|
20811
20767
|
inactiveColor: "#d32a2a",
|
|
@@ -20815,12 +20771,12 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
20815
20771
|
]
|
|
20816
20772
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "options"])) : (openBlock(), createBlock(VTextField, {
|
|
20817
20773
|
key: 5,
|
|
20818
|
-
modelValue: formModel.value[
|
|
20819
|
-
"onUpdate:modelValue": ($event) => formModel.value[
|
|
20820
|
-
label:
|
|
20774
|
+
modelValue: formModel.value[unref(resolveHeaderKey)(header)],
|
|
20775
|
+
"onUpdate:modelValue": ($event) => formModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
20776
|
+
label: unref(resolveHeaderTitle)(header),
|
|
20821
20777
|
variant: "outlined",
|
|
20822
|
-
disabled:
|
|
20823
|
-
type:
|
|
20778
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
20779
|
+
type: unref(getFieldInputType)(header),
|
|
20824
20780
|
dir: header.dir
|
|
20825
20781
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "type", "dir"]))
|
|
20826
20782
|
], 64)) : createCommentVNode("", true)
|
|
@@ -21051,7 +21007,7 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
21051
21007
|
default: withCtx(() => [
|
|
21052
21008
|
(openBlock(true), createElementBlock(Fragment, null, renderList(formHeaders.value, (header) => {
|
|
21053
21009
|
return openBlock(), createBlock(VCol, {
|
|
21054
|
-
key:
|
|
21010
|
+
key: unref(resolveHeaderKey)(header),
|
|
21055
21011
|
cols: header.cols ? typeof header.cols === "number" ? header.cols : Number(header.cols) : 4,
|
|
21056
21012
|
md: header.cols ? typeof header.cols === "number" ? header.cols : Number(header.cols) : 4
|
|
21057
21013
|
}, {
|
|
@@ -21059,8 +21015,8 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
21059
21015
|
!header.hidden ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
21060
21016
|
hasFilterOperators(header) ? (openBlock(), createBlock(VSelect, {
|
|
21061
21017
|
key: 0,
|
|
21062
|
-
modelValue: filterOperatorModel.value[
|
|
21063
|
-
"onUpdate:modelValue": ($event) => filterOperatorModel.value[
|
|
21018
|
+
modelValue: filterOperatorModel.value[unref(resolveHeaderKey)(header)],
|
|
21019
|
+
"onUpdate:modelValue": ($event) => filterOperatorModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21064
21020
|
items: getHeaderFilterOperators(header),
|
|
21065
21021
|
"item-title": "label",
|
|
21066
21022
|
"item-value": "value",
|
|
@@ -21070,50 +21026,50 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
21070
21026
|
class: "mb-1",
|
|
21071
21027
|
"menu-props": { zIndex: 2e4 }
|
|
21072
21028
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "items"])) : createCommentVNode("", true),
|
|
21073
|
-
|
|
21029
|
+
unref(isDateHeader)(header) ? (openBlock(), createBlock(ShamsiDatePicker, {
|
|
21074
21030
|
key: 1,
|
|
21075
|
-
modelValue: filterModel.value[
|
|
21076
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21077
|
-
label:
|
|
21078
|
-
disabled:
|
|
21031
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21032
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21033
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21034
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
21079
21035
|
mode: header.dateMode || "single"
|
|
21080
21036
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "mode"])) : hasAutocomplete2(header) ? (openBlock(), createBlock(VAutocomplete, {
|
|
21081
21037
|
key: 2,
|
|
21082
|
-
modelValue: filterModel.value[
|
|
21083
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21084
|
-
label:
|
|
21038
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21039
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21040
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21085
21041
|
items: resolveAutocompleteItems2(header, filterModel.value.value),
|
|
21086
|
-
"item-title":
|
|
21087
|
-
"item-value":
|
|
21088
|
-
"return-object":
|
|
21089
|
-
multiple:
|
|
21090
|
-
chips:
|
|
21091
|
-
"closable-chips":
|
|
21092
|
-
disabled:
|
|
21042
|
+
"item-title": unref(resolveAutocompleteItemTitle)(header),
|
|
21043
|
+
"item-value": unref(resolveAutocompleteItemValue)(header),
|
|
21044
|
+
"return-object": unref(resolveAutocompleteReturnObject)(header),
|
|
21045
|
+
multiple: unref(resolveAutocompleteMultiple)(header),
|
|
21046
|
+
chips: unref(resolveAutocompleteMultiple)(header),
|
|
21047
|
+
"closable-chips": unref(resolveAutocompleteMultiple)(header),
|
|
21048
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
21093
21049
|
clearable: "",
|
|
21094
21050
|
variant: "outlined",
|
|
21095
21051
|
"menu-props": { zIndex: 2e4 }
|
|
21096
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "items", "item-title", "item-value", "return-object", "multiple", "chips", "closable-chips", "disabled"])) :
|
|
21052
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "items", "item-title", "item-value", "return-object", "multiple", "chips", "closable-chips", "disabled"])) : unref(isMoneyHeader)(header) ? (openBlock(), createBlock(_sfc_main$i, {
|
|
21097
21053
|
key: 3,
|
|
21098
|
-
modelValue: filterModel.value[
|
|
21099
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21100
|
-
label:
|
|
21101
|
-
disabled:
|
|
21102
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled"])) :
|
|
21054
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21055
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21056
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21057
|
+
disabled: unref(isHeaderDisabled)(header)
|
|
21058
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled"])) : unref(isTextareaHeader)(header) ? (openBlock(), createBlock(VTextarea, {
|
|
21103
21059
|
key: 4,
|
|
21104
|
-
modelValue: filterModel.value[
|
|
21105
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21106
|
-
label:
|
|
21060
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21061
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21062
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21107
21063
|
variant: "outlined",
|
|
21108
|
-
disabled:
|
|
21064
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
21109
21065
|
dir: header.dir,
|
|
21110
21066
|
"auto-grow": "",
|
|
21111
21067
|
rows: "3"
|
|
21112
|
-
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "dir"])) :
|
|
21068
|
+
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "dir"])) : unref(isToggleHeader)(header) ? (openBlock(), createBlock(ToggleSwitch, {
|
|
21113
21069
|
key: 5,
|
|
21114
|
-
modelValue: filterModel.value[
|
|
21115
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21116
|
-
label:
|
|
21070
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21071
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21072
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21117
21073
|
type: "boolean",
|
|
21118
21074
|
activeColor: "#3bd32a",
|
|
21119
21075
|
inactiveColor: "#d32a2a",
|
|
@@ -21123,12 +21079,12 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent$1({
|
|
|
21123
21079
|
]
|
|
21124
21080
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "options"])) : (openBlock(), createBlock(VTextField, {
|
|
21125
21081
|
key: 6,
|
|
21126
|
-
modelValue: filterModel.value[
|
|
21127
|
-
"onUpdate:modelValue": ($event) => filterModel.value[
|
|
21128
|
-
label:
|
|
21082
|
+
modelValue: filterModel.value[unref(resolveHeaderKey)(header)],
|
|
21083
|
+
"onUpdate:modelValue": ($event) => filterModel.value[unref(resolveHeaderKey)(header)] = $event,
|
|
21084
|
+
label: unref(resolveHeaderTitle)(header),
|
|
21129
21085
|
variant: "outlined",
|
|
21130
|
-
disabled:
|
|
21131
|
-
type:
|
|
21086
|
+
disabled: unref(isHeaderDisabled)(header),
|
|
21087
|
+
type: unref(getFieldInputType)(header),
|
|
21132
21088
|
dir: header.dir
|
|
21133
21089
|
}, null, 8, ["modelValue", "onUpdate:modelValue", "label", "disabled", "type", "dir"]))
|
|
21134
21090
|
], 64)) : createCommentVNode("", true)
|
|
@@ -24433,89 +24389,57 @@ const DigitLimit = {
|
|
|
24433
24389
|
}
|
|
24434
24390
|
}
|
|
24435
24391
|
};
|
|
24392
|
+
const TIME_PERIODS = [
|
|
24393
|
+
{ period: "morning", minHour: 5, maxHour: 12 },
|
|
24394
|
+
{ period: "noon", minHour: 12, maxHour: 17 },
|
|
24395
|
+
{ period: "afternoon", minHour: 17, maxHour: 20 },
|
|
24396
|
+
{ period: "evening", minHour: 20, maxHour: 29 }
|
|
24397
|
+
];
|
|
24398
|
+
const PERIOD_TEXT = {
|
|
24399
|
+
morning: { greeting: "صبح بخیر", label: "صبح" },
|
|
24400
|
+
noon: { greeting: "ظهر بخیر", label: "ظهر" },
|
|
24401
|
+
afternoon: { greeting: "عصر بخیر", label: "عصر" },
|
|
24402
|
+
evening: { greeting: "شب بخیر", label: "شب" }
|
|
24403
|
+
};
|
|
24404
|
+
function toDate(value) {
|
|
24405
|
+
return value ? new Date(value) : /* @__PURE__ */ new Date();
|
|
24406
|
+
}
|
|
24407
|
+
function getPeriod(hour) {
|
|
24408
|
+
var _a;
|
|
24409
|
+
return ((_a = TIME_PERIODS.find(({ minHour, maxHour }) => hour >= minHour && hour < maxHour)) == null ? void 0 : _a.period) ?? "evening";
|
|
24410
|
+
}
|
|
24436
24411
|
class GreetingUtils {
|
|
24437
|
-
/**
|
|
24438
|
-
* Get greeting based on time of day
|
|
24439
|
-
* @param serverTime - Server time in ISO string or Date object
|
|
24440
|
-
* @returns Appropriate greeting in Persian
|
|
24441
|
-
*/
|
|
24442
24412
|
static getGreeting(serverTime) {
|
|
24443
|
-
const
|
|
24444
|
-
|
|
24445
|
-
|
|
24446
|
-
|
|
24447
|
-
|
|
24448
|
-
|
|
24449
|
-
} else if (hour >= 17 && hour < 20) {
|
|
24450
|
-
return "عصر بخیر";
|
|
24451
|
-
} else {
|
|
24452
|
-
return "شب بخیر";
|
|
24453
|
-
}
|
|
24413
|
+
const hour = toDate(serverTime).getHours();
|
|
24414
|
+
return PERIOD_TEXT[getPeriod(hour)].greeting;
|
|
24415
|
+
}
|
|
24416
|
+
static getTimePeriod(serverTime) {
|
|
24417
|
+
const hour = toDate(serverTime).getHours();
|
|
24418
|
+
return PERIOD_TEXT[getPeriod(hour)].label;
|
|
24454
24419
|
}
|
|
24455
|
-
/**
|
|
24456
|
-
* Get greeting with user name
|
|
24457
|
-
* @param serverTime - Server time in ISO string or Date object
|
|
24458
|
-
* @param userName - User's name
|
|
24459
|
-
* @returns Greeting with user name
|
|
24460
|
-
*/
|
|
24461
24420
|
static getGreetingWithName(serverTime, userName) {
|
|
24462
|
-
|
|
24463
|
-
const name = userName || "کاربر";
|
|
24464
|
-
return `${greeting} ${name}`;
|
|
24421
|
+
return `${GreetingUtils.getGreeting(serverTime)} ${userName ?? "کاربر"}`;
|
|
24465
24422
|
}
|
|
24466
|
-
/**
|
|
24467
|
-
* Get greeting with time information
|
|
24468
|
-
* @param serverTime - Server time in ISO string or Date object
|
|
24469
|
-
* @returns Greeting with time period
|
|
24470
|
-
*/
|
|
24471
24423
|
static getGreetingWithTime(serverTime) {
|
|
24472
|
-
const
|
|
24473
|
-
const
|
|
24474
|
-
const
|
|
24475
|
-
|
|
24476
|
-
const timeString = `${hour.toString().padStart(2, "0")}:${minute.toString().padStart(2, "0")}`;
|
|
24477
|
-
return `${greeting} - ساعت ${timeString}`;
|
|
24478
|
-
}
|
|
24479
|
-
/**
|
|
24480
|
-
* Get time period description
|
|
24481
|
-
* @param serverTime - Server time in ISO string or Date object
|
|
24482
|
-
* @returns Time period description in Persian
|
|
24483
|
-
*/
|
|
24484
|
-
static getTimePeriod(serverTime) {
|
|
24485
|
-
const time = serverTime ? new Date(serverTime) : /* @__PURE__ */ new Date();
|
|
24486
|
-
const hour = time.getHours();
|
|
24487
|
-
if (hour >= 5 && hour < 12) {
|
|
24488
|
-
return "صبح";
|
|
24489
|
-
} else if (hour >= 12 && hour < 17) {
|
|
24490
|
-
return "ظهر";
|
|
24491
|
-
} else if (hour >= 17 && hour < 20) {
|
|
24492
|
-
return "عصر";
|
|
24493
|
-
} else {
|
|
24494
|
-
return "شب";
|
|
24495
|
-
}
|
|
24424
|
+
const date = toDate(serverTime);
|
|
24425
|
+
const hh = String(date.getHours()).padStart(2, "0");
|
|
24426
|
+
const mm = String(date.getMinutes()).padStart(2, "0");
|
|
24427
|
+
return `${GreetingUtils.getGreeting(serverTime)} - ساعت ${hh}:${mm}`;
|
|
24496
24428
|
}
|
|
24497
|
-
/**
|
|
24498
|
-
* Get full greeting with date and time
|
|
24499
|
-
* @param serverTime - Server time in ISO string or Date object
|
|
24500
|
-
* @param userName - User's name
|
|
24501
|
-
* @returns Full greeting with date and time
|
|
24502
|
-
*/
|
|
24503
24429
|
static getFullGreeting(serverTime, userName) {
|
|
24504
|
-
const
|
|
24505
|
-
const
|
|
24506
|
-
const name = userName || "کاربر";
|
|
24507
|
-
const dateOptions = {
|
|
24430
|
+
const date = toDate(serverTime);
|
|
24431
|
+
const persianDate = date.toLocaleDateString("fa-IR", {
|
|
24508
24432
|
weekday: "long",
|
|
24509
24433
|
year: "numeric",
|
|
24510
24434
|
month: "long",
|
|
24511
24435
|
day: "numeric"
|
|
24512
|
-
};
|
|
24513
|
-
const persianDate = time.toLocaleDateString("fa-IR", dateOptions);
|
|
24514
|
-
const timeString = time.toLocaleTimeString("fa-IR", {
|
|
24515
|
-
hour: "2-digit",
|
|
24516
|
-
minute: "2-digit"
|
|
24517
24436
|
});
|
|
24518
|
-
|
|
24437
|
+
const persianTime = date.toLocaleTimeString("fa-IR", { hour: "2-digit", minute: "2-digit" });
|
|
24438
|
+
return `${GreetingUtils.getGreeting(serverTime)} ${userName ?? "کاربر"} - ${persianDate} - ساعت ${persianTime}`;
|
|
24439
|
+
}
|
|
24440
|
+
/** Convenience: build greeting from a full UserInfoResponse. */
|
|
24441
|
+
static fromUserInfo(userInfo) {
|
|
24442
|
+
return GreetingUtils.getGreetingWithName(userInfo.authTime, userInfo.fullName);
|
|
24519
24443
|
}
|
|
24520
24444
|
}
|
|
24521
24445
|
class NationalCodeValidator {
|