Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -302,13 +302,18 @@ export default function ProcessDeploymentView({ processId }: { processId: string
<ToolbarGroup>
<Select
value={currentInstance?.processInstanceId}
loading={!!selectedInstanceId && !currentInstance}
variant="borderless"
onSelect={(value) => setSelectedInstanceId(value)}
options={versionInstances?.map((instance, idx) => ({
value: instance.processInstanceId,
label: `${idx + 1}. Instance: ${new Date(instance.globalStartTime).toLocaleString()}`,
}))}
placeholder="Select an instance"
placeholder={
!!selectedInstanceId && !currentInstance
? 'Fetching Instance Data'
: 'Select an instance'
}
/>

{currentInstance?.offline && (
Expand Down Expand Up @@ -429,16 +434,14 @@ export default function ProcessDeploymentView({ processId }: { processId: string

setStartForm(startForm);
} else {
return startInstance(spaceId, processId, versionId);
return startInstance(spaceId, processId, versionId, undefined, true);
}
},
onSuccess: async (instanceId) => {
if (instanceId) {
await refetchDeployments();
setTimeout(async () => {
await refetchInstances();
setSelectedInstanceId(instanceId);
}, 1000);
await refetchInstances();
setSelectedInstanceId(instanceId);
}
},
});
Expand Down Expand Up @@ -680,10 +683,12 @@ export default function ProcessDeploymentView({ processId }: { processId: string
currentVersion.processId,
currentVersion.id,
mappedVariables,
true,
);
},
onSuccess: async (instanceId) => {
await refetchDeployments();
await refetchInstances();
setSelectedInstanceId(instanceId);
setStartForm('');
},
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import React, { ReactNode } from 'react';
import { statusToType } from './instance-helpers';
import type { ElementLike } from 'diagram-js/lib/core/Types';
import { ExtendedInstanceInfo } from '@/lib/data/instance';
import {
CheckCircleOutlined,
ClockCircleOutlined,
CloseCircleOutlined,
ExclamationCircleOutlined,
SyncOutlined,
} from '@ant-design/icons';
import { Tag } from 'antd';

export const StatusTag = ({
processId,
element,
instance,
}: {
processId: string;
element?: ElementLike;
instance?: ExtendedInstanceInfo;
}) => {
// Element status
const isRootElement = element && element.type === 'bpmn:Process';
let status = undefined;
if (isRootElement && instance) {
status = instance.instanceState.reduce((overallState, state) => {
return ['ENDED', 'STOPPED'].includes(overallState) ? state : overallState;
});
} else if (element && instance) {
const elementInfo = instance.log.find((l) => l.flowElementId == element.id);
if (elementInfo) {
status = elementInfo.executionState;
} else {
const tokenInfo = instance.tokens.find((l) => l.currentFlowElementId == element.id);
status = tokenInfo ? tokenInfo.currentFlowNodeState : 'WAITING';
}
}
const statusType = status && statusToType(status);
const presets: Record<string, ReactNode> = {
READY: <CheckCircleOutlined />,
COMPLETED: <CheckCircleOutlined />,
RUNNING: <SyncOutlined spin />,
info: <ExclamationCircleOutlined />,
warning: <ExclamationCircleOutlined />,
STOPPED: <CloseCircleOutlined />,
WAITING: <ClockCircleOutlined />,
};
return (
status &&
statusType && (
<Tag
key={status}
color={statusType}
icon={status ? presets[status] : <ClockCircleOutlined />}
>
{status}
</Tag>
)
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ const DeploymentsView = ({
space.spaceId,
'dynamic',
forceEngine,
true,
);
queryClient.removeQueries({
queryKey: ['processDeployments', space.spaceId, process.id],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ const Tasklist: React.FC<TasklistProps> = ({ userId, pollingInterval }) => {

const space = useEnvironment();

const { userTasks } = useUserTasks(space, pollingInterval, {
const { userTasks, refetch } = useUserTasks(space, pollingInterval, {
hideNonOwnableTasks: true,
hideUnassignedTasks: false,
});
Expand Down Expand Up @@ -291,7 +291,7 @@ const Tasklist: React.FC<TasklistProps> = ({ userId, pollingInterval }) => {
)}
</div>
{(selectedUserTaskID ?? breakpoint.xl) && (
<UserTaskView userId={userId} task={selectedUserTask} />
<UserTaskView userId={userId} task={selectedUserTask} refetch={refetch} />
)}
</div>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,10 @@ export const UserTaskForm: React.FC<UserTaskFormProps> = ({
type TaskListUserTaskFormProps = {
userId: string;
task?: ExtendedTaskListEntry;
refetch?: () => {};
};

const TaskListUserTaskForm: React.FC<TaskListUserTaskFormProps> = ({ task, userId }) => {
const TaskListUserTaskForm: React.FC<TaskListUserTaskFormProps> = ({ task, userId, refetch }) => {
const space = useEnvironment();

const { message } = App.useApp();
Expand Down Expand Up @@ -175,7 +176,9 @@ const TaskListUserTaskForm: React.FC<TaskListUserTaskFormProps> = ({ task, userI
const updatedOwners = await addOwnerToTaskListEntry(space.spaceId, task.id, userId);
if ('error' in updatedOwners) return updatedOwners;
}
return await completeTasklistEntry(space.spaceId, task.id, variables);
const res = await completeTasklistEntry(space.spaceId, task.id, variables, true);
refetch?.();
return res;
},
});
}}
Expand Down
52 changes: 1 addition & 51 deletions src/management-system-v2/lib/data/deployment.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
'use server';

import db from '@/lib/data/db';
import { DeploymentInput, DeploymentInputSchema } from '../deployment-schema';
import { getCurrentEnvironment } from '@/components/auth';
import { SuccessType, UserErrorType, userError } from '../user-error';
import Ability from '../ability/abilityHelper';
import { cacheLife, cacheTag, revalidateTag } from 'next/cache';
import { cacheLife, cacheTag } from 'next/cache';

export async function getDeployedProcesses(environmentId: string, withArchived = false) {
const { ability } = await getCurrentEnvironment(environmentId);
Expand Down Expand Up @@ -123,52 +122,3 @@ export async function getProcessDeployments(
export type StoredDeployment = SuccessType<
Awaited<ReturnType<typeof getProcessDeployments>>
>[number];

export async function addDeployment(
spaceId: string,
processId: string,
input: DeploymentInput,
ability?: Ability,
) {
if (!ability) ({ ability } = await getCurrentEnvironment(spaceId));

if (!ability.can('create', 'Execution'))
return userError('Invalid Permissions', UserErrorType.PermissionError);

const data = DeploymentInputSchema.parse(input);

const res = await db.processDeployment.createManyAndReturn({
data: data.engineIds.map((engineId) => ({ ...data, engineIds: undefined, engineId })),
});

revalidateTag(`space/${spaceId}/deployments`, 'max');
revalidateTag(`deployments/process/${processId}`, 'max');

return res;
}

export async function updateDeployment(
spaceId: string,
processId: string,
deploymentId: string,
input: Partial<DeploymentInput>,
ability?: Ability,
) {
if (!ability) ({ ability } = await getCurrentEnvironment(spaceId));

if (!ability.can('update', 'Execution')) {
return userError('Invalid Permissions', UserErrorType.PermissionError);
}

const data = DeploymentInputSchema.partial().strict().parse(input);

const result = await db.processDeployment.update({
where: { id: deploymentId },
data,
});

revalidateTag(`space/${spaceId}/deployments`, 'max');
revalidateTag(`deployments/process/${processId}`, 'max');

return result;
}
29 changes: 0 additions & 29 deletions src/management-system-v2/lib/data/instance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -353,35 +353,6 @@ export async function getInstances(spaceId: string, ability: Ability) {
return instances.map(({ id }) => id);
}

export async function addInstance(
spaceId: string,
instance: InstanceInput,
skipAbilityCheck = false,
) {
if (!skipAbilityCheck) {
const { ability } = await getCurrentEnvironment(spaceId);

if (!ability.can('create', 'Execution'))
return userError('Invalid Permissions', UserErrorType.PermissionError);
}

const data = InstanceInputSchema.parse(instance);

const res = await db.processInstance.create({
data: {
...data,
engines: {
connect: data.engines.map((id) => ({ id })),
},
},
});

revalidateTag(`space/${spaceId}/instances`, 'max');
revalidateTag(`deployments/process/${instance.state.processId}`, 'max');

return res;
}

export async function updateInstance(
spaceId: string,
instanceId: string,
Expand Down
16 changes: 0 additions & 16 deletions src/management-system-v2/lib/deployment-schema.ts

This file was deleted.

Loading
Loading