From d55f1441cb1f3e855d23b8f58972a66c3b441a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20N=C3=A4ser?= Date: Tue, 7 Nov 2023 11:51:17 +0100 Subject: [PATCH] feat: add home dynamic zone --- src/api/page/content-types/page/schema.json | 9 +++-- .../vendor/content-types/vendor/schema.json | 36 +++++++++++++++++++ src/api/vendor/controllers/vendor.ts | 7 ++++ src/api/vendor/routes/vendor.ts | 7 ++++ src/api/vendor/services/vendor.ts | 7 ++++ src/components/actions/button.json | 29 +++++++++++++++ src/components/content/carousel.json | 18 ++++++++++ src/components/content/text-box.json | 35 ++++++++++++++++++ src/components/media/carousel-image.json | 28 +++++++++++++++ src/components/media/carousel-item.json | 33 +++++++++++++++++ src/components/media/mosaic-item.json | 18 ++++++++++ src/components/media/mosaic.json | 21 +++++++++++ src/components/media/video-box.json | 25 +++++++++++++ src/components/shared/seo.json | 17 +++++---- src/components/utils/navigate.json | 19 ++++++++++ 15 files changed, 301 insertions(+), 8 deletions(-) create mode 100644 src/api/vendor/content-types/vendor/schema.json create mode 100644 src/api/vendor/controllers/vendor.ts create mode 100644 src/api/vendor/routes/vendor.ts create mode 100644 src/api/vendor/services/vendor.ts create mode 100644 src/components/actions/button.json create mode 100644 src/components/content/carousel.json create mode 100644 src/components/content/text-box.json create mode 100644 src/components/media/carousel-image.json create mode 100644 src/components/media/carousel-item.json create mode 100644 src/components/media/mosaic-item.json create mode 100644 src/components/media/mosaic.json create mode 100644 src/components/media/video-box.json create mode 100644 src/components/utils/navigate.json diff --git a/src/api/page/content-types/page/schema.json b/src/api/page/content-types/page/schema.json index 04076af..010c4e5 100644 --- a/src/api/page/content-types/page/schema.json +++ b/src/api/page/content-types/page/schema.json @@ -24,9 +24,14 @@ "repeatable": false, "component": "shared.seo" }, - "Login": { + "home": { "type": "dynamiczone", - "components": [] + "components": [ + "media.mosaic", + "content.text-box", + "media.video-box", + "content.carousel" + ] } } } diff --git a/src/api/vendor/content-types/vendor/schema.json b/src/api/vendor/content-types/vendor/schema.json new file mode 100644 index 0000000..5735fd5 --- /dev/null +++ b/src/api/vendor/content-types/vendor/schema.json @@ -0,0 +1,36 @@ +{ + "kind": "collectionType", + "collectionName": "vendor", + "info": { + "singularName": "vendor", + "pluralName": "vendors", + "displayName": "Vendor", + "description": "" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string" + }, + "slug": { + "type": "uid", + "targetField": "name", + "required": true, + "private": true + }, + "active": { + "type": "boolean" + }, + "admin_users": { + "type": "relation", + "relation": "oneToMany", + "target": "admin::user" + }, + "override": { + "type": "boolean" + } + } +} diff --git a/src/api/vendor/controllers/vendor.ts b/src/api/vendor/controllers/vendor.ts new file mode 100644 index 0000000..9a3d46a --- /dev/null +++ b/src/api/vendor/controllers/vendor.ts @@ -0,0 +1,7 @@ +/** + * vendor controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::vendor.vendor'); diff --git a/src/api/vendor/routes/vendor.ts b/src/api/vendor/routes/vendor.ts new file mode 100644 index 0000000..290b771 --- /dev/null +++ b/src/api/vendor/routes/vendor.ts @@ -0,0 +1,7 @@ +/** + * vendor router + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreRouter('api::vendor.vendor'); diff --git a/src/api/vendor/services/vendor.ts b/src/api/vendor/services/vendor.ts new file mode 100644 index 0000000..0151a2e --- /dev/null +++ b/src/api/vendor/services/vendor.ts @@ -0,0 +1,7 @@ +/** + * vendor service + */ + +import { factories } from '@strapi/strapi'; + +export default factories.createCoreService('api::vendor.vendor'); diff --git a/src/components/actions/button.json b/src/components/actions/button.json new file mode 100644 index 0000000..fdf8672 --- /dev/null +++ b/src/components/actions/button.json @@ -0,0 +1,29 @@ +{ + "collectionName": "components_actions_buttons", + "info": { + "displayName": "button" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "path": { + "type": "string" + }, + "type": { + "type": "enumeration", + "enum": [ + "primary", + "secondary" + ] + }, + "source": { + "type": "enumeration", + "enum": [ + "external", + "internal" + ] + } + } +} diff --git a/src/components/content/carousel.json b/src/components/content/carousel.json new file mode 100644 index 0000000..20cb006 --- /dev/null +++ b/src/components/content/carousel.json @@ -0,0 +1,18 @@ +{ + "collectionName": "components_content_carousels", + "info": { + "displayName": "carousel", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "items": { + "type": "component", + "repeatable": true, + "component": "media.carousel-item" + } + } +} diff --git a/src/components/content/text-box.json b/src/components/content/text-box.json new file mode 100644 index 0000000..572b455 --- /dev/null +++ b/src/components/content/text-box.json @@ -0,0 +1,35 @@ +{ + "collectionName": "components_content_text_boxes", + "info": { + "displayName": "Text Box" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "content": { + "type": "richtext" + }, + "imageLeft": { + "allowedTypes": [ + "images", + "files", + "videos", + "audios" + ], + "type": "media", + "multiple": false + }, + "imageRight": { + "allowedTypes": [ + "images", + "files", + "videos", + "audios" + ], + "type": "media", + "multiple": false + } + } +} diff --git a/src/components/media/carousel-image.json b/src/components/media/carousel-image.json new file mode 100644 index 0000000..d3b7200 --- /dev/null +++ b/src/components/media/carousel-image.json @@ -0,0 +1,28 @@ +{ + "collectionName": "components_media_carousel_images", + "info": { + "displayName": "carousel image", + "description": "" + }, + "options": {}, + "attributes": { + "orientation": { + "type": "enumeration", + "enum": [ + "rightside", + "leftside" + ] + }, + "cover": { + "type": "media", + "multiple": false, + "required": false, + "allowedTypes": [ + "images", + "files", + "videos", + "audios" + ] + } + } +} diff --git a/src/components/media/carousel-item.json b/src/components/media/carousel-item.json new file mode 100644 index 0000000..e5a2df4 --- /dev/null +++ b/src/components/media/carousel-item.json @@ -0,0 +1,33 @@ +{ + "collectionName": "components_media_carousel_items", + "info": { + "displayName": "carousel item", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "illustration": { + "type": "component", + "repeatable": false, + "component": "media.carousel-image" + }, + "actions": { + "type": "component", + "repeatable": true, + "component": "actions.button" + }, + "columns": { + "type": "enumeration", + "enum": [ + "one", + "two" + ] + } + } +} diff --git a/src/components/media/mosaic-item.json b/src/components/media/mosaic-item.json new file mode 100644 index 0000000..f22bdb4 --- /dev/null +++ b/src/components/media/mosaic-item.json @@ -0,0 +1,18 @@ +{ + "collectionName": "components_media_mosaic_items", + "info": { + "displayName": "Mosaic item" + }, + "options": {}, + "attributes": { + "icon": { + "type": "string" + }, + "title": { + "type": "string" + }, + "description": { + "type": "string" + } + } +} diff --git a/src/components/media/mosaic.json b/src/components/media/mosaic.json new file mode 100644 index 0000000..ec1d8a2 --- /dev/null +++ b/src/components/media/mosaic.json @@ -0,0 +1,21 @@ +{ + "collectionName": "components_media_mosaics", + "info": { + "displayName": "mosaic", + "description": "" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "items": { + "type": "component", + "repeatable": true, + "component": "media.mosaic-item" + } + } +} diff --git a/src/components/media/video-box.json b/src/components/media/video-box.json new file mode 100644 index 0000000..ee877a3 --- /dev/null +++ b/src/components/media/video-box.json @@ -0,0 +1,25 @@ +{ + "collectionName": "components_media_video_boxes", + "info": { + "displayName": "Video Box" + }, + "options": {}, + "attributes": { + "title": { + "type": "string" + }, + "description": { + "type": "richtext" + }, + "video": { + "allowedTypes": [ + "images", + "files", + "videos", + "audios" + ], + "type": "media", + "multiple": false + } + } +} diff --git a/src/components/shared/seo.json b/src/components/shared/seo.json index a4a386a..021fcc7 100644 --- a/src/components/shared/seo.json +++ b/src/components/shared/seo.json @@ -19,18 +19,23 @@ "repeatable": false, "component": "shared.shared-image" }, - "Meta": { - "displayName": "meta", - "type": "component", - "repeatable": true, - "component": "meta.meta" - }, "preventIndexing": { "type": "boolean", "default": false }, "structuredData": { "type": "json" + }, + "metaType": { + "type": "enumeration", + "enum": [ + "article", + "website", + "profile", + "video", + "music", + "book" + ] } } } diff --git a/src/components/utils/navigate.json b/src/components/utils/navigate.json new file mode 100644 index 0000000..e70bcc9 --- /dev/null +++ b/src/components/utils/navigate.json @@ -0,0 +1,19 @@ +{ + "collectionName": "components_utils_navigates", + "info": { + "displayName": "Navigate" + }, + "options": {}, + "attributes": { + "path": { + "type": "string" + }, + "source": { + "type": "enumeration", + "enum": [ + "external", + "internal" + ] + } + } +}