Files
Immich/web/src/lib/queries/workflow.query.ts
T
Jason RasmussenandCodex 1e20bdd74e refactor: workflow queries (#32654)
(cherry picked from commit 98680ad6993ed917e630f8f4d1dbd1fbb6c41936)
2026-10-22 20:43:14 +03:00

74 lines
2.4 KiB
TypeScript

import {
createWorkflow,
deleteWorkflow,
getWorkflowForShare,
getWorkflowTriggers,
searchWorkflows,
updateWorkflow,
type WorkflowResponseDto,
} from '@immich/sdk';
import { queryOptions } from '@tanstack/svelte-query';
import { asMutation, queryClient } from '$lib/queries/client';
const findOrFail = (workflows: WorkflowResponseDto[], id: string) => {
const workflow = workflows.find((workflow) => workflow.id === id);
if (!workflow) {
throw new Error(`Workflow ${id} not found`);
}
return workflow;
};
export const searchWorkflowsQuery = () =>
queryOptions({
queryKey: ['workflows'],
queryFn: ({ signal }) => searchWorkflows({}, { signal }),
});
export const getWorkflowQuery = (id: string) =>
queryOptions({
...searchWorkflowsQuery(),
select: (workflows) => findOrFail(workflows, id),
});
export const getWorkflowForShareQuery = (id: string) =>
queryOptions({
queryKey: ['workflows', id, 'share'],
queryFn: ({ signal }) => getWorkflowForShare({ id }, { signal }),
staleTime: 0,
});
export const getWorkflowTriggersQuery = () =>
queryOptions({
queryKey: ['workflows', 'triggers'],
queryFn: ({ signal }) => getWorkflowTriggers({ signal }),
});
export const createWorkflowMutation = () =>
asMutation(createWorkflow, {
onSuccess: (workflow) =>
queryClient.setQueryData(searchWorkflowsQuery().queryKey, (workflows) =>
workflows ? [...workflows, workflow] : workflows,
),
meta: { success: { toast: true }, error: { toast: 'errors.unable_to_create' } },
});
export const updateWorkflowMutation = () =>
asMutation(updateWorkflow, {
onSuccess: (workflow) =>
queryClient.setQueryData(searchWorkflowsQuery().queryKey, (workflows) =>
workflows?.map((item) => (item.id === workflow.id ? workflow : item)),
),
meta: { success: { toast: 'workflow_update_success' }, error: { toast: 'errors.unable_to_update_workflow' } },
});
export const deleteWorkflowMutation = () =>
asMutation(deleteWorkflow, {
onSuccess: (_, [{ id }]) => {
queryClient.setQueryData(searchWorkflowsQuery().queryKey, (workflows) =>
workflows?.filter((workflow) => workflow.id !== id),
);
queryClient.removeQueries({ queryKey: getWorkflowForShareQuery(id).queryKey });
},
meta: { success: { toast: 'workflow_deleted' }, error: { toast: 'errors.unable_to_delete_workflow' } },
});