@adminforth/universal-search 1.1.0 → 1.1.1
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/build.log +1 -1
- package/dist/index.js +10 -11
- package/index.ts +24 -26
- package/package.json +1 -1
package/build.log
CHANGED
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import { AdminForthPlugin } from 'adminforth';
|
|
10
|
+
import { AdminForthPlugin, Filters } from 'adminforth';
|
|
11
11
|
export default class UniversalSearchPlugin extends AdminForthPlugin {
|
|
12
12
|
constructor(options) {
|
|
13
13
|
super(options, import.meta.url);
|
|
@@ -91,23 +91,22 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
|
|
|
91
91
|
columns.forEach(col => {
|
|
92
92
|
const searchBy = (col.searchBy === 'labelOnly' ? 'keyOnly' : col.searchBy) || 'valueOnly';
|
|
93
93
|
const addFilter = (field) => {
|
|
94
|
-
let operator;
|
|
95
|
-
let value;
|
|
96
94
|
if (col.exact) {
|
|
97
95
|
if (col.caseSensitive) {
|
|
98
|
-
|
|
99
|
-
value = term;
|
|
96
|
+
sub.push(Filters.LIKE(field, term));
|
|
100
97
|
}
|
|
101
98
|
else {
|
|
102
|
-
|
|
103
|
-
value = term;
|
|
99
|
+
sub.push(Filters.EQ(field, term));
|
|
104
100
|
}
|
|
105
101
|
}
|
|
106
102
|
else {
|
|
107
|
-
|
|
108
|
-
|
|
103
|
+
if (col.caseSensitive) {
|
|
104
|
+
sub.push(Filters.LIKE(field, term));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
sub.push(Filters.ILIKE ? Filters.ILIKE(field, term) : { field, operator: 'ilike', value: term });
|
|
108
|
+
}
|
|
109
109
|
}
|
|
110
|
-
sub.push({ field, operator, value });
|
|
111
110
|
};
|
|
112
111
|
if (searchBy === 'valueOnly')
|
|
113
112
|
addFilter(col.name);
|
|
@@ -120,7 +119,7 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
|
|
|
120
119
|
});
|
|
121
120
|
if (!sub.length)
|
|
122
121
|
return [];
|
|
123
|
-
return [
|
|
122
|
+
return [Filters.OR(sub)];
|
|
124
123
|
}
|
|
125
124
|
return [f];
|
|
126
125
|
});
|
package/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AdminForthPlugin, AdminForthResource, IAdminForth, AdminForthDataTypes } from 'adminforth';
|
|
1
|
+
import { AdminForthPlugin, AdminForthResource, IAdminForth, AdminForthDataTypes, Filters } from 'adminforth';
|
|
2
2
|
import { PluginOptions, UniversalSearchColumnConfig } from './types.js';
|
|
3
3
|
|
|
4
4
|
export default class UniversalSearchPlugin extends AdminForthPlugin {
|
|
@@ -75,33 +75,31 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
|
|
|
75
75
|
}
|
|
76
76
|
if (f.field === virtualFieldName) {
|
|
77
77
|
const term = (f.value || '').toString().trim();
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
if (col.caseSensitive) {
|
|
87
|
-
operator = 'like';
|
|
88
|
-
value = term;
|
|
89
|
-
} else {
|
|
90
|
-
operator = 'eq';
|
|
91
|
-
value = term;
|
|
92
|
-
}
|
|
78
|
+
if (!term) return [];
|
|
79
|
+
const sub: any[] = [];
|
|
80
|
+
columns.forEach(col => {
|
|
81
|
+
const searchBy = (col.searchBy === 'labelOnly' ? 'keyOnly' : col.searchBy) || 'valueOnly';
|
|
82
|
+
const addFilter = (field: string) => {
|
|
83
|
+
if (col.exact) {
|
|
84
|
+
if (col.caseSensitive) {
|
|
85
|
+
sub.push(Filters.LIKE(field, term));
|
|
93
86
|
} else {
|
|
94
|
-
|
|
95
|
-
value = `${term}`;
|
|
87
|
+
sub.push(Filters.EQ(field, term));
|
|
96
88
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
89
|
+
} else {
|
|
90
|
+
if (col.caseSensitive) {
|
|
91
|
+
sub.push(Filters.LIKE(field, term));
|
|
92
|
+
} else {
|
|
93
|
+
sub.push((Filters as any).ILIKE ? (Filters as any).ILIKE(field, term) : { field, operator: 'ilike', value: term });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
if (searchBy === 'valueOnly') addFilter(col.name);
|
|
98
|
+
else if (searchBy === 'keyOnly') addFilter(`${col.name}__key`);
|
|
99
|
+
else if (searchBy === 'both') { addFilter(col.name); addFilter(`${col.name}__key`); }
|
|
100
|
+
});
|
|
101
|
+
if (!sub.length) return [];
|
|
102
|
+
return [Filters.OR(sub)];
|
|
105
103
|
}
|
|
106
104
|
return [f];
|
|
107
105
|
});
|