8723 workflow add editor in serverless function code step (#8805)

- create a serverless function when creating a new workflow code step
- add code editor in workflow code step
- move workflowVersion steps management from frontend to backend
  - add a custom resolver for workflow-version management
  - fix optimistic rendering on frontend
- fix css
- delete serverless function when deleting workflow code step

TODO
- Don't update serverlessFunction if no code change
- Factorize what can be between crud trigger and crud step
- Publish serverless version when activating workflow
- delete serverless functions when deleting workflow or workflowVersion
- fix optimistic rendering for code updates
- Unify CRUD types

<img width="1279" alt="image"
src="https://github.com/user-attachments/assets/3d97ee9f-4b96-4abc-9d36-5c0280058be4">
This commit is contained in:
martmull
2024-12-03 09:41:13 +01:00
committed by GitHub
parent 9d7632cb4f
commit d0ff1ffd5f
75 changed files with 2192 additions and 1527 deletions

View File

@ -1,4 +1,4 @@
import { useLazyQuery } from '@apollo/client';
import { useLazyQuery, WatchQueryFetchPolicy } from '@apollo/client';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { ObjectMetadataItemIdentifier } from '@/object-metadata/types/ObjectMetadataItemIdentifier';
@ -10,6 +10,8 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord';
type UseLazyFindOneRecordParams = ObjectMetadataItemIdentifier & {
recordGqlFields?: RecordGqlOperationGqlRecordFields;
withSoftDeleted?: boolean;
fetchPolicy?: WatchQueryFetchPolicy;
};
type FindOneRecordParams<T extends ObjectRecord> = {
@ -20,6 +22,8 @@ type FindOneRecordParams<T extends ObjectRecord> = {
export const useLazyFindOneRecord = <T extends ObjectRecord = ObjectRecord>({
objectNameSingular,
recordGqlFields,
withSoftDeleted = false,
fetchPolicy = 'cache-first',
}: UseLazyFindOneRecordParams) => {
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
@ -30,22 +34,28 @@ export const useLazyFindOneRecord = <T extends ObjectRecord = ObjectRecord>({
recordGqlFields:
recordGqlFields ??
generateDepthOneRecordGqlFields({ objectMetadataItem }),
withSoftDeleted,
});
const [findOneRecord, { loading, error, data, called }] =
useLazyQuery(findOneRecordQuery);
return {
findOneRecord: ({ objectRecordId, onCompleted }: FindOneRecordParams<T>) =>
findOneRecord({
findOneRecord: async ({
objectRecordId,
onCompleted,
}: FindOneRecordParams<T>) => {
await findOneRecord({
variables: { objectRecordId },
fetchPolicy,
onCompleted: (data) => {
const record = getRecordFromRecordNode<T>({
recordNode: data[objectNameSingular],
});
onCompleted?.(record);
},
}),
});
},
called,
error,
loading,