move mosaic items to collection type

This commit is contained in:
nicwands 2026-06-09 14:42:57 -04:00
parent d4f66f34db
commit 64e3207ffb
10 changed files with 161 additions and 42 deletions

View file

@ -12,9 +12,9 @@
"pluginOptions": {}, "pluginOptions": {},
"attributes": { "attributes": {
"mosaic_items": { "mosaic_items": {
"type": "component", "type": "relation",
"component": "global.mosaic-item", "relation": "oneToMany",
"repeatable": true "target": "api::mosaic-item.mosaic-item"
} }
} }
} }

View file

@ -0,0 +1,41 @@
{
"kind": "collectionType",
"collectionName": "mosaic_items",
"info": {
"singularName": "mosaic-item",
"pluralName": "mosaic-items",
"displayName": "Mosaic Item"
},
"options": {
"draftAndPublish": true
},
"pluginOptions": {},
"attributes": {
"slug": {
"type": "uid",
"targetField": "title"
},
"title": {
"type": "string"
},
"image": {
"type": "media",
"multiple": false,
"allowedTypes": [
"images"
]
},
"dl": {
"type": "component",
"component": "global.descriptive-list",
"repeatable": true
},
"content": {
"type": "dynamiczone",
"components": [
"global.copy",
"global.media"
]
}
}
}

View file

@ -0,0 +1,7 @@
/**
* mosaic-item controller
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreController('api::mosaic-item.mosaic-item');

View file

@ -0,0 +1,7 @@
/**
* mosaic-item router
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreRouter('api::mosaic-item.mosaic-item');

View file

@ -0,0 +1,7 @@
/**
* mosaic-item service
*/
import { factories } from '@strapi/strapi';
export default factories.createCoreService('api::mosaic-item.mosaic-item');

View file

@ -0,0 +1,14 @@
{
"collectionName": "components_global_copies",
"info": {
"displayName": "Copy",
"icon": "bold"
},
"options": {},
"attributes": {
"content": {
"type": "blocks"
}
},
"config": {}
}

View file

@ -0,0 +1,26 @@
{
"collectionName": "components_global_media",
"info": {
"displayName": "Media",
"icon": "landscape"
},
"options": {},
"attributes": {
"image": {
"type": "media",
"multiple": false,
"required": true,
"allowedTypes": [
"images"
]
},
"video": {
"type": "media",
"multiple": false,
"allowedTypes": [
"videos"
]
}
},
"config": {}
}

View file

@ -1,29 +0,0 @@
{
"collectionName": "components_global_mosaic_items",
"info": {
"displayName": "Mosaic Item",
"icon": "apps"
},
"options": {},
"attributes": {
"image": {
"type": "media",
"multiple": false,
"allowedTypes": [
"images"
]
},
"title": {
"type": "string"
},
"dl": {
"type": "component",
"component": "global.descriptive-list",
"repeatable": true
},
"content": {
"type": "blocks"
}
},
"config": {}
}

View file

@ -1,5 +1,16 @@
import type { Schema, Struct } from '@strapi/strapi'; import type { Schema, Struct } from '@strapi/strapi';
export interface GlobalCopy extends Struct.ComponentSchema {
collectionName: 'components_global_copies';
info: {
displayName: 'Copy';
icon: 'bold';
};
attributes: {
content: Schema.Attribute.Blocks;
};
}
export interface GlobalDescriptiveList extends Struct.ComponentSchema { export interface GlobalDescriptiveList extends Struct.ComponentSchema {
collectionName: 'components_global_descriptive_lists'; collectionName: 'components_global_descriptive_lists';
info: { info: {
@ -12,17 +23,15 @@ export interface GlobalDescriptiveList extends Struct.ComponentSchema {
}; };
} }
export interface GlobalMosaicItem extends Struct.ComponentSchema { export interface GlobalMedia extends Struct.ComponentSchema {
collectionName: 'components_global_mosaic_items'; collectionName: 'components_global_media';
info: { info: {
displayName: 'Mosaic Item'; displayName: 'Media';
icon: 'apps'; icon: 'landscape';
}; };
attributes: { attributes: {
content: Schema.Attribute.Blocks; image: Schema.Attribute.Media<'images'> & Schema.Attribute.Required;
dl: Schema.Attribute.Component<'global.descriptive-list', true>; video: Schema.Attribute.Media<'videos'>;
image: Schema.Attribute.Media<'images'>;
title: Schema.Attribute.String;
}; };
} }
@ -42,8 +51,9 @@ export interface GlobalSeo extends Struct.ComponentSchema {
declare module '@strapi/strapi' { declare module '@strapi/strapi' {
export module Public { export module Public {
export interface ComponentSchemas { export interface ComponentSchemas {
'global.copy': GlobalCopy;
'global.descriptive-list': GlobalDescriptiveList; 'global.descriptive-list': GlobalDescriptiveList;
'global.mosaic-item': GlobalMosaicItem; 'global.media': GlobalMedia;
'global.seo': GlobalSeo; 'global.seo': GlobalSeo;
} }
} }

View file

@ -487,7 +487,10 @@ export interface ApiHomeHome extends Struct.SingleTypeSchema {
locale: Schema.Attribute.String & Schema.Attribute.Private; locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation<'oneToMany', 'api::home.home'> & localizations: Schema.Attribute.Relation<'oneToMany', 'api::home.home'> &
Schema.Attribute.Private; Schema.Attribute.Private;
mosaic_items: Schema.Attribute.Component<'global.mosaic-item', true>; mosaic_items: Schema.Attribute.Relation<
'oneToMany',
'api::mosaic-item.mosaic-item'
>;
publishedAt: Schema.Attribute.DateTime; publishedAt: Schema.Attribute.DateTime;
updatedAt: Schema.Attribute.DateTime; updatedAt: Schema.Attribute.DateTime;
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
@ -495,6 +498,38 @@ export interface ApiHomeHome extends Struct.SingleTypeSchema {
}; };
} }
export interface ApiMosaicItemMosaicItem extends Struct.CollectionTypeSchema {
collectionName: 'mosaic_items';
info: {
displayName: 'Mosaic Item';
pluralName: 'mosaic-items';
singularName: 'mosaic-item';
};
options: {
draftAndPublish: true;
};
attributes: {
content: Schema.Attribute.DynamicZone<['global.copy', 'global.media']>;
createdAt: Schema.Attribute.DateTime;
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
dl: Schema.Attribute.Component<'global.descriptive-list', true>;
image: Schema.Attribute.Media<'images'>;
locale: Schema.Attribute.String & Schema.Attribute.Private;
localizations: Schema.Attribute.Relation<
'oneToMany',
'api::mosaic-item.mosaic-item'
> &
Schema.Attribute.Private;
publishedAt: Schema.Attribute.DateTime;
slug: Schema.Attribute.UID<'title'>;
title: Schema.Attribute.String;
updatedAt: Schema.Attribute.DateTime;
updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
Schema.Attribute.Private;
};
}
export interface PluginContentReleasesRelease export interface PluginContentReleasesRelease
extends Struct.CollectionTypeSchema { extends Struct.CollectionTypeSchema {
collectionName: 'strapi_releases'; collectionName: 'strapi_releases';
@ -1008,6 +1043,7 @@ declare module '@strapi/strapi' {
'admin::user': AdminUser; 'admin::user': AdminUser;
'api::global.global': ApiGlobalGlobal; 'api::global.global': ApiGlobalGlobal;
'api::home.home': ApiHomeHome; 'api::home.home': ApiHomeHome;
'api::mosaic-item.mosaic-item': ApiMosaicItemMosaicItem;
'plugin::content-releases.release': PluginContentReleasesRelease; 'plugin::content-releases.release': PluginContentReleasesRelease;
'plugin::content-releases.release-action': PluginContentReleasesReleaseAction; 'plugin::content-releases.release-action': PluginContentReleasesReleaseAction;
'plugin::i18n.locale': PluginI18NLocale; 'plugin::i18n.locale': PluginI18NLocale;