feat: configure content collections and integrate TinaCMS with new video card components

This commit is contained in:
unknown 2026-05-13 22:14:22 -05:00
parent 67918079ca
commit ef1740e62d
14 changed files with 301 additions and 87 deletions

View File

@ -0,0 +1,65 @@
---
import { Icon } from "astro-icon/components";
import { Image } from "astro:assets";
const { props } = Astro.props;
const textColor = props.textColor || "";
const imageUrl = props.image || "";
//const bgClass = props.type === 'text'? `bg-[${props.bgColor}]` : `bg-[url(${props.image})] bg-cover`
---
{
props.type !== "imgText" && (
<div class="aspect-square overflow-hidden">
<div
class={`flex flex-col justify-center h-full bg-[${props.bgColor}]`}
>
{props.type === "text" && (
<div class="p-8 sm:p-16 md:p-8 xl:p-16 flex flex-col justify-between h-full">
<Icon
name={props.icon}
class={`text-8xl text-[${textColor}] hidden lg:block`}
/>
<p class={`text-[${textColor}]`}>{props.text}</p>
</div>
)}
{props.type === "image" && (
<div class="object-cover aspect-square flex">
<Image
class="w-full object-cover"
src={props.image}
alt={props.text || ""}
width="400"
height="400"
/>
</div>
)}
</div>
</div>
)
}
{
props.type === "imgText" && (
<div
class={`flex flex-col justify-between h-full bg-[${props.bgColor}]`}
>
<div class="grid grid-cols-1 gap-0 p-8 font-bold">
<div class="px-12 py-10">
<Icon name={props.icon} class="text-3xl" />
<p class={`font-primary text-xl text-[${textColor}]`}>
{props.text}
</p>
</div>
<div class="object-cover aspect-square flex">
<img
class="w-full h-auto object-cover"
src={props.image}
alt=""
/>
</div>
</div>
</div>
)
}

View File

@ -0,0 +1,65 @@
---
import { Icon } from "astro-icon/components";
import { Image } from "astro:assets";
const { props } = Astro.props;
const textColor = props.textColor || "";
const imageUrl = props.image || "";
//const bgClass = props.type === 'text'? `bg-[${props.bgColor}]` : `bg-[url(${props.image})] bg-cover`
---
{
props.type !== "imgText" && (
<div class="aspect-square overflow-hidden">
<div
class={`flex flex-col justify-center h-full bg-[${props.bgColor}]`}
>
{props.type === "text" && (
<div class="p-8 sm:p-16 md:p-8 xl:p-16 flex flex-col justify-between h-full">
<Icon
name={props.icon}
class={`text-8xl text-[${textColor}] hidden lg:block`}
/>
<p class={`text-[${textColor}]`}>{props.text}</p>
</div>
)}
{props.type === "image" && (
<div class="object-cover aspect-square flex">
<Image
class="w-full object-cover"
src={props.image}
alt={props.text || ""}
width="400"
height="400"
/>
</div>
)}
</div>
</div>
)
}
{
props.type === "imgText" && (
<div
class={`flex flex-col justify-between h-full bg-[${props.bgColor}]`}
>
<div class="grid grid-cols-1 gap-0 p-8 font-bold">
<div class="px-12 py-10">
<Icon name={props.icon} class="text-3xl" />
<p class={`font-primary text-xl text-[${textColor}]`}>
{props.text}
</p>
</div>
<div class="object-cover aspect-square flex">
<img
class="w-full h-auto object-cover"
src={props.image}
alt=""
/>
</div>
</div>
</div>
)
}

View File

@ -26,4 +26,17 @@ const news = defineCollection({
}), }),
}); });
export const collections = { news }; const videos = defineCollection({
loader: glob({ pattern: "**/*.md", base: "./src/content/videos" }),
schema: ({ image }) => z.object({
locale: z.string().describe("Video main language"),
title: z.string(),
date: z.date(),
draft: z.boolean().optional(),
video_yt: z.string().optional(),
description: z.string().optional(),
thumbnail: image().optional().describe("Video thumbnail image"),
}),
});
export const collections = { news, videos };

View File

@ -1,7 +0,0 @@
---
locale: es
title: test
---
# test

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"DocumentConnection":{"type":"DocumentConnection","resolveType":"multiCollectionDocumentList","collections":["news","documentaries"]},"Node":{"type":"Node","resolveType":"nodeDocument"},"DocumentNode":{"type":"DocumentNode","resolveType":"multiCollectionDocument","createDocument":"create","updateDocument":"update"},"News":{"type":"News","resolveType":"collectionDocument","collection":"news","createNews":"create","updateNews":"update"},"NewsConnection":{"type":"NewsConnection","resolveType":"collectionDocumentList","collection":"news"},"Documentaries":{"type":"Documentaries","resolveType":"collectionDocument","collection":"documentaries","createDocumentaries":"create","updateDocumentaries":"update"},"DocumentariesConnection":{"type":"DocumentariesConnection","resolveType":"collectionDocumentList","collection":"documentaries"}} {"DocumentConnection":{"type":"DocumentConnection","resolveType":"multiCollectionDocumentList","collections":["news","videos"]},"Node":{"type":"Node","resolveType":"nodeDocument"},"DocumentNode":{"type":"DocumentNode","resolveType":"multiCollectionDocument","createDocument":"create","updateDocument":"update"},"News":{"type":"News","resolveType":"collectionDocument","collection":"news","createNews":"create","updateNews":"update"},"NewsConnection":{"type":"NewsConnection","resolveType":"collectionDocumentList","collection":"news"},"Videos":{"type":"Videos","resolveType":"collectionDocument","collection":"videos","createVideos":"create","updateVideos":"update"},"VideosConnection":{"type":"VideosConnection","resolveType":"collectionDocumentList","collection":"videos"}}

View File

@ -1 +1 @@
{"version":{"fullVersion":"2.4.0","major":"2","minor":"4","patch":"0"},"meta":{"flags":["experimentalData"]},"collections":[{"name":"news","label":"News","path":"src/content/news","format":"md","match":{"include":"**/*"},"ui":{"filename":{"readonly":false}},"fields":[{"type":"string","name":"locale","label":"Language","options":[{"label":"Español","value":"es"},{"label":"English","value":"en"},{"label":"Português","value":"pt"},{"label":"Kinyarwanda","value":"rw"},{"label":"Frances","value":"fr"}],"namespace":["news","locale"],"searchable":true,"uid":false},{"type":"string","name":"title","label":"Title","isTitle":true,"required":true,"namespace":["news","title"],"searchable":true,"uid":false},{"type":"datetime","name":"date","label":"Date","required":true,"namespace":["news","date"],"searchable":true,"uid":false},{"type":"string","name":"slug","label":"Slug","namespace":["news","slug"],"searchable":true,"uid":false},{"type":"string","name":"place","label":"Place","namespace":["news","place"],"searchable":true,"uid":false},{"type":"string","name":"country","label":"Country","namespace":["news","country"],"searchable":true,"uid":false},{"type":"string","name":"city","label":"City","namespace":["news","city"],"searchable":true,"uid":false},{"type":"image","name":"thumbnail","label":"Thumbnail URL","namespace":["news","thumbnail"],"searchable":false,"uid":false},{"type":"image","name":"thumbnail_square","label":"Thumbnail Square URL","namespace":["news","thumbnail_square"],"searchable":false,"uid":false},{"type":"string","name":"tags","label":"Tags","list":true,"namespace":["news","tags"],"searchable":true,"uid":false},{"type":"object","name":"gallery","label":"Gallery","list":true,"fields":[{"type":"image","name":"image","label":"Image","namespace":["news","gallery","image"],"searchable":false,"uid":false}],"namespace":["news","gallery"],"searchable":true,"uid":false},{"type":"string","name":"youtube","label":"YouTube ID","namespace":["news","youtube"],"searchable":true,"uid":false},{"type":"boolean","name":"draft","label":"Draft","namespace":["news","draft"],"searchable":true,"uid":false},{"type":"rich-text","name":"body","label":"Content","isBody":true,"namespace":["news","body"],"searchable":true,"parser":{"type":"markdown"},"uid":false}],"namespace":["news"]},{"name":"documentaries","label":"Documentaries","path":"src/content/documentaries","format":"md","fields":[{"type":"string","name":"locale","label":"Language","options":[{"label":"Español","value":"es"},{"label":"English","value":"en"},{"label":"Português","value":"pt"},{"label":"Kinyarwanda","value":"rw"}],"namespace":["documentaries","locale"],"searchable":true,"uid":false},{"type":"string","name":"title","label":"Title","isTitle":true,"required":true,"namespace":["documentaries","title"],"searchable":true,"uid":false},{"type":"string","name":"video_yt","label":"YouTube ID","namespace":["documentaries","video_yt"],"searchable":true,"uid":false},{"type":"datetime","name":"date","label":"Date","required":true,"namespace":["documentaries","date"],"searchable":true,"uid":false}],"namespace":["documentaries"]}],"config":{"media":{"tina":{"publicFolder":"public","mediaRoot":"public/images"}}}} {"version":{"fullVersion":"2.4.0","major":"2","minor":"4","patch":"0"},"meta":{"flags":["experimentalData"]},"collections":[{"name":"news","label":"News","path":"src/content/news","format":"md","match":{"include":"**/*"},"ui":{"filename":{"readonly":false}},"fields":[{"type":"string","name":"locale","label":"Language","options":[{"label":"Español","value":"es"},{"label":"English","value":"en"},{"label":"Português","value":"pt"},{"label":"Kinyarwanda","value":"rw"},{"label":"Frances","value":"fr"}],"namespace":["news","locale"],"searchable":true,"uid":false},{"type":"string","name":"title","label":"Title","isTitle":true,"required":true,"namespace":["news","title"],"searchable":true,"uid":false},{"type":"datetime","name":"date","label":"Date","required":true,"namespace":["news","date"],"searchable":true,"uid":false},{"type":"string","name":"slug","label":"Slug","namespace":["news","slug"],"searchable":true,"uid":false},{"type":"string","name":"place","label":"Place","namespace":["news","place"],"searchable":true,"uid":false},{"type":"string","name":"country","label":"Country","namespace":["news","country"],"searchable":true,"uid":false},{"type":"string","name":"city","label":"City","namespace":["news","city"],"searchable":true,"uid":false},{"type":"image","name":"thumbnail","label":"Thumbnail URL","namespace":["news","thumbnail"],"searchable":false,"uid":false},{"type":"image","name":"thumbnail_square","label":"Thumbnail Square URL","namespace":["news","thumbnail_square"],"searchable":false,"uid":false},{"type":"string","name":"tags","label":"Tags","list":true,"namespace":["news","tags"],"searchable":true,"uid":false},{"type":"object","name":"gallery","label":"Gallery","list":true,"fields":[{"type":"image","name":"image","label":"Image","namespace":["news","gallery","image"],"searchable":false,"uid":false}],"namespace":["news","gallery"],"searchable":true,"uid":false},{"type":"string","name":"youtube","label":"YouTube ID","namespace":["news","youtube"],"searchable":true,"uid":false},{"type":"boolean","name":"draft","label":"Draft","namespace":["news","draft"],"searchable":true,"uid":false},{"type":"rich-text","name":"body","label":"Content","isBody":true,"namespace":["news","body"],"searchable":true,"parser":{"type":"markdown"},"uid":false}],"namespace":["news"]},{"name":"videos","label":"Videos","path":"src/content/videos","format":"md","fields":[{"type":"string","name":"locale","label":"Language","options":[{"label":"Español","value":"es"},{"label":"English","value":"en"},{"label":"Português","value":"pt"},{"label":"Kinyarwanda","value":"rw"}],"namespace":["videos","locale"],"searchable":true,"uid":false},{"type":"string","name":"title","label":"Title","isTitle":true,"required":true,"namespace":["videos","title"],"searchable":true,"uid":false},{"type":"string","name":"video_yt","label":"YouTube ID","namespace":["videos","video_yt"],"searchable":true,"uid":false},{"type":"datetime","name":"date","label":"Date","required":true,"namespace":["videos","date"],"searchable":true,"uid":false},{"type":"string","name":"slug","label":"Slug","namespace":["videos","slug"],"searchable":true,"uid":false},{"type":"string","name":"description","label":"Description","ui":{"component":"textarea"},"namespace":["videos","description"],"searchable":true,"uid":false},{"type":"string","name":"thumbnail","label":"Thumbnail URL","namespace":["videos","thumbnail"],"searchable":true,"uid":false},{"type":"boolean","name":"draft","label":"Draft","namespace":["videos","draft"],"searchable":true,"uid":false}],"namespace":["videos"]}],"config":{"media":{"tina":{"publicFolder":"public","mediaRoot":"public/images"}}}}

View File

@ -127,9 +127,9 @@ var config_default = defineConfig({
] ]
}, },
{ {
name: "documentaries", name: "videos",
label: "Documentaries", label: "Videos",
path: "src/content/documentaries", path: "src/content/videos",
format: "md", format: "md",
fields: [ fields: [
{ {
@ -160,6 +160,29 @@ var config_default = defineConfig({
name: "date", name: "date",
label: "Date", label: "Date",
required: true required: true
},
{
type: "string",
name: "slug",
label: "Slug"
},
{
type: "string",
name: "description",
label: "Description",
ui: {
component: "textarea"
}
},
{
type: "string",
name: "thumbnail",
label: "Thumbnail URL"
},
{
type: "boolean",
name: "draft",
label: "Draft"
} }
] ]
} }

View File

@ -19,10 +19,14 @@ fragment NewsParts on News {
body body
} }
fragment DocumentariesParts on Documentaries { fragment VideosParts on Videos {
__typename __typename
locale locale
title title
video_yt video_yt
date date
slug
description
thumbnail
draft
} }

View File

@ -53,8 +53,8 @@ query newsConnection($before: String, $after: String, $first: Float, $last: Floa
} }
} }
query documentaries($relativePath: String!) { query videos($relativePath: String!) {
documentaries(relativePath: $relativePath) { videos(relativePath: $relativePath) {
... on Document { ... on Document {
_sys { _sys {
filename filename
@ -67,12 +67,12 @@ query documentaries($relativePath: String!) {
} }
id id
} }
...DocumentariesParts ...VideosParts
} }
} }
query documentariesConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: DocumentariesFilter) { query videosConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: VideosFilter) {
documentariesConnection( videosConnection(
before: $before before: $before
after: $after after: $after
first: $first first: $first
@ -102,7 +102,7 @@ query documentariesConnection($before: String, $after: String, $first: Float, $l
} }
id id
} }
...DocumentariesParts ...VideosParts
} }
} }
} }

View File

@ -56,13 +56,13 @@ type Query {
document(collection: String, relativePath: String): DocumentNode! document(collection: String, relativePath: String): DocumentNode!
news(relativePath: String): News! news(relativePath: String): News!
newsConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: NewsFilter): NewsConnection! newsConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: NewsFilter): NewsConnection!
documentaries(relativePath: String): Documentaries! videos(relativePath: String): Videos!
documentariesConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: DocumentariesFilter): DocumentariesConnection! videosConnection(before: String, after: String, first: Float, last: Float, sort: String, filter: VideosFilter): VideosConnection!
} }
input DocumentFilter { input DocumentFilter {
news: NewsFilter news: NewsFilter
documentaries: DocumentariesFilter videos: VideosFilter
} }
type DocumentConnectionEdges { type DocumentConnectionEdges {
@ -88,7 +88,7 @@ type Collection {
documents(before: String, after: String, first: Float, last: Float, sort: String, filter: DocumentFilter, folder: String): DocumentConnection! documents(before: String, after: String, first: Float, last: Float, sort: String, filter: DocumentFilter, folder: String): DocumentConnection!
} }
union DocumentNode = News | Documentaries | Folder union DocumentNode = News | Videos | Folder
type NewsGallery { type NewsGallery {
image: String image: String
@ -179,32 +179,40 @@ type NewsConnection implements Connection {
edges: [NewsConnectionEdges] edges: [NewsConnectionEdges]
} }
type Documentaries implements Node & Document { type Videos implements Node & Document {
locale: String locale: String
title: String! title: String!
video_yt: String video_yt: String
date: String! date: String!
slug: String
description: String
thumbnail: String
draft: Boolean
id: ID! id: ID!
_sys: SystemInfo! _sys: SystemInfo!
_values: JSON! _values: JSON!
} }
input DocumentariesFilter { input VideosFilter {
locale: StringFilter locale: StringFilter
title: StringFilter title: StringFilter
video_yt: StringFilter video_yt: StringFilter
date: DatetimeFilter date: DatetimeFilter
slug: StringFilter
description: StringFilter
thumbnail: StringFilter
draft: BooleanFilter
} }
type DocumentariesConnectionEdges { type VideosConnectionEdges {
cursor: String! cursor: String!
node: Documentaries node: Videos
} }
type DocumentariesConnection implements Connection { type VideosConnection implements Connection {
pageInfo: PageInfo! pageInfo: PageInfo!
totalCount: Float! totalCount: Float!
edges: [DocumentariesConnectionEdges] edges: [VideosConnectionEdges]
} }
type Mutation { type Mutation {
@ -215,19 +223,19 @@ type Mutation {
createFolder(collection: String, relativePath: String!): DocumentNode! createFolder(collection: String, relativePath: String!): DocumentNode!
updateNews(relativePath: String!, params: NewsMutation!): News! updateNews(relativePath: String!, params: NewsMutation!): News!
createNews(relativePath: String!, params: NewsMutation!): News! createNews(relativePath: String!, params: NewsMutation!): News!
updateDocumentaries(relativePath: String!, params: DocumentariesMutation!): Documentaries! updateVideos(relativePath: String!, params: VideosMutation!): Videos!
createDocumentaries(relativePath: String!, params: DocumentariesMutation!): Documentaries! createVideos(relativePath: String!, params: VideosMutation!): Videos!
} }
input DocumentUpdateMutation { input DocumentUpdateMutation {
news: NewsMutation news: NewsMutation
documentaries: DocumentariesMutation videos: VideosMutation
relativePath: String relativePath: String
} }
input DocumentMutation { input DocumentMutation {
news: NewsMutation news: NewsMutation
documentaries: DocumentariesMutation videos: VideosMutation
} }
input NewsGalleryMutation { input NewsGalleryMutation {
@ -251,11 +259,15 @@ input NewsMutation {
body: JSON body: JSON
} }
input DocumentariesMutation { input VideosMutation {
locale: String locale: String
title: String title: String
video_yt: String video_yt: String
date: String date: String
slug: String
description: String
thumbnail: String
draft: Boolean
} }
schema { schema {

View File

@ -84,8 +84,8 @@ export type Query = {
document: DocumentNode; document: DocumentNode;
news: News; news: News;
newsConnection: NewsConnection; newsConnection: NewsConnection;
documentaries: Documentaries; videos: Videos;
documentariesConnection: DocumentariesConnection; videosConnection: VideosConnection;
}; };
@ -125,23 +125,23 @@ export type QueryNewsConnectionArgs = {
}; };
export type QueryDocumentariesArgs = { export type QueryVideosArgs = {
relativePath?: InputMaybe<Scalars['String']['input']>; relativePath?: InputMaybe<Scalars['String']['input']>;
}; };
export type QueryDocumentariesConnectionArgs = { export type QueryVideosConnectionArgs = {
before?: InputMaybe<Scalars['String']['input']>; before?: InputMaybe<Scalars['String']['input']>;
after?: InputMaybe<Scalars['String']['input']>; after?: InputMaybe<Scalars['String']['input']>;
first?: InputMaybe<Scalars['Float']['input']>; first?: InputMaybe<Scalars['Float']['input']>;
last?: InputMaybe<Scalars['Float']['input']>; last?: InputMaybe<Scalars['Float']['input']>;
sort?: InputMaybe<Scalars['String']['input']>; sort?: InputMaybe<Scalars['String']['input']>;
filter?: InputMaybe<DocumentariesFilter>; filter?: InputMaybe<VideosFilter>;
}; };
export type DocumentFilter = { export type DocumentFilter = {
news?: InputMaybe<NewsFilter>; news?: InputMaybe<NewsFilter>;
documentaries?: InputMaybe<DocumentariesFilter>; videos?: InputMaybe<VideosFilter>;
}; };
export type DocumentConnectionEdges = { export type DocumentConnectionEdges = {
@ -181,7 +181,7 @@ export type CollectionDocumentsArgs = {
folder?: InputMaybe<Scalars['String']['input']>; folder?: InputMaybe<Scalars['String']['input']>;
}; };
export type DocumentNode = News | Documentaries | Folder; export type DocumentNode = News | Videos | Folder;
export type NewsGallery = { export type NewsGallery = {
__typename?: 'NewsGallery'; __typename?: 'NewsGallery';
@ -276,35 +276,43 @@ export type NewsConnection = Connection & {
edges?: Maybe<Array<Maybe<NewsConnectionEdges>>>; edges?: Maybe<Array<Maybe<NewsConnectionEdges>>>;
}; };
export type Documentaries = Node & Document & { export type Videos = Node & Document & {
__typename?: 'Documentaries'; __typename?: 'Videos';
locale?: Maybe<Scalars['String']['output']>; locale?: Maybe<Scalars['String']['output']>;
title: Scalars['String']['output']; title: Scalars['String']['output'];
video_yt?: Maybe<Scalars['String']['output']>; video_yt?: Maybe<Scalars['String']['output']>;
date: Scalars['String']['output']; date: Scalars['String']['output'];
slug?: Maybe<Scalars['String']['output']>;
description?: Maybe<Scalars['String']['output']>;
thumbnail?: Maybe<Scalars['String']['output']>;
draft?: Maybe<Scalars['Boolean']['output']>;
id: Scalars['ID']['output']; id: Scalars['ID']['output'];
_sys: SystemInfo; _sys: SystemInfo;
_values: Scalars['JSON']['output']; _values: Scalars['JSON']['output'];
}; };
export type DocumentariesFilter = { export type VideosFilter = {
locale?: InputMaybe<StringFilter>; locale?: InputMaybe<StringFilter>;
title?: InputMaybe<StringFilter>; title?: InputMaybe<StringFilter>;
video_yt?: InputMaybe<StringFilter>; video_yt?: InputMaybe<StringFilter>;
date?: InputMaybe<DatetimeFilter>; date?: InputMaybe<DatetimeFilter>;
slug?: InputMaybe<StringFilter>;
description?: InputMaybe<StringFilter>;
thumbnail?: InputMaybe<StringFilter>;
draft?: InputMaybe<BooleanFilter>;
}; };
export type DocumentariesConnectionEdges = { export type VideosConnectionEdges = {
__typename?: 'DocumentariesConnectionEdges'; __typename?: 'VideosConnectionEdges';
cursor: Scalars['String']['output']; cursor: Scalars['String']['output'];
node?: Maybe<Documentaries>; node?: Maybe<Videos>;
}; };
export type DocumentariesConnection = Connection & { export type VideosConnection = Connection & {
__typename?: 'DocumentariesConnection'; __typename?: 'VideosConnection';
pageInfo: PageInfo; pageInfo: PageInfo;
totalCount: Scalars['Float']['output']; totalCount: Scalars['Float']['output'];
edges?: Maybe<Array<Maybe<DocumentariesConnectionEdges>>>; edges?: Maybe<Array<Maybe<VideosConnectionEdges>>>;
}; };
export type Mutation = { export type Mutation = {
@ -316,8 +324,8 @@ export type Mutation = {
createFolder: DocumentNode; createFolder: DocumentNode;
updateNews: News; updateNews: News;
createNews: News; createNews: News;
updateDocumentaries: Documentaries; updateVideos: Videos;
createDocumentaries: Documentaries; createVideos: Videos;
}; };
@ -366,26 +374,26 @@ export type MutationCreateNewsArgs = {
}; };
export type MutationUpdateDocumentariesArgs = { export type MutationUpdateVideosArgs = {
relativePath: Scalars['String']['input']; relativePath: Scalars['String']['input'];
params: DocumentariesMutation; params: VideosMutation;
}; };
export type MutationCreateDocumentariesArgs = { export type MutationCreateVideosArgs = {
relativePath: Scalars['String']['input']; relativePath: Scalars['String']['input'];
params: DocumentariesMutation; params: VideosMutation;
}; };
export type DocumentUpdateMutation = { export type DocumentUpdateMutation = {
news?: InputMaybe<NewsMutation>; news?: InputMaybe<NewsMutation>;
documentaries?: InputMaybe<DocumentariesMutation>; videos?: InputMaybe<VideosMutation>;
relativePath?: InputMaybe<Scalars['String']['input']>; relativePath?: InputMaybe<Scalars['String']['input']>;
}; };
export type DocumentMutation = { export type DocumentMutation = {
news?: InputMaybe<NewsMutation>; news?: InputMaybe<NewsMutation>;
documentaries?: InputMaybe<DocumentariesMutation>; videos?: InputMaybe<VideosMutation>;
}; };
export type NewsGalleryMutation = { export type NewsGalleryMutation = {
@ -409,16 +417,20 @@ export type NewsMutation = {
body?: InputMaybe<Scalars['JSON']['input']>; body?: InputMaybe<Scalars['JSON']['input']>;
}; };
export type DocumentariesMutation = { export type VideosMutation = {
locale?: InputMaybe<Scalars['String']['input']>; locale?: InputMaybe<Scalars['String']['input']>;
title?: InputMaybe<Scalars['String']['input']>; title?: InputMaybe<Scalars['String']['input']>;
video_yt?: InputMaybe<Scalars['String']['input']>; video_yt?: InputMaybe<Scalars['String']['input']>;
date?: InputMaybe<Scalars['String']['input']>; date?: InputMaybe<Scalars['String']['input']>;
slug?: InputMaybe<Scalars['String']['input']>;
description?: InputMaybe<Scalars['String']['input']>;
thumbnail?: InputMaybe<Scalars['String']['input']>;
draft?: InputMaybe<Scalars['Boolean']['input']>;
}; };
export type NewsPartsFragment = { __typename: 'News', locale?: string | null, title: string, date: string, slug?: string | null, place?: string | null, country?: string | null, city?: string | null, thumbnail?: string | null, thumbnail_square?: string | null, tags?: Array<string | null> | null, youtube?: string | null, draft?: boolean | null, body?: any | null, gallery?: Array<{ __typename: 'NewsGallery', image?: string | null } | null> | null }; export type NewsPartsFragment = { __typename: 'News', locale?: string | null, title: string, date: string, slug?: string | null, place?: string | null, country?: string | null, city?: string | null, thumbnail?: string | null, thumbnail_square?: string | null, tags?: Array<string | null> | null, youtube?: string | null, draft?: boolean | null, body?: any | null, gallery?: Array<{ __typename: 'NewsGallery', image?: string | null } | null> | null };
export type DocumentariesPartsFragment = { __typename: 'Documentaries', locale?: string | null, title: string, video_yt?: string | null, date: string }; export type VideosPartsFragment = { __typename: 'Videos', locale?: string | null, title: string, video_yt?: string | null, date: string, slug?: string | null, description?: string | null, thumbnail?: string | null, draft?: boolean | null };
export type NewsQueryVariables = Exact<{ export type NewsQueryVariables = Exact<{
relativePath: Scalars['String']['input']; relativePath: Scalars['String']['input'];
@ -439,24 +451,24 @@ export type NewsConnectionQueryVariables = Exact<{
export type NewsConnectionQuery = { __typename?: 'Query', newsConnection: { __typename?: 'NewsConnection', totalCount: number, pageInfo: { __typename?: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor: string, endCursor: string }, edges?: Array<{ __typename?: 'NewsConnectionEdges', cursor: string, node?: { __typename: 'News', id: string, locale?: string | null, title: string, date: string, slug?: string | null, place?: string | null, country?: string | null, city?: string | null, thumbnail?: string | null, thumbnail_square?: string | null, tags?: Array<string | null> | null, youtube?: string | null, draft?: boolean | null, body?: any | null, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string }, gallery?: Array<{ __typename: 'NewsGallery', image?: string | null } | null> | null } | null } | null> | null } }; export type NewsConnectionQuery = { __typename?: 'Query', newsConnection: { __typename?: 'NewsConnection', totalCount: number, pageInfo: { __typename?: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor: string, endCursor: string }, edges?: Array<{ __typename?: 'NewsConnectionEdges', cursor: string, node?: { __typename: 'News', id: string, locale?: string | null, title: string, date: string, slug?: string | null, place?: string | null, country?: string | null, city?: string | null, thumbnail?: string | null, thumbnail_square?: string | null, tags?: Array<string | null> | null, youtube?: string | null, draft?: boolean | null, body?: any | null, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string }, gallery?: Array<{ __typename: 'NewsGallery', image?: string | null } | null> | null } | null } | null> | null } };
export type DocumentariesQueryVariables = Exact<{ export type VideosQueryVariables = Exact<{
relativePath: Scalars['String']['input']; relativePath: Scalars['String']['input'];
}>; }>;
export type DocumentariesQuery = { __typename?: 'Query', documentaries: { __typename: 'Documentaries', id: string, locale?: string | null, title: string, video_yt?: string | null, date: string, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string } } }; export type VideosQuery = { __typename?: 'Query', videos: { __typename: 'Videos', id: string, locale?: string | null, title: string, video_yt?: string | null, date: string, slug?: string | null, description?: string | null, thumbnail?: string | null, draft?: boolean | null, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string } } };
export type DocumentariesConnectionQueryVariables = Exact<{ export type VideosConnectionQueryVariables = Exact<{
before?: InputMaybe<Scalars['String']['input']>; before?: InputMaybe<Scalars['String']['input']>;
after?: InputMaybe<Scalars['String']['input']>; after?: InputMaybe<Scalars['String']['input']>;
first?: InputMaybe<Scalars['Float']['input']>; first?: InputMaybe<Scalars['Float']['input']>;
last?: InputMaybe<Scalars['Float']['input']>; last?: InputMaybe<Scalars['Float']['input']>;
sort?: InputMaybe<Scalars['String']['input']>; sort?: InputMaybe<Scalars['String']['input']>;
filter?: InputMaybe<DocumentariesFilter>; filter?: InputMaybe<VideosFilter>;
}>; }>;
export type DocumentariesConnectionQuery = { __typename?: 'Query', documentariesConnection: { __typename?: 'DocumentariesConnection', totalCount: number, pageInfo: { __typename?: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor: string, endCursor: string }, edges?: Array<{ __typename?: 'DocumentariesConnectionEdges', cursor: string, node?: { __typename: 'Documentaries', id: string, locale?: string | null, title: string, video_yt?: string | null, date: string, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string } } | null } | null> | null } }; export type VideosConnectionQuery = { __typename?: 'Query', videosConnection: { __typename?: 'VideosConnection', totalCount: number, pageInfo: { __typename?: 'PageInfo', hasPreviousPage: boolean, hasNextPage: boolean, startCursor: string, endCursor: string }, edges?: Array<{ __typename?: 'VideosConnectionEdges', cursor: string, node?: { __typename: 'Videos', id: string, locale?: string | null, title: string, video_yt?: string | null, date: string, slug?: string | null, description?: string | null, thumbnail?: string | null, draft?: boolean | null, _sys: { __typename?: 'SystemInfo', filename: string, basename: string, hasReferences?: boolean | null, breadcrumbs: Array<string>, path: string, relativePath: string, extension: string } } | null } | null> | null } };
export const NewsPartsFragmentDoc = gql` export const NewsPartsFragmentDoc = gql`
fragment NewsParts on News { fragment NewsParts on News {
@ -480,13 +492,17 @@ export const NewsPartsFragmentDoc = gql`
body body
} }
`; `;
export const DocumentariesPartsFragmentDoc = gql` export const VideosPartsFragmentDoc = gql`
fragment DocumentariesParts on Documentaries { fragment VideosParts on Videos {
__typename __typename
locale locale
title title
video_yt video_yt
date date
slug
description
thumbnail
draft
} }
`; `;
export const NewsDocument = gql` export const NewsDocument = gql`
@ -546,9 +562,9 @@ export const NewsConnectionDocument = gql`
} }
} }
${NewsPartsFragmentDoc}`; ${NewsPartsFragmentDoc}`;
export const DocumentariesDocument = gql` export const VideosDocument = gql`
query documentaries($relativePath: String!) { query videos($relativePath: String!) {
documentaries(relativePath: $relativePath) { videos(relativePath: $relativePath) {
... on Document { ... on Document {
_sys { _sys {
filename filename
@ -561,13 +577,13 @@ export const DocumentariesDocument = gql`
} }
id id
} }
...DocumentariesParts ...VideosParts
} }
} }
${DocumentariesPartsFragmentDoc}`; ${VideosPartsFragmentDoc}`;
export const DocumentariesConnectionDocument = gql` export const VideosConnectionDocument = gql`
query documentariesConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: DocumentariesFilter) { query videosConnection($before: String, $after: String, $first: Float, $last: Float, $sort: String, $filter: VideosFilter) {
documentariesConnection( videosConnection(
before: $before before: $before
after: $after after: $after
first: $first first: $first
@ -597,12 +613,12 @@ export const DocumentariesConnectionDocument = gql`
} }
id id
} }
...DocumentariesParts ...VideosParts
} }
} }
} }
} }
${DocumentariesPartsFragmentDoc}`; ${VideosPartsFragmentDoc}`;
export type Requester<C= {}> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R> export type Requester<C= {}> = <R, V>(doc: DocumentNode, vars?: V, options?: C) => Promise<R>
export function getSdk<C>(requester: Requester<C>) { export function getSdk<C>(requester: Requester<C>) {
return { return {
@ -612,11 +628,11 @@ export type Requester<C= {}> = <R, V>(doc: DocumentNode, vars?: V, options?: C)
newsConnection(variables?: NewsConnectionQueryVariables, options?: C): Promise<{data: NewsConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: NewsConnectionQueryVariables, query: string}> { newsConnection(variables?: NewsConnectionQueryVariables, options?: C): Promise<{data: NewsConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: NewsConnectionQueryVariables, query: string}> {
return requester<{data: NewsConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: NewsConnectionQueryVariables, query: string}, NewsConnectionQueryVariables>(NewsConnectionDocument, variables, options); return requester<{data: NewsConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: NewsConnectionQueryVariables, query: string}, NewsConnectionQueryVariables>(NewsConnectionDocument, variables, options);
}, },
documentaries(variables: DocumentariesQueryVariables, options?: C): Promise<{data: DocumentariesQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: DocumentariesQueryVariables, query: string}> { videos(variables: VideosQueryVariables, options?: C): Promise<{data: VideosQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: VideosQueryVariables, query: string}> {
return requester<{data: DocumentariesQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: DocumentariesQueryVariables, query: string}, DocumentariesQueryVariables>(DocumentariesDocument, variables, options); return requester<{data: VideosQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: VideosQueryVariables, query: string}, VideosQueryVariables>(VideosDocument, variables, options);
}, },
documentariesConnection(variables?: DocumentariesConnectionQueryVariables, options?: C): Promise<{data: DocumentariesConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: DocumentariesConnectionQueryVariables, query: string}> { videosConnection(variables?: VideosConnectionQueryVariables, options?: C): Promise<{data: VideosConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: VideosConnectionQueryVariables, query: string}> {
return requester<{data: DocumentariesConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: DocumentariesConnectionQueryVariables, query: string}, DocumentariesConnectionQueryVariables>(DocumentariesConnectionDocument, variables, options); return requester<{data: VideosConnectionQuery, errors?: { message: string, locations: { line: number, column: number }[], path: string[] }[], variables: VideosConnectionQueryVariables, query: string}, VideosConnectionQueryVariables>(VideosConnectionDocument, variables, options);
} }
}; };
} }

View File

@ -128,9 +128,9 @@ export default defineConfig({
], ],
}, },
{ {
name: "documentaries", name: "videos",
label: "Documentaries", label: "Videos",
path: "src/content/documentaries", path: "src/content/videos",
format: "md", format: "md",
fields: [ fields: [
{ {
@ -162,6 +162,29 @@ export default defineConfig({
label: "Date", label: "Date",
required: true, required: true,
}, },
{
type: "string",
name: "slug",
label: "Slug",
},
{
type: "string",
name: "description",
label: "Description",
ui: {
component: "textarea",
},
},
{
type: "string",
name: "thumbnail",
label: "Thumbnail URL",
},
{
type: "boolean",
name: "draft",
label: "Draft",
},
] ]
}, },
], ],

File diff suppressed because one or more lines are too long