@itrocks/list 0.17.1 → 0.21.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 +70 -0
- package/cjs/columns.js +45 -21
- package/cjs/columns.js.map +1 -1
- package/cjs/date-search.d.ts +1 -0
- package/cjs/date-search.js +150 -0
- package/cjs/date-search.js.map +1 -0
- package/cjs/filter.js +77 -1
- package/cjs/filter.js.map +1 -1
- package/cjs/list.html +1 -1
- package/cjs/list.js +12 -2
- package/cjs/list.js.map +1 -1
- package/cjs/sort.d.ts +4 -4
- package/cjs/sort.js +3 -2
- package/cjs/sort.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -130,6 +130,76 @@ templates or the configured data source.
|
|
|
130
130
|
|
|
131
131
|
For `json()`, the scope is passed directly to `dataSource().search()`.
|
|
132
132
|
|
|
133
|
+
## Search filters
|
|
134
|
+
|
|
135
|
+
HTML list filters interpret the first hyphen as an interval separator. Spaces around the bounds are ignored:
|
|
136
|
+
|
|
137
|
+
- `2000 - 2010` uses inclusive `between(2000, 2010)`.
|
|
138
|
+
- `-2010` means less than or equal to 2010.
|
|
139
|
+
- `2000-` means greater than or equal to 2000.
|
|
140
|
+
- A hyphen with neither bound applies no criterion.
|
|
141
|
+
|
|
142
|
+
Leading `>`, `>=`, `<`, `<=`, `<>`, `!=` and `!` apply the corresponding comparison.
|
|
143
|
+
The prefixes `<>`, `!=` and `!` mean not equal; the equals sign after `!` is optional.
|
|
144
|
+
With `*` or `?` in their operand, these three prefixes request `NOT LIKE` instead, using the same wildcard conversion.
|
|
145
|
+
A leading `=` requests exact equality, including an empty string. Spaces around explicit comparison operands are ignored.
|
|
146
|
+
Explicit operators take precedence over interval syntax, so `>=-10` compares with negative ten and `=A-B` matches `A-B`.
|
|
147
|
+
|
|
148
|
+
Without an explicit comparison operator, `*` and `?` request `LIKE` for any property type, replacing all `*` with `%`
|
|
149
|
+
and all `?` with `_`. The pattern is used as supplied without an extra trailing wildcard. Wildcards take precedence
|
|
150
|
+
over interval syntax, so `2000-20??` becomes the pattern `2000-20__`.
|
|
151
|
+
|
|
152
|
+
Without an operator, wildcard or hyphen, text properties use prefix matching (`Alice` becomes `LIKE 'Alice%'`).
|
|
153
|
+
Other property types retain equality. The type of nested properties is resolved from the final property.
|
|
154
|
+
Any later hyphens in an interval remain part of the upper bound.
|
|
155
|
+
The original text stays in the input and session; feed requests reconstruct the same criterion from session state.
|
|
156
|
+
The data source converts the bounds according to the property's type.
|
|
157
|
+
|
|
158
|
+
### Object filters
|
|
159
|
+
|
|
160
|
+
A filter on an object column searches every `representativeOf()` property of its target type with `OR`.
|
|
161
|
+
This applies to singular objects and collections. For example, `Movie.genres` with `Genre` represented by `name`
|
|
162
|
+
searches `genres.name`. Text representatives use the same prefix, comparison, interval and wildcard rules as direct
|
|
163
|
+
text columns. Nested object representatives are expanded recursively; cyclic representations reject.
|
|
164
|
+
Separate column filters remain combined with `AND`. Original input is retained in session.
|
|
165
|
+
Logical criteria retain mandatory application scopes and authorisation checks on every expanded property path.
|
|
166
|
+
|
|
167
|
+
### Date filters
|
|
168
|
+
|
|
169
|
+
Date properties use the dedicated `dateSearch()` implementation in `src/date-search.ts` before ordinary interval
|
|
170
|
+
and wildcard processing. Slash and compact dates use the same request-scoped translated `dd/MM/yyyy` format as
|
|
171
|
+
the framework's date output. ISO dates always use year-month-day order; a leading four-digit year also permits
|
|
172
|
+
`yyyy/MM/dd`.
|
|
173
|
+
|
|
174
|
+
- Four digits select the whole year; one or two digits select that month in the current year (`6` and `06` both mean June).
|
|
175
|
+
- Slash dates accept day/month or month/day according to the display format, with an optional year.
|
|
176
|
+
- Month/year and year/month with a four-digit year select that whole month; either slash or hyphen is accepted.
|
|
177
|
+
- Hyphen dates use ISO order, including short fields such as `26-3-9`. `2020-03` selects March 2020.
|
|
178
|
+
- Six and eight digits are compact local dates, with a two-digit or four-digit year respectively.
|
|
179
|
+
- A separated one-, two- or three-digit year is completed using the current decade, century or millennium.
|
|
180
|
+
- Date ranges use slash dates, for example `01/03/2020-09/03/2020` in day/month order. Open bounds are inclusive.
|
|
181
|
+
- A hyphen between two three- or four-digit years selects all dates from the first January to the last December:
|
|
182
|
+
`2026-2027` includes both whole years. Three-digit years use the current millennium.
|
|
183
|
+
Other hyphens without slash are ISO date separators, so `2026-03` still selects March 2026.
|
|
184
|
+
- A leading or trailing hyphen opens the range, including ISO dates: `2026-` starts on 1 January 2026,
|
|
185
|
+
`-2026` ends on 31 December 2026, `6-` starts on 1 June of the current year, and `-2020-02` includes
|
|
186
|
+
all dates up to the end of February 2020. Missing components follow the same date completion rules.
|
|
187
|
+
|
|
188
|
+
Calendar periods include their full final day. Explicit comparisons use the corresponding beginning or end of the
|
|
189
|
+
period: `>2020` starts after 2020, and `<=2020` includes all of 2020. Not-equal comparisons exclude the whole period
|
|
190
|
+
through `NOT BETWEEN`.
|
|
191
|
+
|
|
192
|
+
Date digits may contain `%`, `?` or `*`. Patterns are reordered into SQL year-month-day order, `?` becomes `_` and `*`
|
|
193
|
+
becomes `%`. For example `??/03/2020` becomes `2020-03-__%` in day/month order; the final `%` also permits stored times.
|
|
194
|
+
Each wildcard counts as one digit while identifying the input format and completing date fields. For example,
|
|
195
|
+
`??` selects month patterns in the current year, `????` selects year patterns, and a two-character year such as `**`
|
|
196
|
+
is prefixed with the current century before replacing the wildcards. One-character month and day fields are zero-padded.
|
|
197
|
+
The prefixes `!`, `!=` and `<>` use `NOT LIKE` for these patterns.
|
|
198
|
+
On a date property, `?` alone excludes the zero date; `!?`, `!=?` and `<>?` find zero dates.
|
|
199
|
+
Empty dates are stored as `0000-00-00`, never SQL `NULL`.
|
|
200
|
+
Invalid dates match no rows, without calendar rollover.
|
|
201
|
+
Original input text is retained in session and restored for subsequent feed requests.
|
|
202
|
+
|
|
133
203
|
## Typical use cases
|
|
134
204
|
|
|
135
205
|
- Back‑office list screens for any business entity (users, products, orders…).
|
package/cjs/columns.js
CHANGED
|
@@ -24,11 +24,16 @@ class Columns extends parameter_1.Parameter {
|
|
|
24
24
|
this.properties = properties;
|
|
25
25
|
this.configured = true;
|
|
26
26
|
}
|
|
27
|
-
catch {
|
|
27
|
+
catch {
|
|
28
|
+
/* Invalid saved requests preserve the previous configuration. */
|
|
29
|
+
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
30
|
-
if (!this.configured && !this.length)
|
|
31
|
-
this.properties = new list_properties_1.ListReflectClass(type)
|
|
32
|
+
if (!this.configured && !this.length) {
|
|
33
|
+
this.properties = new list_properties_1.ListReflectClass(type)
|
|
34
|
+
.listProperties()
|
|
35
|
+
.map(property => new projection_1.ListColumn(type, String(property.name)));
|
|
36
|
+
}
|
|
32
37
|
this.configured = true;
|
|
33
38
|
}
|
|
34
39
|
get length() {
|
|
@@ -39,13 +44,12 @@ class Columns extends parameter_1.Parameter {
|
|
|
39
44
|
}
|
|
40
45
|
async projected(result) {
|
|
41
46
|
if (result.columns.some((column, index) => column.path !== this.properties[index]?.name)
|
|
42
|
-
|| result.columns.length !== this.length)
|
|
47
|
+
|| (result.columns.length !== this.length)) {
|
|
43
48
|
throw new Error('Projection columns do not match the list');
|
|
49
|
+
}
|
|
44
50
|
return Promise.all(result.rows.map(async (row) => ({
|
|
45
51
|
id: row.rootId,
|
|
46
|
-
properties: await Promise.all(row.cells.map(async (cell, index) => ({
|
|
47
|
-
outputOptionalContainer: await this.properties[index].output(cell)
|
|
48
|
-
})))
|
|
52
|
+
properties: await Promise.all(row.cells.map(async (cell, index) => ({ outputOptionalContainer: await this.properties[index].output(cell) })))
|
|
49
53
|
})));
|
|
50
54
|
}
|
|
51
55
|
readOptions(options = new Array) {
|
|
@@ -80,8 +84,13 @@ async function projectColumns(type, columns, search, options) {
|
|
|
80
84
|
.filter(path => !singular.some(column => column.name === path));
|
|
81
85
|
selections.push(...parents.map(path => ({ path, objectFields: [] })));
|
|
82
86
|
const result = await (0, storage_1.dataSource)().select(type, selections, search, options);
|
|
83
|
-
if (!columns.some(column => column.multiple)
|
|
87
|
+
if (!columns.some(column => column.multiple))
|
|
84
88
|
return result;
|
|
89
|
+
const projectedColumns = columns.map(column => ({ path: column.name, kind: column.multiple
|
|
90
|
+
? 'scalar'
|
|
91
|
+
: result.columns[singular.indexOf(column)].kind }));
|
|
92
|
+
if (!result.rows.length)
|
|
93
|
+
return { ...result, columns: projectedColumns };
|
|
85
94
|
const ids = result.rows.map(row => row.rootId);
|
|
86
95
|
const direct = columns.filter(column => column.multiple && !column.component);
|
|
87
96
|
const objects = direct.length ? await (0, storage_1.dataSource)().search(type, search, [new storage_2.Identifiers(ids)]) : [];
|
|
@@ -95,16 +104,19 @@ async function projectColumns(type, columns, search, options) {
|
|
|
95
104
|
return row.rootId;
|
|
96
105
|
const index = singular.findIndex(column => column.name === component.parent);
|
|
97
106
|
const cell = row.cells[index < 0 ? singular.length + parents.indexOf(component.parent) : index];
|
|
98
|
-
return cell.kind === 'value' ? cell.value?.id : undefined;
|
|
107
|
+
return (cell.kind === 'value') ? cell.value?.id : undefined;
|
|
99
108
|
});
|
|
100
109
|
const selectedIds = [...new Set(parentIds.filter((id) => id !== undefined))];
|
|
101
110
|
const selections = new Map([
|
|
102
111
|
[component.inverse, { path: component.inverse, objectFields: [] }]
|
|
103
112
|
]);
|
|
104
|
-
for (const column of grouped)
|
|
113
|
+
for (const column of grouped) {
|
|
105
114
|
selections.set(column.component.column.name, column.component.column.selection());
|
|
115
|
+
}
|
|
106
116
|
const names = [...selections.keys()];
|
|
107
|
-
const values = selectedIds.length
|
|
117
|
+
const values = selectedIds.length
|
|
118
|
+
? await (0, storage_1.dataSource)().select(component.type, [...selections.values()], { [component.inverse]: selectedIds }, [new storage_3.Sort([])])
|
|
119
|
+
: undefined;
|
|
108
120
|
for (const column of grouped) {
|
|
109
121
|
const byParent = new Map();
|
|
110
122
|
for (const row of values?.rows ?? []) {
|
|
@@ -113,29 +125,41 @@ async function projectColumns(type, columns, search, options) {
|
|
|
113
125
|
continue;
|
|
114
126
|
const id = String(owner.value.id);
|
|
115
127
|
let cells = byParent.get(id);
|
|
116
|
-
if (!cells)
|
|
128
|
+
if (!cells) {
|
|
117
129
|
byParent.set(id, cells = []);
|
|
130
|
+
}
|
|
118
131
|
cells.push(row.cells[names.indexOf(column.component.column.name)]);
|
|
119
132
|
}
|
|
120
133
|
components.set(column.name, new Map(result.rows.map((row, index) => [String(row.rootId), byParent.get(String(parentIds[index])) ?? []])));
|
|
121
134
|
}
|
|
122
135
|
}
|
|
123
136
|
return {
|
|
137
|
+
columns: projectedColumns,
|
|
124
138
|
rootType: type,
|
|
125
|
-
columns: columns.map(column => ({ path: column.name, kind: column.multiple ? 'scalar' :
|
|
126
|
-
result.columns[singular.indexOf(column)].kind })),
|
|
127
139
|
rows: await Promise.all(result.rows.map(async (row) => {
|
|
128
140
|
const object = byId.get(String(row.rootId));
|
|
129
141
|
const cells = await Promise.all(columns.map(async (column) => {
|
|
130
|
-
if (!column.multiple)
|
|
142
|
+
if (!column.multiple) {
|
|
131
143
|
return row.cells[singular.indexOf(column)];
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
144
|
+
}
|
|
145
|
+
if (column.component) {
|
|
146
|
+
return {
|
|
147
|
+
kind: 'value',
|
|
148
|
+
value: components.get(column.name).get(String(row.rootId)) ?? []
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const value = object
|
|
152
|
+
? await object[column.name]
|
|
153
|
+
: [];
|
|
154
|
+
return {
|
|
155
|
+
kind: 'value',
|
|
156
|
+
value: value ?? []
|
|
157
|
+
};
|
|
137
158
|
}));
|
|
138
|
-
return {
|
|
159
|
+
return {
|
|
160
|
+
cells,
|
|
161
|
+
rootId: row.rootId
|
|
162
|
+
};
|
|
139
163
|
}))
|
|
140
164
|
};
|
|
141
165
|
}
|
package/cjs/columns.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"columns.js","sourceRoot":"","sources":["../src/columns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function dateSearch(value: string, operator?: string, now?: Date, format?: string): never[] | import("@itrocks/sql-functions").SqlFunction;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dateSearch = dateSearch;
|
|
4
|
+
const sql_functions_1 = require("@itrocks/sql-functions");
|
|
5
|
+
const sql_functions_2 = require("@itrocks/sql-functions");
|
|
6
|
+
const sql_functions_3 = require("@itrocks/sql-functions");
|
|
7
|
+
const sql_functions_4 = require("@itrocks/sql-functions");
|
|
8
|
+
const sql_functions_5 = require("@itrocks/sql-functions");
|
|
9
|
+
const sql_functions_6 = require("@itrocks/sql-functions");
|
|
10
|
+
const sql_functions_7 = require("@itrocks/sql-functions");
|
|
11
|
+
const sql_functions_8 = require("@itrocks/sql-functions");
|
|
12
|
+
const sql_functions_9 = require("@itrocks/sql-functions");
|
|
13
|
+
const sql_functions_10 = require("@itrocks/sql-functions");
|
|
14
|
+
const translate_1 = require("@itrocks/translate");
|
|
15
|
+
function completeYear(value, currentYear) {
|
|
16
|
+
return (value.length === 4)
|
|
17
|
+
? value
|
|
18
|
+
: (String(currentYear).slice(0, 4 - value.length) + value);
|
|
19
|
+
}
|
|
20
|
+
function dateParts(value, format, now) {
|
|
21
|
+
const dayFirst = format.indexOf('d') < format.indexOf('M');
|
|
22
|
+
let day;
|
|
23
|
+
let month;
|
|
24
|
+
let year = String(now.getFullYear());
|
|
25
|
+
if (/^[\d?%*]+$/.test(value)) {
|
|
26
|
+
if (value.length === 4)
|
|
27
|
+
year = value;
|
|
28
|
+
else if (value.length <= 2)
|
|
29
|
+
month = value;
|
|
30
|
+
else if (value.length === 6 || value.length === 8) {
|
|
31
|
+
day = value.slice(dayFirst ? 0 : 2, dayFirst ? 2 : 4);
|
|
32
|
+
month = value.slice(dayFirst ? 2 : 0, dayFirst ? 4 : 2);
|
|
33
|
+
year = value.slice(4);
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const slash = value.includes('/');
|
|
40
|
+
const parts = value.split(slash ? '/' : '-').map(part => part.trim());
|
|
41
|
+
if (parts.some(part => !/^[\d?%*]{1,4}$/.test(part)))
|
|
42
|
+
return;
|
|
43
|
+
if (parts.length === 2) {
|
|
44
|
+
if (parts[0].length === 4)
|
|
45
|
+
[year, month] = parts;
|
|
46
|
+
else if (parts[1].length === 4)
|
|
47
|
+
[month, year] = parts;
|
|
48
|
+
else if (!slash)
|
|
49
|
+
[year, month] = parts;
|
|
50
|
+
else
|
|
51
|
+
[day, month] = dayFirst ? parts : [...parts].reverse();
|
|
52
|
+
}
|
|
53
|
+
else if (parts.length === 3) {
|
|
54
|
+
if (!slash || parts[0].length === 4) {
|
|
55
|
+
[year, month, day] = parts;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
[day, month] = dayFirst ? parts : [parts[1], parts[0]];
|
|
59
|
+
year = parts[2];
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if ((month && month.length > 2) || (day && day.length > 2))
|
|
66
|
+
return;
|
|
67
|
+
return {
|
|
68
|
+
day,
|
|
69
|
+
month,
|
|
70
|
+
year: completeYear(year, now.getFullYear())
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function datePeriod(value, format, now) {
|
|
74
|
+
const parts = dateParts(value, format, now);
|
|
75
|
+
if (!parts || /[^\d]/.test(parts.year + (parts.month ?? '') + (parts.day ?? '')))
|
|
76
|
+
return;
|
|
77
|
+
const day = +(parts.day ?? 1);
|
|
78
|
+
const month = +(parts.month ?? 1);
|
|
79
|
+
const year = +parts.year;
|
|
80
|
+
const lower = new Date(0);
|
|
81
|
+
lower.setFullYear(year, month - 1, day);
|
|
82
|
+
lower.setHours(0, 0, 0, 0);
|
|
83
|
+
if ((year < 1) || (year > 9999)
|
|
84
|
+
|| (lower.getFullYear() !== year) || (lower.getMonth() !== month - 1) || (lower.getDate() !== day)) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const next = new Date(lower);
|
|
88
|
+
if (!parts.month)
|
|
89
|
+
next.setFullYear(year + 1);
|
|
90
|
+
else if (!parts.day)
|
|
91
|
+
next.setMonth(month);
|
|
92
|
+
else
|
|
93
|
+
next.setDate(day + 1);
|
|
94
|
+
return {
|
|
95
|
+
lower,
|
|
96
|
+
upper: new Date(next.getTime() - 1)
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function dateSearch(value, operator = '=', now = new Date(), format = (0, translate_1.tr)('dd/MM/yyyy', { ucFirst: false })) {
|
|
100
|
+
value = value.trim();
|
|
101
|
+
if (value === '?') {
|
|
102
|
+
return ['!', '!=', '<>'].includes(operator)
|
|
103
|
+
? (0, sql_functions_2.equal)('0000-00-00')
|
|
104
|
+
: (0, sql_functions_9.notEqual)('0000-00-00');
|
|
105
|
+
}
|
|
106
|
+
if (/[%*?]/.test(value)) {
|
|
107
|
+
const parts = dateParts(value, format, now);
|
|
108
|
+
if (!parts)
|
|
109
|
+
return [];
|
|
110
|
+
const field = (part) => part.padStart(2, '0');
|
|
111
|
+
const pattern = parts.year + (!parts.month ? '-%' : ('-' + field(parts.month)
|
|
112
|
+
+ (!parts.day ? '-%' : ('-' + field(parts.day) + '%'))));
|
|
113
|
+
const compare = ['!', '!=', '<>'].includes(operator) ? sql_functions_10.notLike : sql_functions_7.like;
|
|
114
|
+
return compare(pattern.replaceAll('*', '%').replaceAll('?', '_'));
|
|
115
|
+
}
|
|
116
|
+
let period;
|
|
117
|
+
const years = value.match(/^(\d{3,4})\s*-\s*(\d{3,4})$/);
|
|
118
|
+
const open = value.startsWith('-') || value.endsWith('-');
|
|
119
|
+
if (years || open || (value.includes('/') && value.includes('-'))) {
|
|
120
|
+
const index = value.endsWith('-') ? value.length - 1 : value.indexOf('-');
|
|
121
|
+
const left = years ? completeYear(years[1], now.getFullYear()) : value.slice(0, index).trim();
|
|
122
|
+
const right = years ? completeYear(years[2], now.getFullYear()) : value.slice(index + 1).trim();
|
|
123
|
+
const bound = (part) => datePeriod(/^\d{3}$/.test(part) ? completeYear(part, now.getFullYear()) : part, format, now);
|
|
124
|
+
const lower = left ? bound(left)?.lower : undefined;
|
|
125
|
+
const upper = right ? bound(right)?.upper : undefined;
|
|
126
|
+
if ((left && !lower) || (right && !upper))
|
|
127
|
+
return [];
|
|
128
|
+
if (lower && upper)
|
|
129
|
+
period = { lower, upper };
|
|
130
|
+
else if (lower)
|
|
131
|
+
return (0, sql_functions_4.greaterOrEqual)(lower);
|
|
132
|
+
else if (upper)
|
|
133
|
+
return (0, sql_functions_6.lessOrEqual)(upper);
|
|
134
|
+
}
|
|
135
|
+
else
|
|
136
|
+
period = datePeriod(value, format, now);
|
|
137
|
+
if (!period)
|
|
138
|
+
return [];
|
|
139
|
+
switch (operator) {
|
|
140
|
+
case '!':
|
|
141
|
+
case '!=':
|
|
142
|
+
case '<>': return (0, sql_functions_8.notBetween)(period.lower, period.upper);
|
|
143
|
+
case '<': return (0, sql_functions_5.less)(period.lower);
|
|
144
|
+
case '<=': return (0, sql_functions_6.lessOrEqual)(period.upper);
|
|
145
|
+
case '>': return (0, sql_functions_3.greater)(period.upper);
|
|
146
|
+
case '>=': return (0, sql_functions_4.greaterOrEqual)(period.lower);
|
|
147
|
+
default: return (0, sql_functions_1.between)(period.lower, period.upper);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=date-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-search.js","sourceRoot":"","sources":["../src/date-search.ts"],"names":[],"mappings":"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"}
|
package/cjs/filter.js
CHANGED
|
@@ -1,7 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Filter = void 0;
|
|
4
|
+
const class_view_1 = require("@itrocks/class-view");
|
|
5
|
+
const reflect_path_1 = require("@itrocks/reflect-path");
|
|
6
|
+
const sql_functions_1 = require("@itrocks/sql-functions");
|
|
7
|
+
const sql_functions_2 = require("@itrocks/sql-functions");
|
|
8
|
+
const sql_functions_3 = require("@itrocks/sql-functions");
|
|
9
|
+
const sql_functions_4 = require("@itrocks/sql-functions");
|
|
10
|
+
const sql_functions_5 = require("@itrocks/sql-functions");
|
|
11
|
+
const sql_functions_6 = require("@itrocks/sql-functions");
|
|
12
|
+
const sql_functions_7 = require("@itrocks/sql-functions");
|
|
13
|
+
const sql_functions_8 = require("@itrocks/sql-functions");
|
|
14
|
+
const sql_functions_9 = require("@itrocks/sql-functions");
|
|
15
|
+
const sql_functions_10 = require("@itrocks/sql-functions");
|
|
16
|
+
const sql_functions_11 = require("@itrocks/sql-functions");
|
|
17
|
+
const date_search_1 = require("./date-search");
|
|
4
18
|
const parameter_1 = require("./parameter");
|
|
19
|
+
const operators = {
|
|
20
|
+
'!': sql_functions_10.notEqual,
|
|
21
|
+
'!=': sql_functions_10.notEqual,
|
|
22
|
+
'<': sql_functions_7.less,
|
|
23
|
+
'<=': sql_functions_8.lessOrEqual,
|
|
24
|
+
'<>': sql_functions_10.notEqual,
|
|
25
|
+
'=': sql_functions_4.equal,
|
|
26
|
+
'>': sql_functions_5.greater,
|
|
27
|
+
'>=': sql_functions_6.greaterOrEqual
|
|
28
|
+
};
|
|
5
29
|
class Filter extends parameter_1.Parameter {
|
|
6
30
|
columns;
|
|
7
31
|
search = {};
|
|
@@ -43,10 +67,62 @@ class Filter extends parameter_1.Parameter {
|
|
|
43
67
|
}
|
|
44
68
|
searchObject(type) {
|
|
45
69
|
const search = {};
|
|
70
|
+
const groups = [];
|
|
71
|
+
const expand = (property, value, ancestors = []) => {
|
|
72
|
+
const resolved = (0, reflect_path_1.resolvePropertyPath)(type, property);
|
|
73
|
+
if (!resolved.target) {
|
|
74
|
+
const filter = new Filter(this.columns);
|
|
75
|
+
filter.search = { [property]: value };
|
|
76
|
+
return filter.searchObject(type);
|
|
77
|
+
}
|
|
78
|
+
if (ancestors.includes(resolved.target))
|
|
79
|
+
throw new Error(`Cyclic search representation: ${property}`);
|
|
80
|
+
const branch = [...ancestors, resolved.target];
|
|
81
|
+
return {
|
|
82
|
+
[sql_functions_2.OR]: (0, class_view_1.representativeOf)(resolved.target).map(name => expand(`${property}.${String(name)}`, value, branch))
|
|
83
|
+
};
|
|
84
|
+
};
|
|
46
85
|
for (const [property, value] of Object.entries(this.search)) {
|
|
47
86
|
if (value === '')
|
|
48
87
|
continue;
|
|
49
|
-
|
|
88
|
+
if ((0, reflect_path_1.resolvePropertyPath)(type, property).target) {
|
|
89
|
+
groups.push(expand(property, value));
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
const comparison = value.match(/^(>=|<=|<>|!=|>|<|=|!)(.*)$/s);
|
|
93
|
+
const operator = comparison ? operators[comparison[1]] : undefined;
|
|
94
|
+
const operand = comparison ? comparison[2].trim() : value;
|
|
95
|
+
const propertyType = (0, reflect_path_1.resolvePropertyPath)(type, property).property.type.type;
|
|
96
|
+
if (propertyType === Date) {
|
|
97
|
+
search[property] = (0, date_search_1.dateSearch)(operand, comparison?.[1]);
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if (/[*?]/.test(operand) && (!operator || operator === sql_functions_10.notEqual)) {
|
|
101
|
+
const compare = operator ? sql_functions_11.notLike : sql_functions_9.like;
|
|
102
|
+
search[property] = compare(operand.replaceAll('*', '%').replaceAll('?', '_'));
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (operator) {
|
|
106
|
+
search[property] = operator(operand);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const separator = value.indexOf('-');
|
|
110
|
+
if (separator < 0) {
|
|
111
|
+
const text = propertyType === String;
|
|
112
|
+
search[property] = (text ? (0, sql_functions_9.like)(value + '%') : value);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const lower = value.slice(0, separator).trim();
|
|
116
|
+
const upper = value.slice(separator + 1).trim();
|
|
117
|
+
if (lower && upper)
|
|
118
|
+
search[property] = (0, sql_functions_3.between)(lower, upper);
|
|
119
|
+
else if (lower)
|
|
120
|
+
search[property] = (0, sql_functions_6.greaterOrEqual)(lower);
|
|
121
|
+
else if (upper)
|
|
122
|
+
search[property] = (0, sql_functions_8.lessOrEqual)(upper);
|
|
123
|
+
}
|
|
124
|
+
if (groups.length) {
|
|
125
|
+
search[sql_functions_1.AND] = groups;
|
|
50
126
|
}
|
|
51
127
|
return Object.setPrototypeOf(search, type.prototype);
|
|
52
128
|
}
|
package/cjs/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
package/cjs/list.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
</ul>
|
|
28
28
|
</header>
|
|
29
29
|
<form action="app://(type.@route)/list" autocomplete="off" method="post" target="main">
|
|
30
|
-
<table class="objects" data-
|
|
30
|
+
<table class="objects" data-link="{type.@route}">
|
|
31
31
|
<thead>
|
|
32
32
|
<tr class="properties">
|
|
33
33
|
<th class="select" data-freeze><input name="select" type="checkbox" value="all">
|
package/cjs/list.js
CHANGED
|
@@ -40,6 +40,9 @@ const action_2 = require("@itrocks/action");
|
|
|
40
40
|
const action_3 = require("@itrocks/action");
|
|
41
41
|
const route_1 = require("@itrocks/route");
|
|
42
42
|
const route_2 = require("@itrocks/route");
|
|
43
|
+
const sql_functions_1 = require("@itrocks/sql-functions");
|
|
44
|
+
const sql_functions_2 = require("@itrocks/sql-functions");
|
|
45
|
+
const sql_functions_3 = require("@itrocks/sql-functions");
|
|
43
46
|
const storage_1 = require("@itrocks/storage");
|
|
44
47
|
const storage_2 = require("@itrocks/storage");
|
|
45
48
|
const storage_3 = require("@itrocks/storage");
|
|
@@ -102,8 +105,15 @@ let List = (() => {
|
|
|
102
105
|
if (!batch)
|
|
103
106
|
(0, persist_2.save)(this, request.request, type);
|
|
104
107
|
const options = feed.readOptions(filter.readOptions(sort.readOptions()));
|
|
105
|
-
const
|
|
106
|
-
|
|
108
|
+
const filters = filter.searchObject(type);
|
|
109
|
+
// Scope values override direct user criteria; logical groups remain cumulative.
|
|
110
|
+
for (const path of Object.keys(scope ?? {})) {
|
|
111
|
+
delete filters[path];
|
|
112
|
+
}
|
|
113
|
+
const search = scope && ((scope[sql_functions_1.AND] !== undefined) || (scope[sql_functions_2.OR] !== undefined))
|
|
114
|
+
? { [sql_functions_1.AND]: [filters, scope] }
|
|
115
|
+
: Object.assign(filters, scope);
|
|
116
|
+
for (const path of (0, sql_functions_3.conditionPaths)(search))
|
|
107
117
|
await access.authorise(path);
|
|
108
118
|
for (const path of Object.keys(sort.sorted ?? {}))
|
|
109
119
|
await access.authorise(path);
|
package/cjs/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAwD;AAExD,4CAAwD;AACxD,4CAAwD;AAExD,0CAAuD;AACvD,0CAAuD;AACvD,8CAAyD;AAEzD,8CAAyD;AACzD,8CAAyD;AACzD,qCAAiD;AACjD,uCAAkD;AAClD,uCAAkD;AAClD,iCAA+C;AAC/C,qCAAiD;AACjD,uCAAkD;AAClD,uCAAkD;AAClD,6CAAqD;AACrD,qDAAyD;AACzD,qDAAyD;AACzD,iCAA+C;AAE/C,mCAAwC;AAA/B,uGAAA,aAAa,OAAA;IAKT,IAAI;4BAFhB,IAAA,aAAI,EAAC,OAAO,EAAE,KAAK,CAAC,EACpB,IAAA,aAAK,EAAC,OAAO,CAAC;;;;sBACsC,eAAM;oBAAd,SAAQ,WAAS;;;;YAA9D,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../src/list.ts"],"names":[],"mappings":"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"}
|
package/cjs/sort.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Option } from '@itrocks/storage';
|
|
|
4
4
|
import { Sort as SortOption } from '@itrocks/storage';
|
|
5
5
|
import { Columns } from './columns';
|
|
6
6
|
import { Parameter } from './parameter';
|
|
7
|
-
interface
|
|
7
|
+
interface Sorted {
|
|
8
8
|
[key: string]: boolean;
|
|
9
9
|
}
|
|
10
10
|
interface Sortable {
|
|
@@ -13,12 +13,12 @@ interface Sortable {
|
|
|
13
13
|
}
|
|
14
14
|
export declare class Sort<T extends object> extends Parameter {
|
|
15
15
|
columns: Columns<T> & Sortable[];
|
|
16
|
-
sorted?:
|
|
16
|
+
sorted?: Sorted;
|
|
17
17
|
constructor(columns: Columns<T>);
|
|
18
18
|
getParams(request: Request, type: Type<T>): void;
|
|
19
19
|
readOptions(options?: Option[]): Option[];
|
|
20
|
-
serialize():
|
|
20
|
+
serialize(): [string, boolean][] | undefined;
|
|
21
21
|
sortOption(): SortOption | Type<SortOption>;
|
|
22
|
-
unserialize(data:
|
|
22
|
+
unserialize(data: [string, boolean][]): void;
|
|
23
23
|
}
|
|
24
24
|
export {};
|
package/cjs/sort.js
CHANGED
|
@@ -61,7 +61,8 @@ class Sort extends parameter_1.Parameter {
|
|
|
61
61
|
return options;
|
|
62
62
|
}
|
|
63
63
|
serialize() {
|
|
64
|
-
|
|
64
|
+
// Session object merges do not preserve key order; array entries preserve sort priority.
|
|
65
|
+
return this.sorted && Object.entries(this.sorted);
|
|
65
66
|
}
|
|
66
67
|
sortOption() {
|
|
67
68
|
if (!this.sorted)
|
|
@@ -77,7 +78,7 @@ class Sort extends parameter_1.Parameter {
|
|
|
77
78
|
return new storage_1.Sort(properties);
|
|
78
79
|
}
|
|
79
80
|
unserialize(data) {
|
|
80
|
-
this.sorted = data;
|
|
81
|
+
this.sorted = Object.fromEntries(data);
|
|
81
82
|
}
|
|
82
83
|
}
|
|
83
84
|
exports.Sort = Sort;
|
package/cjs/sort.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":";;;AAEA,wCAAkD;AAClD,wCAAkD;AAGlD,8CAAqD;AAErD,2CAAgD;AAWhD,MAAa,IAAuB,SAAQ,qBAAS;IAGpD,OAAO,CAAyB;IAChC,MAAM,
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../src/sort.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"@itrocks/request-response": "latest",
|
|
22
22
|
"@itrocks/route": "latest",
|
|
23
23
|
"@itrocks/sort": "latest",
|
|
24
|
+
"@itrocks/sql-functions": "latest",
|
|
24
25
|
"@itrocks/storage": "latest",
|
|
25
26
|
"@itrocks/table": "latest",
|
|
26
27
|
"@itrocks/translate": "latest",
|
|
@@ -93,5 +94,5 @@
|
|
|
93
94
|
"build:front": "tsc -p src/front/tsconfig.json",
|
|
94
95
|
"test": "npm run build:cjs && node --test \"test/**/*.test.mjs\""
|
|
95
96
|
},
|
|
96
|
-
"version": "0.
|
|
97
|
+
"version": "0.21.0"
|
|
97
98
|
}
|