@comitor/ui 1.11.0 → 2.0.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/README.md +10 -2
- package/dist/data-grid/data-grid-cell-variants.js +10 -6
- package/dist/data-grid/data-grid-cell-variants.js.map +1 -1
- package/dist/data-grid/data-grid-column-header.js +4 -2
- package/dist/data-grid/data-grid-column-header.js.map +1 -1
- package/dist/data-grid/data-grid-context-menu.js +4 -3
- package/dist/data-grid/data-grid-context-menu.js.map +1 -1
- package/dist/data-grid/data-grid-filter-menu.d.ts +12 -1
- package/dist/data-grid/data-grid-filter-menu.js +28 -17
- package/dist/data-grid/data-grid-filter-menu.js.map +1 -1
- package/dist/data-grid/data-grid-keyboard-shortcuts.d.ts +12 -1
- package/dist/data-grid/data-grid-keyboard-shortcuts.js +7 -5
- package/dist/data-grid/data-grid-keyboard-shortcuts.js.map +1 -1
- package/dist/data-grid/data-grid-locale.d.ts +24 -0
- package/dist/data-grid/data-grid-locale.js +25 -0
- package/dist/data-grid/data-grid-locale.js.map +1 -0
- package/dist/data-grid/data-grid-paste-dialog.js +2 -1
- package/dist/data-grid/data-grid-paste-dialog.js.map +1 -1
- package/dist/data-grid/data-grid-row-height-menu.d.ts +11 -1
- package/dist/data-grid/data-grid-row-height-menu.js +25 -28
- package/dist/data-grid/data-grid-row-height-menu.js.map +1 -1
- package/dist/data-grid/data-grid-search.js +5 -4
- package/dist/data-grid/data-grid-search.js.map +1 -1
- package/dist/data-grid/data-grid-select-column.js +3 -1
- package/dist/data-grid/data-grid-select-column.js.map +1 -1
- package/dist/data-grid/data-grid-sort-menu.d.ts +12 -1
- package/dist/data-grid/data-grid-sort-menu.js +25 -13
- package/dist/data-grid/data-grid-sort-menu.js.map +1 -1
- package/dist/data-grid/data-grid-view-menu.d.ts +12 -1
- package/dist/data-grid/data-grid-view-menu.js +12 -4
- package/dist/data-grid/data-grid-view-menu.js.map +1 -1
- package/dist/data-grid/data-grid.d.ts +14 -2
- package/dist/data-grid/data-grid.js +6 -3
- package/dist/data-grid/data-grid.js.map +1 -1
- package/dist/data-grid/filters.d.ts +17 -21
- package/dist/data-grid/filters.js +73 -52
- package/dist/data-grid/filters.js.map +1 -1
- package/dist/data-grid/index.d.ts +4 -1
- package/dist/data-grid/index.js +20 -2
- package/dist/data-grid/index.js.map +1 -1
- package/dist/data-grid/messages-en.d.ts +294 -0
- package/dist/data-grid/messages-en.js +279 -0
- package/dist/data-grid/messages-en.js.map +1 -0
- package/dist/data-grid/messages-vi.d.ts +12 -0
- package/dist/data-grid/messages-vi.js +279 -0
- package/dist/data-grid/messages-vi.js.map +1 -0
- package/dist/data-grid/messages.d.ts +549 -262
- package/dist/data-grid/messages.js +16 -275
- package/dist/data-grid/messages.js.map +1 -1
- package/dist/data-grid/use-data-grid-undo-redo.d.ts +13 -1
- package/dist/data-grid/use-data-grid-undo-redo.js +11 -8
- package/dist/data-grid/use-data-grid-undo-redo.js.map +1 -1
- package/dist/data-grid/use-data-grid.d.ts +281 -1
- package/dist/data-grid/use-data-grid.js +21 -16
- package/dist/data-grid/use-data-grid.js.map +1 -1
- package/dist/data-grid/utils.d.ts +9 -1
- package/dist/data-grid/utils.js +3 -2
- package/dist/data-grid/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,49 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
1
|
+
import { getDataGridMessages } from "./messages.js";
|
|
2
|
+
function buildTextOperators(m) {
|
|
3
|
+
const op = m.filter.operators;
|
|
4
|
+
return [
|
|
5
|
+
{ label: op.contains, value: "contains" },
|
|
6
|
+
{ label: op.notContains, value: "notContains" },
|
|
7
|
+
{ label: op.equals, value: "equals" },
|
|
8
|
+
{ label: op.notEquals, value: "notEquals" },
|
|
9
|
+
{ label: op.startsWith, value: "startsWith" },
|
|
10
|
+
{ label: op.endsWith, value: "endsWith" },
|
|
11
|
+
{ label: op.isEmpty, value: "isEmpty" },
|
|
12
|
+
{ label: op.isNotEmpty, value: "isNotEmpty" }
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
function buildNumberOperators(m) {
|
|
16
|
+
const op = m.filter.operators;
|
|
17
|
+
return [
|
|
18
|
+
{ label: op.equals, value: "equals" },
|
|
19
|
+
{ label: op.notEquals, value: "notEquals" },
|
|
20
|
+
{ label: op.lessThan, value: "lessThan" },
|
|
21
|
+
{ label: op.lessThanOrEqual, value: "lessThanOrEqual" },
|
|
22
|
+
{ label: op.greaterThan, value: "greaterThan" },
|
|
23
|
+
{ label: op.greaterThanOrEqual, value: "greaterThanOrEqual" },
|
|
24
|
+
{ label: op.isBetween, value: "isBetween" },
|
|
25
|
+
{ label: op.isEmpty, value: "isEmpty" },
|
|
26
|
+
{ label: op.isNotEmpty, value: "isNotEmpty" }
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
function buildDateOperators(m) {
|
|
30
|
+
const op = m.filter.operators;
|
|
31
|
+
return [
|
|
32
|
+
{ label: op.dateEquals, value: "equals" },
|
|
33
|
+
{ label: op.dateNotEquals, value: "notEquals" },
|
|
34
|
+
{ label: op.before, value: "before" },
|
|
35
|
+
{ label: op.after, value: "after" },
|
|
36
|
+
{ label: op.onOrBefore, value: "onOrBefore" },
|
|
37
|
+
{ label: op.onOrAfter, value: "onOrAfter" },
|
|
38
|
+
{ label: op.isBetween, value: "isBetween" },
|
|
39
|
+
{ label: op.isEmpty, value: "isEmpty" },
|
|
40
|
+
{ label: op.isNotEmpty, value: "isNotEmpty" }
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
function buildSelectOperators(m) {
|
|
44
|
+
const op = m.filter.operators;
|
|
45
|
+
return [
|
|
46
|
+
{ label: op.is, value: "is" },
|
|
47
|
+
{ label: op.isNot, value: "isNot" },
|
|
48
|
+
{ label: op.isAnyOf, value: "isAnyOf" },
|
|
49
|
+
{ label: op.isNoneOf, value: "isNoneOf" },
|
|
50
|
+
{ label: op.isEmpty, value: "isEmpty" },
|
|
51
|
+
{ label: op.isNotEmpty, value: "isNotEmpty" }
|
|
52
|
+
];
|
|
53
|
+
}
|
|
54
|
+
function buildBooleanOperators(m) {
|
|
55
|
+
const op = m.filter.operators;
|
|
56
|
+
return [
|
|
57
|
+
{ label: op.isTrue, value: "isTrue" },
|
|
58
|
+
{ label: op.isFalse, value: "isFalse" }
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
const DEFAULT_MESSAGES = getDataGridMessages();
|
|
62
|
+
const TEXT_FILTER_OPERATORS = buildTextOperators(DEFAULT_MESSAGES);
|
|
63
|
+
const NUMBER_FILTER_OPERATORS = buildNumberOperators(DEFAULT_MESSAGES);
|
|
64
|
+
const DATE_FILTER_OPERATORS = buildDateOperators(DEFAULT_MESSAGES);
|
|
65
|
+
const SELECT_FILTER_OPERATORS = buildSelectOperators(DEFAULT_MESSAGES);
|
|
66
|
+
const BOOLEAN_FILTER_OPERATORS = buildBooleanOperators(DEFAULT_MESSAGES);
|
|
47
67
|
function getDefaultOperator(variant) {
|
|
48
68
|
switch (variant) {
|
|
49
69
|
case "number":
|
|
@@ -59,19 +79,20 @@ function getDefaultOperator(variant) {
|
|
|
59
79
|
return "contains";
|
|
60
80
|
}
|
|
61
81
|
}
|
|
62
|
-
function getOperatorsForVariant(variant) {
|
|
82
|
+
function getOperatorsForVariant(variant, messages) {
|
|
83
|
+
const m = messages ?? DEFAULT_MESSAGES;
|
|
63
84
|
switch (variant) {
|
|
64
85
|
case "number":
|
|
65
|
-
return
|
|
86
|
+
return buildNumberOperators(m);
|
|
66
87
|
case "date":
|
|
67
|
-
return
|
|
88
|
+
return buildDateOperators(m);
|
|
68
89
|
case "select":
|
|
69
90
|
case "multi-select":
|
|
70
|
-
return
|
|
91
|
+
return buildSelectOperators(m);
|
|
71
92
|
case "checkbox":
|
|
72
|
-
return
|
|
93
|
+
return buildBooleanOperators(m);
|
|
73
94
|
default:
|
|
74
|
-
return
|
|
95
|
+
return buildTextOperators(m);
|
|
75
96
|
}
|
|
76
97
|
}
|
|
77
98
|
function getFilterFn() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data-grid/filters.ts"],"sourcesContent":["import type { FilterFn, Row } from \"@tanstack/react-table\";\nimport { msg } from \"./messages.js\";\nimport type {\n BooleanFilterOperator,\n DateFilterOperator,\n FilterOperator,\n FilterValue,\n NumberFilterOperator,\n SelectFilterOperator,\n TextFilterOperator\n} from \"./types.js\";\n\nconst op = msg.filter.operators;\n\nexport const TEXT_FILTER_OPERATORS: ReadonlyArray<{\n label: string;\n value: TextFilterOperator;\n}> = [\n { label: op.contains, value: \"contains\" },\n { label: op.notContains, value: \"notContains\" },\n { label: op.equals, value: \"equals\" },\n { label: op.notEquals, value: \"notEquals\" },\n { label: op.startsWith, value: \"startsWith\" },\n { label: op.endsWith, value: \"endsWith\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n];\n\nexport const NUMBER_FILTER_OPERATORS: ReadonlyArray<{\n label: string;\n value: NumberFilterOperator;\n}> = [\n { label: op.equals, value: \"equals\" },\n { label: op.notEquals, value: \"notEquals\" },\n { label: op.lessThan, value: \"lessThan\" },\n { label: op.lessThanOrEqual, value: \"lessThanOrEqual\" },\n { label: op.greaterThan, value: \"greaterThan\" },\n { label: op.greaterThanOrEqual, value: \"greaterThanOrEqual\" },\n { label: op.isBetween, value: \"isBetween\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n];\n\nexport const DATE_FILTER_OPERATORS: ReadonlyArray<{\n label: string;\n value: DateFilterOperator;\n}> = [\n { label: op.dateEquals, value: \"equals\" },\n { label: op.dateNotEquals, value: \"notEquals\" },\n { label: op.before, value: \"before\" },\n { label: op.after, value: \"after\" },\n { label: op.onOrBefore, value: \"onOrBefore\" },\n { label: op.onOrAfter, value: \"onOrAfter\" },\n { label: op.isBetween, value: \"isBetween\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n];\n\nexport const SELECT_FILTER_OPERATORS: ReadonlyArray<{\n label: string;\n value: SelectFilterOperator;\n}> = [\n { label: op.is, value: \"is\" },\n { label: op.isNot, value: \"isNot\" },\n { label: op.isAnyOf, value: \"isAnyOf\" },\n { label: op.isNoneOf, value: \"isNoneOf\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n];\n\nexport const BOOLEAN_FILTER_OPERATORS: ReadonlyArray<{\n label: string;\n value: BooleanFilterOperator;\n}> = [\n { label: op.isTrue, value: \"isTrue\" },\n { label: op.isFalse, value: \"isFalse\" }\n];\n\nexport function getDefaultOperator(variant: string): FilterOperator {\n switch (variant) {\n case \"number\":\n return \"equals\";\n case \"date\":\n return \"equals\";\n case \"select\":\n case \"multi-select\":\n return \"is\";\n case \"checkbox\":\n return \"isTrue\";\n default:\n return \"contains\";\n }\n}\n\nexport function getOperatorsForVariant(variant: string): ReadonlyArray<{\n label: string;\n value: FilterOperator;\n}> {\n switch (variant) {\n case \"number\":\n return NUMBER_FILTER_OPERATORS;\n case \"date\":\n return DATE_FILTER_OPERATORS;\n case \"select\":\n case \"multi-select\":\n return SELECT_FILTER_OPERATORS;\n case \"checkbox\":\n return BOOLEAN_FILTER_OPERATORS;\n default:\n return TEXT_FILTER_OPERATORS;\n }\n}\n\nexport function getFilterFn<TData>(): FilterFn<TData> {\n return (row: Row<TData>, columnId: string, filterValue: unknown): boolean => {\n if (!filterValue || typeof filterValue !== \"object\") {\n return true;\n }\n\n const filter = filterValue as FilterValue;\n const { operator, value, endValue } = filter;\n\n const cellValue = row.getValue(columnId);\n\n if (operator === \"isEmpty\") {\n return (\n cellValue === null ||\n cellValue === undefined ||\n cellValue === \"\" ||\n (Array.isArray(cellValue) && cellValue.length === 0)\n );\n }\n\n if (operator === \"isNotEmpty\") {\n return !(\n cellValue === null ||\n cellValue === undefined ||\n cellValue === \"\" ||\n (Array.isArray(cellValue) && cellValue.length === 0)\n );\n }\n\n if (operator === \"isTrue\") {\n return cellValue === true;\n }\n\n if (operator === \"isFalse\") {\n return cellValue === false || !cellValue;\n }\n\n if (value === undefined || value === null || value === \"\") {\n return true;\n }\n\n const cellValueStr = String(cellValue ?? \"\").toLowerCase();\n const filterValueStr = typeof value === \"string\" ? value.toLowerCase() : String(value);\n\n if (operator === \"contains\") {\n return cellValueStr.includes(filterValueStr);\n }\n\n if (operator === \"notContains\") {\n return !cellValueStr.includes(filterValueStr);\n }\n\n if (operator === \"equals\") {\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n return cellValue === value;\n }\n if (cellValue instanceof Date && typeof value === \"string\") {\n const cellDate = new Date(cellValue);\n const filterDate = new Date(value);\n return cellDate.toDateString() === filterDate.toDateString();\n }\n return cellValueStr === filterValueStr;\n }\n\n if (operator === \"notEquals\") {\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n return cellValue !== value;\n }\n if (cellValue instanceof Date && typeof value === \"string\") {\n const cellDate = new Date(cellValue);\n const filterDate = new Date(value);\n return cellDate.toDateString() !== filterDate.toDateString();\n }\n return cellValueStr !== filterValueStr;\n }\n\n if (operator === \"startsWith\") {\n return cellValueStr.startsWith(filterValueStr);\n }\n\n if (operator === \"endsWith\") {\n return cellValueStr.endsWith(filterValueStr);\n }\n\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n if (operator === \"greaterThan\") {\n return cellValue > value;\n }\n\n if (operator === \"greaterThanOrEqual\") {\n return cellValue >= value;\n }\n\n if (operator === \"lessThan\") {\n return cellValue < value;\n }\n\n if (operator === \"lessThanOrEqual\") {\n return cellValue <= value;\n }\n\n if (operator === \"isBetween\" && typeof endValue === \"number\") {\n return cellValue >= value && cellValue <= endValue;\n }\n }\n\n if (cellValue instanceof Date || typeof cellValue === \"string\") {\n const cellDate = new Date(cellValue);\n if (!Number.isNaN(cellDate.getTime()) && typeof value === \"string\") {\n const filterDate = new Date(value);\n\n if (operator === \"before\") {\n return cellDate < filterDate;\n }\n\n if (operator === \"after\") {\n return cellDate > filterDate;\n }\n\n if (operator === \"onOrBefore\") {\n return cellDate <= filterDate;\n }\n\n if (operator === \"onOrAfter\") {\n return cellDate >= filterDate;\n }\n\n if (operator === \"isBetween\" && typeof endValue === \"string\") {\n const filterDate2 = new Date(endValue);\n return cellDate >= filterDate && cellDate <= filterDate2;\n }\n }\n }\n\n if (operator === \"is\") {\n if (Array.isArray(cellValue)) {\n return cellValue.some((v) => String(v) === String(value));\n }\n return String(cellValue) === String(value);\n }\n\n if (operator === \"isNot\") {\n if (Array.isArray(cellValue)) {\n return !cellValue.some((v) => String(v) === String(value));\n }\n return String(cellValue) !== String(value);\n }\n\n if (operator === \"isAnyOf\" && Array.isArray(value)) {\n if (Array.isArray(cellValue)) {\n return cellValue.some((v) => value.some((fv) => String(v) === String(fv)));\n }\n return value.some((fv) => String(cellValue) === String(fv));\n }\n\n if (operator === \"isNoneOf\" && Array.isArray(value)) {\n if (Array.isArray(cellValue)) {\n return !cellValue.some((v) => value.some((fv) => String(v) === String(fv)));\n }\n return !value.some((fv) => String(cellValue) === String(fv));\n }\n\n return true;\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/data-grid/filters.ts"],"sourcesContent":["import type { FilterFn, Row } from \"@tanstack/react-table\";\nimport { type DataGridMessages, getDataGridMessages } from \"./messages.js\";\nimport type {\n BooleanFilterOperator,\n DateFilterOperator,\n FilterOperator,\n FilterValue,\n NumberFilterOperator,\n SelectFilterOperator,\n TextFilterOperator\n} from \"./types.js\";\n\ninterface OperatorOption<TOperator extends FilterOperator> {\n label: string;\n value: TOperator;\n}\n\n/*\n * ⚠ Nhãn toán tử phụ thuộc NGÔN NGỮ, nên chúng phải dựng theo bảng chuỗi chứ không đóng băng vào\n * một mảng hằng ở đầu module. Sáu `build*` bên dưới là khuôn; sáu hằng `*_FILTER_OPERATORS` là\n * khuôn ấy áp cho bảng MẶC ĐỊNH (tiếng Anh), giữ lại vì chúng là API công khai từ `1.11.0` và vì\n * phần lớn app chỉ cần đúng bản đó.\n * Chỗ nào dựng giao diện theo `locale` thì gọi `getOperatorsForVariant(variant, messages)` —\n * đọc hằng ở trên là khoá cứng tiếng Anh.\n */\nfunction buildTextOperators(m: DataGridMessages): OperatorOption<TextFilterOperator>[] {\n const op = m.filter.operators;\n return [\n { label: op.contains, value: \"contains\" },\n { label: op.notContains, value: \"notContains\" },\n { label: op.equals, value: \"equals\" },\n { label: op.notEquals, value: \"notEquals\" },\n { label: op.startsWith, value: \"startsWith\" },\n { label: op.endsWith, value: \"endsWith\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n ];\n}\n\nfunction buildNumberOperators(m: DataGridMessages): OperatorOption<NumberFilterOperator>[] {\n const op = m.filter.operators;\n return [\n { label: op.equals, value: \"equals\" },\n { label: op.notEquals, value: \"notEquals\" },\n { label: op.lessThan, value: \"lessThan\" },\n { label: op.lessThanOrEqual, value: \"lessThanOrEqual\" },\n { label: op.greaterThan, value: \"greaterThan\" },\n { label: op.greaterThanOrEqual, value: \"greaterThanOrEqual\" },\n { label: op.isBetween, value: \"isBetween\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n ];\n}\n\nfunction buildDateOperators(m: DataGridMessages): OperatorOption<DateFilterOperator>[] {\n const op = m.filter.operators;\n return [\n { label: op.dateEquals, value: \"equals\" },\n { label: op.dateNotEquals, value: \"notEquals\" },\n { label: op.before, value: \"before\" },\n { label: op.after, value: \"after\" },\n { label: op.onOrBefore, value: \"onOrBefore\" },\n { label: op.onOrAfter, value: \"onOrAfter\" },\n { label: op.isBetween, value: \"isBetween\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n ];\n}\n\nfunction buildSelectOperators(m: DataGridMessages): OperatorOption<SelectFilterOperator>[] {\n const op = m.filter.operators;\n return [\n { label: op.is, value: \"is\" },\n { label: op.isNot, value: \"isNot\" },\n { label: op.isAnyOf, value: \"isAnyOf\" },\n { label: op.isNoneOf, value: \"isNoneOf\" },\n { label: op.isEmpty, value: \"isEmpty\" },\n { label: op.isNotEmpty, value: \"isNotEmpty\" }\n ];\n}\n\nfunction buildBooleanOperators(m: DataGridMessages): OperatorOption<BooleanFilterOperator>[] {\n const op = m.filter.operators;\n return [\n { label: op.isTrue, value: \"isTrue\" },\n { label: op.isFalse, value: \"isFalse\" }\n ];\n}\n\nconst DEFAULT_MESSAGES = getDataGridMessages();\n\nexport const TEXT_FILTER_OPERATORS: ReadonlyArray<OperatorOption<TextFilterOperator>> =\n buildTextOperators(DEFAULT_MESSAGES);\nexport const NUMBER_FILTER_OPERATORS: ReadonlyArray<OperatorOption<NumberFilterOperator>> =\n buildNumberOperators(DEFAULT_MESSAGES);\nexport const DATE_FILTER_OPERATORS: ReadonlyArray<OperatorOption<DateFilterOperator>> =\n buildDateOperators(DEFAULT_MESSAGES);\nexport const SELECT_FILTER_OPERATORS: ReadonlyArray<OperatorOption<SelectFilterOperator>> =\n buildSelectOperators(DEFAULT_MESSAGES);\nexport const BOOLEAN_FILTER_OPERATORS: ReadonlyArray<OperatorOption<BooleanFilterOperator>> =\n buildBooleanOperators(DEFAULT_MESSAGES);\n\nexport function getDefaultOperator(variant: string): FilterOperator {\n switch (variant) {\n case \"number\":\n return \"equals\";\n case \"date\":\n return \"equals\";\n case \"select\":\n case \"multi-select\":\n return \"is\";\n case \"checkbox\":\n return \"isTrue\";\n default:\n return \"contains\";\n }\n}\n\n/**\n * Toán tử hợp lệ cho một kiểu ô, kèm nhãn đã dịch.\n *\n * `messages` bỏ trống = bảng mặc định (tiếng Anh) — giữ đúng chữ ký của `1.11.0` nên chỗ gọi cũ\n * không phải sửa.\n */\nexport function getOperatorsForVariant(\n variant: string,\n messages?: DataGridMessages\n): ReadonlyArray<{\n label: string;\n value: FilterOperator;\n}> {\n const m = messages ?? DEFAULT_MESSAGES;\n switch (variant) {\n case \"number\":\n return buildNumberOperators(m);\n case \"date\":\n return buildDateOperators(m);\n case \"select\":\n case \"multi-select\":\n return buildSelectOperators(m);\n case \"checkbox\":\n return buildBooleanOperators(m);\n default:\n return buildTextOperators(m);\n }\n}\n\nexport function getFilterFn<TData>(): FilterFn<TData> {\n return (row: Row<TData>, columnId: string, filterValue: unknown): boolean => {\n if (!filterValue || typeof filterValue !== \"object\") {\n return true;\n }\n\n const filter = filterValue as FilterValue;\n const { operator, value, endValue } = filter;\n\n const cellValue = row.getValue(columnId);\n\n if (operator === \"isEmpty\") {\n return (\n cellValue === null ||\n cellValue === undefined ||\n cellValue === \"\" ||\n (Array.isArray(cellValue) && cellValue.length === 0)\n );\n }\n\n if (operator === \"isNotEmpty\") {\n return !(\n cellValue === null ||\n cellValue === undefined ||\n cellValue === \"\" ||\n (Array.isArray(cellValue) && cellValue.length === 0)\n );\n }\n\n if (operator === \"isTrue\") {\n return cellValue === true;\n }\n\n if (operator === \"isFalse\") {\n return cellValue === false || !cellValue;\n }\n\n if (value === undefined || value === null || value === \"\") {\n return true;\n }\n\n const cellValueStr = String(cellValue ?? \"\").toLowerCase();\n const filterValueStr = typeof value === \"string\" ? value.toLowerCase() : String(value);\n\n if (operator === \"contains\") {\n return cellValueStr.includes(filterValueStr);\n }\n\n if (operator === \"notContains\") {\n return !cellValueStr.includes(filterValueStr);\n }\n\n if (operator === \"equals\") {\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n return cellValue === value;\n }\n if (cellValue instanceof Date && typeof value === \"string\") {\n const cellDate = new Date(cellValue);\n const filterDate = new Date(value);\n return cellDate.toDateString() === filterDate.toDateString();\n }\n return cellValueStr === filterValueStr;\n }\n\n if (operator === \"notEquals\") {\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n return cellValue !== value;\n }\n if (cellValue instanceof Date && typeof value === \"string\") {\n const cellDate = new Date(cellValue);\n const filterDate = new Date(value);\n return cellDate.toDateString() !== filterDate.toDateString();\n }\n return cellValueStr !== filterValueStr;\n }\n\n if (operator === \"startsWith\") {\n return cellValueStr.startsWith(filterValueStr);\n }\n\n if (operator === \"endsWith\") {\n return cellValueStr.endsWith(filterValueStr);\n }\n\n if (typeof cellValue === \"number\" && typeof value === \"number\") {\n if (operator === \"greaterThan\") {\n return cellValue > value;\n }\n\n if (operator === \"greaterThanOrEqual\") {\n return cellValue >= value;\n }\n\n if (operator === \"lessThan\") {\n return cellValue < value;\n }\n\n if (operator === \"lessThanOrEqual\") {\n return cellValue <= value;\n }\n\n if (operator === \"isBetween\" && typeof endValue === \"number\") {\n return cellValue >= value && cellValue <= endValue;\n }\n }\n\n if (cellValue instanceof Date || typeof cellValue === \"string\") {\n const cellDate = new Date(cellValue);\n if (!Number.isNaN(cellDate.getTime()) && typeof value === \"string\") {\n const filterDate = new Date(value);\n\n if (operator === \"before\") {\n return cellDate < filterDate;\n }\n\n if (operator === \"after\") {\n return cellDate > filterDate;\n }\n\n if (operator === \"onOrBefore\") {\n return cellDate <= filterDate;\n }\n\n if (operator === \"onOrAfter\") {\n return cellDate >= filterDate;\n }\n\n if (operator === \"isBetween\" && typeof endValue === \"string\") {\n const filterDate2 = new Date(endValue);\n return cellDate >= filterDate && cellDate <= filterDate2;\n }\n }\n }\n\n if (operator === \"is\") {\n if (Array.isArray(cellValue)) {\n return cellValue.some((v) => String(v) === String(value));\n }\n return String(cellValue) === String(value);\n }\n\n if (operator === \"isNot\") {\n if (Array.isArray(cellValue)) {\n return !cellValue.some((v) => String(v) === String(value));\n }\n return String(cellValue) !== String(value);\n }\n\n if (operator === \"isAnyOf\" && Array.isArray(value)) {\n if (Array.isArray(cellValue)) {\n return cellValue.some((v) => value.some((fv) => String(v) === String(fv)));\n }\n return value.some((fv) => String(cellValue) === String(fv));\n }\n\n if (operator === \"isNoneOf\" && Array.isArray(value)) {\n if (Array.isArray(cellValue)) {\n return !cellValue.some((v) => value.some((fv) => String(v) === String(fv)));\n }\n return !value.some((fv) => String(cellValue) === String(fv));\n }\n\n return true;\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { DataGrid } from './data-grid.js';
|
|
2
2
|
export { DataGridFilterMenu } from './data-grid-filter-menu.js';
|
|
3
3
|
export { DataGridKeyboardShortcuts } from './data-grid-keyboard-shortcuts.js';
|
|
4
|
+
export { DataGridLocaleProvider, DataGridLocaleProviderProps, useDataGridMessages } from './data-grid-locale.js';
|
|
4
5
|
export { DataGridCellPresence, DataGridPresenceProvider, useDataGridPresence } from './data-grid-presence.js';
|
|
5
6
|
export { DataGridRowHeightMenu } from './data-grid-row-height-menu.js';
|
|
6
7
|
export { getDataGridSelectColumn } from './data-grid-select-column.js';
|
|
@@ -8,11 +9,13 @@ export { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from
|
|
|
8
9
|
export { DataGridSortMenu } from './data-grid-sort-menu.js';
|
|
9
10
|
export { DataGridViewMenu } from './data-grid-view-menu.js';
|
|
10
11
|
export { BOOLEAN_FILTER_OPERATORS, DATE_FILTER_OPERATORS, NUMBER_FILTER_OPERATORS, SELECT_FILTER_OPERATORS, TEXT_FILTER_OPERATORS, getDefaultOperator, getFilterFn, getOperatorsForVariant } from './filters.js';
|
|
11
|
-
export {
|
|
12
|
+
export { DATA_GRID_MESSAGES, DEFAULT_DATA_GRID_LOCALE, DataGridLocale, getDataGridMessages } from './messages.js';
|
|
12
13
|
export { BooleanFilterOperator, CellOpts, CellPosition, CellRange, CellSelectOption, CellUpdate, ContextMenuState, DataGridCellProps, DateFilterOperator, Direction, FileCellData, FilterOperator, FilterValue, NavigationDirection, NumberFilterOperator, PasteDialogState, RowHeightValue, SearchState, SelectFilterOperator, SelectionState, TextFilterOperator } from './types.js';
|
|
13
14
|
export { UseDataGridProps, useDataGrid } from './use-data-grid.js';
|
|
14
15
|
export { UndoRedoCellUpdate, useDataGridUndoRedo } from './use-data-grid-undo-redo.js';
|
|
15
16
|
export { formatDate, formatDateForDisplay, formatDateToString, formatFileSize, generateFileId, getCellKey, getColumnVariant, getEmptyCellValue, getLineCount, getRowHeightValue, parseCellKey, parseLocalDate } from './utils.js';
|
|
17
|
+
export { DataGridMessages, messagesEn as dataGridMessages, messagesEn as dataGridMessagesEn } from './messages-en.js';
|
|
18
|
+
export { messagesVi as dataGridMessagesVi } from './messages-vi.js';
|
|
16
19
|
import 'react';
|
|
17
20
|
import '@tanstack/react-table';
|
|
18
21
|
import '../components/ui/popover.js';
|
package/dist/data-grid/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { DataGrid } from "./data-grid.js";
|
|
2
2
|
import { DataGridFilterMenu } from "./data-grid-filter-menu.js";
|
|
3
3
|
import { DataGridKeyboardShortcuts } from "./data-grid-keyboard-shortcuts.js";
|
|
4
|
+
import {
|
|
5
|
+
DataGridLocaleProvider,
|
|
6
|
+
useDataGridMessages
|
|
7
|
+
} from "./data-grid-locale.js";
|
|
4
8
|
import {
|
|
5
9
|
DataGridPresenceProvider,
|
|
6
10
|
useDataGridPresence
|
|
@@ -20,7 +24,14 @@ import {
|
|
|
20
24
|
SELECT_FILTER_OPERATORS,
|
|
21
25
|
TEXT_FILTER_OPERATORS
|
|
22
26
|
} from "./filters.js";
|
|
23
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
DATA_GRID_MESSAGES,
|
|
29
|
+
DEFAULT_DATA_GRID_LOCALE,
|
|
30
|
+
getDataGridMessages,
|
|
31
|
+
messagesEn,
|
|
32
|
+
messagesEn as messagesEn2,
|
|
33
|
+
messagesVi
|
|
34
|
+
} from "./messages.js";
|
|
24
35
|
import { useDataGrid } from "./use-data-grid.js";
|
|
25
36
|
import { useDataGridUndoRedo } from "./use-data-grid-undo-redo.js";
|
|
26
37
|
import {
|
|
@@ -39,10 +50,13 @@ import {
|
|
|
39
50
|
} from "./utils.js";
|
|
40
51
|
export {
|
|
41
52
|
BOOLEAN_FILTER_OPERATORS,
|
|
53
|
+
DATA_GRID_MESSAGES,
|
|
42
54
|
DATE_FILTER_OPERATORS,
|
|
55
|
+
DEFAULT_DATA_GRID_LOCALE,
|
|
43
56
|
DataGrid,
|
|
44
57
|
DataGridFilterMenu,
|
|
45
58
|
DataGridKeyboardShortcuts,
|
|
59
|
+
DataGridLocaleProvider,
|
|
46
60
|
DataGridPresenceProvider,
|
|
47
61
|
DataGridRowHeightMenu,
|
|
48
62
|
DataGridSkeleton,
|
|
@@ -53,7 +67,9 @@ export {
|
|
|
53
67
|
NUMBER_FILTER_OPERATORS,
|
|
54
68
|
SELECT_FILTER_OPERATORS,
|
|
55
69
|
TEXT_FILTER_OPERATORS,
|
|
56
|
-
|
|
70
|
+
messagesEn as dataGridMessages,
|
|
71
|
+
messagesEn2 as dataGridMessagesEn,
|
|
72
|
+
messagesVi as dataGridMessagesVi,
|
|
57
73
|
formatDate,
|
|
58
74
|
formatDateForDisplay,
|
|
59
75
|
formatDateToString,
|
|
@@ -61,6 +77,7 @@ export {
|
|
|
61
77
|
generateFileId,
|
|
62
78
|
getCellKey,
|
|
63
79
|
getColumnVariant,
|
|
80
|
+
getDataGridMessages,
|
|
64
81
|
getDataGridSelectColumn,
|
|
65
82
|
getDefaultOperator,
|
|
66
83
|
getEmptyCellValue,
|
|
@@ -71,6 +88,7 @@ export {
|
|
|
71
88
|
parseCellKey,
|
|
72
89
|
parseLocalDate,
|
|
73
90
|
useDataGrid,
|
|
91
|
+
useDataGridMessages,
|
|
74
92
|
useDataGridPresence,
|
|
75
93
|
useDataGridUndoRedo
|
|
76
94
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/data-grid/index.ts"],"sourcesContent":["// @comitor/ui/data-grid — lưới dữ liệu sửa trực tiếp (như bảng tính).\n//\n// Port từ tablecn (https://tablecn.com) — MIT License, Copyright (c) 2024 Sadman Sakib —\n// và chỉnh lại để dùng primitive/token của package, chuỗi tiếng Việt, không phụ thuộc backend.\n// Xem docs/data-grid.md (§10) để biết danh sách khác biệt so với bản gốc.\n//\n// Tách khỏi barrel chính vì kéo theo @tanstack/react-table (peer), @tanstack/react-virtual và @dnd-kit,\n// đồng thời khoanh vùng phần `declare module \"@tanstack/react-table\"` (thêm `meta.cell`, `TableMeta`)\n// để ứng dụng không dùng lưới không bị ảnh hưởng.\n\n// Components\nexport { DataGrid } from \"./data-grid.js\";\nexport { DataGridFilterMenu } from \"./data-grid-filter-menu.js\";\nexport { DataGridKeyboardShortcuts } from \"./data-grid-keyboard-shortcuts.js\";\nexport {\n type DataGridCellPresence,\n DataGridPresenceProvider,\n useDataGridPresence\n} from \"./data-grid-presence.js\";\nexport { DataGridRowHeightMenu } from \"./data-grid-row-height-menu.js\";\nexport { getDataGridSelectColumn } from \"./data-grid-select-column.js\";\nexport { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from \"./data-grid-skeleton.js\";\nexport { DataGridSortMenu } from \"./data-grid-sort-menu.js\";\nexport { DataGridViewMenu } from \"./data-grid-view-menu.js\";\n// Bộ lọc\nexport {\n BOOLEAN_FILTER_OPERATORS,\n DATE_FILTER_OPERATORS,\n getDefaultOperator,\n getFilterFn,\n getOperatorsForVariant,\n NUMBER_FILTER_OPERATORS,\n SELECT_FILTER_OPERATORS,\n TEXT_FILTER_OPERATORS\n} from \"./filters.js\";\n
|
|
1
|
+
{"version":3,"sources":["../../src/data-grid/index.ts"],"sourcesContent":["// @comitor/ui/data-grid — lưới dữ liệu sửa trực tiếp (như bảng tính).\n//\n// Port từ tablecn (https://tablecn.com) — MIT License, Copyright (c) 2024 Sadman Sakib —\n// và chỉnh lại để dùng primitive/token của package, chuỗi tiếng Việt, không phụ thuộc backend.\n// Xem docs/data-grid.md (§10) để biết danh sách khác biệt so với bản gốc.\n//\n// Tách khỏi barrel chính vì kéo theo @tanstack/react-table (peer), @tanstack/react-virtual và @dnd-kit,\n// đồng thời khoanh vùng phần `declare module \"@tanstack/react-table\"` (thêm `meta.cell`, `TableMeta`)\n// để ứng dụng không dùng lưới không bị ảnh hưởng.\n\n// Components\nexport { DataGrid } from \"./data-grid.js\";\nexport { DataGridFilterMenu } from \"./data-grid-filter-menu.js\";\nexport { DataGridKeyboardShortcuts } from \"./data-grid-keyboard-shortcuts.js\";\n// Ngôn ngữ\nexport {\n DataGridLocaleProvider,\n type DataGridLocaleProviderProps,\n useDataGridMessages\n} from \"./data-grid-locale.js\";\nexport {\n type DataGridCellPresence,\n DataGridPresenceProvider,\n useDataGridPresence\n} from \"./data-grid-presence.js\";\nexport { DataGridRowHeightMenu } from \"./data-grid-row-height-menu.js\";\nexport { getDataGridSelectColumn } from \"./data-grid-select-column.js\";\nexport { DataGridSkeleton, DataGridSkeletonGrid, DataGridSkeletonToolbar } from \"./data-grid-skeleton.js\";\nexport { DataGridSortMenu } from \"./data-grid-sort-menu.js\";\nexport { DataGridViewMenu } from \"./data-grid-view-menu.js\";\n// Bộ lọc\nexport {\n BOOLEAN_FILTER_OPERATORS,\n DATE_FILTER_OPERATORS,\n getDefaultOperator,\n getFilterFn,\n getOperatorsForVariant,\n NUMBER_FILTER_OPERATORS,\n SELECT_FILTER_OPERATORS,\n TEXT_FILTER_OPERATORS\n} from \"./filters.js\";\n/*\n * Chuỗi hiển thị. `dataGridMessages` là bảng ĐANG MẶC ĐỊNH (tiếng Anh từ `2.0.0`) — dùng khi app\n * muốn từ ngữ ở chỗ khác trên màn khớp với lưới. Muốn một ngôn ngữ cụ thể thì gọi\n * `getDataGridMessages(\"vi\")`, đừng đọc hằng rồi đoán.\n */\nexport {\n DATA_GRID_MESSAGES,\n type DataGridLocale,\n type DataGridMessages,\n DEFAULT_DATA_GRID_LOCALE,\n getDataGridMessages,\n messagesEn as dataGridMessages,\n messagesEn as dataGridMessagesEn,\n messagesVi as dataGridMessagesVi\n} from \"./messages.js\";\n// Types\nexport type * from \"./types.js\";\n// Hooks\nexport { type UseDataGridProps, useDataGrid } from \"./use-data-grid.js\";\nexport { type UndoRedoCellUpdate, useDataGridUndoRedo } from \"./use-data-grid-undo-redo.js\";\n// Tiện ích hay dùng ở phía ứng dụng\nexport {\n formatDate,\n formatDateForDisplay,\n formatDateToString,\n formatFileSize,\n generateFileId,\n getCellKey,\n getColumnVariant,\n getEmptyCellValue,\n getLineCount,\n getRowHeightValue,\n parseCellKey,\n parseLocalDate\n} from \"./utils.js\";\n"],"mappings":"AAWA,SAAS,gBAAgB;AACzB,SAAS,0BAA0B;AACnC,SAAS,iCAAiC;AAE1C;AAAA,EACE;AAAA,EAEA;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,6BAA6B;AACtC,SAAS,+BAA+B;AACxC,SAAS,kBAAkB,sBAAsB,+BAA+B;AAChF,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AAEjC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EACc;AAAA,EACA,cAAdA;AAAA,EACc;AAAA,OACT;AAIP,SAAgC,mBAAmB;AACnD,SAAkC,2BAA2B;AAE7D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":["messagesEn"]}
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chuỗi hiển thị tiếng ANH của DataGrid — và là BẢN GỐC định nghĩa hình dạng của
|
|
3
|
+
* {@link DataGridMessages}. Mọi bảng ngôn ngữ khác phải khớp đúng bộ khoá này; thiếu một khoá là
|
|
4
|
+
* typecheck đỏ ngay, không phải một chuỗi rỗng lặng lẽ xuất hiện trên giao diện.
|
|
5
|
+
*
|
|
6
|
+
* ⚠ **KHÔNG `as const`.** Có `as const` thì mỗi chuỗi thành một literal type riêng
|
|
7
|
+
* (`"Add row"` chứ không phải `string`), và bảng tiếng Việt vĩnh viễn không bao giờ gán được vào
|
|
8
|
+
* `DataGridMessages`. Kiểu rộng mới là thứ dùng được ở đây.
|
|
9
|
+
*
|
|
10
|
+
* ─ VÌ SAO TIẾNG ANH LÀ BẢN GỐC, TRONG KHI CẢ GÓI MẶC ĐỊNH TIẾNG VIỆT ─
|
|
11
|
+
* Đây là NGOẠI LỆ CÓ CHỦ Ý của `DataGrid`, quyết định ở `2.0.0` (xem CHANGELOG). Phần lớn chuỗi
|
|
12
|
+
* ở đây là chuỗi gốc của tablecn — repo mà lưới được port từ đó — nên giữ tiếng Anh làm bản gốc
|
|
13
|
+
* thì mỗi lần đối chiếu ngược với thượng nguồn là so trực tiếp, không phải dịch hai lượt.
|
|
14
|
+
*
|
|
15
|
+
* Quy ước: chuỗi cố định để nguyên; chuỗi có tham số viết thành HÀM (đừng nối chuỗi ở chỗ gọi —
|
|
16
|
+
* trật tự từ của tiếng Việt và tiếng Anh khác nhau). KHÔNG đặt JSX ở đây.
|
|
17
|
+
*/
|
|
18
|
+
declare const messagesEn: {
|
|
19
|
+
grid: {
|
|
20
|
+
/** Nhãn mặc định của vùng `role="grid"` (ghi đè bằng prop `aria-label`) */
|
|
21
|
+
label: string;
|
|
22
|
+
addRow: string;
|
|
23
|
+
};
|
|
24
|
+
search: {
|
|
25
|
+
placeholder: string;
|
|
26
|
+
label: string;
|
|
27
|
+
prevMatch: string;
|
|
28
|
+
nextMatch: string;
|
|
29
|
+
close: string;
|
|
30
|
+
matchPosition: (index: number, total: number) => string;
|
|
31
|
+
noResults: string;
|
|
32
|
+
typeToSearch: string;
|
|
33
|
+
};
|
|
34
|
+
column: {
|
|
35
|
+
sortAsc: string;
|
|
36
|
+
sortDesc: string;
|
|
37
|
+
removeSort: string;
|
|
38
|
+
pinLeft: string;
|
|
39
|
+
unpinLeft: string;
|
|
40
|
+
pinRight: string;
|
|
41
|
+
unpinRight: string;
|
|
42
|
+
hide: string;
|
|
43
|
+
resize: (label: string) => string;
|
|
44
|
+
/** Tên kiểu dữ liệu của cột, hiện trong tooltip ở tiêu đề cột */
|
|
45
|
+
variant: {
|
|
46
|
+
shortText: string;
|
|
47
|
+
longText: string;
|
|
48
|
+
number: string;
|
|
49
|
+
url: string;
|
|
50
|
+
checkbox: string;
|
|
51
|
+
select: string;
|
|
52
|
+
multiSelect: string;
|
|
53
|
+
date: string;
|
|
54
|
+
file: string;
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
select: {
|
|
58
|
+
all: string;
|
|
59
|
+
row: string;
|
|
60
|
+
rowNumber: (rowNumber: number) => string;
|
|
61
|
+
};
|
|
62
|
+
contextMenu: {
|
|
63
|
+
copy: string;
|
|
64
|
+
cut: string;
|
|
65
|
+
clear: string;
|
|
66
|
+
deleteRows: string;
|
|
67
|
+
};
|
|
68
|
+
pasteDialog: {
|
|
69
|
+
title: string;
|
|
70
|
+
description: (rowsNeeded: number) => string;
|
|
71
|
+
expandTitle: string;
|
|
72
|
+
expandDescription: (rowsNeeded: number) => string;
|
|
73
|
+
keepTitle: string;
|
|
74
|
+
keepDescription: string;
|
|
75
|
+
cancel: string;
|
|
76
|
+
confirm: string;
|
|
77
|
+
};
|
|
78
|
+
rowHeight: {
|
|
79
|
+
label: string;
|
|
80
|
+
short: string;
|
|
81
|
+
medium: string;
|
|
82
|
+
tall: string;
|
|
83
|
+
extraTall: string;
|
|
84
|
+
};
|
|
85
|
+
view: {
|
|
86
|
+
trigger: string;
|
|
87
|
+
toggleColumns: string;
|
|
88
|
+
searchPlaceholder: string;
|
|
89
|
+
empty: string;
|
|
90
|
+
};
|
|
91
|
+
sort: {
|
|
92
|
+
trigger: string;
|
|
93
|
+
title: string;
|
|
94
|
+
emptyTitle: string;
|
|
95
|
+
description: string;
|
|
96
|
+
emptyDescription: string;
|
|
97
|
+
add: string;
|
|
98
|
+
reset: string;
|
|
99
|
+
remove: string;
|
|
100
|
+
drag: string;
|
|
101
|
+
fieldPlaceholder: string;
|
|
102
|
+
fieldEmpty: string;
|
|
103
|
+
asc: string;
|
|
104
|
+
desc: string;
|
|
105
|
+
};
|
|
106
|
+
filter: {
|
|
107
|
+
trigger: string;
|
|
108
|
+
title: string;
|
|
109
|
+
emptyTitle: string;
|
|
110
|
+
description: string;
|
|
111
|
+
emptyDescription: string;
|
|
112
|
+
add: string;
|
|
113
|
+
reset: string;
|
|
114
|
+
remove: string;
|
|
115
|
+
drag: string;
|
|
116
|
+
where: string;
|
|
117
|
+
and: string;
|
|
118
|
+
fieldPlaceholder: string;
|
|
119
|
+
fieldEmpty: string;
|
|
120
|
+
valuePlaceholder: string;
|
|
121
|
+
rangeStart: string;
|
|
122
|
+
rangeEnd: string;
|
|
123
|
+
pickDate: string;
|
|
124
|
+
pickRange: string;
|
|
125
|
+
optionPlaceholder: string;
|
|
126
|
+
optionEmpty: string;
|
|
127
|
+
selectedCount: (count: number) => string;
|
|
128
|
+
emptyValue: (label: string) => string;
|
|
129
|
+
/** Nhãn toán tử lọc — xem `filters.ts` để biết toán tử nào dùng cho kiểu ô nào */
|
|
130
|
+
operators: {
|
|
131
|
+
contains: string;
|
|
132
|
+
notContains: string;
|
|
133
|
+
equals: string;
|
|
134
|
+
notEquals: string;
|
|
135
|
+
startsWith: string;
|
|
136
|
+
endsWith: string;
|
|
137
|
+
isEmpty: string;
|
|
138
|
+
isNotEmpty: string;
|
|
139
|
+
lessThan: string;
|
|
140
|
+
lessThanOrEqual: string;
|
|
141
|
+
greaterThan: string;
|
|
142
|
+
greaterThanOrEqual: string;
|
|
143
|
+
isBetween: string;
|
|
144
|
+
dateEquals: string;
|
|
145
|
+
dateNotEquals: string;
|
|
146
|
+
before: string;
|
|
147
|
+
after: string;
|
|
148
|
+
onOrBefore: string;
|
|
149
|
+
onOrAfter: string;
|
|
150
|
+
is: string;
|
|
151
|
+
isNot: string;
|
|
152
|
+
isAnyOf: string;
|
|
153
|
+
isNoneOf: string;
|
|
154
|
+
isTrue: string;
|
|
155
|
+
isFalse: string;
|
|
156
|
+
};
|
|
157
|
+
};
|
|
158
|
+
cell: {
|
|
159
|
+
longTextPlaceholder: string;
|
|
160
|
+
optionSearchPlaceholder: string;
|
|
161
|
+
optionEmpty: string;
|
|
162
|
+
clearAll: string;
|
|
163
|
+
invalidUrlTitle: string;
|
|
164
|
+
invalidUrlDescription: string;
|
|
165
|
+
};
|
|
166
|
+
file: {
|
|
167
|
+
uploadLabel: string;
|
|
168
|
+
dropHere: string;
|
|
169
|
+
dragHere: string;
|
|
170
|
+
browse: string;
|
|
171
|
+
limits: (maxSize?: string, maxFiles?: number) => string;
|
|
172
|
+
count: (count: number) => string;
|
|
173
|
+
clearAll: string;
|
|
174
|
+
remove: string;
|
|
175
|
+
uploading: string;
|
|
176
|
+
deleting: string;
|
|
177
|
+
tooMany: (maxFiles: number) => string;
|
|
178
|
+
tooLarge: (maxSize: string) => string;
|
|
179
|
+
wrongType: string;
|
|
180
|
+
rejectedOne: (name: string) => string;
|
|
181
|
+
rejectedMany: (name: string, others: number) => string;
|
|
182
|
+
uploadFailed: (count: number) => string;
|
|
183
|
+
deleteFailed: (name: string) => string;
|
|
184
|
+
deleteFailedMany: string;
|
|
185
|
+
};
|
|
186
|
+
toast: {
|
|
187
|
+
cellsCopied: (count: number) => string;
|
|
188
|
+
copyFailed: string;
|
|
189
|
+
cellsCut: (count: number) => string;
|
|
190
|
+
cutFailed: string;
|
|
191
|
+
cellsPasted: (count: number) => string;
|
|
192
|
+
cellsPastedWithSkipped: (count: number, skipped: number) => string;
|
|
193
|
+
pasteSkipped: (skipped: number) => string;
|
|
194
|
+
pasteFailed: string;
|
|
195
|
+
cellsCleared: (count: number) => string;
|
|
196
|
+
rowsDeleted: (count: number) => string;
|
|
197
|
+
nothingToUndo: string;
|
|
198
|
+
nothingToRedo: string;
|
|
199
|
+
undone: (count: number) => string;
|
|
200
|
+
redone: (count: number) => string;
|
|
201
|
+
};
|
|
202
|
+
/** Giá trị văn bản khi dán boolean vào ô văn bản */
|
|
203
|
+
booleanText: {
|
|
204
|
+
checked: string;
|
|
205
|
+
unchecked: string;
|
|
206
|
+
};
|
|
207
|
+
shortcuts: {
|
|
208
|
+
trigger: string;
|
|
209
|
+
title: string;
|
|
210
|
+
description: string;
|
|
211
|
+
searchPlaceholder: string;
|
|
212
|
+
emptyTitle: string;
|
|
213
|
+
emptyDescription: string;
|
|
214
|
+
close: string;
|
|
215
|
+
groups: {
|
|
216
|
+
navigation: string;
|
|
217
|
+
selection: string;
|
|
218
|
+
editing: string;
|
|
219
|
+
search: string;
|
|
220
|
+
filtering: string;
|
|
221
|
+
sorting: string;
|
|
222
|
+
general: string;
|
|
223
|
+
};
|
|
224
|
+
keys: {
|
|
225
|
+
click: string;
|
|
226
|
+
doubleClick: string;
|
|
227
|
+
};
|
|
228
|
+
navigation: {
|
|
229
|
+
move: string;
|
|
230
|
+
nextCell: string;
|
|
231
|
+
prevCell: string;
|
|
232
|
+
firstColumn: string;
|
|
233
|
+
lastColumn: string;
|
|
234
|
+
firstRowSameColumn: string;
|
|
235
|
+
lastRowSameColumn: string;
|
|
236
|
+
firstColumnSameRow: string;
|
|
237
|
+
lastColumnSameRow: string;
|
|
238
|
+
firstCell: string;
|
|
239
|
+
lastCell: string;
|
|
240
|
+
pageUp: string;
|
|
241
|
+
pageDown: string;
|
|
242
|
+
scrollUp: string;
|
|
243
|
+
scrollDown: string;
|
|
244
|
+
scrollLeft: string;
|
|
245
|
+
scrollRight: string;
|
|
246
|
+
};
|
|
247
|
+
selection: {
|
|
248
|
+
extend: string;
|
|
249
|
+
toTop: string;
|
|
250
|
+
toBottom: string;
|
|
251
|
+
toFirstColumn: string;
|
|
252
|
+
toLastColumn: string;
|
|
253
|
+
all: string;
|
|
254
|
+
toggle: string;
|
|
255
|
+
range: string;
|
|
256
|
+
clear: string;
|
|
257
|
+
};
|
|
258
|
+
editing: {
|
|
259
|
+
start: string;
|
|
260
|
+
insertRow: string;
|
|
261
|
+
copy: string;
|
|
262
|
+
cut: string;
|
|
263
|
+
paste: string;
|
|
264
|
+
clear: string;
|
|
265
|
+
deleteRows: string;
|
|
266
|
+
undo: string;
|
|
267
|
+
redo: string;
|
|
268
|
+
};
|
|
269
|
+
search: {
|
|
270
|
+
open: string;
|
|
271
|
+
next: string;
|
|
272
|
+
prev: string;
|
|
273
|
+
close: string;
|
|
274
|
+
};
|
|
275
|
+
filtering: {
|
|
276
|
+
toggle: string;
|
|
277
|
+
remove: string;
|
|
278
|
+
};
|
|
279
|
+
sorting: {
|
|
280
|
+
toggle: string;
|
|
281
|
+
remove: string;
|
|
282
|
+
};
|
|
283
|
+
general: {
|
|
284
|
+
shortcuts: string;
|
|
285
|
+
};
|
|
286
|
+
};
|
|
287
|
+
};
|
|
288
|
+
/**
|
|
289
|
+
* Hình dạng của một bảng ngôn ngữ. Suy ra từ bảng tiếng Anh nên không có chỗ nào để hai thứ
|
|
290
|
+
* lệch nhau: thêm một khoá vào `messagesEn` là mọi bảng khác đỏ cho tới khi dịch xong.
|
|
291
|
+
*/
|
|
292
|
+
type DataGridMessages = typeof messagesEn;
|
|
293
|
+
|
|
294
|
+
export { type DataGridMessages, messagesEn };
|