UNPKG

@tanglemedia/directus-collection-resource

Version:

Installs the Resource Collection to your Directus project.

448 lines (439 loc) 9.31 kB
const COLLECTION_NAME = "tngl_resource"; let SITE_BASE_URL = process.env.SITE_BASE_URL ?? ""; const SECTION_NAME = "resources"; function removeTrailingSlash(url) { return url.endsWith("/") ? url.slice(0, -1) : url; } if (SITE_BASE_URL) { SITE_BASE_URL = removeTrailingSlash(SITE_BASE_URL); } const COLLECTION_INSERTS = [ { accountability: "all", archive_app_filter: true, archive_field: "status", archive_value: "archived", collapse: "open", collection: COLLECTION_NAME, color: null, display_template: "{{cover_thumbnail}} {{title}}", group: null, hidden: false, icon: "file_present", item_duplication_fields: null, note: null, preview_url: null, singleton: false, sort: null, sort_field: null, translations: JSON.stringify([ { language: "en-US", translation: "Resources", }, { language: "en-CA", translation: "Resources", }, ]), unarchive_value: "draft", versioning: false, }, ]; const FIELD_INSERTS = [ { collection: COLLECTION_NAME, conditions: null, display: null, display_options: null, field: "id", group: null, hidden: true, interface: "input", note: null, options: null, readonly: true, required: false, sort: 1, special: null, translations: null, validation: null, validation_message: null, width: "full", }, { collection: COLLECTION_NAME, field: "sort", special: null, interface: "input", options: null, display: null, display_options: null, readonly: false, hidden: true, sort: 2, width: "full", translations: null, note: null, conditions: null, required: false, group: null, validation: null, validation_message: null, }, { collection: COLLECTION_NAME, conditions: null, display: "labels", display_options: JSON.stringify({ choices: [ { text: "$t:published", color: "var(--theme--primary)", value: "published", background: "var(--theme--primary-background)", foreground: "var(--theme--primary)", }, { text: "$t:draft", color: "var(--theme--foreground)", value: "draft", background: "var(--theme--background-normal)", foreground: "var(--theme--foreground)", }, { text: "$t:archived", color: "var(--theme--warning)", value: "archived", background: "var(--theme--warning-background)", foreground: "var(--theme--warning)", }, ], showAsDot: true, }), field: "status", group: null, hidden: false, interface: "select-dropdown", note: null, options: JSON.stringify({ choices: [ { text: "$t:published", color: "var(--theme--primary)", value: "published", }, { text: "$t:draft", color: "var(--theme--foreground)", value: "draft", }, { text: "$t:archived", color: "var(--theme--warning)", value: "archived", }, ], }), readonly: false, required: false, sort: 3, special: null, translations: null, validation: null, validation_message: null, width: "full", }, { collection: COLLECTION_NAME, conditions: null, display: "user", display_options: null, field: "user_created", group: null, hidden: true, interface: "select-dropdown-m2o", note: null, options: JSON.stringify({ template: "{{avatar.$thumbnail}} {{first_name}} {{last_name}}", }), readonly: true, required: false, sort: 4, special: "user-created", translations: null, validation: null, validation_message: null, width: "half", }, { collection: COLLECTION_NAME, conditions: null, display: "user", display_options: null, field: "user_updated", group: null, hidden: true, interface: "select-dropdown-m2o", note: null, options: JSON.stringify({ template: "{{avatar.$thumbnail}} {{first_name}} {{last_name}}", }), readonly: true, required: false, sort: 5, special: "user-updated", translations: null, validation: null, validation_message: null, width: "half", }, { collection: COLLECTION_NAME, conditions: null, display: "datetime", display_options: JSON.stringify({ relative: true, }), field: "date_created", group: null, hidden: true, interface: "datetime", note: null, options: null, readonly: true, required: false, sort: 6, special: "date-created", translations: null, validation: null, validation_message: null, width: "half", }, { collection: COLLECTION_NAME, conditions: null, display: "datetime", display_options: JSON.stringify({ relative: true, }), field: "date_updated", group: null, hidden: true, interface: "datetime", note: null, options: null, readonly: true, required: false, sort: 7, special: "date-updated", translations: null, validation: null, validation_message: null, width: "half", }, { collection: COLLECTION_NAME, conditions: null, display: "formatted-value", display_options: null, field: "title", group: null, hidden: false, interface: "input", note: null, options: null, readonly: false, required: true, sort: 8, special: null, translations: null, validation: null, validation_message: null, width: null, }, { collection: COLLECTION_NAME, field: "slug", special: null, interface: "extension-wpslug", options: JSON.stringify({ slug: true, trim: true, prefix: `${SITE_BASE_URL}/${SECTION_NAME}/`, iconLeft: null, template: "{{title}}", placeholder: null, }), display: "extension-display-link", display_options: JSON.stringify({ prefix: `${SITE_BASE_URL}/${SECTION_NAME}/`, showPrefix: true, }), readonly: false, hidden: false, sort: 9, width: null, translations: JSON.stringify([ { language: "en-US", translation: "URL", }, { language: "en-CA", translation: "URL", }, ]), note: null, conditions: null, required: true, group: null, validation: JSON.stringify({ _and: [ { _and: [ { slug: { _neq: '""', }, }, { slug: { _nnull: true, }, }, { slug: { _nempty: true, }, }, ], }, ], }), validation_message: null, }, { collection: COLLECTION_NAME, conditions: null, display: "image", display_options: null, field: "cover_thumbnail", group: null, hidden: false, interface: "file-image", note: "Thumbnail image that gets displayed when viewing this resource in card or list view on the website.", options: JSON.stringify({ crop: false, }), readonly: false, required: false, sort: 10, special: "file", translations: null, validation: null, validation_message: null, width: "full", }, { collection: COLLECTION_NAME, conditions: null, display: null, display_options: null, field: "file", group: null, hidden: false, interface: "file", note: "Attached file of this resource. This is displayed on the website that can be downloaded.", options: null, readonly: false, required: false, sort: 11, special: "file", translations: null, validation: null, validation_message: null, width: "full", }, { collection: COLLECTION_NAME, field: "seo", special: "alias,no-data,group", interface: "group-detail", options: null, display: null, display_options: null, readonly: false, hidden: false, sort: 30, width: "full", translations: null, note: null, conditions: null, required: false, group: null, validation: null, validation_message: null, }, { collection: COLLECTION_NAME, conditions: null, display: null, display_options: null, field: "keywords", group: "seo", hidden: false, interface: "tags", note: null, options: null, readonly: false, required: false, sort: 1, special: "cast-json", translations: null, validation: null, validation_message: null, width: null, }, { collection: COLLECTION_NAME, conditions: null, display: null, display_options: null, field: "description", group: "seo", hidden: false, interface: "input-multiline", note: null, options: null, readonly: false, required: false, sort: 2, special: null, translations: null, validation: null, validation_message: null, width: null, }, ]; export async function up(knex) { // if row exists in directus_collections table, do not proceed with migration const collectionExists = await knex("directus_collections") .select("collection") .where("collection", COLLECTION_NAME) .first(); // register table into `directus_collections` table // for full list of directus_collections properties, refer to: https://docs.directus.io/reference/system/collections.html if (!collectionExists) { await knex("directus_collections").insert(COLLECTION_INSERTS); } // register fields into `directus_fields` table // for full list of directus_fields properties, refer to: https://docs.directus.io/reference/system/fields.html await knex("directus_fields").insert(FIELD_INSERTS); } export async function down(knex) { // remove associated data from directus_fields table await knex("directus_fields").where("collection", COLLECTION_NAME).del(); // remove associated data from directus_collections table await knex("directus_collections").where("collection", COLLECTION_NAME).del(); }