@telia-ace/knowledge-widget-components-search 1.0.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/LICENSE.txt +6 -0
- package/README.md +3 -0
- package/lib/filter-badges.d.ts +10 -0
- package/lib/filter-badges.js +235 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +7 -0
- package/lib/quick-filter-item-list.d.ts +17 -0
- package/lib/quick-filter-item-list.js +228 -0
- package/lib/quick-filter.d.ts +8 -0
- package/lib/quick-filter.js +93 -0
- package/lib/search-component.d.ts +42 -0
- package/lib/search-component.js +274 -0
- package/lib/search.d.ts +7 -0
- package/lib/search.js +194 -0
- package/lib/use-search.d.ts +10 -0
- package/lib/use-search.js +99 -0
- package/lib/utils.d.ts +3 -0
- package/lib/utils.js +53 -0
- package/lib-esm/filter-badges.d.ts +10 -0
- package/lib-esm/filter-badges.js +210 -0
- package/lib-esm/index.d.ts +2 -0
- package/lib-esm/index.js +2 -0
- package/lib-esm/quick-filter-item-list.d.ts +17 -0
- package/lib-esm/quick-filter-item-list.js +200 -0
- package/lib-esm/quick-filter.d.ts +8 -0
- package/lib-esm/quick-filter.js +65 -0
- package/lib-esm/search-component.d.ts +42 -0
- package/lib-esm/search-component.js +249 -0
- package/lib-esm/search.d.ts +7 -0
- package/lib-esm/search.js +166 -0
- package/lib-esm/use-search.d.ts +10 -0
- package/lib-esm/use-search.js +97 -0
- package/lib-esm/utils.d.ts +3 -0
- package/lib-esm/utils.js +48 -0
- package/package.json +44 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Category, Tag } from '@telia-ace/knowledge-widget-core';
|
|
2
|
+
import { Container } from '@webprovisions/platform';
|
|
3
|
+
export declare type SearchComponentProps = {
|
|
4
|
+
route?: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
showSearchButton: boolean;
|
|
7
|
+
showClearButton: boolean;
|
|
8
|
+
showChildren: boolean;
|
|
9
|
+
searchButtonLabel: string;
|
|
10
|
+
clearButtonLabel: string;
|
|
11
|
+
ariaLabel?: string;
|
|
12
|
+
placeholder: string;
|
|
13
|
+
autoFocus: boolean;
|
|
14
|
+
incremental?: boolean | number;
|
|
15
|
+
filterBadges?: FilterConfig | boolean;
|
|
16
|
+
activeFilterBadges?: ActiveFilterBadges;
|
|
17
|
+
deleteFilterBadgeAriaLabel?: string;
|
|
18
|
+
quickFilters?: FilterConfig | boolean;
|
|
19
|
+
quickFilter?: Filter;
|
|
20
|
+
patchParams?: boolean;
|
|
21
|
+
};
|
|
22
|
+
export declare type Filter = {
|
|
23
|
+
items?: Category[] | Tag[];
|
|
24
|
+
type?: 'guideCategory' | 'tag';
|
|
25
|
+
symbol?: string;
|
|
26
|
+
loading: boolean;
|
|
27
|
+
open: boolean;
|
|
28
|
+
};
|
|
29
|
+
export declare type ActiveFilterBadges = {
|
|
30
|
+
guideCategory?: Category | null;
|
|
31
|
+
tag?: Tag | null;
|
|
32
|
+
tooltip?: string | null;
|
|
33
|
+
initial?: boolean;
|
|
34
|
+
};
|
|
35
|
+
export declare type FilterConfig = {
|
|
36
|
+
autoSelect?: boolean;
|
|
37
|
+
guideCategory?: boolean;
|
|
38
|
+
tag?: boolean;
|
|
39
|
+
position?: 'inside' | 'below';
|
|
40
|
+
};
|
|
41
|
+
declare const SearchComponent: (container: Container) => Promise<void>;
|
|
42
|
+
export default SearchComponent;
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
37
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
38
|
+
if (!m) return o;
|
|
39
|
+
var i = m.call(o), r, ar = [], e;
|
|
40
|
+
try {
|
|
41
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
42
|
+
}
|
|
43
|
+
catch (error) { e = { error: error }; }
|
|
44
|
+
finally {
|
|
45
|
+
try {
|
|
46
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
47
|
+
}
|
|
48
|
+
finally { if (e) throw e.error; }
|
|
49
|
+
}
|
|
50
|
+
return ar;
|
|
51
|
+
};
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
var knowledge_widget_core_1 = require("@telia-ace/knowledge-widget-core");
|
|
54
|
+
var knowledge_widget_types_grid_1 = require("@telia-ace/knowledge-widget-types-grid");
|
|
55
|
+
var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
|
|
56
|
+
var widget_utilities_1 = require("@telia-ace/widget-utilities");
|
|
57
|
+
var hasActiveFilterBadge = function (filters) {
|
|
58
|
+
return !!filters.guideCategory || !!filters.tag;
|
|
59
|
+
};
|
|
60
|
+
var getTooltip = function (categoryId, categories) {
|
|
61
|
+
var trailIds = (0, widget_utilities_1.categoryTrail)(categoryId, categories);
|
|
62
|
+
var categoryMap = (0, widget_utilities_1.getCategoryTrailAsObjects)(trailIds, categories);
|
|
63
|
+
var trail = trailIds.map(function (id) { var _a; return ((_a = categoryMap.get(id)) === null || _a === void 0 ? void 0 : _a.title) || ''; }).join(' / ');
|
|
64
|
+
return trail;
|
|
65
|
+
};
|
|
66
|
+
var sortRecursive = function (items) {
|
|
67
|
+
var clone = (0, widget_utilities_1.deepClone)(items);
|
|
68
|
+
clone.sort(function (a, b) {
|
|
69
|
+
if (a.title > b.title) {
|
|
70
|
+
return 1;
|
|
71
|
+
}
|
|
72
|
+
return -1;
|
|
73
|
+
});
|
|
74
|
+
clone.forEach(function (item) {
|
|
75
|
+
if (item.items) {
|
|
76
|
+
item.items = sortRecursive(item.items);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
return clone;
|
|
80
|
+
};
|
|
81
|
+
var SearchComponent = function (container) {
|
|
82
|
+
return (0, knowledge_widget_ui_1.createReactComponent)(container, 'search', Promise.resolve().then(function () { return __importStar(require('./search')); }), function (component) {
|
|
83
|
+
var events = container.get('$widget').events;
|
|
84
|
+
var _a = __read((0, knowledge_widget_core_1.createEventSubscriber)(events), 2), subscribe = _a[0], unsubscribe = _a[1];
|
|
85
|
+
var load = function (params) {
|
|
86
|
+
var _a, _b;
|
|
87
|
+
var activeFilterBadges = component.properties().activeFilterBadges;
|
|
88
|
+
if (((_a = activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory) === null || _a === void 0 ? void 0 : _a.id) !== params.guideCategory ||
|
|
89
|
+
((_b = activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag) === null || _b === void 0 ? void 0 : _b.id) !== params.tag) {
|
|
90
|
+
component.actions.dispatch('quick-filter:add', {
|
|
91
|
+
tag: params.tag,
|
|
92
|
+
category: params.guideCategory,
|
|
93
|
+
initial: true,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
component.actions.create('search', function (data) {
|
|
98
|
+
var value = data.value, filters = data.filters, filtersChanged = data.filtersChanged;
|
|
99
|
+
var _a = component.properties(), _b = _a.route, route = _b === void 0 ? 'search' : _b, _c = _a.patchParams, patchParams = _c === void 0 ? false : _c;
|
|
100
|
+
if (value.length > 0 ||
|
|
101
|
+
((hasActiveFilterBadge(filters) || filtersChanged) && !(filters === null || filters === void 0 ? void 0 : filters.initial))) {
|
|
102
|
+
container.getAsync('router').then(function (router) {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
var params = router.getRouteData().params;
|
|
105
|
+
var searchParams = {
|
|
106
|
+
guide: undefined,
|
|
107
|
+
id: undefined,
|
|
108
|
+
accordion: undefined,
|
|
109
|
+
contactMethod: undefined,
|
|
110
|
+
};
|
|
111
|
+
searchParams.phrase = value.length > 0 ? encodeURIComponent(value) : '';
|
|
112
|
+
if (patchParams) {
|
|
113
|
+
searchParams = __assign(__assign({}, params), searchParams);
|
|
114
|
+
}
|
|
115
|
+
if ((filters === null || filters === void 0 ? void 0 : filters.guideCategory) || filtersChanged) {
|
|
116
|
+
searchParams.guideCategory = ((_a = filters.guideCategory) === null || _a === void 0 ? void 0 : _a.id) || undefined;
|
|
117
|
+
}
|
|
118
|
+
if ((filters === null || filters === void 0 ? void 0 : filters.tag) || filtersChanged) {
|
|
119
|
+
searchParams.tag = ((_b = filters.tag) === null || _b === void 0 ? void 0 : _b.id) || undefined;
|
|
120
|
+
}
|
|
121
|
+
router.navigate(route, (0, widget_utilities_1.createParams)(searchParams));
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
component.actions.create('clear', function (data, options) {
|
|
126
|
+
if (data.navigateToHome) {
|
|
127
|
+
container.getAsync('router').then(function (router) {
|
|
128
|
+
var name = router.getInitialRoute().name;
|
|
129
|
+
router.navigate(name);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
var getRouterParams = function () {
|
|
134
|
+
return container
|
|
135
|
+
.getAsync('router')
|
|
136
|
+
.then(function (router) { return router.getRouteData().params; });
|
|
137
|
+
};
|
|
138
|
+
component.actions.create('quick-filter:add', function (data) {
|
|
139
|
+
var category = data.category, tag = data.tag, initial = data.initial;
|
|
140
|
+
var previous = component.properties().activeFilterBadges;
|
|
141
|
+
var activeFilterBadges = previous || {
|
|
142
|
+
initial: initial,
|
|
143
|
+
guideCategory: null,
|
|
144
|
+
tag: null,
|
|
145
|
+
tooltip: null,
|
|
146
|
+
};
|
|
147
|
+
return Promise.resolve()
|
|
148
|
+
.then(function () {
|
|
149
|
+
if (category) {
|
|
150
|
+
return fetchCategories({}).then(function (categories) {
|
|
151
|
+
var categoryItem = (0, widget_utilities_1.findCategoryById)(category, categories) || null;
|
|
152
|
+
return __assign(__assign({}, activeFilterBadges), { guideCategory: categoryItem, tooltip: getTooltip(category, categories) || null });
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return __assign(__assign({}, activeFilterBadges), { guideCategory: null, tooltip: null });
|
|
156
|
+
})
|
|
157
|
+
.then(function (next) {
|
|
158
|
+
if (tag) {
|
|
159
|
+
return fetchTags({}).then(function (tags) {
|
|
160
|
+
return __assign(__assign({}, next), { tag: tags.find(function (t) { return t.id === tag; }) || null });
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return __assign(__assign({}, next), { tag: null });
|
|
164
|
+
})
|
|
165
|
+
.then(function (next) {
|
|
166
|
+
return component.writeProperties({
|
|
167
|
+
activeFilterBadges: __assign(__assign({}, next), { initial: !!initial }),
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
component.actions.create('quick-filter:remove', function (_a) {
|
|
172
|
+
var types = _a.types;
|
|
173
|
+
var activeFilterBadges = component.properties().activeFilterBadges;
|
|
174
|
+
component.writeProperties({
|
|
175
|
+
activeFilterBadges: __assign(__assign({}, activeFilterBadges), { initial: false, guideCategory: types.indexOf('guideCategory') > -1
|
|
176
|
+
? null
|
|
177
|
+
: activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory, tag: types.indexOf('tag') > -1 ? null : activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag }),
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
component.actions.create('quick-filter:close', function () {
|
|
181
|
+
return component.writeProperties({
|
|
182
|
+
quickFilter: {
|
|
183
|
+
items: [],
|
|
184
|
+
loading: false,
|
|
185
|
+
open: false,
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
component.actions.create('quick-filter:open', function (_a) {
|
|
190
|
+
var symbol = _a.symbol, type = _a.type;
|
|
191
|
+
component.writeProperties({
|
|
192
|
+
quickFilter: {
|
|
193
|
+
type: type,
|
|
194
|
+
symbol: symbol,
|
|
195
|
+
items: [],
|
|
196
|
+
loading: true,
|
|
197
|
+
open: true,
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
return getRouterParams().then(function (_a) {
|
|
201
|
+
var tag = _a.tag, guideCategory = _a.guideCategory, phrase = _a.phrase;
|
|
202
|
+
if (type === 'guideCategory') {
|
|
203
|
+
return fetchCategories({
|
|
204
|
+
tagId: tag,
|
|
205
|
+
searchPhrase: phrase,
|
|
206
|
+
}).then(function (items) {
|
|
207
|
+
var clone = (0, widget_utilities_1.deepClone)(items);
|
|
208
|
+
component.writeProperties({
|
|
209
|
+
quickFilter: {
|
|
210
|
+
items: sortRecursive(clone),
|
|
211
|
+
loading: false,
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (type === 'tag') {
|
|
217
|
+
return fetchTags({
|
|
218
|
+
categories: guideCategory,
|
|
219
|
+
searchPhrase: phrase,
|
|
220
|
+
}).then(function (items) {
|
|
221
|
+
var clone = (0, widget_utilities_1.deepClone)(items);
|
|
222
|
+
component.writeProperties({
|
|
223
|
+
quickFilter: {
|
|
224
|
+
items: sortRecursive(clone),
|
|
225
|
+
loading: false,
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
var fetchCategories = function (params) {
|
|
233
|
+
return container
|
|
234
|
+
.getAsync('dataClient')
|
|
235
|
+
.then(function (dataClient) {
|
|
236
|
+
return dataClient.fetch(knowledge_widget_types_grid_1.DataType.GuideCategories, params);
|
|
237
|
+
})
|
|
238
|
+
.then(function (categoriesResult) { return categoriesResult.categories || []; });
|
|
239
|
+
};
|
|
240
|
+
var fetchTags = function (params) {
|
|
241
|
+
return container
|
|
242
|
+
.getAsync('dataClient')
|
|
243
|
+
.then(function (dataClient) { return dataClient.fetch(knowledge_widget_types_grid_1.DataType.TagsOnGuides, params); })
|
|
244
|
+
.then(function (tags) {
|
|
245
|
+
if (tags === void 0) { tags = []; }
|
|
246
|
+
return tags;
|
|
247
|
+
});
|
|
248
|
+
};
|
|
249
|
+
getRouterParams().then(function (params) {
|
|
250
|
+
load(params);
|
|
251
|
+
});
|
|
252
|
+
subscribe('router:changed', function (_, _a) {
|
|
253
|
+
var current = _a.current;
|
|
254
|
+
var params = current.routeData.params;
|
|
255
|
+
load(params);
|
|
256
|
+
});
|
|
257
|
+
subscribe('data-client:fetched', function (event, data) {
|
|
258
|
+
var filterBadges = component.properties().filterBadges;
|
|
259
|
+
var showTag = typeof filterBadges === 'object' ? !!filterBadges.tag : !!filterBadges;
|
|
260
|
+
if (data.type === 'match' && showTag) {
|
|
261
|
+
getRouterParams().then(function (_a) {
|
|
262
|
+
var tagId = _a.tag;
|
|
263
|
+
var _b = data.response.tags, tags = _b === void 0 ? [] : _b;
|
|
264
|
+
var tag = tags.find(function (t) { return t.id === tagId; }) || null;
|
|
265
|
+
component.writeProperties({ filters: { tag: tag } });
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
return function () {
|
|
270
|
+
unsubscribe();
|
|
271
|
+
};
|
|
272
|
+
});
|
|
273
|
+
};
|
|
274
|
+
exports.default = SearchComponent;
|
package/lib/search.d.ts
ADDED
package/lib/search.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) {
|
|
3
|
+
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
|
|
4
|
+
return cooked;
|
|
5
|
+
};
|
|
6
|
+
var __assign = (this && this.__assign) || function () {
|
|
7
|
+
__assign = Object.assign || function(t) {
|
|
8
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
9
|
+
s = arguments[i];
|
|
10
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
11
|
+
t[p] = s[p];
|
|
12
|
+
}
|
|
13
|
+
return t;
|
|
14
|
+
};
|
|
15
|
+
return __assign.apply(this, arguments);
|
|
16
|
+
};
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
41
|
+
var t = {};
|
|
42
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
43
|
+
t[p] = s[p];
|
|
44
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
45
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
46
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
47
|
+
t[p[i]] = s[p[i]];
|
|
48
|
+
}
|
|
49
|
+
return t;
|
|
50
|
+
};
|
|
51
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
52
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
53
|
+
if (!m) return o;
|
|
54
|
+
var i = m.call(o), r, ar = [], e;
|
|
55
|
+
try {
|
|
56
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
57
|
+
}
|
|
58
|
+
catch (error) { e = { error: error }; }
|
|
59
|
+
finally {
|
|
60
|
+
try {
|
|
61
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
62
|
+
}
|
|
63
|
+
finally { if (e) throw e.error; }
|
|
64
|
+
}
|
|
65
|
+
return ar;
|
|
66
|
+
};
|
|
67
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
68
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
69
|
+
};
|
|
70
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
71
|
+
var knowledge_widget_types_grid_1 = require("@telia-ace/knowledge-widget-types-grid");
|
|
72
|
+
var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
|
|
73
|
+
var widget_utilities_1 = require("@telia-ace/widget-utilities");
|
|
74
|
+
var react_1 = __importStar(require("react"));
|
|
75
|
+
var styled_components_1 = __importStar(require("styled-components"));
|
|
76
|
+
var filter_badges_1 = __importDefault(require("./filter-badges"));
|
|
77
|
+
var quick_filter_1 = __importDefault(require("./quick-filter"));
|
|
78
|
+
var use_search_1 = __importDefault(require("./use-search"));
|
|
79
|
+
var Search = function (_a) {
|
|
80
|
+
var className = _a.className, other = __rest(_a, ["className"]);
|
|
81
|
+
var _b = (0, knowledge_widget_ui_1.useProperties)(), showSearchButton = _b.showSearchButton, showClearButton = _b.showClearButton, _c = _b.role, role = _c === void 0 ? 'search' : _c, autoFocus = _b.autoFocus, placeholder = _b.placeholder, searchButtonLabel = _b.searchButtonLabel, clearButtonLabel = _b.clearButtonLabel, ariaLabel = _b.ariaLabel, _d = _b.route, searchRoute = _d === void 0 ? 'search' : _d, _e = _b.incremental, incremental = _e === void 0 ? true : _e, _f = _b.showChildren, showChildren = _f === void 0 ? false : _f, quickFilter = _b.quickFilter, quickFiltersEnabled = _b.quickFilters, filterBadges = _b.filterBadges;
|
|
82
|
+
var params = (0, knowledge_widget_ui_1.useRouteData)().params;
|
|
83
|
+
var _g = __read((0, react_1.useState)(false), 2), hasFocus = _g[0], setHasFocus = _g[1];
|
|
84
|
+
var _h = __read((0, react_1.useState)(params.phrase || ''), 2), phrase = _h[0], setPhrase = _h[1];
|
|
85
|
+
var _j = __read((0, react_1.useState)({
|
|
86
|
+
guideCategory: false,
|
|
87
|
+
tag: false,
|
|
88
|
+
}), 2), showFilterBadges = _j[0], setShowFilterBadges = _j[1];
|
|
89
|
+
var container = (0, knowledge_widget_ui_1.useContainer)();
|
|
90
|
+
var children = (0, knowledge_widget_ui_1.useChildren)();
|
|
91
|
+
var dispatch = (0, knowledge_widget_ui_1.useDispatch)();
|
|
92
|
+
var _k = (typeof filterBadges === 'object' ? filterBadges : {}).position, filterBadgePosition = _k === void 0 ? 'inside' : _k;
|
|
93
|
+
(0, react_1.useEffect)(function () {
|
|
94
|
+
var guideCategory = params.guideCategory, tag = params.tag;
|
|
95
|
+
var showGuideCategory = typeof filterBadges === 'object' ? !!filterBadges.guideCategory : !!filterBadges;
|
|
96
|
+
var showTag = typeof filterBadges === 'object' ? !!filterBadges.tag : !!filterBadges;
|
|
97
|
+
setShowFilterBadges({
|
|
98
|
+
guideCategory: showGuideCategory && !!guideCategory,
|
|
99
|
+
tag: showTag && !!tag,
|
|
100
|
+
});
|
|
101
|
+
}, [filterBadges, params]);
|
|
102
|
+
// Remove quick-filter symbol, quick-filter phrase
|
|
103
|
+
// and close quick-filter when route changed
|
|
104
|
+
(0, knowledge_widget_ui_1.useWidgetEvent)('router:changed', function () {
|
|
105
|
+
if (quickFilter) {
|
|
106
|
+
var open_1 = quickFilter.open, symbol = quickFilter.symbol;
|
|
107
|
+
if (open_1) {
|
|
108
|
+
if (symbol) {
|
|
109
|
+
var cleaned = phrase.replace(phrase.slice(phrase.indexOf(symbol)), '');
|
|
110
|
+
setPhrase(cleaned);
|
|
111
|
+
}
|
|
112
|
+
dispatch('quick-filter:close');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}, [quickFilter, phrase, setPhrase, dispatch]);
|
|
116
|
+
var _l = __read((0, use_search_1.default)(phrase, params, !!incremental), 3), search = _l[0], clear = _l[1], elem = _l[2];
|
|
117
|
+
(0, react_1.useEffect)(function () {
|
|
118
|
+
setPhrase(params.phrase || '');
|
|
119
|
+
}, [params.phrase]);
|
|
120
|
+
var onChange = (0, react_1.useCallback)(function (value) {
|
|
121
|
+
setPhrase(value);
|
|
122
|
+
}, [setPhrase]);
|
|
123
|
+
var onEscape = (0, react_1.useCallback)(function () {
|
|
124
|
+
dispatch('quick-filter:close').then(function () { return clear(true); });
|
|
125
|
+
}, [dispatch, clear]);
|
|
126
|
+
var autoFocusHandler = (0, react_1.useCallback)(function () {
|
|
127
|
+
var _a, _b;
|
|
128
|
+
if (autoFocus && !hasFocus) {
|
|
129
|
+
(_b = (_a = elem.current) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('input')[0]) === null || _b === void 0 ? void 0 : _b.focus();
|
|
130
|
+
}
|
|
131
|
+
}, [autoFocus, hasFocus, elem]);
|
|
132
|
+
var onClearButtonClick = (0, react_1.useCallback)(function () {
|
|
133
|
+
container.getAsync('router').then(function (router) {
|
|
134
|
+
var initialRoute = router.getInitialRoute();
|
|
135
|
+
var currentRoute = router.getRouteData();
|
|
136
|
+
// if we already are on the initial route
|
|
137
|
+
// and it's not the search route, clear the search instead of navigate
|
|
138
|
+
if ((initialRoute === null || initialRoute === void 0 ? void 0 : initialRoute.name) === currentRoute.name && (initialRoute === null || initialRoute === void 0 ? void 0 : initialRoute.name) !== searchRoute) {
|
|
139
|
+
setPhrase('');
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
clear(true);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}, [container, setPhrase, clear]);
|
|
146
|
+
var renderFilterBadges = function (position) {
|
|
147
|
+
if (position !== filterBadgePosition) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
if (!!showFilterBadges.guideCategory || !!showFilterBadges.tag) {
|
|
151
|
+
return (react_1.default.createElement(filter_badges_1.default, { position: position, inputHasFocus: hasFocus, showGuideCategory: showFilterBadges.guideCategory, showTag: showFilterBadges.tag, searchContainerRef: elem.current }));
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
(0, knowledge_widget_ui_1.useTransitionEnd)(autoFocusHandler);
|
|
155
|
+
var showClear = showClearButton && (showFilterBadges.guideCategory || showFilterBadges.tag || phrase);
|
|
156
|
+
var quickFilterAccessibilityProps = quickFiltersEnabled
|
|
157
|
+
? (0, knowledge_widget_ui_1.convertToStringAttributes)({
|
|
158
|
+
role: 'combobox',
|
|
159
|
+
'aria-autocomplete': 'list',
|
|
160
|
+
autoComplete: 'off',
|
|
161
|
+
'aria-haspopup': 'listbox',
|
|
162
|
+
})
|
|
163
|
+
: {};
|
|
164
|
+
return (react_1.default.createElement(StyledSearchWrapper, __assign({}, other, { ref: elem, role: role, className: (0, widget_utilities_1.appendClassNames)(className, 'humany-search'), "data-has-phrase": !!phrase, "data-has-focus": hasFocus, "data-has-search-symbol": showSearchButton ? 'true' : 'false' }),
|
|
165
|
+
react_1.default.createElement(Inner, { action: ".", onSubmit: function (e) {
|
|
166
|
+
var _a, _b;
|
|
167
|
+
e.preventDefault();
|
|
168
|
+
(_b = (_a = elem.current) === null || _a === void 0 ? void 0 : _a.getElementsByTagName('input')[0]) === null || _b === void 0 ? void 0 : _b.blur();
|
|
169
|
+
}, "data-has-focus": hasFocus },
|
|
170
|
+
showSearchButton && (react_1.default.createElement(SearchButton, { "aria-label": searchButtonLabel, type: "submit", title: searchButtonLabel, disabled: !phrase, onClick: search, "data-has-phrase": !!phrase, "data-has-focus": hasFocus },
|
|
171
|
+
react_1.default.createElement(knowledge_widget_ui_1.SymbolBadge, { size: 32, symbol: { type: 'Svg', content: 'search' } }))),
|
|
172
|
+
renderFilterBadges('inside'),
|
|
173
|
+
react_1.default.createElement(knowledge_widget_ui_1.Input, __assign({ type: "search", "aria-label": ariaLabel }, quickFilterAccessibilityProps, { placeholder: showFilterBadges.guideCategory || showFilterBadges.tag ? '' : placeholder, onFocusChange: setHasFocus, onEscape: onEscape, onEnter: search, onChange: onChange, value: phrase })),
|
|
174
|
+
showClear && (react_1.default.createElement(ClearButton, { "aria-label": clearButtonLabel, type: "reset", hasFocus: hasFocus, title: clearButtonLabel, onClick: onClearButtonClick },
|
|
175
|
+
react_1.default.createElement(knowledge_widget_ui_1.SymbolBadge, { size: 27, symbol: { type: 'Svg', content: 'clear' } }))),
|
|
176
|
+
showChildren &&
|
|
177
|
+
!showClear &&
|
|
178
|
+
children.map(function (child) { return (react_1.default.createElement(knowledge_widget_types_grid_1.Component, { key: child.id, id: child.id, branch: "default" })); }),
|
|
179
|
+
react_1.default.createElement(quick_filter_1.default, { inputHasFocus: hasFocus, phrase: phrase, searchContainerRef: elem.current })),
|
|
180
|
+
renderFilterBadges('below')));
|
|
181
|
+
};
|
|
182
|
+
exports.default = Search;
|
|
183
|
+
var StyledSearchWrapper = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", ";\n width: 100%;\n padding: ", ";\n\n input {\n background-color: transparent;\n border: none;\n outline: none;\n min-width: 25%;\n flex: 1;\n font-size: ", ";\n font-weight: 300;\n font-style: italic;\n padding: 1em 0;\n color: ", ";\n -webkit-appearance: none;\n\n ", "\n\n ::placeholder {\n color: ", ";\n }\n /* removes the 'X' from IE */\n &[type='search']::-ms-clear {\n display: none;\n width: 0;\n height: 0;\n }\n &[type='search']::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* removes the 'X' from Chrome */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n button {\n background: transparent;\n border: none;\n padding: 0;\n font-size: ", ";\n transition: color 200ms ease-out;\n color: ", ";\n cursor: pointer;\n > svg {\n height: 100%;\n }\n }\n"], ["\n ", ";\n width: 100%;\n padding: ", ";\n\n input {\n background-color: transparent;\n border: none;\n outline: none;\n min-width: 25%;\n flex: 1;\n font-size: ", ";\n font-weight: 300;\n font-style: italic;\n padding: 1em 0;\n color: ", ";\n -webkit-appearance: none;\n\n ", "\n\n ::placeholder {\n color: ", ";\n }\n /* removes the 'X' from IE */\n &[type='search']::-ms-clear {\n display: none;\n width: 0;\n height: 0;\n }\n &[type='search']::-ms-reveal {\n display: none;\n width: 0;\n height: 0;\n }\n\n /* removes the 'X' from Chrome */\n &[type='search']::-webkit-search-decoration,\n &[type='search']::-webkit-search-cancel-button,\n &[type='search']::-webkit-search-results-button,\n &[type='search']::-webkit-search-results-decoration {\n display: none;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n button {\n background: transparent;\n border: none;\n padding: 0;\n font-size: ", ";\n transition: color 200ms ease-out;\n color: ", ";\n cursor: pointer;\n > svg {\n height: 100%;\n }\n }\n"])), knowledge_widget_ui_1.contentBox, function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.large; }, function (p) { var _a; return (_a = p.theme.fonts) === null || _a === void 0 ? void 0 : _a.normal; }, function (p) { var _a; return (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.text; }, function (p) { var _a; return p['data-has-search-symbol'] === 'true' && "text-indent: ".concat((_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.normal, ";"); }, function (p) { var _a; return (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.text; }, function (p) { var _a; return (_a = p.theme.fonts) === null || _a === void 0 ? void 0 : _a.large; }, function (p) { var _a; return p['data-has-focus'] || p['data-has-phrase'] ? (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.primary : '#000000'; });
|
|
184
|
+
var Inner = styled_components_1.default.form(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n border: ", ";\n border-radius: ", ";\n background-color: #ffffff;\n position: relative;\n padding: 0 ", ";\n\n ", ";\n"], ["\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n border: ", ";\n border-radius: ", ";\n background-color: #ffffff;\n position: relative;\n padding: 0 ", ";\n\n ", ";\n"])), function (p) { return p.theme.inputBorder; }, function (p) { return p.theme.borderRadius; }, function (p) { var _a; return (_a = p.theme.sizes) === null || _a === void 0 ? void 0 : _a.normal; }, function (p) {
|
|
185
|
+
return p['data-has-focus'] && (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), function (p) {
|
|
186
|
+
var _a, _b;
|
|
187
|
+
return ((_a = p.theme.accessibility) === null || _a === void 0 ? void 0 : _a.isTabbing)
|
|
188
|
+
? knowledge_widget_ui_1.borderTabStyle
|
|
189
|
+
: "\n border-color: ".concat((_b = p.theme.colors) === null || _b === void 0 ? void 0 : _b.primary, ";\n outline: none;\n input {\n outline: none;\n }\n ");
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
var SearchButton = (0, styled_components_1.default)(knowledge_widget_ui_1.Button)(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n padding: 0;\n height: 2em;\n\n svg {\n circle,\n line {\n stroke: ", ";\n }\n }\n"], ["\n padding: 0;\n height: 2em;\n\n svg {\n circle,\n line {\n stroke: ", ";\n }\n }\n"])), function (p) { var _a; return (p['data-has-focus'] ? (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.primary : '#000000'); });
|
|
193
|
+
var ClearButton = (0, styled_components_1.default)(knowledge_widget_ui_1.Button)(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n &:focus svg {\n ", "\n }\n\n svg {\n vertical-align: top;\n\n circle,\n line,\n path {\n stroke: ", ";\n }\n }\n"], ["\n &:focus svg {\n ", "\n }\n\n svg {\n vertical-align: top;\n\n circle,\n line,\n path {\n stroke: ", ";\n }\n }\n"])), function (p) { var _a; return ((_a = p.theme.accessibility) === null || _a === void 0 ? void 0 : _a.isTabbing) && knowledge_widget_ui_1.borderTabStyle; }, function (p) { var _a, _b; return (p.hasFocus ? (_a = p.theme.colors) === null || _a === void 0 ? void 0 : _a.primary : (_b = p.theme.colors) === null || _b === void 0 ? void 0 : _b.text); });
|
|
194
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
declare type ReturnType = [
|
|
3
|
+
(arg: React.KeyboardEvent | React.MouseEvent | boolean) => void,
|
|
4
|
+
(navigateToHome: boolean) => void,
|
|
5
|
+
React.MutableRefObject<HTMLElement | null>
|
|
6
|
+
];
|
|
7
|
+
declare const _default: (phrase: string, params?: {
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}, debounce?: boolean) => ReturnType;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var knowledge_widget_ui_1 = require("@telia-ace/knowledge-widget-ui");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
var filterChanged = function (newValue, oldValue) {
|
|
6
|
+
if (newValue && !oldValue) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
if (!newValue && oldValue) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
if (newValue && oldValue) {
|
|
13
|
+
if (newValue.id !== oldValue.id) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return false;
|
|
18
|
+
};
|
|
19
|
+
exports.default = (function (phrase, params, debounce) {
|
|
20
|
+
if (params === void 0) { params = {}; }
|
|
21
|
+
if (debounce === void 0) { debounce = true; }
|
|
22
|
+
var dispatch = (0, knowledge_widget_ui_1.useDispatch)();
|
|
23
|
+
var _a = (0, knowledge_widget_ui_1.useProperties)(), _b = _a.quickFilters, quickFilters = _b === void 0 ? false : _b, _c = _a.quickFilter, quickFilter = _c === void 0 ? { open: false } : _c, activeFilterBadges = _a.activeFilterBadges, _d = _a.filterBadges, filterBadges = _d === void 0 ? false : _d, _e = _a.incremental, incremental = _e === void 0 ? 600 : _e;
|
|
24
|
+
var debouncedPhrase = (0, knowledge_widget_ui_1.useDebounce)(phrase, typeof incremental === 'boolean' ? 600 : incremental);
|
|
25
|
+
var previousDebouncedPhrase = (0, knowledge_widget_ui_1.usePrevious)(debouncedPhrase);
|
|
26
|
+
var previousFilters = (0, knowledge_widget_ui_1.usePrevious)(activeFilterBadges);
|
|
27
|
+
var ref = (0, react_1.useRef)(null);
|
|
28
|
+
var dispatchSearch = (0, react_1.useCallback)(function (value) {
|
|
29
|
+
if (value === void 0) { value = ''; }
|
|
30
|
+
if (filterBadges) {
|
|
31
|
+
var filtersChanged = filterChanged(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory, previousFilters === null || previousFilters === void 0 ? void 0 : previousFilters.guideCategory) || filterChanged(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag, previousFilters === null || previousFilters === void 0 ? void 0 : previousFilters.tag);
|
|
32
|
+
return dispatch('search', { value: value, filtersChanged: filtersChanged, filters: activeFilterBadges });
|
|
33
|
+
}
|
|
34
|
+
return dispatch('search', { value: value });
|
|
35
|
+
}, [dispatch, activeFilterBadges]);
|
|
36
|
+
var dispatchClear = (0, react_1.useCallback)(function (navigateToHome) {
|
|
37
|
+
dispatch('clear', { navigateToHome: navigateToHome });
|
|
38
|
+
}, [dispatch]);
|
|
39
|
+
var removeFilterKeywords = function (input) {
|
|
40
|
+
if (quickFilters) {
|
|
41
|
+
return input.replace(/([@#].*)/g, '');
|
|
42
|
+
}
|
|
43
|
+
return input;
|
|
44
|
+
};
|
|
45
|
+
var submitSearch = (0, react_1.useCallback)(function (arg) {
|
|
46
|
+
if (quickFilter.open && arg.preventDefault) {
|
|
47
|
+
arg.preventDefault();
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
var activeElement = document.activeElement;
|
|
51
|
+
var isSearching = ref.current && typeof ref.current.contains === 'function'
|
|
52
|
+
? ref.current.contains(activeElement)
|
|
53
|
+
: false;
|
|
54
|
+
var cleanedPhrase = removeFilterKeywords(phrase);
|
|
55
|
+
if ((typeof arg === 'boolean' && arg) ||
|
|
56
|
+
(cleanedPhrase.length && isSearching) ||
|
|
57
|
+
(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory) ||
|
|
58
|
+
((activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag) && isSearching)) {
|
|
59
|
+
dispatchSearch(cleanedPhrase);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
dispatchClear(isSearching);
|
|
63
|
+
}
|
|
64
|
+
}, [ref, phrase, quickFilter, dispatchClear, activeFilterBadges, dispatchSearch]);
|
|
65
|
+
(0, react_1.useEffect)(function () {
|
|
66
|
+
var filtersChanged = filterChanged(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.guideCategory, previousFilters === null || previousFilters === void 0 ? void 0 : previousFilters.guideCategory) ||
|
|
67
|
+
filterChanged(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.tag, previousFilters === null || previousFilters === void 0 ? void 0 : previousFilters.tag);
|
|
68
|
+
var phrase = debouncedPhrase ? removeFilterKeywords(debouncedPhrase) : debouncedPhrase;
|
|
69
|
+
var previousPhrase = previousDebouncedPhrase
|
|
70
|
+
? removeFilterKeywords(previousDebouncedPhrase)
|
|
71
|
+
: previousDebouncedPhrase;
|
|
72
|
+
if ((typeof previousPhrase !== 'undefined' &&
|
|
73
|
+
previousPhrase !== phrase &&
|
|
74
|
+
phrase !== params.phrase &&
|
|
75
|
+
debounce &&
|
|
76
|
+
!quickFilter.open) ||
|
|
77
|
+
(filtersChanged && !(activeFilterBadges === null || activeFilterBadges === void 0 ? void 0 : activeFilterBadges.initial))) {
|
|
78
|
+
submitSearch(filtersChanged);
|
|
79
|
+
}
|
|
80
|
+
}, [debouncedPhrase, quickFilter.open, activeFilterBadges, submitSearch]);
|
|
81
|
+
(0, react_1.useEffect)(function () {
|
|
82
|
+
if (phrase && quickFilters) {
|
|
83
|
+
var quickFiltersGuideCategory = (typeof quickFilters === 'boolean' && !!quickFilters) ||
|
|
84
|
+
(typeof quickFilters === 'object' && !!quickFilters.guideCategory);
|
|
85
|
+
var quickFiltersTag = (typeof quickFilters === 'boolean' && !!quickFilters) ||
|
|
86
|
+
(typeof quickFilters === 'object' && !!quickFilters.tag);
|
|
87
|
+
if (quickFiltersGuideCategory && phrase.indexOf('@') === phrase.length - 1) {
|
|
88
|
+
dispatch('quick-filter:open', { type: 'guideCategory', symbol: '@' });
|
|
89
|
+
}
|
|
90
|
+
if (quickFiltersTag && phrase.indexOf('#') === phrase.length - 1) {
|
|
91
|
+
dispatch('quick-filter:open', { type: 'tag', symbol: '#' });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (quickFilter.open && phrase.indexOf('@') === -1 && phrase.indexOf('#') === -1) {
|
|
95
|
+
dispatch('quick-filter:close');
|
|
96
|
+
}
|
|
97
|
+
}, [phrase]);
|
|
98
|
+
return [submitSearch, dispatchClear, ref];
|
|
99
|
+
});
|
package/lib/utils.d.ts
ADDED