@mgarlik/datastore 0.1.22 → 0.1.24

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.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?: FilterType$1;
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
  /**
@@ -64,23 +121,24 @@ type ProviderLayoutType = {
64
121
  variant?: "grouped" | "insetGrouped" | "plain";
65
122
  tooltip?: string | React.ReactNode;
66
123
  sections?: {
67
- id: string;
124
+ id?: string;
68
125
  title?: string;
69
126
  description?: string;
70
127
  footer?: string;
71
128
  tooltip?: string | React.ReactNode;
72
- visible?: boolean | JsonFilter;
129
+ visible?: boolean | filterType;
73
130
  items: Array<{
74
131
  field: string;
75
- form?: "textInput" | "select" | "switch" | "dateTime";
132
+ form?: formType;
76
133
  label?: string; // jen override
77
- visible?: boolean | JsonFilter;
134
+ visible?: boolean | filterType;
78
135
  tooltip?: string | React.ReactNode;
79
136
  }>;
80
137
  }[];
81
138
  };
139
+ type ProviderLayoutsType = { [key: string]: ProviderLayoutType };
82
140
 
83
- type ProviderSchemaItemType = {
141
+ type BasicProviderSchemaItemType = {
84
142
  /**
85
143
  * 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
144
  */
@@ -89,44 +147,28 @@ type ProviderSchemaItemType = {
89
147
  * 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
148
  */
91
149
  default?: any;
150
+ }
151
+
152
+ type ProviderSchemaItemType = BasicProviderSchemaItemType & {
153
+ /** Typ hodnoty */
154
+ type?: "string" | "number" | "date" | "boolean";
92
155
  /**
93
156
  * Povolene hodnoty
94
157
  *
95
158
  */
96
159
  enum?: any[];
97
160
  /**
98
- * Je pole vyžadováno pri editaci?
161
+ * Je pole vyžadováno pro model ( pri create nebo pri update )?
99
162
  */
100
163
  required?: boolean;
101
- /**
102
- * Je pole pri editaci viditelné?
103
- */
104
- visibility?: "hidden" | "visible";
105
164
  /**
106
165
  * Polozku lze editovat
107
166
  */
108
167
  editable?: boolean | RuleType;
109
- type?: "string" | "number" | "date" | "boolean";
110
- form?: "textInput" | "select" | "switch" | "dateTime" | "radio";
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
- };
168
+ form?: formType;
169
+ label?: string;
121
170
  description?: string;
122
- /** TODO: Divna definice labelu */
123
- optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
124
171
  validations?: ValidationType;
125
- /**
126
- * Text input nezobrazuje znaky
127
- */
128
- secure?: boolean;
129
- hidden?: boolean;
130
172
  };
131
173
 
132
174
  type DataProviderType = {
@@ -150,7 +192,26 @@ type DataProviderType = {
150
192
  autoCreate?: boolean;
151
193
  schema?: { [key: string]: ProviderSchemaItemType };
152
194
  editor?: ProviderEditorType;
153
- layout?: ProviderLayoutType;
195
+ /**
196
+ * Rozvržení pro zobrazení dat (např. v tabulce, formuláři atd.).
197
+ * Může být jedno pro všechny stavy ("default") nebo specifické pro každý stav ("edit", "preview").
198
+ * Lze vytvořit i vlastní stavy (např. "compact", "detailed") a přiřadit jim specifické rozvržení.
199
+ *
200
+ * @example
201
+ * layout: {
202
+ * default: { ... }, // rozvržení pro všechny stavy
203
+ * edit: { ... }, // rozvržení pro stav "edit"
204
+ * preview: { ... }, // rozvržení pro stav "preview"
205
+ * compact: { ... } // vlastní stav "compact"
206
+ * }
207
+ *
208
+ * Form vyzaduje rozvržení pro stav "edit" a pro náhled používá rozvržení "preview". Pokud je aktuální stav "compact", použije se rozvržení "compact". Pokud není rozvržení pro aktuální stav definováno, použije se rozvržení "default".
209
+ *
210
+ * Pokud není uvedeno, použije se rozvržení "default" pro všechny stavy.
211
+ * Pokud je uvedeno pouze rozvržení pro specifické stavy (např. "edit", "preview"), ale není uvedeno "default", pak se pro ostatní stavy použije první definované rozvržení.
212
+ */
213
+ layout?: ProviderLayoutsType;
214
+ // layouts?: ProviderLayoutsType;
154
215
  /**
155
216
  * Jake akce jsou povolene pro dataSource. Pokud neni uvedeno, jsou povolene vsechny
156
217
  */
@@ -392,35 +453,11 @@ interface UseDataProviderResult {
392
453
  /** Vytvoří novou položku providera. */
393
454
  createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
394
455
  }
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 | {
456
+ declare const useDataProvider: (id: string | {
408
457
  [key: string]: any;
409
- } | false,
410
- /**
411
- * Parametry pro prerenderovani providera (profiles/<%= profileId %>)
412
- */
413
- params?: {
458
+ } | false, params?: {
414
459
  [key: string]: string;
415
- } | null,
416
- /**
417
- * Filtrovani dat
418
- */
419
- dataFilter?: JSONType | null,
420
- /**
421
- * Nejake nastaveni
422
- */
423
- settings?: {
460
+ } | null, dataFilter?: filterType | null, settings?: {
424
461
  documentId?: string;
425
462
  document?: JSONType;
426
463
  }) => 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?: FilterType$1;
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
  /**
@@ -64,23 +121,24 @@ type ProviderLayoutType = {
64
121
  variant?: "grouped" | "insetGrouped" | "plain";
65
122
  tooltip?: string | React.ReactNode;
66
123
  sections?: {
67
- id: string;
124
+ id?: string;
68
125
  title?: string;
69
126
  description?: string;
70
127
  footer?: string;
71
128
  tooltip?: string | React.ReactNode;
72
- visible?: boolean | JsonFilter;
129
+ visible?: boolean | filterType;
73
130
  items: Array<{
74
131
  field: string;
75
- form?: "textInput" | "select" | "switch" | "dateTime";
132
+ form?: formType;
76
133
  label?: string; // jen override
77
- visible?: boolean | JsonFilter;
134
+ visible?: boolean | filterType;
78
135
  tooltip?: string | React.ReactNode;
79
136
  }>;
80
137
  }[];
81
138
  };
139
+ type ProviderLayoutsType = { [key: string]: ProviderLayoutType };
82
140
 
83
- type ProviderSchemaItemType = {
141
+ type BasicProviderSchemaItemType = {
84
142
  /**
85
143
  * 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
144
  */
@@ -89,44 +147,28 @@ type ProviderSchemaItemType = {
89
147
  * 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
148
  */
91
149
  default?: any;
150
+ }
151
+
152
+ type ProviderSchemaItemType = BasicProviderSchemaItemType & {
153
+ /** Typ hodnoty */
154
+ type?: "string" | "number" | "date" | "boolean";
92
155
  /**
93
156
  * Povolene hodnoty
94
157
  *
95
158
  */
96
159
  enum?: any[];
97
160
  /**
98
- * Je pole vyžadováno pri editaci?
161
+ * Je pole vyžadováno pro model ( pri create nebo pri update )?
99
162
  */
100
163
  required?: boolean;
101
- /**
102
- * Je pole pri editaci viditelné?
103
- */
104
- visibility?: "hidden" | "visible";
105
164
  /**
106
165
  * Polozku lze editovat
107
166
  */
108
167
  editable?: boolean | RuleType;
109
- type?: "string" | "number" | "date" | "boolean";
110
- form?: "textInput" | "select" | "switch" | "dateTime" | "radio";
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
- };
168
+ form?: formType;
169
+ label?: string;
121
170
  description?: string;
122
- /** TODO: Divna definice labelu */
123
- optionKeys?: { value: string; label: LabelProps | { title: string; icon: string } };
124
171
  validations?: ValidationType;
125
- /**
126
- * Text input nezobrazuje znaky
127
- */
128
- secure?: boolean;
129
- hidden?: boolean;
130
172
  };
131
173
 
132
174
  type DataProviderType = {
@@ -150,7 +192,26 @@ type DataProviderType = {
150
192
  autoCreate?: boolean;
151
193
  schema?: { [key: string]: ProviderSchemaItemType };
152
194
  editor?: ProviderEditorType;
153
- layout?: ProviderLayoutType;
195
+ /**
196
+ * Rozvržení pro zobrazení dat (např. v tabulce, formuláři atd.).
197
+ * Může být jedno pro všechny stavy ("default") nebo specifické pro každý stav ("edit", "preview").
198
+ * Lze vytvořit i vlastní stavy (např. "compact", "detailed") a přiřadit jim specifické rozvržení.
199
+ *
200
+ * @example
201
+ * layout: {
202
+ * default: { ... }, // rozvržení pro všechny stavy
203
+ * edit: { ... }, // rozvržení pro stav "edit"
204
+ * preview: { ... }, // rozvržení pro stav "preview"
205
+ * compact: { ... } // vlastní stav "compact"
206
+ * }
207
+ *
208
+ * Form vyzaduje rozvržení pro stav "edit" a pro náhled používá rozvržení "preview". Pokud je aktuální stav "compact", použije se rozvržení "compact". Pokud není rozvržení pro aktuální stav definováno, použije se rozvržení "default".
209
+ *
210
+ * Pokud není uvedeno, použije se rozvržení "default" pro všechny stavy.
211
+ * Pokud je uvedeno pouze rozvržení pro specifické stavy (např. "edit", "preview"), ale není uvedeno "default", pak se pro ostatní stavy použije první definované rozvržení.
212
+ */
213
+ layout?: ProviderLayoutsType;
214
+ // layouts?: ProviderLayoutsType;
154
215
  /**
155
216
  * Jake akce jsou povolene pro dataSource. Pokud neni uvedeno, jsou povolene vsechny
156
217
  */
@@ -392,35 +453,11 @@ interface UseDataProviderResult {
392
453
  /** Vytvoří novou položku providera. */
393
454
  createItem: (data: JSONType, callback?: (value: JSONType) => void) => Promise<JSONType>;
394
455
  }
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 | {
456
+ declare const useDataProvider: (id: string | {
408
457
  [key: string]: any;
409
- } | false,
410
- /**
411
- * Parametry pro prerenderovani providera (profiles/<%= profileId %>)
412
- */
413
- params?: {
458
+ } | false, params?: {
414
459
  [key: string]: string;
415
- } | null,
416
- /**
417
- * Filtrovani dat
418
- */
419
- dataFilter?: JSONType | null,
420
- /**
421
- * Nejake nastaveni
422
- */
423
- settings?: {
460
+ } | null, dataFilter?: filterType | null, settings?: {
424
461
  documentId?: string;
425
462
  document?: JSONType;
426
463
  }) => UseDataProviderResult;