From 2a90942658daea15b5c27dcb4a224aec4b31a4f3 Mon Sep 17 00:00:00 2001 From: steveb Date: Mon, 3 Mar 2025 17:28:56 +0100 Subject: [PATCH] feat(action-intent): pass action intent params to actionContext --- .../src/routes/modification/action/action.ts | 1 + .../agent/src/services/authorization/types.ts | 1 + .../src/decorators/actions/collection.ts | 21 +++++++++++++++++-- .../src/decorators/actions/context/base.ts | 3 +++ .../src/interfaces/collection.ts | 1 + 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/agent/src/routes/modification/action/action.ts b/packages/agent/src/routes/modification/action/action.ts index 3e05340ff8..5debe0f62f 100644 --- a/packages/agent/src/routes/modification/action/action.ts +++ b/packages/agent/src/routes/modification/action/action.ts @@ -165,6 +165,7 @@ export default class ActionRoute extends CollectionRoute { searchField: body.data.attributes.search_field, searchValues, includeHiddenFields: false, + actionIntentParams: body.data.attributes.action_intent_params, }); context.response.body = SchemaGeneratorActions.buildFieldsAndLayout( diff --git a/packages/agent/src/services/authorization/types.ts b/packages/agent/src/services/authorization/types.ts index a19518bfaf..6ebb7e1596 100644 --- a/packages/agent/src/services/authorization/types.ts +++ b/packages/agent/src/services/authorization/types.ts @@ -14,6 +14,7 @@ export interface SmartActionRequestBody { parent_association_name: string | null; all_records: boolean; all_records_subset_query: null; + action_intent_params?: Record | null; }; }; } diff --git a/packages/datasource-customizer/src/decorators/actions/collection.ts b/packages/datasource-customizer/src/decorators/actions/collection.ts index e34ac5eb1a..2f4a4b9f63 100644 --- a/packages/datasource-customizer/src/decorators/actions/collection.ts +++ b/packages/datasource-customizer/src/decorators/actions/collection.ts @@ -82,7 +82,15 @@ export default class ActionCollectionDecorator extends CollectionDecorator { const formValues = data ? { ...data } : {}; const used = new Set(); - const context = this.getContext(caller, action, formValues, filter, used, metas?.changedField); + const context = this.getContext( + caller, + action, + formValues, + filter, + used, + metas?.changedField, + metas?.actionIntentParams, + ); // Convert DynamicField to ActionField in successive steps. let dynamicFields: DynamicForm = this.isHandler(action.form) @@ -171,12 +179,21 @@ export default class ActionCollectionDecorator extends CollectionDecorator { filter: Filter, used?: Set, changedField?: string, + actionIntentParams?: Record, ): ActionContext { return new { Global: ActionContext, Bulk: ActionContext, Single: ActionContextSingle, - }[action.scope](this, caller, formValues, filter as unknown as PlainFilter, used, changedField); + }[action.scope]( + this, + caller, + formValues, + filter as unknown as PlainFilter, + used, + changedField, + actionIntentParams, + ); } private getSearchedField(element: DynamicFormElementOrPage, search: string): DynamicField | null { diff --git a/packages/datasource-customizer/src/decorators/actions/context/base.ts b/packages/datasource-customizer/src/decorators/actions/context/base.ts index f099c6bac9..5230a0d426 100644 --- a/packages/datasource-customizer/src/decorators/actions/context/base.ts +++ b/packages/datasource-customizer/src/decorators/actions/context/base.ts @@ -19,6 +19,7 @@ export default class ActionContext< > extends CollectionCustomizationContext { readonly formValues: RecordData; readonly filter: TFilter; + readonly actionIntentParams: Record | null; private _changedField: string; @@ -47,11 +48,13 @@ export default class ActionContext< filter: TFilter, used?: Set, changedField?: string, + actionIntentParams?: Record, ) { super(collection, caller); this.formValues = formValue; this.filter = filter; this._changedField = changedField; + this.actionIntentParams = actionIntentParams; this.reset(); // Spy on which formValues are accessed to set-up change hooks diff --git a/packages/datasource-toolkit/src/interfaces/collection.ts b/packages/datasource-toolkit/src/interfaces/collection.ts index 3afa2a457f..7a8a5202db 100644 --- a/packages/datasource-toolkit/src/interfaces/collection.ts +++ b/packages/datasource-toolkit/src/interfaces/collection.ts @@ -28,6 +28,7 @@ export type GetFormMetas = { searchField?: string | null; searchValues?: Record; includeHiddenFields?: boolean; + actionIntentParams?: Record | null; }; export interface Collection {