@adminforth/universal-search 1.1.2 → 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 +29 -6
  2. package/index.ts +29 -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: {
@@ -126,13 +135,27 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
126
135
  });
127
136
  };
128
137
  const transformer = (ctx) => __awaiter(this, void 0, void 0, function* () {
129
- var _a;
138
+ var _a, _b, _c;
130
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
+ }
131
146
  if (ephemeral) {
132
- 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();
133
- if (term) {
134
- const tempFilter = { field: virtualFieldName, operator: 'eq', value: term };
135
- 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
+ }
136
159
  }
137
160
  }
138
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'),
@@ -108,16 +117,32 @@ export default class UniversalSearchPlugin extends AdminForthPlugin {
108
117
 
109
118
  const transformer = async (ctx: any) => {
110
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
+
111
127
  if (ephemeral) {
112
- const term = (query?.body?.__universal_search_term || query?.__universal_search_term || '').toString().trim();
113
- if (term) {
114
- const tempFilter = { field: virtualFieldName, operator: 'eq', value: term };
115
- 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
+ }
116
139
  }
117
140
  }
141
+
118
142
  if (Array.isArray(query?.filters)) {
119
143
  query.filters = transformFilters(query.filters);
120
144
  }
145
+
121
146
  return { ok: true, error: '' };
122
147
  };
123
148
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminforth/universal-search",
3
- "version": "1.1.2",
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",