From 95d6b0f967ba84d640ba268d7615237e5d481930 Mon Sep 17 00:00:00 2001 From: Sjoerd Beentjes <11621275+sjoerdbeentjes@users.noreply.github.com> Date: Fri, 6 Dec 2024 11:38:17 +0100 Subject: [PATCH] Add migrations for contact fields (#142) * Add migrations for contact fields * Dynamic menuItemType id * Fix error notification contacts field check and update item types to use dynamic menuItemType.id in migrations --- migrations/1732891349_contacts.ts | 60 +++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 migrations/1732891349_contacts.ts diff --git a/migrations/1732891349_contacts.ts b/migrations/1732891349_contacts.ts new file mode 100644 index 0000000..a88e26f --- /dev/null +++ b/migrations/1732891349_contacts.ts @@ -0,0 +1,60 @@ +import { Client } from "@datocms/cli/lib/cma-client-node"; + +export default async function (client: Client) { + const itemTypes = await client.itemTypes.list(); + const menuItemType = itemTypes.find( + (itemType: { api_key: string }) => itemType.api_key === "menu" + ) || { id: "" }; + + const fields = await client.fields.list(menuItemType.id); + const findField = (label: string) => + fields.find((field: any) => field.label === label); + + const errorNotificationContactsField = findField( + "Error notification contacts" + ); + if (!errorNotificationContactsField) { + console.log( + 'Create Multiple links field "Error notification contacts" (`error_notification_contacts`) in model "Menu" (`menu`)' + ); + await client.fields.create(menuItemType.id, { + id: "GlLvpmJFTBup26dDM2OMuQ", + label: "Error notification contacts", + field_type: "links", + api_key: "error_notification_contacts", + validators: { + items_item_type: { + on_publish_with_unpublished_references_strategy: "fail", + on_reference_unpublish_strategy: "delete_references", + on_reference_delete_strategy: "delete_references", + item_types: [menuItemType.id], + }, + }, + appearance: { addons: [], editor: "links_select", parameters: {} }, + default_value: null, + }); + } + + const feedbackContactsField = findField("Feedback contacts"); + if (!feedbackContactsField) { + console.log( + 'Create Multiple links field "Feedback contacts" (`feedback_contacts`) in model "Menu" (`menu`)' + ); + await client.fields.create(menuItemType.id, { + id: "CPxFkf5cRPKm0ORLakLX3Q", + label: "Feedback contacts", + field_type: "links", + api_key: "feedback_contacts", + validators: { + items_item_type: { + on_publish_with_unpublished_references_strategy: "fail", + on_reference_unpublish_strategy: "delete_references", + on_reference_delete_strategy: "delete_references", + item_types: [menuItemType.id], + }, + }, + appearance: { addons: [], editor: "links_select", parameters: {} }, + default_value: null, + }); + } +}