Files
twenty/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts
T

57 lines
2.0 KiB
TypeScript

import { isDefined } from 'twenty-shared/utils';
import { v4 as uuidv4 } from 'uuid';
import {
CommandMenuItemException,
CommandMenuItemExceptionCode,
} from 'src/engine/metadata-modules/command-menu-item/command-menu-item.exception';
import { type CreateCommandMenuItemInput } from 'src/engine/metadata-modules/command-menu-item/dtos/create-command-menu-item.input';
import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity';
import { type FlatCommandMenuItem } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item.type';
export const fromCreateCommandMenuItemInputToFlatCommandMenuItemToCreate = ({
createCommandMenuItemInput,
workspaceId,
applicationId,
}: {
createCommandMenuItemInput: CreateCommandMenuItemInput;
workspaceId: string;
applicationId: string;
}): FlatCommandMenuItem => {
const hasWorkflowVersionId = isDefined(
createCommandMenuItemInput.workflowVersionId,
);
const hasFrontComponentId = isDefined(
createCommandMenuItemInput.frontComponentId,
);
if (hasWorkflowVersionId === hasFrontComponentId) {
throw new CommandMenuItemException(
'Exactly one of workflowVersionId or frontComponentId is required',
CommandMenuItemExceptionCode.WORKFLOW_OR_FRONT_COMPONENT_REQUIRED,
);
}
const id = uuidv4();
const now = new Date().toISOString();
return {
id,
universalIdentifier: id,
workflowVersionId: createCommandMenuItemInput.workflowVersionId ?? null,
frontComponentId: createCommandMenuItemInput.frontComponentId ?? null,
label: createCommandMenuItemInput.label,
icon: createCommandMenuItemInput.icon ?? null,
isPinned: createCommandMenuItemInput.isPinned ?? false,
availabilityType:
createCommandMenuItemInput.availabilityType ??
CommandMenuItemAvailabilityType.GLOBAL,
availabilityObjectMetadataId:
createCommandMenuItemInput.availabilityObjectMetadataId ?? null,
workspaceId,
applicationId,
createdAt: now,
updatedAt: now,
};
};