@mgarlik/datastore 0.1.22 → 0.1.23
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/index.cjs +63 -110
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +76 -59
- package/dist/index.d.ts +76 -59
- package/dist/index.js +63 -110
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,65 @@
|
|
|
1
1
|
import React$1, { ReactNode } from 'react';
|
|
2
|
+
import { filterType } from '@mgarlik/json-filter';
|
|
2
3
|
import { D as DataStoreStorage } from './storage-D_xv8gFb.cjs';
|
|
3
4
|
|
|
5
|
+
type formTypes = "textInput" | "select" | "switch" | "dateTime" | "radio";
|
|
6
|
+
|
|
7
|
+
type textInputProps = {
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
multiline?: boolean;
|
|
10
|
+
numberOfLines?: number;
|
|
11
|
+
secure: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type switchProps = {
|
|
15
|
+
thumbColor?: string;
|
|
16
|
+
trackColor?: { true: string; false: string };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type dateTimeProps = {
|
|
20
|
+
mode: "date" | "time" | "datetime";
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
type DataSourceOptions = {
|
|
24
|
+
dataProvider: string;
|
|
25
|
+
filter?: filterType;
|
|
26
|
+
map: Record<string, string>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type selectProps = {
|
|
30
|
+
multiple?: boolean;
|
|
31
|
+
options?:
|
|
32
|
+
| Array<{ value: string | number; label: string }>
|
|
33
|
+
| { dataSource: DataSourceOptions };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// type selectProps = {
|
|
37
|
+
// multiple?: boolean;
|
|
38
|
+
// options?:
|
|
39
|
+
// Array<{ value: string | number; label: string }>
|
|
40
|
+
// | {
|
|
41
|
+
// dataSource: ProviderDataSourceType & {
|
|
42
|
+
// map: { value: string; label: string };
|
|
43
|
+
// };
|
|
44
|
+
// };
|
|
45
|
+
// };
|
|
46
|
+
|
|
47
|
+
type FormTypeMap = {
|
|
48
|
+
textInput: textInputProps;
|
|
49
|
+
select: selectProps;
|
|
50
|
+
switch: switchProps;
|
|
51
|
+
dateTime: dateTimeProps;
|
|
52
|
+
radio: never; // zatím žádné props
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
type FormTypeObject = {
|
|
56
|
+
[K in keyof FormTypeMap]: FormTypeMap[K] extends never
|
|
57
|
+
? { type: K; props?: never }
|
|
58
|
+
: { type: K; props?: FormTypeMap[K] };
|
|
59
|
+
}[keyof FormTypeMap];
|
|
60
|
+
|
|
61
|
+
type formType = formTypes | FormTypeObject;
|
|
62
|
+
|
|
4
63
|
type ProviderDataSourceType = {
|
|
5
64
|
/**
|
|
6
65
|
* Adresa pro CRUD data
|
|
@@ -16,6 +75,7 @@ type ProviderDataSourceType = {
|
|
|
16
75
|
delete?: string;
|
|
17
76
|
// updates?: { [key: string]: string };
|
|
18
77
|
};
|
|
78
|
+
dataProvider?: string;
|
|
19
79
|
/**
|
|
20
80
|
* Prime zadani pole dat
|
|
21
81
|
* */
|
|
@@ -29,7 +89,7 @@ type ProviderDataSourceType = {
|
|
|
29
89
|
* Nacist vsechny pole bez ohledu na schema
|
|
30
90
|
*/
|
|
31
91
|
readAllFields?: boolean;
|
|
32
|
-
filter?:
|
|
92
|
+
filter?: filterType;
|
|
33
93
|
/**
|
|
34
94
|
* Nazvy naslouchajicich socketu
|
|
35
95
|
*/
|
|
@@ -41,9 +101,6 @@ type DataProviderActionType = "create" | "update" | "delete";
|
|
|
41
101
|
//TODO: Rule type
|
|
42
102
|
type RuleType = {};
|
|
43
103
|
|
|
44
|
-
//TODO: Filter type
|
|
45
|
-
type FilterType$1 = {};
|
|
46
|
-
|
|
47
104
|
type ProviderEditorType = {
|
|
48
105
|
title?: string;
|
|
49
106
|
/**
|
|
@@ -69,18 +126,18 @@ type ProviderLayoutType = {
|
|
|
69
126
|
description?: string;
|
|
70
127
|
footer?: string;
|
|
71
128
|
tooltip?: string | React.ReactNode;
|
|
72
|
-
visible?: boolean |
|
|
129
|
+
visible?: boolean | filterType;
|
|
73
130
|
items: Array<{
|
|
74
131
|
field: string;
|
|
75
|
-
form?:
|
|
132
|
+
form?: formType;
|
|
76
133
|
label?: string; // jen override
|
|
77
|
-
visible?: boolean |
|
|
134
|
+
visible?: boolean | filterType;
|
|
78
135
|
tooltip?: string | React.ReactNode;
|
|
79
136
|
}>;
|
|
80
137
|
}[];
|
|
81
138
|
};
|
|
82
139
|
|
|
83
|
-
type
|
|
140
|
+
type BasicProviderSchemaItemType = {
|
|
84
141
|
/**
|
|
85
142
|
* Zdrojove pole pro hodnotu (např. "name" nebo "price"). Pokud není uvedeno, očekává se, že hodnota bude přímo v kořenovém objektu.
|
|
86
143
|
*/
|
|
@@ -89,44 +146,28 @@ type ProviderSchemaItemType = {
|
|
|
89
146
|
* Výchozí hodnota pole, která se použije, pokud není poskytnuta žádná jiná hodnota. Může být typu string, number, boolean nebo jiného vhodného typu v závislosti na kontextu použití.
|
|
90
147
|
*/
|
|
91
148
|
default?: any;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
type ProviderSchemaItemType = BasicProviderSchemaItemType & {
|
|
152
|
+
/** Typ hodnoty */
|
|
153
|
+
type?: "string" | "number" | "date" | "boolean";
|
|
92
154
|
/**
|
|
93
155
|
* Povolene hodnoty
|
|
94
156
|
*
|
|
95
157
|
*/
|
|
96
158
|
enum?: any[];
|
|
97
159
|
/**
|
|
98
|
-
* Je pole vyžadováno pri
|
|
160
|
+
* Je pole vyžadováno pro model ( pri create nebo pri update )?
|
|
99
161
|
*/
|
|
100
162
|
required?: boolean;
|
|
101
|
-
/**
|
|
102
|
-
* Je pole pri editaci viditelné?
|
|
103
|
-
*/
|
|
104
|
-
visibility?: "hidden" | "visible";
|
|
105
163
|
/**
|
|
106
164
|
* Polozku lze editovat
|
|
107
165
|
*/
|
|
108
166
|
editable?: boolean | RuleType;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
multiple?: boolean;
|
|
112
|
-
mode?: "screen";
|
|
113
|
-
title?: string;
|
|
114
|
-
placeholder?: string;
|
|
115
|
-
// Pro select a radio
|
|
116
|
-
options?: { value: any; label?: string, icon?: string }[] | {
|
|
117
|
-
dataProvider: ProviderTypes;
|
|
118
|
-
optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
|
|
119
|
-
filter?: string | RuleType;
|
|
120
|
-
};
|
|
167
|
+
form?: formType;
|
|
168
|
+
label?: string;
|
|
121
169
|
description?: string;
|
|
122
|
-
/** TODO: Divna definice labelu */
|
|
123
|
-
optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
|
|
124
170
|
validations?: ValidationType;
|
|
125
|
-
/**
|
|
126
|
-
* Text input nezobrazuje znaky
|
|
127
|
-
*/
|
|
128
|
-
secure?: boolean;
|
|
129
|
-
hidden?: boolean;
|
|
130
171
|
};
|
|
131
172
|
|
|
132
173
|
type DataProviderType = {
|
|
@@ -392,35 +433,11 @@ interface UseDataProviderResult {
|
|
|
392
433
|
/** Vytvoří novou položku providera. */
|
|
393
434
|
createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
|
|
394
435
|
}
|
|
395
|
-
|
|
396
|
-
* Zaregistruje/zpřístupní providera a vrátí normalizované dokumenty spolu s CRUD helpery.
|
|
397
|
-
*
|
|
398
|
-
* @param id Provider id nebo inline definice providera.
|
|
399
|
-
* @param params Parametry šablony používané při renderu URI/definice.
|
|
400
|
-
* @param dataFilter Volitelný client-side filtr dokumentů providera.
|
|
401
|
-
* @param settings Volitelný závislý dokument použitý pro přepočet dat.
|
|
402
|
-
*/
|
|
403
|
-
declare const useDataProvider: (
|
|
404
|
-
/**
|
|
405
|
-
* Provider id nebo objekt data {key: value}
|
|
406
|
-
*/
|
|
407
|
-
id: string | {
|
|
436
|
+
declare const useDataProvider: (id: string | {
|
|
408
437
|
[key: string]: any;
|
|
409
|
-
} | false,
|
|
410
|
-
/**
|
|
411
|
-
* Parametry pro prerenderovani providera (profiles/<%= profileId %>)
|
|
412
|
-
*/
|
|
413
|
-
params?: {
|
|
438
|
+
} | false, params?: {
|
|
414
439
|
[key: string]: string;
|
|
415
|
-
} | null,
|
|
416
|
-
/**
|
|
417
|
-
* Filtrovani dat
|
|
418
|
-
*/
|
|
419
|
-
dataFilter?: JSONType | null,
|
|
420
|
-
/**
|
|
421
|
-
* Nejake nastaveni
|
|
422
|
-
*/
|
|
423
|
-
settings?: {
|
|
440
|
+
} | null, dataFilter?: filterType | null, settings?: {
|
|
424
441
|
documentId?: string;
|
|
425
442
|
document?: JSONType;
|
|
426
443
|
}) => UseDataProviderResult;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,65 @@
|
|
|
1
1
|
import React$1, { ReactNode } from 'react';
|
|
2
|
+
import { filterType } from '@mgarlik/json-filter';
|
|
2
3
|
import { D as DataStoreStorage } from './storage-D_xv8gFb.js';
|
|
3
4
|
|
|
5
|
+
type formTypes = "textInput" | "select" | "switch" | "dateTime" | "radio";
|
|
6
|
+
|
|
7
|
+
type textInputProps = {
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
multiline?: boolean;
|
|
10
|
+
numberOfLines?: number;
|
|
11
|
+
secure: boolean;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
type switchProps = {
|
|
15
|
+
thumbColor?: string;
|
|
16
|
+
trackColor?: { true: string; false: string };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
type dateTimeProps = {
|
|
20
|
+
mode: "date" | "time" | "datetime";
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
type DataSourceOptions = {
|
|
24
|
+
dataProvider: string;
|
|
25
|
+
filter?: filterType;
|
|
26
|
+
map: Record<string, string>;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
type selectProps = {
|
|
30
|
+
multiple?: boolean;
|
|
31
|
+
options?:
|
|
32
|
+
| Array<{ value: string | number; label: string }>
|
|
33
|
+
| { dataSource: DataSourceOptions };
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// type selectProps = {
|
|
37
|
+
// multiple?: boolean;
|
|
38
|
+
// options?:
|
|
39
|
+
// Array<{ value: string | number; label: string }>
|
|
40
|
+
// | {
|
|
41
|
+
// dataSource: ProviderDataSourceType & {
|
|
42
|
+
// map: { value: string; label: string };
|
|
43
|
+
// };
|
|
44
|
+
// };
|
|
45
|
+
// };
|
|
46
|
+
|
|
47
|
+
type FormTypeMap = {
|
|
48
|
+
textInput: textInputProps;
|
|
49
|
+
select: selectProps;
|
|
50
|
+
switch: switchProps;
|
|
51
|
+
dateTime: dateTimeProps;
|
|
52
|
+
radio: never; // zatím žádné props
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
type FormTypeObject = {
|
|
56
|
+
[K in keyof FormTypeMap]: FormTypeMap[K] extends never
|
|
57
|
+
? { type: K; props?: never }
|
|
58
|
+
: { type: K; props?: FormTypeMap[K] };
|
|
59
|
+
}[keyof FormTypeMap];
|
|
60
|
+
|
|
61
|
+
type formType = formTypes | FormTypeObject;
|
|
62
|
+
|
|
4
63
|
type ProviderDataSourceType = {
|
|
5
64
|
/**
|
|
6
65
|
* Adresa pro CRUD data
|
|
@@ -16,6 +75,7 @@ type ProviderDataSourceType = {
|
|
|
16
75
|
delete?: string;
|
|
17
76
|
// updates?: { [key: string]: string };
|
|
18
77
|
};
|
|
78
|
+
dataProvider?: string;
|
|
19
79
|
/**
|
|
20
80
|
* Prime zadani pole dat
|
|
21
81
|
* */
|
|
@@ -29,7 +89,7 @@ type ProviderDataSourceType = {
|
|
|
29
89
|
* Nacist vsechny pole bez ohledu na schema
|
|
30
90
|
*/
|
|
31
91
|
readAllFields?: boolean;
|
|
32
|
-
filter?:
|
|
92
|
+
filter?: filterType;
|
|
33
93
|
/**
|
|
34
94
|
* Nazvy naslouchajicich socketu
|
|
35
95
|
*/
|
|
@@ -41,9 +101,6 @@ type DataProviderActionType = "create" | "update" | "delete";
|
|
|
41
101
|
//TODO: Rule type
|
|
42
102
|
type RuleType = {};
|
|
43
103
|
|
|
44
|
-
//TODO: Filter type
|
|
45
|
-
type FilterType$1 = {};
|
|
46
|
-
|
|
47
104
|
type ProviderEditorType = {
|
|
48
105
|
title?: string;
|
|
49
106
|
/**
|
|
@@ -69,18 +126,18 @@ type ProviderLayoutType = {
|
|
|
69
126
|
description?: string;
|
|
70
127
|
footer?: string;
|
|
71
128
|
tooltip?: string | React.ReactNode;
|
|
72
|
-
visible?: boolean |
|
|
129
|
+
visible?: boolean | filterType;
|
|
73
130
|
items: Array<{
|
|
74
131
|
field: string;
|
|
75
|
-
form?:
|
|
132
|
+
form?: formType;
|
|
76
133
|
label?: string; // jen override
|
|
77
|
-
visible?: boolean |
|
|
134
|
+
visible?: boolean | filterType;
|
|
78
135
|
tooltip?: string | React.ReactNode;
|
|
79
136
|
}>;
|
|
80
137
|
}[];
|
|
81
138
|
};
|
|
82
139
|
|
|
83
|
-
type
|
|
140
|
+
type BasicProviderSchemaItemType = {
|
|
84
141
|
/**
|
|
85
142
|
* Zdrojove pole pro hodnotu (např. "name" nebo "price"). Pokud není uvedeno, očekává se, že hodnota bude přímo v kořenovém objektu.
|
|
86
143
|
*/
|
|
@@ -89,44 +146,28 @@ type ProviderSchemaItemType = {
|
|
|
89
146
|
* Výchozí hodnota pole, která se použije, pokud není poskytnuta žádná jiná hodnota. Může být typu string, number, boolean nebo jiného vhodného typu v závislosti na kontextu použití.
|
|
90
147
|
*/
|
|
91
148
|
default?: any;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
type ProviderSchemaItemType = BasicProviderSchemaItemType & {
|
|
152
|
+
/** Typ hodnoty */
|
|
153
|
+
type?: "string" | "number" | "date" | "boolean";
|
|
92
154
|
/**
|
|
93
155
|
* Povolene hodnoty
|
|
94
156
|
*
|
|
95
157
|
*/
|
|
96
158
|
enum?: any[];
|
|
97
159
|
/**
|
|
98
|
-
* Je pole vyžadováno pri
|
|
160
|
+
* Je pole vyžadováno pro model ( pri create nebo pri update )?
|
|
99
161
|
*/
|
|
100
162
|
required?: boolean;
|
|
101
|
-
/**
|
|
102
|
-
* Je pole pri editaci viditelné?
|
|
103
|
-
*/
|
|
104
|
-
visibility?: "hidden" | "visible";
|
|
105
163
|
/**
|
|
106
164
|
* Polozku lze editovat
|
|
107
165
|
*/
|
|
108
166
|
editable?: boolean | RuleType;
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
multiple?: boolean;
|
|
112
|
-
mode?: "screen";
|
|
113
|
-
title?: string;
|
|
114
|
-
placeholder?: string;
|
|
115
|
-
// Pro select a radio
|
|
116
|
-
options?: { value: any; label?: string, icon?: string }[] | {
|
|
117
|
-
dataProvider: ProviderTypes;
|
|
118
|
-
optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
|
|
119
|
-
filter?: string | RuleType;
|
|
120
|
-
};
|
|
167
|
+
form?: formType;
|
|
168
|
+
label?: string;
|
|
121
169
|
description?: string;
|
|
122
|
-
/** TODO: Divna definice labelu */
|
|
123
|
-
optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
|
|
124
170
|
validations?: ValidationType;
|
|
125
|
-
/**
|
|
126
|
-
* Text input nezobrazuje znaky
|
|
127
|
-
*/
|
|
128
|
-
secure?: boolean;
|
|
129
|
-
hidden?: boolean;
|
|
130
171
|
};
|
|
131
172
|
|
|
132
173
|
type DataProviderType = {
|
|
@@ -392,35 +433,11 @@ interface UseDataProviderResult {
|
|
|
392
433
|
/** Vytvoří novou položku providera. */
|
|
393
434
|
createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
|
|
394
435
|
}
|
|
395
|
-
|
|
396
|
-
* Zaregistruje/zpřístupní providera a vrátí normalizované dokumenty spolu s CRUD helpery.
|
|
397
|
-
*
|
|
398
|
-
* @param id Provider id nebo inline definice providera.
|
|
399
|
-
* @param params Parametry šablony používané při renderu URI/definice.
|
|
400
|
-
* @param dataFilter Volitelný client-side filtr dokumentů providera.
|
|
401
|
-
* @param settings Volitelný závislý dokument použitý pro přepočet dat.
|
|
402
|
-
*/
|
|
403
|
-
declare const useDataProvider: (
|
|
404
|
-
/**
|
|
405
|
-
* Provider id nebo objekt data {key: value}
|
|
406
|
-
*/
|
|
407
|
-
id: string | {
|
|
436
|
+
declare const useDataProvider: (id: string | {
|
|
408
437
|
[key: string]: any;
|
|
409
|
-
} | false,
|
|
410
|
-
/**
|
|
411
|
-
* Parametry pro prerenderovani providera (profiles/<%= profileId %>)
|
|
412
|
-
*/
|
|
413
|
-
params?: {
|
|
438
|
+
} | false, params?: {
|
|
414
439
|
[key: string]: string;
|
|
415
|
-
} | null,
|
|
416
|
-
/**
|
|
417
|
-
* Filtrovani dat
|
|
418
|
-
*/
|
|
419
|
-
dataFilter?: JSONType | null,
|
|
420
|
-
/**
|
|
421
|
-
* Nejake nastaveni
|
|
422
|
-
*/
|
|
423
|
-
settings?: {
|
|
440
|
+
} | null, dataFilter?: filterType | null, settings?: {
|
|
424
441
|
documentId?: string;
|
|
425
442
|
document?: JSONType;
|
|
426
443
|
}) => UseDataProviderResult;
|
package/dist/index.js
CHANGED
|
@@ -1869,78 +1869,66 @@ var DataStoreProvider_default = DataStoreProvider;
|
|
|
1869
1869
|
|
|
1870
1870
|
// src/useDataProvider.tsx
|
|
1871
1871
|
import { useCallback as useCallback2, useContext as useContext2, useEffect as useEffect2, useMemo as useMemo2, useState as useState2, useSyncExternalStore } from "react";
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
configs.push({
|
|
1879
|
-
fieldKey,
|
|
1880
|
-
dataProvider: schemaItem.options.dataProvider,
|
|
1881
|
-
optionKeys: schemaItem.options.optionKeys,
|
|
1882
|
-
filter: schemaItem.options.filter
|
|
1883
|
-
});
|
|
1884
|
-
return;
|
|
1885
|
-
}
|
|
1886
|
-
if (schemaItem.dataSource?.dataProvider) {
|
|
1887
|
-
configs.push({
|
|
1888
|
-
fieldKey,
|
|
1889
|
-
dataProvider: schemaItem.dataSource.dataProvider,
|
|
1890
|
-
optionKeys: schemaItem.optionKeys,
|
|
1891
|
-
filter: schemaItem.filter
|
|
1892
|
-
});
|
|
1893
|
-
}
|
|
1894
|
-
});
|
|
1895
|
-
return configs;
|
|
1872
|
+
import { filterJsonDocuments as filterDocuments2 } from "@mgarlik/json-filter";
|
|
1873
|
+
var findAllDataProviders = (obj) => {
|
|
1874
|
+
if (!obj || typeof obj !== "object") return [];
|
|
1875
|
+
if (obj.dataSource?.dataProvider) return [obj.dataSource.dataProvider];
|
|
1876
|
+
if (Array.isArray(obj)) return obj.flatMap(findAllDataProviders);
|
|
1877
|
+
return Object.values(obj).flatMap(findAllDataProviders);
|
|
1896
1878
|
};
|
|
1897
1879
|
var resolveProviderRef = (providerId, providers, presetProviders, params) => {
|
|
1898
1880
|
if (providers[providerId]) {
|
|
1899
|
-
return {
|
|
1900
|
-
templateId: providerId,
|
|
1901
|
-
runtimeId: providerId
|
|
1902
|
-
};
|
|
1881
|
+
return { templateId: providerId, runtimeId: providerId };
|
|
1903
1882
|
}
|
|
1904
1883
|
if (presetProviders[providerId]) {
|
|
1905
1884
|
const renderedProvider = renderJSONTemplate(presetProviders[providerId], params ?? void 0);
|
|
1906
|
-
return {
|
|
1907
|
-
templateId: providerId,
|
|
1908
|
-
runtimeId: renderedProvider.id
|
|
1909
|
-
};
|
|
1885
|
+
return { templateId: providerId, runtimeId: renderedProvider.id };
|
|
1910
1886
|
}
|
|
1911
|
-
return {
|
|
1912
|
-
templateId: providerId,
|
|
1913
|
-
runtimeId: providerId
|
|
1914
|
-
};
|
|
1887
|
+
return { templateId: providerId, runtimeId: providerId };
|
|
1915
1888
|
};
|
|
1916
|
-
var createOptionFromDocument = (doc,
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1889
|
+
var createOptionFromDocument = (doc, map) => {
|
|
1890
|
+
if (!map) {
|
|
1891
|
+
return { ...doc };
|
|
1892
|
+
}
|
|
1893
|
+
return Object.entries(map).reduce(
|
|
1894
|
+
(acc, [targetKey, sourcePath]) => {
|
|
1895
|
+
if (typeof sourcePath === "string") {
|
|
1896
|
+
acc[targetKey] = getValueByDotPath(doc, sourcePath);
|
|
1897
|
+
} else if (sourcePath && typeof sourcePath === "object") {
|
|
1898
|
+
const titlePath = sourcePath.title || sourcePath.name;
|
|
1899
|
+
if (titlePath) acc[targetKey] = getValueByDotPath(doc, titlePath);
|
|
1900
|
+
if (sourcePath.icon) acc[`${targetKey}Icon`] = getValueByDotPath(doc, sourcePath.icon);
|
|
1901
|
+
}
|
|
1902
|
+
return acc;
|
|
1903
|
+
},
|
|
1904
|
+
{}
|
|
1905
|
+
);
|
|
1906
|
+
};
|
|
1907
|
+
var resolveDataSourcesDeep = (obj, providers, documents, presetProviders, params, logLabel = "options") => {
|
|
1908
|
+
if (!obj || typeof obj !== "object") return obj;
|
|
1909
|
+
if (obj.dataSource?.dataProvider) {
|
|
1910
|
+
const providerRef = resolveProviderRef(obj.dataSource.dataProvider, providers, presetProviders, params);
|
|
1911
|
+
const optionProvider = providers[providerRef.runtimeId];
|
|
1912
|
+
if (!optionProvider) {
|
|
1913
|
+
systemLog("usedp", `Nenalezen provider pro ${logLabel}`, obj.dataSource.dataProvider);
|
|
1914
|
+
return obj;
|
|
1929
1915
|
}
|
|
1930
|
-
|
|
1931
|
-
|
|
1916
|
+
let optionDocuments = (optionProvider.data || []).map((docId) => {
|
|
1917
|
+
const docData = documents[docId];
|
|
1918
|
+
if (!docData) return null;
|
|
1919
|
+
return { id: docId, ...docData };
|
|
1920
|
+
}).filter((item) => !!item);
|
|
1921
|
+
if (obj.dataSource.filter) {
|
|
1922
|
+
optionDocuments = filterDocuments2(optionDocuments, obj.dataSource.filter);
|
|
1923
|
+
}
|
|
1924
|
+
return optionDocuments.map((item) => createOptionFromDocument(item, obj.dataSource.map));
|
|
1932
1925
|
}
|
|
1933
|
-
if (
|
|
1934
|
-
return
|
|
1935
|
-
value: optionValue,
|
|
1936
|
-
label: optionLabel,
|
|
1937
|
-
icon: optionIcon
|
|
1938
|
-
};
|
|
1926
|
+
if (Array.isArray(obj)) {
|
|
1927
|
+
return obj.map((item) => resolveDataSourcesDeep(item, providers, documents, presetProviders, params, logLabel));
|
|
1939
1928
|
}
|
|
1940
|
-
return
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
};
|
|
1929
|
+
return Object.fromEntries(
|
|
1930
|
+
Object.entries(obj).map(([key, val]) => [key, resolveDataSourcesDeep(val, providers, documents, presetProviders, params, logLabel)])
|
|
1931
|
+
);
|
|
1944
1932
|
};
|
|
1945
1933
|
var useDataProvider = (id, params, dataFilter, settings) => {
|
|
1946
1934
|
const [providerId, setProviderId] = useState2(null);
|
|
@@ -1971,12 +1959,13 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
1971
1959
|
);
|
|
1972
1960
|
const dependentProviders = useMemo2(() => {
|
|
1973
1961
|
const providers = getExternalProviders();
|
|
1974
|
-
if (!providerId || !providers[providerId]
|
|
1962
|
+
if (!providerId || !providers[providerId]) return [];
|
|
1975
1963
|
const schema = providers[providerId]?.schema;
|
|
1976
|
-
const
|
|
1964
|
+
const layout = providers[providerId]?.layout;
|
|
1965
|
+
const allProviderIds = [...findAllDataProviders(schema), ...findAllDataProviders(layout)];
|
|
1977
1966
|
const uniqueProviders = {};
|
|
1978
|
-
|
|
1979
|
-
const resolved = resolveProviderRef(
|
|
1967
|
+
allProviderIds.forEach((dataProvider) => {
|
|
1968
|
+
const resolved = resolveProviderRef(dataProvider, providers, presetProviders, params);
|
|
1980
1969
|
if (resolved.runtimeId === providerId) return;
|
|
1981
1970
|
uniqueProviders[resolved.runtimeId] = resolved;
|
|
1982
1971
|
});
|
|
@@ -2091,7 +2080,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
2091
2080
|
dispatch("deleteProviderItem", { providerId, data, params: params2 }, callback);
|
|
2092
2081
|
};
|
|
2093
2082
|
const createItem = (data, callback) => {
|
|
2094
|
-
return new Promise((resolve
|
|
2083
|
+
return new Promise((resolve) => {
|
|
2095
2084
|
const wrappedCallback = (result) => {
|
|
2096
2085
|
callback?.(result);
|
|
2097
2086
|
resolve(result);
|
|
@@ -2104,10 +2093,7 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
2104
2093
|
const providers = getExternalProviders();
|
|
2105
2094
|
const documents = getExternalDocuments();
|
|
2106
2095
|
if (!providerId || !providers[providerId]) {
|
|
2107
|
-
return {
|
|
2108
|
-
data: [],
|
|
2109
|
-
schema: void 0
|
|
2110
|
-
};
|
|
2096
|
+
return { data: [], schema: void 0, layout: void 0 };
|
|
2111
2097
|
}
|
|
2112
2098
|
let docs = [];
|
|
2113
2099
|
providers[providerId]?.data.forEach((docId) => {
|
|
@@ -2119,54 +2105,23 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
2119
2105
|
} else if (settings?.document) {
|
|
2120
2106
|
dData = recalculateObjectWithDocument(documents[docId], settings.document);
|
|
2121
2107
|
}
|
|
2122
|
-
docs.push({
|
|
2123
|
-
id: docId,
|
|
2124
|
-
...dData
|
|
2125
|
-
});
|
|
2108
|
+
docs.push({ id: docId, ...dData });
|
|
2126
2109
|
});
|
|
2127
2110
|
systemLog("usedp", "KonecVytvoreni dat: ", providerId);
|
|
2128
2111
|
if (filter) {
|
|
2129
2112
|
systemLog("usedp", "Jdu filterovat: ", JSON.stringify(filter));
|
|
2130
|
-
docs =
|
|
2113
|
+
docs = filterDocuments2(docs, filter);
|
|
2131
2114
|
systemLog("usedp", "Konec filteru: ");
|
|
2132
2115
|
}
|
|
2133
2116
|
const schema = providers[providerId].schema;
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
if (optionConfigs.length > 0) {
|
|
2138
|
-
resolvedSchema = { ...schema };
|
|
2139
|
-
optionConfigs.forEach((cfg) => {
|
|
2140
|
-
const providerRef = resolveProviderRef(cfg.dataProvider, providers, presetProviders, params);
|
|
2141
|
-
const optionProvider = providers[providerRef.runtimeId];
|
|
2142
|
-
if (!optionProvider) {
|
|
2143
|
-
systemLog("usedp", "Nenalezen provider pro schema.options", cfg.dataProvider);
|
|
2144
|
-
return;
|
|
2145
|
-
}
|
|
2146
|
-
let optionDocuments = (optionProvider.data || []).map((docId) => {
|
|
2147
|
-
const docData = documents[docId];
|
|
2148
|
-
if (!docData) return null;
|
|
2149
|
-
return {
|
|
2150
|
-
id: docId,
|
|
2151
|
-
...docData
|
|
2152
|
-
};
|
|
2153
|
-
}).filter((item) => !!item);
|
|
2154
|
-
if (cfg.filter) {
|
|
2155
|
-
optionDocuments = filterDocuments(optionDocuments, cfg.filter);
|
|
2156
|
-
}
|
|
2157
|
-
const computedOptions = optionDocuments.map((item) => createOptionFromDocument(item, cfg.optionKeys));
|
|
2158
|
-
const nextItem = {
|
|
2159
|
-
...resolvedSchema[cfg.fieldKey],
|
|
2160
|
-
options: computedOptions
|
|
2161
|
-
};
|
|
2162
|
-
resolvedSchema[cfg.fieldKey] = nextItem;
|
|
2163
|
-
});
|
|
2164
|
-
}
|
|
2165
|
-
}
|
|
2117
|
+
const layout = providers[providerId].layout;
|
|
2118
|
+
const resolvedSchema = resolveDataSourcesDeep(schema, providers, documents, presetProviders, params, "schema");
|
|
2119
|
+
const resolvedLayout = resolveDataSourcesDeep(layout, providers, documents, presetProviders, params, "layout");
|
|
2166
2120
|
return {
|
|
2167
2121
|
...providers[providerId],
|
|
2168
2122
|
data: docs,
|
|
2169
|
-
schema: resolvedSchema
|
|
2123
|
+
schema: resolvedSchema,
|
|
2124
|
+
layout: resolvedLayout
|
|
2170
2125
|
};
|
|
2171
2126
|
}, [
|
|
2172
2127
|
providerId,
|
|
@@ -2181,11 +2136,9 @@ var useDataProvider = (id, params, dataFilter, settings) => {
|
|
|
2181
2136
|
]);
|
|
2182
2137
|
systemLog("usedp", `${providerId} END`);
|
|
2183
2138
|
return {
|
|
2184
|
-
// provider,
|
|
2185
2139
|
documents: provider.data,
|
|
2186
2140
|
schema: provider.schema,
|
|
2187
2141
|
layout: provider.layout,
|
|
2188
|
-
// dispatch,
|
|
2189
2142
|
update,
|
|
2190
2143
|
updateItem,
|
|
2191
2144
|
deleteItem,
|