@forestadmin/datasource-customizer 1.47.2 → 1.49.0
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/context/relaxed-wrappers/collection.d.ts +2 -2
- package/dist/context/relaxed-wrappers/collection.js +1 -1
- package/dist/decorators/actions/collection.d.ts +3 -2
- package/dist/decorators/actions/collection.js +30 -15
- package/dist/decorators/actions/types/actions.d.ts +2 -2
- package/dist/decorators/actions/types/fields.d.ts +14 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ActionFormElement, ActionResult, Caller, Collection, CollectionSchema, RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { TAggregateResult, TAggregation, TCollectionName, TFieldName, TFilter, TPaginatedFilter, TPartialSimpleRow, TRow, TSchema } from '../../templates';
|
|
3
3
|
/** Collection wrapper which accepts plain objects in all methods */
|
|
4
4
|
export default class RelaxedCollection<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> {
|
|
@@ -26,7 +26,7 @@ export default class RelaxedCollection<S extends TSchema = TSchema, N extends TC
|
|
|
26
26
|
* );
|
|
27
27
|
*/
|
|
28
28
|
execute(name: string, formValues: RecordData, filter?: TFilter<S, N>): Promise<ActionResult>;
|
|
29
|
-
getForm(name: string, formValues?: RecordData, filter?: TFilter<S, N>): Promise<
|
|
29
|
+
getForm(name: string, formValues?: RecordData, filter?: TFilter<S, N>): Promise<ActionFormElement[]>;
|
|
30
30
|
/**
|
|
31
31
|
* Create a list of records
|
|
32
32
|
* @param data An array of records to create
|
|
@@ -166,4 +166,4 @@ class RelaxedCollection {
|
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
exports.default = RelaxedCollection;
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L3JlbGF4ZWQtd3JhcHBlcnMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdFQWV5QztBQWN6QyxvRUFBb0U7QUFDcEUsTUFBcUIsaUJBQWlCO0lBT3BDLDhEQUE4RDtJQUM5RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLFVBQXNCLEVBQUUsTUFBYztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsT0FBTyxDQUFDLElBQVksRUFBRSxVQUFzQixFQUFFLE1BQXNCO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELE9BQU8sQ0FDTCxJQUFZLEVBQ1osVUFBdUIsRUFDdkIsTUFBc0I7UUFFdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVoRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFD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
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ActionFormElement, ActionResult, Caller, CollectionDecorator, CollectionSchema, DataSourceDecorator, Filter, GetFormMetas, RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { ActionDefinition } from './types/actions';
|
|
3
3
|
export default class ActionCollectionDecorator extends CollectionDecorator {
|
|
4
4
|
readonly dataSource: DataSourceDecorator<ActionCollectionDecorator>;
|
|
5
5
|
private actions;
|
|
6
6
|
addAction(name: string, action: ActionDefinition): void;
|
|
7
7
|
execute(caller: Caller, name: string, data: RecordData, filter: Filter): Promise<ActionResult>;
|
|
8
|
-
getForm(caller: Caller, name: string, data?: RecordData, filter?: Filter, metas?: GetFormMetas): Promise<
|
|
8
|
+
getForm(caller: Caller, name: string, data?: RecordData, filter?: Filter, metas?: GetFormMetas): Promise<ActionFormElement[]>;
|
|
9
9
|
protected refineSchema(subSchema: CollectionSchema): CollectionSchema;
|
|
10
10
|
private getContext;
|
|
11
11
|
private dropDefaults;
|
|
12
|
+
private dropDefault;
|
|
12
13
|
private dropIfs;
|
|
13
14
|
private dropDeferred;
|
|
14
15
|
private evaluate;
|
|
@@ -46,18 +46,22 @@ class ActionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator
|
|
|
46
46
|
if (metas?.searchField) {
|
|
47
47
|
// in the case of a search hook,
|
|
48
48
|
// we don't want to rebuild all the fields. only the one searched
|
|
49
|
-
dynamicFields = [
|
|
49
|
+
dynamicFields = [
|
|
50
|
+
dynamicFields.find(field => field.type !== 'Layout' && field.label === metas.searchField),
|
|
51
|
+
];
|
|
50
52
|
}
|
|
51
53
|
dynamicFields = await this.dropDefaults(context, dynamicFields, formValues);
|
|
52
54
|
if (!metas?.includeHiddenFields)
|
|
53
55
|
dynamicFields = await this.dropIfs(context, dynamicFields);
|
|
54
56
|
const fields = await this.dropDeferred(context, metas?.searchValues, dynamicFields);
|
|
55
57
|
for (const field of fields) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
field.value
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
if (field.type !== 'Layout') {
|
|
59
|
+
// customer did not define a handler to rewrite the previous value => reuse current one.
|
|
60
|
+
if (field.value === undefined)
|
|
61
|
+
field.value = formValues[field.label];
|
|
62
|
+
// fields that were accessed through the context.formValues.X getter should be watched.
|
|
63
|
+
field.watchChanges = used.has(field.label);
|
|
64
|
+
}
|
|
61
65
|
}
|
|
62
66
|
return fields;
|
|
63
67
|
}
|
|
@@ -67,7 +71,8 @@ class ActionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator
|
|
|
67
71
|
// An action form can be send in the schema to avoid calling the load handler
|
|
68
72
|
// as long as there is nothing dynamic in it.
|
|
69
73
|
const isDynamic = this.isHandler(form) ||
|
|
70
|
-
form?.some(field =>
|
|
74
|
+
form?.some(field => field.type === 'Layout' || // all forms containing some layout elements are handled as dynamic
|
|
75
|
+
Object.values(field).some(value => this.isHandler(value)) ||
|
|
71
76
|
// A field with a hardcoded file should not be sent to the apimap. it is marked dynamic
|
|
72
77
|
(field.type.includes('File') && field.defaultValue));
|
|
73
78
|
newSchema.actions[name] = { scope, generateFile: !!generateFile, staticForm: !isDynamic };
|
|
@@ -82,13 +87,20 @@ class ActionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator
|
|
|
82
87
|
}[action.scope](this, caller, formValues, filter, used, changedField);
|
|
83
88
|
}
|
|
84
89
|
async dropDefaults(context, fields, data) {
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
const promises = fields.map(async (field) => {
|
|
91
|
+
if (field.type === 'Layout')
|
|
92
|
+
return field;
|
|
93
|
+
return this.dropDefault(context, field, data);
|
|
89
94
|
});
|
|
90
|
-
|
|
91
|
-
|
|
95
|
+
return Promise.all(promises);
|
|
96
|
+
}
|
|
97
|
+
async dropDefault(context, field, data) {
|
|
98
|
+
if (data[field.label] === undefined) {
|
|
99
|
+
const defaultValue = await this.evaluate(context, null, field.defaultValue);
|
|
100
|
+
data[field.label] = defaultValue;
|
|
101
|
+
}
|
|
102
|
+
delete field.defaultValue;
|
|
103
|
+
return field;
|
|
92
104
|
}
|
|
93
105
|
async dropIfs(context, fields) {
|
|
94
106
|
// Remove fields which have falsy if
|
|
@@ -100,7 +112,10 @@ class ActionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator
|
|
|
100
112
|
async dropDeferred(context, searchValues, fields) {
|
|
101
113
|
const newFields = fields.map(async (field) => {
|
|
102
114
|
const keys = Object.keys(field);
|
|
103
|
-
const values = await Promise.all(Object.values(field).map(value =>
|
|
115
|
+
const values = await Promise.all(Object.values(field).map(value => {
|
|
116
|
+
const searchValue = field.type === 'Layout' ? null : searchValues?.[field.label];
|
|
117
|
+
return this.evaluate(context, searchValue, value);
|
|
118
|
+
}));
|
|
104
119
|
return keys.reduce((memo, key, index) => ({ ...memo, [key]: values[index] }), {});
|
|
105
120
|
});
|
|
106
121
|
return Promise.all(newFields);
|
|
@@ -124,4 +139,4 @@ class ActionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator
|
|
|
124
139
|
}
|
|
125
140
|
}
|
|
126
141
|
exports.default = ActionCollectionDecorator;
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL2FjdGlvbnMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQVl5QztBQUV6QywwREFBMkM7QUFDM0MsOERBQW1EO0FBQ25ELHNFQUE2QztBQVc3QyxNQUFxQix5QkFBMEIsU0FBUSx3Q0FBbUI7SUFBMUU7O1FBR1UsWUFBTyxHQUFxQyxFQUFFLENBQUM7SUFpTnpELENBQUM7SUEvTUMsU0FBUyxDQUFDLElBQVksRUFBRSxNQUF3QjtRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsS0FBSyxDQUFDLE9BQU8sQ0FDcEIsTUFBYyxFQUNkLElBQVksRUFDWixJQUFnQixFQUNoQixNQUFjO1FBRWQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFN0UsOERBQThEO1FBQzlELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFRLENBQUM7UUFDckUsTUFBTSxhQUFhLEdBQUcsSUFBSSx3QkFBYSxFQUFFLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQ0wsTUFBTSxJQUFJO1lBQ1IsSUFBSSxFQUFFLFNBQWtCO1lBQ3hCLFdBQVcsRUFBRSxJQUFJLEdB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionResult, ActionScope } from '@forestadmin/datasource-toolkit';
|
|
2
|
-
import {
|
|
2
|
+
import { DynamicFormElement } from './fields';
|
|
3
3
|
import { TCollectionName, TSchema } from '../../../templates';
|
|
4
4
|
import ActionContext from '../context/base';
|
|
5
5
|
import ActionContextSingle from '../context/single';
|
|
@@ -8,7 +8,7 @@ export { ActionContext, ActionContextSingle };
|
|
|
8
8
|
export interface BaseAction<S extends TSchema, N extends TCollectionName<S>, Scope extends ActionScope, Context extends ActionContext<S, N>> {
|
|
9
9
|
generateFile?: boolean;
|
|
10
10
|
scope: Scope;
|
|
11
|
-
form?:
|
|
11
|
+
form?: DynamicFormElement<Context>[] | ((context: Context) => Promise<DynamicFormElement<Context>[]> | DynamicFormElement<Context>[]);
|
|
12
12
|
execute(context: Context, resultBuilder: ResultBuilder): void | ActionResult | Promise<void> | Promise<ActionResult>;
|
|
13
13
|
}
|
|
14
14
|
export type ActionGlobal<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = BaseAction<S, N, 'Global', ActionContext<S, N>>;
|
|
@@ -14,7 +14,7 @@ type BaseDynamicField<Type, Context, Result> = {
|
|
|
14
14
|
description?: ValueOrHandler<Context, string>;
|
|
15
15
|
isRequired?: ValueOrHandler<Context, boolean>;
|
|
16
16
|
isReadOnly?: ValueOrHandler<Context, boolean>;
|
|
17
|
-
if?:
|
|
17
|
+
if?: Handler<Context, unknown>;
|
|
18
18
|
value?: ValueOrHandler<Context, Result>;
|
|
19
19
|
defaultValue?: ValueOrHandler<Context, Result>;
|
|
20
20
|
};
|
|
@@ -137,5 +137,18 @@ type AddressAutocompleteFieldConfiguration = {
|
|
|
137
137
|
type RadioButtonFieldConfiguration<Context = unknown, TValue = string> = LimitedValueDynamicFieldConfiguration<Context, 'RadioGroup', TValue>;
|
|
138
138
|
type CheckboxesFieldConfiguration<Context = unknown, TValue = string> = LimitedValueDynamicFieldConfiguration<Context, 'CheckboxGroup', TValue>;
|
|
139
139
|
export type DynamicField<Context = unknown> = StrictUnion<BooleanDynamicField<Context> | (BooleanDynamicField<Context> & CheckboxDynamicFieldConfiguration) | CollectionDynamicField<Context> | EnumDynamicField<Context> | EnumListDynamicField<Context> | FileDynamicField<Context> | FileListDynamicField<Context> | JsonDynamicField<Context> | (JsonDynamicField<Context> & JsonEditorFieldConfiguration) | NumberDynamicField<Context> | TimeDynamicField<Context> | (NumberDynamicField<Context> & NumberInputFieldConfiguration<Context>) | (NumberDynamicField<Context> & DropdownDynamicFieldConfiguration<Context, number>) | (NumberDynamicField<Context> & DropdownDynamicSearchFieldConfiguration<Context, number>) | (NumberDynamicField<Context> & RadioButtonFieldConfiguration<Context, number>) | (NumberDynamicField<Context> & CurrencyInputFieldConfiguration<Context>) | NumberListDynamicField<Context> | (NumberListDynamicField<Context> & DropdownDynamicFieldConfiguration<Context, number>) | (NumberListDynamicField<Context> & DropdownDynamicSearchFieldConfiguration<Context, number>) | (NumberListDynamicField<Context> & CheckboxesFieldConfiguration<Context, number>) | (NumberListDynamicField<Context> & ArrayNumberInputFieldConfiguration<Context>) | StringDynamicField<Context> | (DateDynamicField<Context> & DatePickerInputFieldConfiguration<Context>) | (StringDynamicField<Context> & TextInputFieldConfiguration) | (StringDynamicField<Context> & DropdownDynamicFieldConfiguration<Context, string>) | (StringDynamicField<Context> & DropdownDynamicSearchFieldConfiguration<Context, string>) | (StringDynamicField<Context> & RadioButtonFieldConfiguration<Context, string>) | (StringDynamicField<Context> & TextAreaFieldConfiguration) | (StringDynamicField<Context> & RichTextFieldConfiguration) | (StringDynamicField<Context> & ColorPickerFieldConfiguration) | (StringDynamicField<Context> & AddressAutocompleteFieldConfiguration) | (StringDynamicField<Context> & UserDropdownFieldConfiguration) | (FileDynamicField<Context> & FilePickerFieldConfiguration) | StringListDynamicField<Context> | (StringListDynamicField<Context> & DropdownDynamicFieldConfiguration<Context, string>) | (StringListDynamicField<Context> & DropdownDynamicSearchFieldConfiguration<Context, string>) | (StringListDynamicField<Context> & CheckboxesFieldConfiguration<Context, string>) | (StringListDynamicField<Context> & ArrayTextInputFieldConfiguration) | (StringListDynamicField<Context> & UserDropdownFieldConfiguration) | (FileListDynamicField<Context> & FileListPickerFieldConfiguration)>;
|
|
140
|
+
type DynamicLayoutElementBase<Context> = {
|
|
141
|
+
type: 'Layout';
|
|
142
|
+
if?: Handler<Context, unknown>;
|
|
143
|
+
};
|
|
144
|
+
type DynamicLayoutElementSeparator<Context> = DynamicLayoutElementBase<Context> & {
|
|
145
|
+
component: 'Separator';
|
|
146
|
+
};
|
|
147
|
+
type DynamicLayoutElementHtmlBlock<Context> = DynamicLayoutElementBase<Context> & {
|
|
148
|
+
component: 'HtmlBlock';
|
|
149
|
+
content: ValueOrHandler<Context, string>;
|
|
150
|
+
};
|
|
151
|
+
export type DynamicLayoutElement<Context = unknown> = DynamicLayoutElementSeparator<Context> | DynamicLayoutElementHtmlBlock<Context>;
|
|
152
|
+
export type DynamicFormElement<Context = unknown> = DynamicField<Context> | DynamicLayoutElement<Context>;
|
|
140
153
|
export {};
|
|
141
154
|
//# sourceMappingURL=fields.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/datasource-customizer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.49.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"@types/uuid": "^9.0.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@forestadmin/datasource-toolkit": "1.
|
|
32
|
+
"@forestadmin/datasource-toolkit": "1.36.0",
|
|
33
33
|
"antlr4": "^4.13.1-patch-1",
|
|
34
34
|
"file-type": "^16.5.4",
|
|
35
35
|
"luxon": "^3.2.1",
|