Add the possibility to run workflows with manual trigger from the command K with no records selected (#8342)

https://github.com/user-attachments/assets/9f094439-8d19-4a6b-883b-456294f691d8
This commit is contained in:
Raphaël Bosi
2024-11-06 11:43:18 +01:00
committed by GitHub
parent ac7d740135
commit 7f51eb8c3c
13 changed files with 172 additions and 76 deletions

View File

@ -0,0 +1,71 @@
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import {
Workflow,
WorkflowTriggerType,
WorkflowVersion,
} from '@/workflow/types/Workflow';
import { isDefined } from 'twenty-ui';
export const useAllActiveWorkflowVersions = ({
objectMetadataItem,
triggerType,
}: {
objectMetadataItem?: ObjectMetadataItem;
triggerType: WorkflowTriggerType;
}) => {
const filters = [
{
status: {
eq: 'ACTIVE',
},
},
{
trigger: {
like: `%"type": "${triggerType}"%`,
},
},
];
if (isDefined(objectMetadataItem)) {
filters.push({
trigger: {
like: `%"objectType": "${objectMetadataItem.nameSingular}"%`,
},
});
}
const { objectMetadataItem: workflowVersionObjectMetadataItem } =
useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
});
const { records } = useFindManyRecords<
WorkflowVersion & { workflow: Workflow }
>({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
filter: {
and: filters,
},
recordGqlFields: {
...generateDepthOneRecordGqlFields({
objectMetadataItem: workflowVersionObjectMetadataItem,
}),
workflow: true,
},
});
// TODO: refactor when we can use 'not like' in the RawJson filter
if (!isDefined(objectMetadataItem)) {
return {
records: records.filter(
(record) => !isDefined(record.trigger?.settings.objectType),
),
};
}
return { records };
};

View File

@ -1,52 +0,0 @@
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import {
Workflow,
WorkflowTriggerType,
WorkflowVersion,
} from '@/workflow/types/Workflow';
export const useAllActiveWorkflowVersionsForObject = ({
objectNameSingular,
triggerType,
}: {
objectNameSingular: string;
triggerType: WorkflowTriggerType;
}) => {
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular,
});
const { records } = useFindManyRecords<
WorkflowVersion & { workflow: Workflow }
>({
objectNameSingular: CoreObjectNameSingular.WorkflowVersion,
filter: {
and: [
{
status: {
eq: 'ACTIVE',
},
},
{
trigger: {
like: `%"type": "${triggerType}"%`,
},
},
{
trigger: {
like: `%"objectType": "${objectNameSingular}"%`,
},
},
],
},
recordGqlFields: {
...generateDepthOneRecordGqlFields({ objectMetadataItem }),
workflow: true,
},
});
return { records };
};

View File

@ -17,7 +17,7 @@ export const useRunWorkflowVersion = () => {
const runWorkflowVersion = async (
workflowVersionId: string,
payload: Record<string, any>,
payload?: Record<string, any>,
) => {
await mutate({
variables: { input: { workflowVersionId, payload } },

View File

@ -65,6 +65,7 @@ export type WorkflowDatabaseEventTrigger = BaseTrigger & {
eventName: string;
input?: object;
outputSchema: object;
objectType?: string;
};
};