@eventcatalog/core 4.0.3 → 4.0.4
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/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-UXP5LLH2.js → chunk-B577BDMM.js} +1 -1
- package/dist/{chunk-63J5GUOH.js → chunk-EHVNV53Y.js} +1 -1
- package/dist/{chunk-5OGYWSP3.js → chunk-QYEAFNQS.js} +1 -1
- package/dist/{chunk-2CTETYS7.js → chunk-UQH6BDUK.js} +1 -1
- package/dist/{chunk-K54LSZNF.js → chunk-VG53ZMUK.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/components/Tables/Discover/DiscoverTable.tsx +169 -51
- package/eventcatalog/src/components/Tables/Discover/url-filters.ts +85 -0
- package/package.json +1 -1
|
@@ -140,7 +140,7 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
|
|
|
140
140
|
var import_os = __toESM(require("os"), 1);
|
|
141
141
|
|
|
142
142
|
// package.json
|
|
143
|
-
var version = "4.0.
|
|
143
|
+
var version = "4.0.4";
|
|
144
144
|
|
|
145
145
|
// src/constants.ts
|
|
146
146
|
var VERSION = version;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
log_build_default
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-B577BDMM.js";
|
|
4
|
+
import "../chunk-QYEAFNQS.js";
|
|
5
5
|
import "../chunk-DAOXTQVS.js";
|
|
6
|
-
import "../chunk-
|
|
6
|
+
import "../chunk-VG53ZMUK.js";
|
|
7
7
|
import "../chunk-6QENHZZP.js";
|
|
8
8
|
export {
|
|
9
9
|
log_build_default as default
|
package/dist/constants.cjs
CHANGED
package/dist/constants.js
CHANGED
package/dist/eventcatalog.cjs
CHANGED
|
@@ -144,7 +144,7 @@ var verifyRequiredFieldsAreInCatalogConfigFile = async (projectDirectory) => {
|
|
|
144
144
|
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
145
145
|
|
|
146
146
|
// package.json
|
|
147
|
-
var version = "4.0.
|
|
147
|
+
var version = "4.0.4";
|
|
148
148
|
|
|
149
149
|
// src/constants.ts
|
|
150
150
|
var VERSION = version;
|
package/dist/eventcatalog.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
log_build_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-B577BDMM.js";
|
|
4
4
|
import {
|
|
5
5
|
runMigrations
|
|
6
6
|
} from "./chunk-XUAF2H54.js";
|
|
7
7
|
import "./chunk-CA4U2JP7.js";
|
|
8
8
|
import {
|
|
9
9
|
generate
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-EHVNV53Y.js";
|
|
11
11
|
import {
|
|
12
12
|
logger
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UQH6BDUK.js";
|
|
14
14
|
import {
|
|
15
15
|
resolve_catalog_dependencies_default
|
|
16
16
|
} from "./chunk-LHR4G2UO.js";
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
watch
|
|
22
22
|
} from "./chunk-O3Y2G6CY.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-QYEAFNQS.js";
|
|
24
24
|
import "./chunk-DAOXTQVS.js";
|
|
25
25
|
import {
|
|
26
26
|
catalogToAstro
|
|
@@ -28,7 +28,7 @@ import {
|
|
|
28
28
|
import "./chunk-VC6VUJIX.js";
|
|
29
29
|
import {
|
|
30
30
|
VERSION
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-VG53ZMUK.js";
|
|
32
32
|
import {
|
|
33
33
|
linkCoreNodeModules,
|
|
34
34
|
resolveInstalledCoreNodeModules
|
package/dist/generate.cjs
CHANGED
|
@@ -108,7 +108,7 @@ var getEventCatalogConfigFile = async (projectDirectory) => {
|
|
|
108
108
|
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
109
109
|
|
|
110
110
|
// package.json
|
|
111
|
-
var version = "4.0.
|
|
111
|
+
var version = "4.0.4";
|
|
112
112
|
|
|
113
113
|
// src/constants.ts
|
|
114
114
|
var VERSION = version;
|
package/dist/generate.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
generate
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-EHVNV53Y.js";
|
|
4
|
+
import "./chunk-UQH6BDUK.js";
|
|
5
|
+
import "./chunk-VG53ZMUK.js";
|
|
6
6
|
import "./chunk-6QENHZZP.js";
|
|
7
7
|
export {
|
|
8
8
|
generate
|
package/dist/utils/cli-logger.js
CHANGED
|
@@ -20,6 +20,7 @@ import { resolveIconUrl } from '@utils/icon';
|
|
|
20
20
|
import { FilterDropdown, CheckboxItem } from './FilterComponents';
|
|
21
21
|
import { getDiscoverColumns } from './columns';
|
|
22
22
|
import { formatAdrStatus, type AdrStatus } from '@utils/collections/adr-constants';
|
|
23
|
+
import { buildDiscoverFilterSearch, filterKnownValues, parseDiscoverFilterSearch } from './url-filters';
|
|
23
24
|
|
|
24
25
|
export type CollectionType =
|
|
25
26
|
| 'agents'
|
|
@@ -161,6 +162,9 @@ const AgentProviderIcon = ({ provider, className }: { provider: string; classNam
|
|
|
161
162
|
return <img src={providerIconUrls.default} alt="" className={className} loading="lazy" />;
|
|
162
163
|
};
|
|
163
164
|
|
|
165
|
+
const areStringArraysEqual = (left: string[], right: string[]) =>
|
|
166
|
+
left.length === right.length && left.every((value, index) => value === right[index]);
|
|
167
|
+
|
|
164
168
|
export function DiscoverTable<T extends DiscoverTableData>({
|
|
165
169
|
data: initialData,
|
|
166
170
|
collectionType,
|
|
@@ -185,34 +189,6 @@ export function DiscoverTable<T extends DiscoverTableData>({
|
|
|
185
189
|
() => getDiscoverColumns(collectionType, tableConfiguration ?? { columns: {} }),
|
|
186
190
|
[collectionType, tableConfiguration]
|
|
187
191
|
);
|
|
188
|
-
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
|
189
|
-
const [sorting, setSorting] = useState<SortingState>([]);
|
|
190
|
-
const [tableFilter, setTableFilter] = useState('');
|
|
191
|
-
const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];
|
|
192
|
-
const PAGE_SIZE_STORAGE_KEY = 'eventcatalog-discover-page-size';
|
|
193
|
-
const [pageSize, setPageSize] = useState<number>(() => {
|
|
194
|
-
if (typeof window === 'undefined') return 10;
|
|
195
|
-
const stored = Number(window.localStorage.getItem(PAGE_SIZE_STORAGE_KEY));
|
|
196
|
-
return PAGE_SIZE_OPTIONS.includes(stored) ? stored : 10;
|
|
197
|
-
});
|
|
198
|
-
useEffect(() => {
|
|
199
|
-
if (typeof window !== 'undefined') {
|
|
200
|
-
window.localStorage.setItem(PAGE_SIZE_STORAGE_KEY, String(pageSize));
|
|
201
|
-
}
|
|
202
|
-
}, [pageSize]);
|
|
203
|
-
const [showOnlyLatest, setShowOnlyLatest] = useState(true);
|
|
204
|
-
const [onlyShowDrafts, setOnlyShowDrafts] = useState(false);
|
|
205
|
-
const [selectedDomains, setSelectedDomains] = useState<string[]>([]);
|
|
206
|
-
const [selectedOwners, setSelectedOwners] = useState<string[]>([]);
|
|
207
|
-
const [selectedProducers, setSelectedProducers] = useState<string[]>([]);
|
|
208
|
-
const [selectedConsumers, setSelectedConsumers] = useState<string[]>([]);
|
|
209
|
-
const [selectedAgentProviders, setSelectedAgentProviders] = useState<string[]>([]);
|
|
210
|
-
const [selectedAgentModels, setSelectedAgentModels] = useState<string[]>([]);
|
|
211
|
-
const [selectedBadges, setSelectedBadges] = useState<string[]>([]);
|
|
212
|
-
const [selectedProperties, setSelectedProperties] = useState<string[]>([]);
|
|
213
|
-
const [selectedStatuses, setSelectedStatuses] = useState<string[]>([]);
|
|
214
|
-
const selectedKind = collectionKinds.find((kind) => kind.id === collectionType);
|
|
215
|
-
|
|
216
192
|
// Collect unique badges from all items
|
|
217
193
|
const allBadges = useMemo(() => {
|
|
218
194
|
const badgeMap = new Map<string, { content: string; backgroundColor?: string; textColor?: string; count: number }>();
|
|
@@ -234,6 +210,168 @@ export function DiscoverTable<T extends DiscoverTableData>({
|
|
|
234
210
|
});
|
|
235
211
|
return Array.from(badgeMap.values()).sort((a, b) => b.count - a.count);
|
|
236
212
|
}, [initialData]);
|
|
213
|
+
const statusCounts = useMemo(() => {
|
|
214
|
+
const counts: Record<string, number> = {};
|
|
215
|
+
initialData.forEach((item) => {
|
|
216
|
+
const status = item.data.status;
|
|
217
|
+
if (status) counts[status] = (counts[status] || 0) + 1;
|
|
218
|
+
});
|
|
219
|
+
return counts;
|
|
220
|
+
}, [initialData]);
|
|
221
|
+
|
|
222
|
+
const statusOptions = useMemo(
|
|
223
|
+
() =>
|
|
224
|
+
Object.keys(statusCounts)
|
|
225
|
+
.map((status) => ({
|
|
226
|
+
id: status,
|
|
227
|
+
name: formatAdrStatus(status as AdrStatus),
|
|
228
|
+
count: statusCounts[status],
|
|
229
|
+
}))
|
|
230
|
+
.sort((a, b) => a.name.localeCompare(b.name)),
|
|
231
|
+
[statusCounts]
|
|
232
|
+
);
|
|
233
|
+
const [initialUrlFilters] = useState(() =>
|
|
234
|
+
parseDiscoverFilterSearch(typeof window === 'undefined' ? '' : window.location.search)
|
|
235
|
+
);
|
|
236
|
+
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([]);
|
|
237
|
+
const [sorting, setSorting] = useState<SortingState>([]);
|
|
238
|
+
const [tableFilter, setTableFilter] = useState(initialUrlFilters.q);
|
|
239
|
+
const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];
|
|
240
|
+
const PAGE_SIZE_STORAGE_KEY = 'eventcatalog-discover-page-size';
|
|
241
|
+
const [pageSize, setPageSize] = useState<number>(() => {
|
|
242
|
+
if (typeof window === 'undefined') return 10;
|
|
243
|
+
const stored = Number(window.localStorage.getItem(PAGE_SIZE_STORAGE_KEY));
|
|
244
|
+
return PAGE_SIZE_OPTIONS.includes(stored) ? stored : 10;
|
|
245
|
+
});
|
|
246
|
+
useEffect(() => {
|
|
247
|
+
if (typeof window !== 'undefined') {
|
|
248
|
+
window.localStorage.setItem(PAGE_SIZE_STORAGE_KEY, String(pageSize));
|
|
249
|
+
}
|
|
250
|
+
}, [pageSize]);
|
|
251
|
+
const [showOnlyLatest, setShowOnlyLatest] = useState(initialUrlFilters.showOnlyLatest);
|
|
252
|
+
const [onlyShowDrafts, setOnlyShowDrafts] = useState(initialUrlFilters.onlyShowDrafts);
|
|
253
|
+
const [selectedDomains, setSelectedDomains] = useState<string[]>(() =>
|
|
254
|
+
showDomainsFilter ? filterKnownValues(initialUrlFilters.domains, new Set(domains.map((domain) => domain.id))) : []
|
|
255
|
+
);
|
|
256
|
+
const [selectedOwners, setSelectedOwners] = useState<string[]>(() =>
|
|
257
|
+
showOwnersFilter ? filterKnownValues(initialUrlFilters.owners, new Set(owners.map((owner) => owner.id))) : []
|
|
258
|
+
);
|
|
259
|
+
const [selectedProducers, setSelectedProducers] = useState<string[]>(() =>
|
|
260
|
+
showProducersFilter ? filterKnownValues(initialUrlFilters.producers, new Set(producers.map((producer) => producer.id))) : []
|
|
261
|
+
);
|
|
262
|
+
const [selectedConsumers, setSelectedConsumers] = useState<string[]>(() =>
|
|
263
|
+
showConsumersFilter ? filterKnownValues(initialUrlFilters.consumers, new Set(consumers.map((consumer) => consumer.id))) : []
|
|
264
|
+
);
|
|
265
|
+
const [selectedAgentProviders, setSelectedAgentProviders] = useState<string[]>(() =>
|
|
266
|
+
collectionType === 'agents'
|
|
267
|
+
? filterKnownValues(initialUrlFilters.agentProviders, new Set(agentProviders.map((provider) => provider.id)))
|
|
268
|
+
: []
|
|
269
|
+
);
|
|
270
|
+
const [selectedAgentModels, setSelectedAgentModels] = useState<string[]>(() =>
|
|
271
|
+
collectionType === 'agents'
|
|
272
|
+
? filterKnownValues(initialUrlFilters.agentModels, new Set(agentModels.map((model) => model.id)))
|
|
273
|
+
: []
|
|
274
|
+
);
|
|
275
|
+
const [selectedBadges, setSelectedBadges] = useState<string[]>(() =>
|
|
276
|
+
filterKnownValues(initialUrlFilters.badges, new Set(allBadges.map((badge) => badge.content)))
|
|
277
|
+
);
|
|
278
|
+
const [selectedProperties, setSelectedProperties] = useState<string[]>(() =>
|
|
279
|
+
filterKnownValues(initialUrlFilters.properties, new Set(propertyOptions.map((property) => property.id)))
|
|
280
|
+
);
|
|
281
|
+
const [selectedStatuses, setSelectedStatuses] = useState<string[]>(() =>
|
|
282
|
+
collectionType === 'adrs'
|
|
283
|
+
? filterKnownValues(initialUrlFilters.statuses, new Set(statusOptions.map((status) => status.id)))
|
|
284
|
+
: []
|
|
285
|
+
);
|
|
286
|
+
const selectedKind = collectionKinds.find((kind) => kind.id === collectionType);
|
|
287
|
+
const knownFilterValues = useMemo(
|
|
288
|
+
() => ({
|
|
289
|
+
domains: showDomainsFilter ? new Set(domains.map((domain) => domain.id)) : new Set<string>(),
|
|
290
|
+
owners: showOwnersFilter ? new Set(owners.map((owner) => owner.id)) : new Set<string>(),
|
|
291
|
+
producers: showProducersFilter ? new Set(producers.map((producer) => producer.id)) : new Set<string>(),
|
|
292
|
+
consumers: showConsumersFilter ? new Set(consumers.map((consumer) => consumer.id)) : new Set<string>(),
|
|
293
|
+
agentProviders: collectionType === 'agents' ? new Set(agentProviders.map((provider) => provider.id)) : new Set<string>(),
|
|
294
|
+
agentModels: collectionType === 'agents' ? new Set(agentModels.map((model) => model.id)) : new Set<string>(),
|
|
295
|
+
badges: new Set(allBadges.map((badge) => badge.content)),
|
|
296
|
+
properties: new Set(propertyOptions.map((property) => property.id)),
|
|
297
|
+
statuses: collectionType === 'adrs' ? new Set(statusOptions.map((status) => status.id)) : new Set<string>(),
|
|
298
|
+
}),
|
|
299
|
+
[
|
|
300
|
+
agentModels,
|
|
301
|
+
agentProviders,
|
|
302
|
+
allBadges,
|
|
303
|
+
collectionType,
|
|
304
|
+
consumers,
|
|
305
|
+
domains,
|
|
306
|
+
owners,
|
|
307
|
+
producers,
|
|
308
|
+
propertyOptions,
|
|
309
|
+
showConsumersFilter,
|
|
310
|
+
showDomainsFilter,
|
|
311
|
+
showOwnersFilter,
|
|
312
|
+
showProducersFilter,
|
|
313
|
+
statusOptions,
|
|
314
|
+
]
|
|
315
|
+
);
|
|
316
|
+
const currentUrlFilters = useMemo(
|
|
317
|
+
() => ({
|
|
318
|
+
q: tableFilter,
|
|
319
|
+
domains: selectedDomains,
|
|
320
|
+
owners: selectedOwners,
|
|
321
|
+
producers: selectedProducers,
|
|
322
|
+
consumers: selectedConsumers,
|
|
323
|
+
agentProviders: selectedAgentProviders,
|
|
324
|
+
agentModels: selectedAgentModels,
|
|
325
|
+
badges: selectedBadges,
|
|
326
|
+
properties: selectedProperties,
|
|
327
|
+
statuses: selectedStatuses,
|
|
328
|
+
showOnlyLatest,
|
|
329
|
+
onlyShowDrafts,
|
|
330
|
+
}),
|
|
331
|
+
[
|
|
332
|
+
onlyShowDrafts,
|
|
333
|
+
selectedAgentModels,
|
|
334
|
+
selectedAgentProviders,
|
|
335
|
+
selectedBadges,
|
|
336
|
+
selectedConsumers,
|
|
337
|
+
selectedDomains,
|
|
338
|
+
selectedOwners,
|
|
339
|
+
selectedProducers,
|
|
340
|
+
selectedProperties,
|
|
341
|
+
selectedStatuses,
|
|
342
|
+
showOnlyLatest,
|
|
343
|
+
tableFilter,
|
|
344
|
+
]
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
useEffect(() => {
|
|
348
|
+
const pruneState = (values: string[], knownValues: Set<string>) => {
|
|
349
|
+
const nextValues = filterKnownValues(values, knownValues);
|
|
350
|
+
return areStringArraysEqual(values, nextValues) ? values : nextValues;
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
setSelectedDomains((values) => pruneState(values, knownFilterValues.domains));
|
|
354
|
+
setSelectedOwners((values) => pruneState(values, knownFilterValues.owners));
|
|
355
|
+
setSelectedProducers((values) => pruneState(values, knownFilterValues.producers));
|
|
356
|
+
setSelectedConsumers((values) => pruneState(values, knownFilterValues.consumers));
|
|
357
|
+
setSelectedAgentProviders((values) => pruneState(values, knownFilterValues.agentProviders));
|
|
358
|
+
setSelectedAgentModels((values) => pruneState(values, knownFilterValues.agentModels));
|
|
359
|
+
setSelectedBadges((values) => pruneState(values, knownFilterValues.badges));
|
|
360
|
+
setSelectedProperties((values) => pruneState(values, knownFilterValues.properties));
|
|
361
|
+
setSelectedStatuses((values) => pruneState(values, knownFilterValues.statuses));
|
|
362
|
+
}, [knownFilterValues]);
|
|
363
|
+
|
|
364
|
+
useEffect(() => {
|
|
365
|
+
if (typeof window === 'undefined') return;
|
|
366
|
+
|
|
367
|
+
const nextSearch = buildDiscoverFilterSearch(currentUrlFilters, window.location.search);
|
|
368
|
+
const nextUrl = `${window.location.pathname}${nextSearch}${window.location.hash}`;
|
|
369
|
+
const currentUrl = `${window.location.pathname}${window.location.search}${window.location.hash}`;
|
|
370
|
+
|
|
371
|
+
if (nextUrl !== currentUrl) {
|
|
372
|
+
window.history.replaceState(window.history.state, '', nextUrl);
|
|
373
|
+
}
|
|
374
|
+
}, [currentUrlFilters]);
|
|
237
375
|
|
|
238
376
|
// Filter data based on all filter states
|
|
239
377
|
const filteredData = useMemo(() => {
|
|
@@ -514,27 +652,6 @@ export function DiscoverTable<T extends DiscoverTableData>({
|
|
|
514
652
|
return counts;
|
|
515
653
|
}, [initialData]);
|
|
516
654
|
|
|
517
|
-
const statusCounts = useMemo(() => {
|
|
518
|
-
const counts: Record<string, number> = {};
|
|
519
|
-
initialData.forEach((item) => {
|
|
520
|
-
const status = item.data.status;
|
|
521
|
-
if (status) counts[status] = (counts[status] || 0) + 1;
|
|
522
|
-
});
|
|
523
|
-
return counts;
|
|
524
|
-
}, [initialData]);
|
|
525
|
-
|
|
526
|
-
const statusOptions = useMemo(
|
|
527
|
-
() =>
|
|
528
|
-
Object.keys(statusCounts)
|
|
529
|
-
.map((status) => ({
|
|
530
|
-
id: status,
|
|
531
|
-
name: formatAdrStatus(status as AdrStatus),
|
|
532
|
-
count: statusCounts[status],
|
|
533
|
-
}))
|
|
534
|
-
.sort((a, b) => a.name.localeCompare(b.name)),
|
|
535
|
-
[statusCounts]
|
|
536
|
-
);
|
|
537
|
-
|
|
538
655
|
const toggleDomain = (domainId: string) => {
|
|
539
656
|
setSelectedDomains((prev) => (prev.includes(domainId) ? prev.filter((id) => id !== domainId) : [...prev, domainId]));
|
|
540
657
|
};
|
|
@@ -576,7 +693,7 @@ export function DiscoverTable<T extends DiscoverTableData>({
|
|
|
576
693
|
const navigateToKind = (kindId: CollectionType) => {
|
|
577
694
|
const selectedKind = collectionKinds.find((kind) => kind.id === kindId);
|
|
578
695
|
if (!selectedKind || selectedKind.id === collectionType) return;
|
|
579
|
-
window.location.href = selectedKind.href
|
|
696
|
+
window.location.href = `${selectedKind.href}${buildDiscoverFilterSearch(currentUrlFilters)}`;
|
|
580
697
|
};
|
|
581
698
|
|
|
582
699
|
const clearAllFilters = () => {
|
|
@@ -606,7 +723,8 @@ export function DiscoverTable<T extends DiscoverTableData>({
|
|
|
606
723
|
selectedStatuses.length +
|
|
607
724
|
selectedProperties.length +
|
|
608
725
|
(!showOnlyLatest ? 1 : 0) +
|
|
609
|
-
(onlyShowDrafts ? 1 : 0)
|
|
726
|
+
(onlyShowDrafts ? 1 : 0) +
|
|
727
|
+
(tableFilter ? 1 : 0);
|
|
610
728
|
|
|
611
729
|
// Get selected domain names for display
|
|
612
730
|
const selectedDomainNames = selectedDomains.map((id) => domains.find((d) => d.id === id)?.name || id);
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export interface DiscoverFilterQueryState {
|
|
2
|
+
q: string;
|
|
3
|
+
domains: string[];
|
|
4
|
+
owners: string[];
|
|
5
|
+
producers: string[];
|
|
6
|
+
consumers: string[];
|
|
7
|
+
agentProviders: string[];
|
|
8
|
+
agentModels: string[];
|
|
9
|
+
badges: string[];
|
|
10
|
+
properties: string[];
|
|
11
|
+
statuses: string[];
|
|
12
|
+
showOnlyLatest: boolean;
|
|
13
|
+
onlyShowDrafts: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const FILTER_PARAM_NAMES = [
|
|
17
|
+
'q',
|
|
18
|
+
'domain',
|
|
19
|
+
'owner',
|
|
20
|
+
'producer',
|
|
21
|
+
'consumer',
|
|
22
|
+
'agentProvider',
|
|
23
|
+
'agentModel',
|
|
24
|
+
'badge',
|
|
25
|
+
'property',
|
|
26
|
+
'status',
|
|
27
|
+
'latest',
|
|
28
|
+
'drafts',
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
const uniqueNonEmpty = (values: string[]) => Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
|
|
32
|
+
|
|
33
|
+
const getValues = (params: URLSearchParams, paramName: string) => uniqueNonEmpty(params.getAll(paramName));
|
|
34
|
+
|
|
35
|
+
const isFalse = (value: string | null) => value === 'false' || value === '0';
|
|
36
|
+
|
|
37
|
+
const isTrue = (value: string | null) => value === 'true' || value === '1';
|
|
38
|
+
|
|
39
|
+
export const parseDiscoverFilterSearch = (search: string): DiscoverFilterQueryState => {
|
|
40
|
+
const params = new URLSearchParams(search);
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
q: params.get('q')?.trim() ?? '',
|
|
44
|
+
domains: getValues(params, 'domain'),
|
|
45
|
+
owners: getValues(params, 'owner'),
|
|
46
|
+
producers: getValues(params, 'producer'),
|
|
47
|
+
consumers: getValues(params, 'consumer'),
|
|
48
|
+
agentProviders: getValues(params, 'agentProvider'),
|
|
49
|
+
agentModels: getValues(params, 'agentModel'),
|
|
50
|
+
badges: getValues(params, 'badge'),
|
|
51
|
+
properties: getValues(params, 'property'),
|
|
52
|
+
statuses: getValues(params, 'status'),
|
|
53
|
+
showOnlyLatest: !isFalse(params.get('latest')),
|
|
54
|
+
onlyShowDrafts: isTrue(params.get('drafts')),
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const filterKnownValues = (values: string[], knownValues: Set<string>) => values.filter((value) => knownValues.has(value));
|
|
59
|
+
|
|
60
|
+
export const buildDiscoverFilterSearch = (filters: DiscoverFilterQueryState, currentSearch = '') => {
|
|
61
|
+
const params = new URLSearchParams(currentSearch);
|
|
62
|
+
FILTER_PARAM_NAMES.forEach((paramName) => params.delete(paramName));
|
|
63
|
+
|
|
64
|
+
const appendValues = (paramName: string, values: string[]) => {
|
|
65
|
+
uniqueNonEmpty(values).forEach((value) => params.append(paramName, value));
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const q = filters.q.trim();
|
|
69
|
+
if (q) params.set('q', q);
|
|
70
|
+
appendValues('domain', filters.domains);
|
|
71
|
+
appendValues('owner', filters.owners);
|
|
72
|
+
appendValues('producer', filters.producers);
|
|
73
|
+
appendValues('consumer', filters.consumers);
|
|
74
|
+
appendValues('agentProvider', filters.agentProviders);
|
|
75
|
+
appendValues('agentModel', filters.agentModels);
|
|
76
|
+
appendValues('badge', filters.badges);
|
|
77
|
+
appendValues('property', filters.properties);
|
|
78
|
+
appendValues('status', filters.statuses);
|
|
79
|
+
|
|
80
|
+
if (!filters.showOnlyLatest) params.set('latest', 'false');
|
|
81
|
+
if (filters.onlyShowDrafts) params.set('drafts', 'true');
|
|
82
|
+
|
|
83
|
+
const search = params.toString();
|
|
84
|
+
return search ? `?${search}` : '';
|
|
85
|
+
};
|