@adminforth/universal-search 1.1.1 → 1.2.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.
Files changed (3) hide show
  1. package/dist/index.js +30 -6
  2. package/index.ts +30 -4
  3. package/package.json +1 -1
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, Filters } from 'adminforth';
10
+ import { AdminForthPlugin, AdminForthDataTypes, Filters } from 'adminforth';
11
11
  export default class UniversalSearchPlugin extends AdminForthPlugin {
12
12
  constructor(options) {
13
13
  super(options, import.meta.url);
@@ -45,6 +45,15 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
45
45
  if (!Array.isArray(this.resourceConfig.columns))
46
46
  this.resourceConfig.columns = [];
47
47
  const exists = this.resourceConfig.columns.some(c => c.name === virtualFieldName);
48
+ if (!exists) {
49
+ this.resourceConfig.columns.push({
50
+ name: virtualFieldName,
51
+ virtual: true,
52
+ type: AdminForthDataTypes.STRING,
53
+ label: 'Universal Search',
54
+ showIn: { all: false },
55
+ });
56
+ }
48
57
  const injection = {
49
58
  file: this.componentPath('UniversalSearchInput.vue'),
50
59
  meta: {
@@ -119,19 +128,34 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
119
128
  });
120
129
  if (!sub.length)
121
130
  return [];
131
+ console.log('UniversalSearchPlugin: transformed filter', f, '=>', sub);
122
132
  return [Filters.OR(sub)];
123
133
  }
124
134
  return [f];
125
135
  });
126
136
  };
127
137
  const transformer = (ctx) => __awaiter(this, void 0, void 0, function* () {
128
- var _a;
138
+ var _a, _b, _c;
129
139
  const { query } = ctx;
140
+ let incomingTerm = ((_c = (_b = (_a = query === null || query === void 0 ? void 0 : query.body) === null || _a === void 0 ? void 0 : _a.__universal_search_term) !== null && _b !== void 0 ? _b : query === null || query === void 0 ? void 0 : query.__universal_search_term) !== null && _c !== void 0 ? _c : '').toString().trim();
141
+ if (!incomingTerm && Array.isArray(query === null || query === void 0 ? void 0 : query.filters)) {
142
+ const vf = query.filters.find(f => (f === null || f === void 0 ? void 0 : f.field) === virtualFieldName && typeof f.value === 'string');
143
+ if (vf)
144
+ incomingTerm = vf.value.trim();
145
+ }
130
146
  if (ephemeral) {
131
- const term = (((_a = query === null || query === void 0 ? void 0 : query.body) === null || _a === void 0 ? void 0 : _a.__universal_search_term) || (query === null || query === void 0 ? void 0 : query.__universal_search_term) || '').toString().trim();
132
- if (term) {
133
- const tempFilter = { field: virtualFieldName, operator: 'eq', value: term };
134
- query.filters = Array.isArray(query.filters) ? [...query.filters, tempFilter] : [tempFilter];
147
+ if (incomingTerm) {
148
+ query.__universal_search_term = incomingTerm;
149
+ const alreadyHas = Array.isArray(query.filters) && query.filters.some(f => (f === null || f === void 0 ? void 0 : f.field) === virtualFieldName);
150
+ if (!alreadyHas) {
151
+ const tempFilter = { field: virtualFieldName, operator: 'eq', value: incomingTerm };
152
+ query.filters = Array.isArray(query.filters) ? [...query.filters, tempFilter] : [tempFilter];
153
+ }
154
+ }
155
+ else {
156
+ if (Array.isArray(query.filters)) {
157
+ query.filters = query.filters.filter(f => (f === null || f === void 0 ? void 0 : f.field) !== virtualFieldName);
158
+ }
135
159
  }
136
160
  }
137
161
  if (Array.isArray(query === null || query === void 0 ? void 0 : query.filters)) {
package/index.ts CHANGED
@@ -40,6 +40,15 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
40
40
 
41
41
  if (!Array.isArray(this.resourceConfig.columns)) this.resourceConfig.columns = [] as any;
42
42
  const exists = (this.resourceConfig.columns as any[]).some(c => c.name === virtualFieldName);
43
+ if (!exists) {
44
+ (this.resourceConfig.columns as any[]).push({
45
+ name: virtualFieldName,
46
+ virtual: true,
47
+ type: AdminForthDataTypes.STRING,
48
+ label: 'Universal Search',
49
+ showIn: { all: false },
50
+ });
51
+ }
43
52
 
44
53
  const injection = {
45
54
  file: this.componentPath('UniversalSearchInput.vue'),
@@ -99,6 +108,7 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
99
108
  else if (searchBy === 'both') { addFilter(col.name); addFilter(`${col.name}__key`); }
100
109
  });
101
110
  if (!sub.length) return [];
111
+ console.log('UniversalSearchPlugin: transformed filter', f, '=>', sub);
102
112
  return [Filters.OR(sub)];
103
113
  }
104
114
  return [f];
@@ -107,16 +117,32 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
107
117
 
108
118
  const transformer = async (ctx: any) => {
109
119
  const { query } = ctx;
120
+
121
+ let incomingTerm = (query?.body?.__universal_search_term ?? query?.__universal_search_term ?? '').toString().trim();
122
+ if (!incomingTerm && Array.isArray(query?.filters)) {
123
+ const vf = (query.filters as any[]).find(f => f?.field === virtualFieldName && typeof f.value === 'string');
124
+ if (vf) incomingTerm = vf.value.trim();
125
+ }
126
+
110
127
  if (ephemeral) {
111
- const term = (query?.body?.__universal_search_term || query?.__universal_search_term || '').toString().trim();
112
- if (term) {
113
- const tempFilter = { field: virtualFieldName, operator: 'eq', value: term };
114
- query.filters = Array.isArray(query.filters) ? [...query.filters, tempFilter] : [tempFilter];
128
+ if (incomingTerm) {
129
+ query.__universal_search_term = incomingTerm;
130
+ const alreadyHas = Array.isArray(query.filters) && (query.filters as any[]).some(f => f?.field === virtualFieldName);
131
+ if (!alreadyHas) {
132
+ const tempFilter = { field: virtualFieldName, operator: 'eq', value: incomingTerm };
133
+ query.filters = Array.isArray(query.filters) ? [...query.filters, tempFilter] : [tempFilter];
134
+ }
135
+ } else {
136
+ if (Array.isArray(query.filters)) {
137
+ query.filters = (query.filters as any[]).filter(f => f?.field !== virtualFieldName);
138
+ }
115
139
  }
116
140
  }
141
+
117
142
  if (Array.isArray(query?.filters)) {
118
143
  query.filters = transformFilters(query.filters);
119
144
  }
145
+
120
146
  return { ok: true, error: '' };
121
147
  };
122
148
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminforth/universal-search",
3
- "version": "1.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Universal quick search input plugin for AdminForth (injected before action buttons)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",