Files
twenty/packages/twenty-front/src/modules/navigation-menu-item/utils/buildCreateNavigationMenuItemInput.ts
T
2026-03-08 20:25:50 +00:00

49 lines
1.5 KiB
TypeScript

import type {
CreateNavigationMenuItemInput,
NavigationMenuItem,
} from '~/generated-metadata/graphql';
import { isDefined } from 'twenty-shared/utils';
import { isNavigationMenuItemFolder } from '@/navigation-menu-item/utils/isNavigationMenuItemFolder';
import { isNavigationMenuItemLink } from '@/navigation-menu-item/utils/isNavigationMenuItemLink';
export const buildCreateNavigationMenuItemInput = (
draftItem: NavigationMenuItem,
resolveFolderId: (draftFolderId: string) => string,
): CreateNavigationMenuItemInput => {
const input: CreateNavigationMenuItemInput = {
position: draftItem.position,
};
if (isNavigationMenuItemFolder(draftItem)) {
input.name = draftItem.name ?? undefined;
input.icon = draftItem.icon ?? null;
} else if (isNavigationMenuItemLink(draftItem)) {
input.name = draftItem.name ?? 'Link';
const linkUrl = (draftItem.link ?? '').trim();
input.link =
linkUrl.startsWith('http://') || linkUrl.startsWith('https://')
? linkUrl
: linkUrl
? `https://${linkUrl}`
: undefined;
} else if (isDefined(draftItem.viewId)) {
input.viewId = draftItem.viewId;
} else if (isDefined(draftItem.targetRecordId)) {
input.targetRecordId = draftItem.targetRecordId;
input.targetObjectMetadataId =
draftItem.targetObjectMetadataId ?? undefined;
}
if (isDefined(draftItem.folderId)) {
input.folderId = resolveFolderId(draftItem.folderId);
}
if (isDefined(draftItem.color)) {
input.color = draftItem.color;
}
return input;
};