2024-03-03 18:18:42 +01:00

91 lines
2.8 KiB
TypeScript

import { CollectionGroups, Collections } from "../../constants";
import { iconField } from "../../fields/iconField/iconField";
import { imageField } from "../../fields/imageField/imageField";
import { rowField } from "../../fields/rowField/rowField";
import { slugField } from "../../fields/slugField/slugField";
import { translatedFields } from "../../fields/translatedFields/translatedFields";
import { buildCollectionConfig } from "../../utils/collectionConfig";
import { createEditor } from "../../utils/editor";
import { getBySlugEndpoint } from "./endpoints/getBySlugEndpoint";
import { getRootFoldersEndpoint } from "./endpoints/rootEndpoint";
const fields = {
slug: "slug",
translations: "translations",
translationsName: "name",
translationsDescription: "description",
sections: "sections",
sectionsSubfolders: "subfolders",
sectionsTranslations: "translations",
sectionsTranslationsName: "name",
files: "files",
darkThumbnail: "darkThumbnail",
lightThumbnail: "lightThumbnail",
icon: "icon",
} as const satisfies Record<string, string>;
export const Folders = buildCollectionConfig({
slug: Collections.Folders,
labels: { singular: "Folder", plural: "Folders" },
admin: {
useAsTitle: fields.slug,
group: CollectionGroups.Collections,
},
endpoints: [getRootFoldersEndpoint, getBySlugEndpoint],
fields: [
rowField([slugField({ name: fields.slug }), iconField({ name: fields.icon })]),
rowField([
imageField({ name: fields.lightThumbnail, relationTo: Collections.FoldersThumbnails }),
imageField({ name: fields.darkThumbnail, relationTo: Collections.FoldersThumbnails }),
]),
translatedFields({
name: fields.translations,
admin: { useAsTitle: fields.translationsName },
fields: [
{
name: fields.translationsName,
type: "text",
required: true,
},
{
name: fields.translationsDescription,
type: "richText",
editor: createEditor({ inlines: true, lists: true, links: true }),
},
],
}),
{
name: "sections",
type: "array",
fields: [
translatedFields({
name: fields.sectionsTranslations,
admin: {
useAsTitle: fields.sectionsTranslationsName,
condition: (data) => data[fields.sections]?.length > 1,
},
fields: [
{
name: fields.sectionsTranslationsName,
type: "text",
required: true,
},
],
}),
{
name: fields.sectionsSubfolders,
type: "relationship",
relationTo: Collections.Folders,
hasMany: true,
},
],
},
{
type: "relationship",
name: fields.files,
relationTo: [Collections.Collectibles, Collections.Pages],
hasMany: true,
},
],
});