@plumile/backoffice-core 0.1.59
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 +21 -0
- package/lib/esm/base64.d.ts +3 -0
- package/lib/esm/base64.d.ts.map +1 -0
- package/lib/esm/base64.js +33 -0
- package/lib/esm/builders.d.ts +14 -0
- package/lib/esm/builders.d.ts.map +1 -0
- package/lib/esm/builders.js +34 -0
- package/lib/esm/constants.d.ts +14 -0
- package/lib/esm/constants.d.ts.map +1 -0
- package/lib/esm/constants.js +20 -0
- package/lib/esm/detail/pages.d.ts +29 -0
- package/lib/esm/detail/pages.d.ts.map +1 -0
- package/lib/esm/detail/pages.js +85 -0
- package/lib/esm/detailParams.d.ts +3 -0
- package/lib/esm/detailParams.d.ts.map +1 -0
- package/lib/esm/detailParams.js +15 -0
- package/lib/esm/filters/schema.d.ts +9 -0
- package/lib/esm/filters/schema.d.ts.map +1 -0
- package/lib/esm/filters/schema.js +101 -0
- package/lib/esm/filters/where.d.ts +4 -0
- package/lib/esm/filters/where.d.ts.map +1 -0
- package/lib/esm/filters/where.js +83 -0
- package/lib/esm/resolve.d.ts +13 -0
- package/lib/esm/resolve.d.ts.map +1 -0
- package/lib/esm/resolve.js +163 -0
- package/lib/esm/state/buildListHref.d.ts +14 -0
- package/lib/esm/state/buildListHref.d.ts.map +1 -0
- package/lib/esm/state/buildListHref.js +86 -0
- package/lib/esm/state/stableKey.d.ts +8 -0
- package/lib/esm/state/stableKey.d.ts.map +1 -0
- package/lib/esm/state/stableKey.js +17 -0
- package/lib/esm/state/urlState.d.ts +16 -0
- package/lib/esm/state/urlState.d.ts.map +1 -0
- package/lib/esm/state/urlState.js +48 -0
- package/lib/esm/types.d.ts +882 -0
- package/lib/esm/types.d.ts.map +1 -0
- package/lib/esm/types.js +8 -0
- package/lib/tsconfig.esm.tsbuildinfo +1 -0
- package/lib/types/base64.d.ts +3 -0
- package/lib/types/base64.d.ts.map +1 -0
- package/lib/types/builders.d.ts +14 -0
- package/lib/types/builders.d.ts.map +1 -0
- package/lib/types/constants.d.ts +14 -0
- package/lib/types/constants.d.ts.map +1 -0
- package/lib/types/detail/pages.d.ts +29 -0
- package/lib/types/detail/pages.d.ts.map +1 -0
- package/lib/types/detailParams.d.ts +3 -0
- package/lib/types/detailParams.d.ts.map +1 -0
- package/lib/types/filters/schema.d.ts +9 -0
- package/lib/types/filters/schema.d.ts.map +1 -0
- package/lib/types/filters/where.d.ts +4 -0
- package/lib/types/filters/where.d.ts.map +1 -0
- package/lib/types/resolve.d.ts +13 -0
- package/lib/types/resolve.d.ts.map +1 -0
- package/lib/types/state/buildListHref.d.ts +14 -0
- package/lib/types/state/buildListHref.d.ts.map +1 -0
- package/lib/types/state/stableKey.d.ts +8 -0
- package/lib/types/state/stableKey.d.ts.map +1 -0
- package/lib/types/state/urlState.d.ts +16 -0
- package/lib/types/state/urlState.d.ts.map +1 -0
- package/lib/types/types.d.ts +882 -0
- package/lib/types/types.d.ts.map +1 -0
- package/package.json +112 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { createBackofficeFilterSchema } from './filters/schema.js';
|
|
2
|
+
import { createBackofficeListUrlCodec } from './state/urlState.js';
|
|
3
|
+
const DETAIL_LAYOUT_FACET_KIND = 'detail-layout';
|
|
4
|
+
const DETAIL_PAGE_FACET_KIND = 'detail-page';
|
|
5
|
+
const attachResolvedRoutes = (config, manifest) => {
|
|
6
|
+
return {
|
|
7
|
+
...config,
|
|
8
|
+
routes: manifest.routes,
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
function normalizeBasePath(basePath) {
|
|
12
|
+
if (basePath.trim() === '' || basePath === '/') {
|
|
13
|
+
return '';
|
|
14
|
+
}
|
|
15
|
+
if (basePath.endsWith('/')) {
|
|
16
|
+
return basePath.slice(0, -1);
|
|
17
|
+
}
|
|
18
|
+
return basePath;
|
|
19
|
+
}
|
|
20
|
+
const joinPath = (...parts) => {
|
|
21
|
+
const normalized = parts
|
|
22
|
+
.map((part) => {
|
|
23
|
+
return part.trim().replace(/^\/+|\/+$/g, '');
|
|
24
|
+
})
|
|
25
|
+
.filter((part) => {
|
|
26
|
+
return part !== '';
|
|
27
|
+
});
|
|
28
|
+
return `/${normalized.join('/')}`;
|
|
29
|
+
};
|
|
30
|
+
const normalizeRoute = (value) => {
|
|
31
|
+
const trimmed = value.trim();
|
|
32
|
+
if (trimmed === '' || trimmed === '/') {
|
|
33
|
+
return '/';
|
|
34
|
+
}
|
|
35
|
+
if (!trimmed.startsWith('/')) {
|
|
36
|
+
return `/${trimmed}`;
|
|
37
|
+
}
|
|
38
|
+
if (trimmed.endsWith('/')) {
|
|
39
|
+
return trimmed.slice(0, -1);
|
|
40
|
+
}
|
|
41
|
+
return trimmed;
|
|
42
|
+
};
|
|
43
|
+
export const resolveBackofficeToolRoute = (basePath, toolId, routeOverride) => {
|
|
44
|
+
if (routeOverride != null && routeOverride.trim() !== '') {
|
|
45
|
+
return normalizeRoute(routeOverride);
|
|
46
|
+
}
|
|
47
|
+
const normalized = normalizeBasePath(basePath);
|
|
48
|
+
if (normalized === '') {
|
|
49
|
+
return `/tools/${toolId}`;
|
|
50
|
+
}
|
|
51
|
+
return `${normalized}/tools/${toolId}`;
|
|
52
|
+
};
|
|
53
|
+
function buildDefaultListDefaults(list) {
|
|
54
|
+
if (list.defaultState != null) {
|
|
55
|
+
return list.defaultState;
|
|
56
|
+
}
|
|
57
|
+
const firstSort = list.sorts[0]?.id ?? null;
|
|
58
|
+
return {
|
|
59
|
+
where: null,
|
|
60
|
+
sort: firstSort,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function extractBackofficeToolFacetConfig(config) {
|
|
64
|
+
return {
|
|
65
|
+
kind: 'tool',
|
|
66
|
+
id: config.id,
|
|
67
|
+
label: config.label ??
|
|
68
|
+
(() => {
|
|
69
|
+
return config.id;
|
|
70
|
+
}),
|
|
71
|
+
tool: config,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export function resolveBackofficeListFacetConfig(config, manifest, _options) {
|
|
75
|
+
const routes = {
|
|
76
|
+
...manifest.routes,
|
|
77
|
+
};
|
|
78
|
+
const listDefaults = buildDefaultListDefaults(config.list);
|
|
79
|
+
const listUrlCodec = createBackofficeListUrlCodec({
|
|
80
|
+
defaults: listDefaults,
|
|
81
|
+
filterSchema: createBackofficeFilterSchema(config.list.filters),
|
|
82
|
+
sortIds: config.list.sorts.map((sort) => {
|
|
83
|
+
return sort.id;
|
|
84
|
+
}),
|
|
85
|
+
});
|
|
86
|
+
return {
|
|
87
|
+
...config,
|
|
88
|
+
routes,
|
|
89
|
+
listDefaults,
|
|
90
|
+
listUrlCodec,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function resolveBackofficePickerFacetConfig(config, manifest, _options) {
|
|
94
|
+
return attachResolvedRoutes(config, manifest);
|
|
95
|
+
}
|
|
96
|
+
export function resolveBackofficeDetailLayoutFacetConfig(config, manifest, _options) {
|
|
97
|
+
return attachResolvedRoutes(config, manifest);
|
|
98
|
+
}
|
|
99
|
+
export function resolveBackofficeDetailPageFacetConfig(config, manifest, _options) {
|
|
100
|
+
return attachResolvedRoutes(config, manifest);
|
|
101
|
+
}
|
|
102
|
+
export function resolveBackofficeToolFacetConfig(config, manifest, options) {
|
|
103
|
+
const route = resolveBackofficeToolRoute(options.basePath, config.id, manifest.routes.list);
|
|
104
|
+
return {
|
|
105
|
+
...config,
|
|
106
|
+
route,
|
|
107
|
+
routes: {
|
|
108
|
+
list: route,
|
|
109
|
+
detail: (id) => {
|
|
110
|
+
return joinPath(route, id);
|
|
111
|
+
},
|
|
112
|
+
detailPage: (id, pageId) => {
|
|
113
|
+
return joinPath(route, id, pageId);
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export function resolveBackofficeLoadedFacetModule(manifest, module, options) {
|
|
119
|
+
if (manifest.id !== module.id) {
|
|
120
|
+
throw new Error(`Backoffice entity manifest/module id mismatch: ${manifest.id} !== ${module.id}`);
|
|
121
|
+
}
|
|
122
|
+
switch (module.kind) {
|
|
123
|
+
case 'list':
|
|
124
|
+
return {
|
|
125
|
+
kind: 'list',
|
|
126
|
+
id: module.id,
|
|
127
|
+
manifest,
|
|
128
|
+
config: resolveBackofficeListFacetConfig(module.config, manifest, options),
|
|
129
|
+
};
|
|
130
|
+
case 'picker':
|
|
131
|
+
return {
|
|
132
|
+
kind: 'picker',
|
|
133
|
+
id: module.id,
|
|
134
|
+
manifest,
|
|
135
|
+
config: resolveBackofficePickerFacetConfig(module.config, manifest, options),
|
|
136
|
+
};
|
|
137
|
+
case DETAIL_LAYOUT_FACET_KIND:
|
|
138
|
+
return {
|
|
139
|
+
kind: DETAIL_LAYOUT_FACET_KIND,
|
|
140
|
+
id: module.id,
|
|
141
|
+
manifest,
|
|
142
|
+
config: resolveBackofficeDetailLayoutFacetConfig(module.config, manifest, options),
|
|
143
|
+
};
|
|
144
|
+
case DETAIL_PAGE_FACET_KIND:
|
|
145
|
+
return {
|
|
146
|
+
kind: DETAIL_PAGE_FACET_KIND,
|
|
147
|
+
id: module.id,
|
|
148
|
+
pageId: module.pageId,
|
|
149
|
+
manifest,
|
|
150
|
+
config: resolveBackofficeDetailPageFacetConfig(module.config, manifest, options),
|
|
151
|
+
};
|
|
152
|
+
case 'tool':
|
|
153
|
+
return {
|
|
154
|
+
kind: 'tool',
|
|
155
|
+
id: module.id,
|
|
156
|
+
manifest,
|
|
157
|
+
config: resolveBackofficeToolFacetConfig(module.config, manifest, options),
|
|
158
|
+
};
|
|
159
|
+
default:
|
|
160
|
+
throw new Error(`Unsupported backoffice facet kind: ${String(module)}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXNvbHZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU1uRSxNQUFNLHdCQUF3QixHQUFHLGVBQWUsQ0FBQztBQUNqRCxNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQztBQUU3QyxNQUFNLG9CQUFvQixHQUFHLENBQzNCLE1BQWUsRUFDZixRQUFzQyxFQUN3QixFQUFFO0lBQ2hFLE9BQU87UUFDTCxHQUFHLE1BQU07UUFDVCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07S0FDeEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUtGLFNBQVMsaUJBQWlCLENBQUMsUUFBZ0I7SUFDekMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLFFBQVEsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUMvQyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQixPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBZSxFQUFVLEVBQUU7SUFDOUMsTUFBTSxVQUFVLEdBQUcsS0FBSztTQUNyQixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLENBQUMsSUFB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TUFBTTtnQkFDckIsUUFBUTtnQkFDUixNQUFNLEVBQUUsc0NBQXNDLENBQzVDLE1BQU0sQ0FBQyxNQUFNLEVBQ2IsUUFBUSxFQUNSLE9BQU8sQ0FDUjthQUNGLENBQUM7UUFDSixLQUFLLE1BQU07WUFDVCxPQUFPO2dCQUNMLElBQUksRUFBRSxNQUFNO2dCQUNaLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixRQUFRO2dCQUNSLE1BQU0sRUFBRSxnQ0FBZ0MsQ0FDdEMsTUFBTSxDQUFDLE1BQU0sRUFDYixRQUFRLEVBQ1IsT0FBTyxDQUNSO2FBQ0YsQ0FBQztRQUNKO1lBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgQmFja29mZmljZURldGFpbExheW91dEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlRW50aXR5TGlzdENvbmZpZyxcbiAgQmFja29mZmljZUxpc3REZWZhdWx0cyxcbiAgQmFja29mZmljZUxpc3RGYWNldENvbmZpZyxcbiAgQmFja29mZmljZUxvYWRlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBCYWNrb2ZmaWNlUGlja2VyRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VUb29sRW50aXR5Q29uZmlnLFxuICBCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWRUb29sRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZERldGFpbExheW91dEZhY2V0Q29uZmlnLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWREZXRhaWxQYWdlRmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBCYWNrb2ZmaWNlUmVzb2x2ZWRMaXN0RmFjZXRDb25maWcsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZFBpY2tlckZhY2V0Q29uZmlnLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZUJhY2tvZmZpY2VGaWx0ZXJTY2hlbWEgfSBmcm9tICcuL2ZpbHRlcnMvc2NoZW1hLmpzJztcbmltcG9ydCB7IGNyZWF0ZUJhY2tvZmZpY2VMaXN0VXJsQ29kZWMgfSBmcm9tICcuL3N0YXRlL3VybFN0YXRlLmpzJztcblxuZXhwb3J0IHR5cGUgUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zID0ge1xuICBiYXNlUGF0aDogc3RyaW5nO1xufTtcblxuY29uc3QgREVUQUlMX0xBWU9VVF9GQUNFVF9LSU5EID0gJ2RldGFpbC1sYXlvdXQnO1xuY29uc3QgREVUQUlMX1BBR0VfRkFDRVRfS0lORCA9ICdkZXRhaWwtcGFnZSc7XG5cbmNvbnN0IGF0dGFjaFJlc29sdmVkUm91dGVzID0gPFRDb25maWcgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfT4oXG4gIGNvbmZpZzogVENvbmZpZyxcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4pOiBUQ29uZmlnICYgeyByb3V0ZXM6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW1bJ3JvdXRlcyddIH0gPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICByb3V0ZXM6IG1hbmlmZXN0LnJvdXRlcyxcbiAgfTtcbn07XG5cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmFzZVBhdGgoYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChiYXNlUGF0aC50cmltKCkgPT09ICcnIHx8IGJhc2VQYXRoID09PSAnLycpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgaWYgKGJhc2VQYXRoLmVuZHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYmFzZVBhdGguc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiBiYXNlUGF0aDtcbn1cblxuY29uc3Qgam9pblBhdGggPSAoLi4ucGFydHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhcnRzXG4gICAgLm1hcCgocGFydCkgPT4ge1xuICAgICAgcmV0dXJuIHBhcnQudHJpbSgpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKTtcbiAgICB9KVxuICAgIC5maWx0ZXIoKHBhcnQpID0+IHtcbiAgICAgIHJldHVybiBwYXJ0ICE9PSAnJztcbiAgICB9KTtcbiAgcmV0dXJuIGAvJHtub3JtYWxpemVkLmpvaW4oJy8nKX1gO1xufTtcblxuY29uc3Qgbm9ybWFsaXplUm91dGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRyaW1tZWQgPSB2YWx1ZS50cmltKCk7XG4gIGlmICh0cmltbWVkID09PSAnJyB8fCB0cmltbWVkID09PSAnLycpIHtcbiAgICByZXR1cm4gJy8nO1xuICB9XG4gIGlmICghdHJpbW1lZC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYC8ke3RyaW1tZWR9YDtcbiAgfVxuICBpZiAodHJpbW1lZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIHRyaW1tZWQuc2xpY2UoMCwgLTEpO1xuICB9XG4gIHJldHVybiB0cmltbWVkO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgY2Fub25pY2FsIHRvb2wgcm91dGUuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQmFja29mZmljZVRvb2xSb3V0ZSA9IChcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgdG9vbElkOiBzdHJpbmcsXG4gIHJvdXRlT3ZlcnJpZGU/OiBzdHJpbmcsXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAocm91dGVPdmVycmlkZSAhPSBudWxsICYmIHJvdXRlT3ZlcnJpZGUudHJpbSgpICE9PSAnJykge1xuICAgIHJldHVybiBub3JtYWxpemVSb3V0ZShyb3V0ZU92ZXJyaWRlKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplQmFzZVBhdGgoYmFzZVBhdGgpO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJycpIHtcbiAgICByZXR1cm4gYC90b29scy8ke3Rvb2xJZH1gO1xuICB9XG4gIHJldHVybiBgJHtub3JtYWxpemVkfS90b29scy8ke3Rvb2xJZH1gO1xufTtcblxuLyoqXG4gKlxuICovXG5mdW5jdGlvbiBidWlsZERlZmF1bHRMaXN0RGVmYXVsdHM8XG4gIFdoZXJlLFxuICBTb3J0IGV4dGVuZHMgc3RyaW5nLFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIExpc3RRdWVyeURhdGEsXG4gIExpc3RGcmFnbWVudERhdGEsXG4gIExpc3RRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGxpc3Q6IEJhY2tvZmZpY2VFbnRpdHlMaXN0Q29uZmlnPFxuICAgIFdoZXJlLFxuICAgIFNvcnQsXG4gICAgUm93UmVmLFxuICAgIFJvd1ZpZXcsXG4gICAgTGlzdFF1ZXJ5RGF0YSxcbiAgICBMaXN0RnJhZ21lbnREYXRhLFxuICAgIExpc3RRdWVyeVZhcmlhYmxlc1xuICA+LFxuKTogQmFja29mZmljZUxpc3REZWZhdWx0czxXaGVyZSwgU29ydD4ge1xuICBpZiAobGlzdC5kZWZhdWx0U3RhdGUgIT0gbnVsbCkge1xuICAgIHJldHVybiBsaXN0LmRlZmF1bHRTdGF0ZTtcbiAgfVxuICBjb25zdCBmaXJzdFNvcnQgPSBsaXN0LnNvcnRzWzBdPy5pZCA/PyBudWxsO1xuICByZXR1cm4ge1xuICAgIHdoZXJlOiBudWxsLFxuICAgIHNvcnQ6IGZpcnN0U29ydCxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcoXG4gIGNvbmZpZzogQmFja29mZmljZVRvb2xFbnRpdHlDb25maWcsXG4pOiBCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiAndG9vbCcsXG4gICAgaWQ6IGNvbmZpZy5pZCxcbiAgICBsYWJlbDpcbiAgICAgIGNvbmZpZy5sYWJlbCA/P1xuICAgICAgKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZy5pZDtcbiAgICAgIH0pLFxuICAgIHRvb2w6IGNvbmZpZyxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VMaXN0RmFjZXRDb25maWc8XG4gIFdoZXJlIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFNvcnQgZXh0ZW5kcyBzdHJpbmcsXG4gIFJvd1JlZixcbiAgUm93VmlldyxcbiAgTGlzdFF1ZXJ5RGF0YSxcbiAgTGlzdEZyYWdtZW50RGF0YSxcbiAgTGlzdFF1ZXJ5VmFyaWFibGVzLFxuPihcbiAgY29uZmlnOiBCYWNrb2ZmaWNlTGlzdEZhY2V0Q29uZmlnPFxuICAgIFdoZXJlLFxuICAgIFNvcnQsXG4gICAgUm93UmVmLFxuICAgIFJvd1ZpZXcsXG4gICAgTGlzdFF1ZXJ5RGF0YSxcbiAgICBMaXN0RnJhZ21lbnREYXRhLFxuICAgIExpc3RRdWVyeVZhcmlhYmxlc1xuICA+LFxuICBtYW5pZmVzdDogQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfb3B0aW9uczogUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zLFxuKTogQmFja29mZmljZVJlc29sdmVkTGlzdEZhY2V0Q29uZmlnPFxuICBXaGVyZSxcbiAgU29ydCxcbiAgUm93UmVmLFxuICBSb3dWaWV3LFxuICBMaXN0UXVlcnlEYXRhLFxuICBMaXN0RnJhZ21lbnREYXRhLFxuICBMaXN0UXVlcnlWYXJpYWJsZXNcbj4ge1xuICBjb25zdCByb3V0ZXMgPSB7XG4gICAgLi4ubWFuaWZlc3Qucm91dGVzLFxuICB9O1xuXG4gIGNvbnN0IGxpc3REZWZhdWx0cyA9IGJ1aWxkRGVmYXVsdExpc3REZWZhdWx0cyhjb25maWcubGlzdCk7XG4gIGNvbnN0IGxpc3RVcmxDb2RlYyA9IGNyZWF0ZUJhY2tvZmZpY2VMaXN0VXJsQ29kZWMoe1xuICAgIGRlZmF1bHRzOiBsaXN0RGVmYXVsdHMsXG4gICAgZmlsdGVyU2NoZW1hOiBjcmVhdGVCYWNrb2ZmaWNlRmlsdGVyU2NoZW1hKGNvbmZpZy5saXN0LmZpbHRlcnMpLFxuICAgIHNvcnRJZHM6IGNvbmZpZy5saXN0LnNvcnRzLm1hcCgoc29ydCkgPT4ge1xuICAgICAgcmV0dXJuIHNvcnQuaWQ7XG4gICAgfSksXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uY29uZmlnLFxuICAgIHJvdXRlcyxcbiAgICBsaXN0RGVmYXVsdHMsXG4gICAgbGlzdFVybENvZGVjLFxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQmFja29mZmljZVBpY2tlckZhY2V0Q29uZmlnPFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIFBpY2tlclF1ZXJ5RGF0YSxcbiAgUGlja2VyRnJhZ21lbnREYXRhLFxuICBQaWNrZXJRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGNvbmZpZzogQmFja29mZmljZVBpY2tlckZhY2V0Q29uZmlnPFxuICAgIFJvd1JlZixcbiAgICBSb3dWaWV3LFxuICAgIFBpY2tlclF1ZXJ5RGF0YSxcbiAgICBQaWNrZXJGcmFnbWVudERhdGEsXG4gICAgUGlja2VyUXVlcnlWYXJpYWJsZXNcbiAgPixcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgX29wdGlvbnM6IFJlc29sdmVCYWNrb2ZmaWNlRW50aXR5T3B0aW9ucyxcbik6IEJhY2tvZmZpY2VSZXNvbHZlZFBpY2tlckZhY2V0Q29uZmlnPFxuICBSb3dSZWYsXG4gIFJvd1ZpZXcsXG4gIFBpY2tlclF1ZXJ5RGF0YSxcbiAgUGlja2VyRnJhZ21lbnREYXRhLFxuICBQaWNrZXJRdWVyeVZhcmlhYmxlc1xuPiB7XG4gIHJldHVybiBhdHRhY2hSZXNvbHZlZFJvdXRlcyhjb25maWcsIG1hbmlmZXN0KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxMYXlvdXRGYWNldENvbmZpZzxcbiAgTGF5b3V0UmVmLFxuICBMYXlvdXRWaWV3LFxuICBMYXlvdXRRdWVyeURhdGEsXG4gIExheW91dEZyYWdtZW50UmVmLFxuICBMYXlvdXRRdWVyeVZhcmlhYmxlcyxcbj4oXG4gIGNvbmZpZzogQmFja29mZmljZURldGFpbExheW91dEZhY2V0Q29uZmlnPFxuICAgIExheW91dFJlZixcbiAgICBMYXlvdXRWaWV3LFxuICAgIExheW91dFF1ZXJ5RGF0YSxcbiAgICBMYXlvdXRGcmFnbWVudFJlZixcbiAgICBMYXlvdXRRdWVyeVZhcmlhYmxlc1xuICA+LFxuICBtYW5pZmVzdDogQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBfb3B0aW9uczogUmVzb2x2ZUJhY2tvZmZpY2VFbnRpdHlPcHRpb25zLFxuKTogQmFja29mZmljZVJlc29sdmVkRGV0YWlsTGF5b3V0RmFjZXRDb25maWc8XG4gIExheW91dFJlZixcbiAgTGF5b3V0VmlldyxcbiAgTGF5b3V0UXVlcnlEYXRhLFxuICBMYXlvdXRGcmFnbWVudFJlZixcbiAgTGF5b3V0UXVlcnlWYXJpYWJsZXNcbj4ge1xuICByZXR1cm4gYXR0YWNoUmVzb2x2ZWRSb3V0ZXMoY29uZmlnLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnPFxuICBMYXlvdXRWaWV3LFxuICBEZXRhaWxSZWYsXG4gIERldGFpbFZpZXcsXG4gIERldGFpbFF1ZXJ5RGF0YSxcbiAgRGV0YWlsRnJhZ21lbnRSZWYsXG4gIERldGFpbFF1ZXJ5VmFyaWFibGVzLFxuPihcbiAgY29uZmlnOiBCYWNrb2ZmaWNlRGV0YWlsUGFnZUZhY2V0Q29uZmlnPFxuICAgIExheW91dFZpZXcsXG4gICAgRGV0YWlsUmVmLFxuICAgIERldGFpbFZpZXcsXG4gICAgRGV0YWlsUXVlcnlEYXRhLFxuICAgIERldGFpbEZyYWdtZW50UmVmLFxuICAgIERldGFpbFF1ZXJ5VmFyaWFibGVzXG4gID4sXG4gIG1hbmlmZXN0OiBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIF9vcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWREZXRhaWxQYWdlRmFjZXRDb25maWc8XG4gIExheW91dFZpZXcsXG4gIERldGFpbFJlZixcbiAgRGV0YWlsVmlldyxcbiAgRGV0YWlsUXVlcnlEYXRhLFxuICBEZXRhaWxGcmFnbWVudFJlZixcbiAgRGV0YWlsUXVlcnlWYXJpYWJsZXNcbj4ge1xuICByZXR1cm4gYXR0YWNoUmVzb2x2ZWRSb3V0ZXMoY29uZmlnLCBtYW5pZmVzdCk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYWNrb2ZmaWNlVG9vbEZhY2V0Q29uZmlnKFxuICBjb25maWc6IEJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcsXG4gIG1hbmlmZXN0OiBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtLFxuICBvcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWRUb29sRmFjZXRDb25maWcge1xuICBjb25zdCByb3V0ZSA9IHJlc29sdmVCYWNrb2ZmaWNlVG9vbFJvdXRlKFxuICAgIG9wdGlvbnMuYmFzZVBhdGgsXG4gICAgY29uZmlnLmlkLFxuICAgIG1hbmlmZXN0LnJvdXRlcy5saXN0LFxuICApO1xuICByZXR1cm4ge1xuICAgIC4uLmNvbmZpZyxcbiAgICByb3V0ZSxcbiAgICByb3V0ZXM6IHtcbiAgICAgIGxpc3Q6IHJvdXRlLFxuICAgICAgZGV0YWlsOiAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gam9pblBhdGgocm91dGUsIGlkKTtcbiAgICAgIH0sXG4gICAgICBkZXRhaWxQYWdlOiAoaWQ6IHN0cmluZywgcGFnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGpvaW5QYXRoKHJvdXRlLCBpZCwgcGFnZUlkKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhY2tvZmZpY2VMb2FkZWRGYWNldE1vZHVsZShcbiAgbWFuaWZlc3Q6IEJhY2tvZmZpY2VFbnRpdHlNYW5pZmVzdEl0ZW0sXG4gIG1vZHVsZTogQmFja29mZmljZUxvYWRlZEVudGl0eUZhY2V0TW9kdWxlLFxuICBvcHRpb25zOiBSZXNvbHZlQmFja29mZmljZUVudGl0eU9wdGlvbnMsXG4pOiBCYWNrb2ZmaWNlUmVzb2x2ZWRFbnRpdHlGYWNldE1vZHVsZSB7XG4gIGlmIChtYW5pZmVzdC5pZCAhPT0gbW9kdWxlLmlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEJhY2tvZmZpY2UgZW50aXR5IG1hbmlmZXN0L21vZHVsZSBpZCBtaXNtYXRjaDogJHttYW5pZmVzdC5pZH0gIT09ICR7bW9kdWxlLmlkfWAsXG4gICAgKTtcbiAgfVxuXG4gIHN3aXRjaCAobW9kdWxlLmtpbmQpIHtcbiAgICBjYXNlICdsaXN0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdsaXN0JyxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VMaXN0RmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlICdwaWNrZXInOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ3BpY2tlcicsXG4gICAgICAgIGlkOiBtb2R1bGUuaWQsXG4gICAgICAgIG1hbmlmZXN0LFxuICAgICAgICBjb25maWc6IHJlc29sdmVCYWNrb2ZmaWNlUGlja2VyRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlIERFVEFJTF9MQVlPVVRfRkFDRVRfS0lORDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IERFVEFJTF9MQVlPVVRfRkFDRVRfS0lORCxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxMYXlvdXRGYWNldENvbmZpZyhcbiAgICAgICAgICBtb2R1bGUuY29uZmlnLFxuICAgICAgICAgIG1hbmlmZXN0LFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICksXG4gICAgICB9O1xuICAgIGNhc2UgREVUQUlMX1BBR0VfRkFDRVRfS0lORDpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6IERFVEFJTF9QQUdFX0ZBQ0VUX0tJTkQsXG4gICAgICAgIGlkOiBtb2R1bGUuaWQsXG4gICAgICAgIHBhZ2VJZDogbW9kdWxlLnBhZ2VJZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VEZXRhaWxQYWdlRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBjYXNlICd0b29sJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICd0b29sJyxcbiAgICAgICAgaWQ6IG1vZHVsZS5pZCxcbiAgICAgICAgbWFuaWZlc3QsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZUJhY2tvZmZpY2VUb29sRmFjZXRDb25maWcoXG4gICAgICAgICAgbW9kdWxlLmNvbmZpZyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBiYWNrb2ZmaWNlIGZhY2V0IGtpbmQ6ICR7U3RyaW5nKG1vZHVsZSl9YCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BackofficeListState, BackofficeResolvedListFacetConfigBase } from '../types.js';
|
|
2
|
+
export type BackofficeListStateOverrides<Where, Sort extends string> = Partial<BackofficeListState<Where, Sort>>;
|
|
3
|
+
export type BackofficeFallbackListFilter = {
|
|
4
|
+
id: string;
|
|
5
|
+
value: unknown;
|
|
6
|
+
};
|
|
7
|
+
export declare function buildBackofficeListSearch<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): string;
|
|
8
|
+
export declare function buildBackofficeListLink<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): {
|
|
9
|
+
pathname: string;
|
|
10
|
+
search: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function buildBackofficeListHref<Where, Sort extends string>(config: BackofficeResolvedListFacetConfigBase, overrides: BackofficeListStateOverrides<Where, Sort>): string;
|
|
13
|
+
export declare function buildBackofficeFallbackListHref(pathname: string, where: Record<string, unknown> | null | undefined, filters?: readonly BackofficeFallbackListFilter[]): string;
|
|
14
|
+
//# sourceMappingURL=buildListHref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildListHref.d.ts","sourceRoot":"","sources":["../../../src/state/buildListHref.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EACnB,qCAAqC,EACtC,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,4BAA4B,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,IAAI,OAAO,CAC5E,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CACjC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAKF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAClE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD,MAAM,CAWR;AAKD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAChE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAGtC;AAOD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,EAChE,MAAM,EAAE,qCAAqC,EAC7C,SAAS,EAAE,4BAA4B,CAAC,KAAK,EAAE,IAAI,CAAC,GACnD,MAAM,CAOR;AAiED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACjD,OAAO,CAAC,EAAE,SAAS,4BAA4B,EAAE,GAChD,MAAM,CAqBR"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { booleanField, defineSchema, stringify as stringifyFilters, stringField, } from '@plumile/filter-query';
|
|
2
|
+
export function buildBackofficeListSearch(config, overrides) {
|
|
3
|
+
if (config.listDefaults == null || config.listUrlCodec == null) {
|
|
4
|
+
return '';
|
|
5
|
+
}
|
|
6
|
+
const merged = {
|
|
7
|
+
...config.listDefaults,
|
|
8
|
+
...overrides,
|
|
9
|
+
};
|
|
10
|
+
const params = config.listUrlCodec.serialize(merged);
|
|
11
|
+
return params.toString();
|
|
12
|
+
}
|
|
13
|
+
export function buildBackofficeListLink(config, overrides) {
|
|
14
|
+
const search = buildBackofficeListSearch(config, overrides);
|
|
15
|
+
return { pathname: config.routes.list, search };
|
|
16
|
+
}
|
|
17
|
+
export function buildBackofficeListHref(config, overrides) {
|
|
18
|
+
const qs = buildBackofficeListSearch(config, overrides);
|
|
19
|
+
if (qs === '') {
|
|
20
|
+
return config.routes.list;
|
|
21
|
+
}
|
|
22
|
+
return `${config.routes.list}?${qs}`;
|
|
23
|
+
}
|
|
24
|
+
const appendFallbackEntries = (entries, value, path) => {
|
|
25
|
+
if (value == null || path === '') {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (Array.isArray(value)) {
|
|
29
|
+
if (value.length === 0) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
entries.set(path, value);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (typeof value === 'object') {
|
|
36
|
+
for (const [key, nested] of Object.entries(value)) {
|
|
37
|
+
let nestedPath = key;
|
|
38
|
+
if (path !== '') {
|
|
39
|
+
nestedPath = `${path}.${key}`;
|
|
40
|
+
}
|
|
41
|
+
appendFallbackEntries(entries, nested, nestedPath);
|
|
42
|
+
}
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (typeof value === 'string' && value.trim() === '') {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
entries.set(path, value);
|
|
49
|
+
};
|
|
50
|
+
const buildFallbackFilterQuery = (entries) => {
|
|
51
|
+
if (entries.size === 0) {
|
|
52
|
+
return '';
|
|
53
|
+
}
|
|
54
|
+
const schema = defineSchema(Object.fromEntries(Array.from(entries.entries(), ([key, value]) => {
|
|
55
|
+
if (typeof value === 'boolean') {
|
|
56
|
+
return [key, booleanField(['eq'])];
|
|
57
|
+
}
|
|
58
|
+
return [key, stringField(['eq'])];
|
|
59
|
+
})));
|
|
60
|
+
const filters = Object.fromEntries(Array.from(entries.entries(), ([key, value]) => {
|
|
61
|
+
return [key, { eq: value }];
|
|
62
|
+
}));
|
|
63
|
+
return stringifyFilters(filters, schema);
|
|
64
|
+
};
|
|
65
|
+
export function buildBackofficeFallbackListHref(pathname, where, filters) {
|
|
66
|
+
if (where == null && (filters == null || filters.length === 0)) {
|
|
67
|
+
return pathname;
|
|
68
|
+
}
|
|
69
|
+
const entries = new Map();
|
|
70
|
+
if (filters != null && filters.length > 0) {
|
|
71
|
+
for (const filter of filters) {
|
|
72
|
+
appendFallbackEntries(entries, filter.value, filter.id);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else if (where != null) {
|
|
76
|
+
for (const [key, value] of Object.entries(where)) {
|
|
77
|
+
appendFallbackEntries(entries, value, key);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const search = buildFallbackFilterQuery(entries);
|
|
81
|
+
if (search === '') {
|
|
82
|
+
return pathname;
|
|
83
|
+
}
|
|
84
|
+
return `${pathname}?${search}`;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRMaXN0SHJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdGF0ZS9idWlsZExpc3RIcmVmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUNaLFNBQVMsSUFBSSxnQkFBZ0IsRUFDN0IsV0FBVyxHQUNaLE1BQU0sdUJBQXVCLENBQUM7QUFtQi9CLE1BQU0sVUFBVSx5QkFBeUIsQ0FDdkMsTUFBNkMsRUFDN0MsU0FBb0Q7SUFFcEQsSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9ELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFxQztRQUMvQyxHQUFHLE1BQU0sQ0FBQyxZQUFZO1FBQ3RCLEdBQUcsU0FBUztLQUN1QixDQUFDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFLRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQTZDLEVBQzdDLFNBQW9EO0lBRXBELE1BQU0sTUFBTSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2xELENBQUM7QUFPRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLE1BQTZDLEVBQzdDLFNBQW9EO0lBRXBELE1BQU0sRUFBRSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV4RCxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNkLE9BQU8sTUFBTSxDQUFD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LE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9ELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUMzQyxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakQscUJBQXFCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxPQUFPLEdBQUcsUUFBUSxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuRmllbGQsXG4gIGRlZmluZVNjaGVtYSxcbiAgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeUZpbHRlcnMsXG4gIHN0cmluZ0ZpZWxkLFxufSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJhY2tvZmZpY2VMaXN0U3RhdGUsXG4gIEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydCBleHRlbmRzIHN0cmluZz4gPSBQYXJ0aWFsPFxuICBCYWNrb2ZmaWNlTGlzdFN0YXRlPFdoZXJlLCBTb3J0PlxuPjtcblxuZXhwb3J0IHR5cGUgQmFja29mZmljZUZhbGxiYWNrTGlzdEZpbHRlciA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59O1xuXG4vKipcbiAqIEJ1aWxkcyBhIHN0YWJsZSBzZWFyY2ggc3RyaW5nICh3aXRob3V0IGA/YCkgZm9yIGxpc3QgVVJMcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja29mZmljZUxpc3RTZWFyY2g8V2hlcmUsIFNvcnQgZXh0ZW5kcyBzdHJpbmc+KFxuICBjb25maWc6IEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG4gIG92ZXJyaWRlczogQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydD4sXG4pOiBzdHJpbmcge1xuICBpZiAoY29uZmlnLmxpc3REZWZhdWx0cyA9PSBudWxsIHx8IGNvbmZpZy5saXN0VXJsQ29kZWMgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBtZXJnZWQ6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+ID0ge1xuICAgIC4uLmNvbmZpZy5saXN0RGVmYXVsdHMsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9IGFzIEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuXG4gIGNvbnN0IHBhcmFtcyA9IGNvbmZpZy5saXN0VXJsQ29kZWMuc2VyaWFsaXplKG1lcmdlZCk7XG4gIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBMaW5rLWZyaWVuZGx5IGB7IHBhdGhuYW1lLCBzZWFyY2ggfWAgcGFpciBmb3IgbGlzdCBVUkxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRCYWNrb2ZmaWNlTGlzdExpbms8V2hlcmUsIFNvcnQgZXh0ZW5kcyBzdHJpbmc+KFxuICBjb25maWc6IEJhY2tvZmZpY2VSZXNvbHZlZExpc3RGYWNldENvbmZpZ0Jhc2UsXG4gIG92ZXJyaWRlczogQmFja29mZmljZUxpc3RTdGF0ZU92ZXJyaWRlczxXaGVyZSwgU29ydD4sXG4pOiB7IHBhdGhuYW1lOiBzdHJpbmc7IHNlYXJjaDogc3RyaW5nIH0ge1xuICBjb25zdCBzZWFyY2ggPSBidWlsZEJhY2tvZmZpY2VMaXN0U2VhcmNoKGNvbmZpZywgb3ZlcnJpZGVzKTtcbiAgcmV0dXJuIHsgcGF0aG5hbWU6IGNvbmZpZy5yb3V0ZXMubGlzdCwgc2VhcmNoIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGEgc3RhYmxlIGxpc3QgVVJMIHVzaW5nIHRoZSBlbnRpdHkgYGNvbmZpZ2AgdXJsIHNlcmlhbGl6ZXIuXG4gKlxuICogVGhpcyBpcyB1c2VkIGJ5IGRldGFpbCB0YWJzIHRvIGxpbmsgdG8gcHJlLWZpbHRlcmVkIGxpc3Qgdmlld3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEJhY2tvZmZpY2VMaXN0SHJlZjxXaGVyZSwgU29ydCBleHRlbmRzIHN0cmluZz4oXG4gIGNvbmZpZzogQmFja29mZmljZVJlc29sdmVkTGlzdEZhY2V0Q29uZmlnQmFzZSxcbiAgb3ZlcnJpZGVzOiBCYWNrb2ZmaWNlTGlzdFN0YXRlT3ZlcnJpZGVzPFdoZXJlLCBTb3J0Pixcbik6IHN0cmluZyB7XG4gIGNvbnN0IHFzID0gYnVpbGRCYWNrb2ZmaWNlTGlzdFNlYXJjaChjb25maWcsIG92ZXJyaWRlcyk7XG5cbiAgaWYgKHFzID09PSAnJykge1xuICAgIHJldHVybiBjb25maWcucm91dGVzLmxpc3Q7XG4gIH1cbiAgcmV0dXJuIGAke2NvbmZpZy5yb3V0ZXMubGlzdH0/JHtxc31gO1xufVxuXG5jb25zdCBhcHBlbmRGYWxsYmFja0VudHJpZXMgPSAoXG4gIGVudHJpZXM6IE1hcDxzdHJpbmcsIHVua25vd24+LFxuICB2YWx1ZTogdW5rbm93bixcbiAgcGF0aDogc3RyaW5nLFxuKTogdm9pZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IHBhdGggPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW50cmllcy5zZXQocGF0aCwgdmFsdWUpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3QgW2tleSwgbmVzdGVkXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgIGxldCBuZXN0ZWRQYXRoID0ga2V5O1xuICAgICAgaWYgKHBhdGggIT09ICcnKSB7XG4gICAgICAgIG5lc3RlZFBhdGggPSBgJHtwYXRofS4ke2tleX1gO1xuICAgICAgfVxuICAgICAgYXBwZW5kRmFsbGJhY2tFbnRyaWVzKGVudHJpZXMsIG5lc3RlZCwgbmVzdGVkUGF0aCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkgPT09ICcnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVudHJpZXMuc2V0KHBhdGgsIHZhbHVlKTtcbn07XG5cbmNvbnN0IGJ1aWxkRmFsbGJhY2tGaWx0ZXJRdWVyeSA9IChcbiAgZW50cmllczogUmVhZG9ubHlNYXA8c3RyaW5nLCB1bmtub3duPixcbik6IHN0cmluZyA9PiB7XG4gIGlmIChlbnRyaWVzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBzY2hlbWEgPSBkZWZpbmVTY2hlbWEoXG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgQXJyYXkuZnJvbShlbnRyaWVzLmVudHJpZXMoKSwgKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICByZXR1cm4gW2tleSwgYm9vbGVhbkZpZWxkKFsnZXEnXSldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCBzdHJpbmdGaWVsZChbJ2VxJ10pXTtcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG5cbiAgY29uc3QgZmlsdGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBBcnJheS5mcm9tKGVudHJpZXMuZW50cmllcygpLCAoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2tleSwgeyBlcTogdmFsdWUgfV07XG4gICAgfSksXG4gICk7XG5cbiAgcmV0dXJuIHN0cmluZ2lmeUZpbHRlcnMoZmlsdGVycyBhcyBuZXZlciwgc2NoZW1hKTtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgYmVzdC1lZmZvcnQgbGlzdCBVUkwgd2hlbiB0aGUgcmVzb2x2ZWQgbGlzdCBmYWNldCBoYXMgbm90IGJlZW5cbiAqIGxvYWRlZCB5ZXQuIEl0IHByZXNlcnZlcyBjb21tb24gZXF1YWxpdHkgZmlsdGVycyBpbiB0aGUgaHJlZiBzbyBicm93c2VyXG4gKiBuYXZpZ2F0aW9uIGJlaGF2aW9ycyBrZWVwIHRoZSBmaWx0ZXJlZCByb3V0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkQmFja29mZmljZUZhbGxiYWNrTGlzdEhyZWYoXG4gIHBhdGhuYW1lOiBzdHJpbmcsXG4gIHdoZXJlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGZpbHRlcnM/OiByZWFkb25seSBCYWNrb2ZmaWNlRmFsbGJhY2tMaXN0RmlsdGVyW10sXG4pOiBzdHJpbmcge1xuICBpZiAod2hlcmUgPT0gbnVsbCAmJiAoZmlsdGVycyA9PSBudWxsIHx8IGZpbHRlcnMubGVuZ3RoID09PSAwKSkge1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgaWYgKGZpbHRlcnMgIT0gbnVsbCAmJiBmaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICBhcHBlbmRGYWxsYmFja0VudHJpZXMoZW50cmllcywgZmlsdGVyLnZhbHVlLCBmaWx0ZXIuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh3aGVyZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMod2hlcmUpKSB7XG4gICAgICBhcHBlbmRGYWxsYmFja0VudHJpZXMoZW50cmllcywgdmFsdWUsIGtleSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoID0gYnVpbGRGYWxsYmFja0ZpbHRlclF1ZXJ5KGVudHJpZXMpO1xuICBpZiAoc2VhcmNoID09PSAnJykge1xuICAgIHJldHVybiBwYXRobmFtZTtcbiAgfVxuICByZXR1cm4gYCR7cGF0aG5hbWV9PyR7c2VhcmNofWA7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stableKey.d.ts","sourceRoot":"","sources":["../../../src/state/stableKey.ts"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAsBF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,YAAY,GAAG,MAAM,CAGtE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
function normalizeWhere(where) {
|
|
2
|
+
if (typeof where !== 'object' || where == null) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
const record = where;
|
|
6
|
+
const keys = Object.keys(record).sort();
|
|
7
|
+
const normalized = {};
|
|
8
|
+
for (const key of keys) {
|
|
9
|
+
normalized[key] = record[key];
|
|
10
|
+
}
|
|
11
|
+
return normalized;
|
|
12
|
+
}
|
|
13
|
+
export function stableListVariablesKey(variables) {
|
|
14
|
+
const where = normalizeWhere(variables.where);
|
|
15
|
+
return JSON.stringify({ ...variables, where });
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhYmxlS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3N0YXRlL3N0YWJsZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxTQUFTLGNBQWMsQ0FBQyxLQUFjO0lBQ3BDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFnQyxDQUFDO0lBQ2hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEMsTUFBTSxVQUFVLEdBQTRCLEVBQUUsQ0FBQztJQUMvQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFLRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsU0FBdUI7SUFDNUQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIFZhcmlhYmxlc0tleSA9IHtcbiAgd2hlcmU6IHVua25vd247XG4gIHNvcnQ6IHVua25vd247XG4gIGNvdW50OiBudW1iZXI7XG59O1xuXG4vKipcbiAqXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVdoZXJlKHdoZXJlOiB1bmtub3duKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKHR5cGVvZiB3aGVyZSAhPT0gJ29iamVjdCcgfHwgd2hlcmUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcmVjb3JkID0gd2hlcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZWNvcmQpLnNvcnQoKTtcbiAgY29uc3Qgbm9ybWFsaXplZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIG5vcm1hbGl6ZWRba2V5XSA9IHJlY29yZFtrZXldO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFibGVMaXN0VmFyaWFibGVzS2V5KHZhcmlhYmxlczogVmFyaWFibGVzS2V5KTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBub3JtYWxpemVXaGVyZSh2YXJpYWJsZXMud2hlcmUpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyAuLi52YXJpYWJsZXMsIHdoZXJlIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BackofficeListState } from '../types.js';
|
|
2
|
+
import type { BackofficeFilterSchema } from '../filters/schema.js';
|
|
3
|
+
export declare const BACKOFFICE_URL_KEYS: {
|
|
4
|
+
readonly sort: "sort";
|
|
5
|
+
};
|
|
6
|
+
type UrlCodecOptions<Where, Sort extends string> = {
|
|
7
|
+
defaults: BackofficeListState<Where, Sort>;
|
|
8
|
+
filterSchema: BackofficeFilterSchema<Where>;
|
|
9
|
+
sortIds: readonly Sort[];
|
|
10
|
+
};
|
|
11
|
+
export declare function createBackofficeListUrlCodec<Where extends Record<string, unknown>, Sort extends string>(options: UrlCodecOptions<Where, Sort>): {
|
|
12
|
+
parse: (search: URLSearchParams) => BackofficeListState<Where, Sort>;
|
|
13
|
+
serialize: (state: BackofficeListState<Where, Sort>) => URLSearchParams;
|
|
14
|
+
};
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=urlState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlState.d.ts","sourceRoot":"","sources":["../../../src/state/urlState.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEnE,eAAO,MAAM,mBAAmB;;CAEtB,CAAC;AAeX,KAAK,eAAe,CAAC,KAAK,EAAE,IAAI,SAAS,MAAM,IAAI;IACjD,QAAQ,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;CAC1B,CAAC;AAGF,wBAAgB,4BAA4B,CAC1C,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,IAAI,SAAS,MAAM,EAEnB,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,GACpC;IACD,KAAK,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACrE,SAAS,EAAE,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,eAAe,CAAC;CACzE,CAyCA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { parse as parseFilters, stringify as stringifyFilters, } from '@plumile/filter-query';
|
|
2
|
+
export const BACKOFFICE_URL_KEYS = {
|
|
3
|
+
sort: 'sort',
|
|
4
|
+
};
|
|
5
|
+
function serializeFilterParams(params) {
|
|
6
|
+
const entries = Array.from(params.entries());
|
|
7
|
+
if (entries.length === 0) {
|
|
8
|
+
return '';
|
|
9
|
+
}
|
|
10
|
+
return entries
|
|
11
|
+
.map(([key, value]) => {
|
|
12
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
13
|
+
})
|
|
14
|
+
.join('&');
|
|
15
|
+
}
|
|
16
|
+
export function createBackofficeListUrlCodec(options) {
|
|
17
|
+
const { defaults, filterSchema, sortIds } = options;
|
|
18
|
+
const { sort: defaultSort } = defaults;
|
|
19
|
+
const sortSet = new Set(sortIds);
|
|
20
|
+
function parse(search) {
|
|
21
|
+
const filterParams = new URLSearchParams(search);
|
|
22
|
+
filterParams.delete(BACKOFFICE_URL_KEYS.sort);
|
|
23
|
+
const filterQuery = serializeFilterParams(filterParams);
|
|
24
|
+
const { filters } = parseFilters(filterQuery, filterSchema.schema);
|
|
25
|
+
const where = filterSchema.toWhere(filters);
|
|
26
|
+
const sortRaw = search.get(BACKOFFICE_URL_KEYS.sort);
|
|
27
|
+
let sort = defaultSort;
|
|
28
|
+
if (sortRaw != null && sortSet.has(sortRaw)) {
|
|
29
|
+
sort = sortRaw;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
where,
|
|
33
|
+
sort,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function serialize(state) {
|
|
37
|
+
const { sort, where } = state;
|
|
38
|
+
const filters = filterSchema.fromWhere(where);
|
|
39
|
+
const filterQuery = stringifyFilters(filters, filterSchema.schema);
|
|
40
|
+
const search = new URLSearchParams(filterQuery);
|
|
41
|
+
if (sort != null) {
|
|
42
|
+
search.set(BACKOFFICE_URL_KEYS.sort, sort);
|
|
43
|
+
}
|
|
44
|
+
return search;
|
|
45
|
+
}
|
|
46
|
+
return { parse, serialize };
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsU3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RhdGUvdXJsU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssSUFBSSxZQUFZLEVBQ3JCLFNBQVMsSUFBSSxnQkFBZ0IsR0FDOUIsTUFBTSx1QkFBdUIsQ0FBQztBQUsvQixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxJQUFJLEVBQUUsTUFBTTtDQUNKLENBQUM7QUFHWCxTQUFTLHFCQUFxQixDQUFDLE1BQXVCO0lBQ3BELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUNELE9BQU8sT0FBTztTQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDcEIsT0FBTyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQVNELE1BQU0sVUFBVSw0QkFBNEIsQ0FJMUMsT0FBcUM7SUFLckMsTUFBTSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3BELE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsUUFBUSxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBR3pDLFNBQVMsS0FBSyxDQUFDLE1BQXVCO1FBQ3BDLE1BQU0sWUFBWSxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELFlBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsTUFBTSxXQUFXLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksR0FBRyxXQUFXLENBQUM7UUFDdkIsSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QyxJQUFJLEdBQUcsT0FBZSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSztZQUNMLElBQUk7U0FDTCxDQUFDO0lBQ0osQ0FBQztJQUdELFNBQVMsU0FBUyxDQUFDLEtBQXVDO1FBQ3hELE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoRCxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHBhcnNlIGFzIHBhcnNlRmlsdGVycyxcbiAgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeUZpbHRlcnMsXG59IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5cbmltcG9ydCB0eXBlIHsgQmFja29mZmljZUxpc3RTdGF0ZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQmFja29mZmljZUZpbHRlclNjaGVtYSB9IGZyb20gJy4uL2ZpbHRlcnMvc2NoZW1hLmpzJztcblxuZXhwb3J0IGNvbnN0IEJBQ0tPRkZJQ0VfVVJMX0tFWVMgPSB7XG4gIHNvcnQ6ICdzb3J0Jyxcbn0gYXMgY29uc3Q7XG5cbi8qKiBTZXJpYWxpemVzIGZpbHRlciBwYXJhbXMgd2l0aCBSRkMzOTg2IGVuY29kaW5nLiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplRmlsdGVyUGFyYW1zKHBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgZW50cmllcyA9IEFycmF5LmZyb20ocGFyYW1zLmVudHJpZXMoKSk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZW50cmllc1xuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChrZXkpfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG5cbnR5cGUgVXJsQ29kZWNPcHRpb25zPFdoZXJlLCBTb3J0IGV4dGVuZHMgc3RyaW5nPiA9IHtcbiAgZGVmYXVsdHM6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuICBmaWx0ZXJTY2hlbWE6IEJhY2tvZmZpY2VGaWx0ZXJTY2hlbWE8V2hlcmU+O1xuICBzb3J0SWRzOiByZWFkb25seSBTb3J0W107XG59O1xuXG4vKiogQ3JlYXRlcyBhIFVSTCBjb2RlYyBmb3IgZ2VuZXJpYyBiYWNrb2ZmaWNlIGxpc3QgcGFnZXMuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQmFja29mZmljZUxpc3RVcmxDb2RlYzxcbiAgV2hlcmUgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgU29ydCBleHRlbmRzIHN0cmluZyxcbj4oXG4gIG9wdGlvbnM6IFVybENvZGVjT3B0aW9uczxXaGVyZSwgU29ydD4sXG4pOiB7XG4gIHBhcnNlOiAoc2VhcmNoOiBVUkxTZWFyY2hQYXJhbXMpID0+IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+O1xuICBzZXJpYWxpemU6IChzdGF0ZTogQmFja29mZmljZUxpc3RTdGF0ZTxXaGVyZSwgU29ydD4pID0+IFVSTFNlYXJjaFBhcmFtcztcbn0ge1xuICBjb25zdCB7IGRlZmF1bHRzLCBmaWx0ZXJTY2hlbWEsIHNvcnRJZHMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHsgc29ydDogZGVmYXVsdFNvcnQgfSA9IGRlZmF1bHRzO1xuICBjb25zdCBzb3J0U2V0ID0gbmV3IFNldDxzdHJpbmc+KHNvcnRJZHMpO1xuXG4gIC8qKiBQYXJzZXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0IGludG8gYSBmdWxsIGxpc3Qgc3RhdGUuICovXG4gIGZ1bmN0aW9uIHBhcnNlKHNlYXJjaDogVVJMU2VhcmNoUGFyYW1zKTogQmFja29mZmljZUxpc3RTdGF0ZTxXaGVyZSwgU29ydD4ge1xuICAgIGNvbnN0IGZpbHRlclBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoKTtcbiAgICBmaWx0ZXJQYXJhbXMuZGVsZXRlKEJBQ0tPRkZJQ0VfVVJMX0tFWVMuc29ydCk7XG5cbiAgICBjb25zdCBmaWx0ZXJRdWVyeSA9IHNlcmlhbGl6ZUZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXMpO1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gcGFyc2VGaWx0ZXJzKGZpbHRlclF1ZXJ5LCBmaWx0ZXJTY2hlbWEuc2NoZW1hKTtcbiAgICBjb25zdCB3aGVyZSA9IGZpbHRlclNjaGVtYS50b1doZXJlKGZpbHRlcnMpO1xuXG4gICAgY29uc3Qgc29ydFJhdyA9IHNlYXJjaC5nZXQoQkFDS09GRklDRV9VUkxfS0VZUy5zb3J0KTtcbiAgICBsZXQgc29ydCA9IGRlZmF1bHRTb3J0O1xuICAgIGlmIChzb3J0UmF3ICE9IG51bGwgJiYgc29ydFNldC5oYXMoc29ydFJhdykpIHtcbiAgICAgIHNvcnQgPSBzb3J0UmF3IGFzIFNvcnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlLFxuICAgICAgc29ydCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFNlcmlhbGl6ZXMgYSBsaXN0IHN0YXRlIGludG8gVVJMU2VhcmNoUGFyYW1zLiAqL1xuICBmdW5jdGlvbiBzZXJpYWxpemUoc3RhdGU6IEJhY2tvZmZpY2VMaXN0U3RhdGU8V2hlcmUsIFNvcnQ+KTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgICBjb25zdCB7IHNvcnQsIHdoZXJlIH0gPSBzdGF0ZTtcbiAgICBjb25zdCBmaWx0ZXJzID0gZmlsdGVyU2NoZW1hLmZyb21XaGVyZSh3aGVyZSk7XG4gICAgY29uc3QgZmlsdGVyUXVlcnkgPSBzdHJpbmdpZnlGaWx0ZXJzKGZpbHRlcnMsIGZpbHRlclNjaGVtYS5zY2hlbWEpO1xuICAgIGNvbnN0IHNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZmlsdGVyUXVlcnkpO1xuXG4gICAgaWYgKHNvcnQgIT0gbnVsbCkge1xuICAgICAgc2VhcmNoLnNldChCQUNLT0ZGSUNFX1VSTF9LRVlTLnNvcnQsIHNvcnQpO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2g7XG4gIH1cblxuICByZXR1cm4geyBwYXJzZSwgc2VyaWFsaXplIH07XG59XG4iXX0=
|