base zone components and type refinements
This commit is contained in:
parent
9d96e3a6dc
commit
5c56af0dad
38 changed files with 323 additions and 54 deletions
|
@ -1,5 +1,25 @@
|
||||||
<template>
|
<template>
|
||||||
<p>Content Builder</p>
|
<SharedHero v-if="hero" :data="hero" />
|
||||||
|
<div class="container mx-auto py-12 min-h-[50vh]">
|
||||||
|
<div v-for="item in content" class="contents">
|
||||||
|
<DynamicZoneColumnImageText v-if="item.__component == 'dynamic-zone.column-image-text'" :data="item" />
|
||||||
|
<DynamicZoneDualColumnText v-else-if="item.__component == 'dynamic-zone.dual-column-text'" :data="item" />
|
||||||
|
<DynamicZoneEmphasiseArticle v-else-if="item.__component == 'dynamic-zone.emphasise-article'" :data="item" />
|
||||||
|
<DynamicZoneFullImage v-else-if="item.__component == 'dynamic-zone.full-image'" :data="item" />
|
||||||
|
<DynamicZoneFullText v-else-if="item.__component == 'dynamic-zone.full-text'" :data="item" />
|
||||||
|
<DynamicZoneGallery v-else-if="item.__component == 'dynamic-zone.gallery'" :data="item" />
|
||||||
|
<SharedList v-else-if="item.__component == 'shared.list'" :data="item" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts"></script>
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type SharedHero from "../types/component/sharedHero";
|
||||||
|
import type { ComponentTypes } from "../types/component/baseComponent";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
hero: Object as PropType<SharedHero>,
|
||||||
|
content: Array<ComponentTypes>,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
|
@ -16,5 +16,5 @@ import type Global from "../types/single/global";
|
||||||
const { findOne } = useStrapi();
|
const { findOne } = useStrapi();
|
||||||
|
|
||||||
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
||||||
const { footer } = global.value?.data as unknown as Global;
|
const { footer } = global.value?.data ?? ({} as Global);
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -17,9 +17,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="navbar_sub_items?.length != 0"
|
v-if="navbar_sub_items && navbar_sub_items?.length != 0"
|
||||||
primary
|
primary
|
||||||
class="h-12 min-h-fit w-full px-12 border-t-2 border-white justify-center items-center gap-5 flex"
|
class="h-fit min-h-fit w-full px-12 border-t-2 border-white justify-center items-center gap-5 flex"
|
||||||
>
|
>
|
||||||
<NuxtLink
|
<NuxtLink
|
||||||
primary-sublink
|
primary-sublink
|
||||||
|
@ -44,7 +44,7 @@ const baseUrl = useStrapiUrl().replace("/api", "");
|
||||||
const { findOne } = useStrapi();
|
const { findOne } = useStrapi();
|
||||||
|
|
||||||
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
||||||
const { navbar } = global.value?.data as unknown as Global;
|
const { navbar } = global.value?.data ?? ({} as Global);
|
||||||
|
|
||||||
const navbar_sub_items = computed(() => {
|
const navbar_sub_items = computed(() => {
|
||||||
return navbar.navbar_items.find((ni) => ni.URL == params?.[0])?.navbar_sub_items;
|
return navbar.navbar_items.find((ni) => ni.URL == params?.[0])?.navbar_sub_items;
|
||||||
|
|
12
components/dynamicZone/ColumnImageText.vue
Normal file
12
components/dynamicZone/ColumnImageText.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneColumnImageText from "../../types/component/dynamicZoneColumnImageText";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneColumnImageText>,
|
||||||
|
});
|
||||||
|
</script>
|
12
components/dynamicZone/DualColumnText.vue
Normal file
12
components/dynamicZone/DualColumnText.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneDualColumnText from "../../types/component/dynamicZoneDualColumnText";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneDualColumnText>,
|
||||||
|
});
|
||||||
|
</script>
|
12
components/dynamicZone/EmphasiseArticle.vue
Normal file
12
components/dynamicZone/EmphasiseArticle.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneEmphasiseArticle from "../../types/component/dynamicZoneEmphasiseArticle";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneEmphasiseArticle>,
|
||||||
|
});
|
||||||
|
</script>
|
12
components/dynamicZone/FullImage.vue
Normal file
12
components/dynamicZone/FullImage.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneFullImage from "../../types/component/dynamicZoneFullImage";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneFullImage>,
|
||||||
|
});
|
||||||
|
</script>
|
12
components/dynamicZone/FullText.vue
Normal file
12
components/dynamicZone/FullText.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneFullText from "../../types/component/dynamicZoneFullText";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneFullText>,
|
||||||
|
});
|
||||||
|
</script>
|
12
components/dynamicZone/Gallery.vue
Normal file
12
components/dynamicZone/Gallery.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type DynamicZoneGallery from "../../types/component/dynamicZoneGallery";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<DynamicZoneGallery>,
|
||||||
|
});
|
||||||
|
</script>
|
25
components/shared/Hero.vue
Normal file
25
components/shared/Hero.vue
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<template>
|
||||||
|
<div class="w-full max-h-60 h-60">
|
||||||
|
<NuxtPicture
|
||||||
|
preload
|
||||||
|
loading="lazy"
|
||||||
|
class="w-full h-full object-cover object-center"
|
||||||
|
:src="baseUrl + data?.banner.url"
|
||||||
|
:imgAttrs="{ class: 'w-full h-full object-cover object-center' }"
|
||||||
|
/>
|
||||||
|
<div primary class="h-12 w-full px-12 justify-center items-center gap-5 flex">
|
||||||
|
<p>{{ data?.title }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type SharedHero from "../../types/component/sharedHero";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<SharedHero>,
|
||||||
|
});
|
||||||
|
|
||||||
|
const baseUrl = useStrapiUrl().replace("/api", "");
|
||||||
|
</script>
|
12
components/shared/List.vue
Normal file
12
components/shared/List.vue
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<template>
|
||||||
|
<p>{{ data }}</p>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import type { PropType } from "vue";
|
||||||
|
import type SharedList from "../../types/component/sharedList";
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
data: Object as PropType<SharedList>,
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -1,6 +1,12 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="relative h-[calc(100vh-6rem)] w-full">
|
<div class="relative h-[calc(100vh-6rem)] max-h-[calc(100vh-6rem)] w-full overflow-hidden">
|
||||||
<NuxtPicture preload loading="lazy" class="w-full h-full object-cover" :src="baseUrl + backdrop.url" />
|
<NuxtPicture
|
||||||
|
preload
|
||||||
|
loading="lazy"
|
||||||
|
class="w-full h-full object-cover object-center"
|
||||||
|
:src="baseUrl + backdrop.url"
|
||||||
|
:imgAttrs="{ class: 'w-full h-full object-cover object-center' }"
|
||||||
|
/>
|
||||||
<img class="absolute h-40 w-fit bottom-10 left-5" :src="baseUrl + navbar.logo.url" />
|
<img class="absolute h-40 w-fit bottom-10 left-5" :src="baseUrl + navbar.logo.url" />
|
||||||
</div>
|
</div>
|
||||||
<Header />
|
<Header />
|
||||||
|
|
|
@ -33,5 +33,6 @@ export default defineNuxtConfig({
|
||||||
strapi: {
|
strapi: {
|
||||||
url: process.env.STRAPI_URL,
|
url: process.env.STRAPI_URL,
|
||||||
prefix: "/api",
|
prefix: "/api",
|
||||||
|
version: "v5",
|
||||||
},
|
},
|
||||||
});
|
});
|
32
package-lock.json
generated
32
package-lock.json
generated
|
@ -8,7 +8,7 @@
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/image": "^1.8.1",
|
"@nuxt/image": "^1.8.1",
|
||||||
"@nuxtjs/strapi": "^1.12.0",
|
"@nuxtjs/strapi": "npm:@nuxtjs/strapi-edge@1.12.0-28818224.f53bdf9",
|
||||||
"nuxt": "^3.13.2",
|
"nuxt": "^3.13.2",
|
||||||
"vue": "latest",
|
"vue": "latest",
|
||||||
"vue-router": "latest"
|
"vue-router": "latest"
|
||||||
|
@ -1353,15 +1353,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@nuxtjs/strapi": {
|
"node_modules/@nuxtjs/strapi": {
|
||||||
"version": "1.12.0",
|
"name": "@nuxtjs/strapi-edge",
|
||||||
"resolved": "https://registry.npmjs.org/@nuxtjs/strapi/-/strapi-1.12.0.tgz",
|
"version": "1.12.0-28818224.f53bdf9",
|
||||||
"integrity": "sha512-pysxYW5SPQaB6H7G72wO2qz4Rl7DakuPUthNweEvL3ERK5O3qMZ97mIm+Pdwvb3/H0ntFDJSjx08YRWjjuV7hg==",
|
"resolved": "https://registry.npmjs.org/@nuxtjs/strapi-edge/-/strapi-edge-1.12.0-28818224.f53bdf9.tgz",
|
||||||
|
"integrity": "sha512-SdazV9/5qJr/b5F//fveU9DVxBFeYKfB6Gg7wyvZoNUW9z9BSPuQyoCfDdzRkPy+QqdaLhFXPjFJdPNeK/8agA==",
|
||||||
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/kit": "^3.11.1",
|
"@nuxt/kit": "^3.13.2",
|
||||||
"defu": "^6.1.4",
|
"defu": "^6.1.4",
|
||||||
"graphql": "^16.8.1",
|
"graphql": "^16.9.0",
|
||||||
"qs": "^6.12.0",
|
"qs": "^6.13.0",
|
||||||
"ufo": "^1.5.3"
|
"ufo": "^1.5.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@parcel/watcher": {
|
"node_modules/@parcel/watcher": {
|
||||||
|
@ -10920,15 +10922,15 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@nuxtjs/strapi": {
|
"@nuxtjs/strapi": {
|
||||||
"version": "1.12.0",
|
"version": "npm:@nuxtjs/strapi-edge@1.12.0-28818224.f53bdf9",
|
||||||
"resolved": "https://registry.npmjs.org/@nuxtjs/strapi/-/strapi-1.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/@nuxtjs/strapi-edge/-/strapi-edge-1.12.0-28818224.f53bdf9.tgz",
|
||||||
"integrity": "sha512-pysxYW5SPQaB6H7G72wO2qz4Rl7DakuPUthNweEvL3ERK5O3qMZ97mIm+Pdwvb3/H0ntFDJSjx08YRWjjuV7hg==",
|
"integrity": "sha512-SdazV9/5qJr/b5F//fveU9DVxBFeYKfB6Gg7wyvZoNUW9z9BSPuQyoCfDdzRkPy+QqdaLhFXPjFJdPNeK/8agA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@nuxt/kit": "^3.11.1",
|
"@nuxt/kit": "^3.13.2",
|
||||||
"defu": "^6.1.4",
|
"defu": "^6.1.4",
|
||||||
"graphql": "^16.8.1",
|
"graphql": "^16.9.0",
|
||||||
"qs": "^6.12.0",
|
"qs": "^6.13.0",
|
||||||
"ufo": "^1.5.3"
|
"ufo": "^1.5.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@parcel/watcher": {
|
"@parcel/watcher": {
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nuxt/image": "^1.8.1",
|
"@nuxt/image": "^1.8.1",
|
||||||
"@nuxtjs/strapi": "^1.12.0",
|
"@nuxtjs/strapi": "npm:@nuxtjs/strapi-edge@1.12.0-28818224.f53bdf9",
|
||||||
"nuxt": "^3.13.2",
|
"nuxt": "^3.13.2",
|
||||||
"vue": "latest",
|
"vue": "latest",
|
||||||
"vue-router": "latest"
|
"vue-router": "latest"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<NuxtLayout name="default">
|
<NuxtLayout name="default">
|
||||||
<NotFound v-if="data.length == 0" />
|
<NotFound v-if="active_page_id == ''" />
|
||||||
<ContentBuilder v-else class="min-h-[calc(100vh-9rem)] w-full" />
|
<ContentBuilder v-else class="min-h-[calc(100vh-9rem)] w-full" :hero="hero" :content="content" />
|
||||||
</NuxtLayout>
|
</NuxtLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ const { findOne } = useStrapi();
|
||||||
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
const { data: global } = await useAsyncData("global", () => findOne<Global>("global"));
|
||||||
const {
|
const {
|
||||||
navbar: { navbar_items },
|
navbar: { navbar_items },
|
||||||
} = global.value?.data as unknown as Global;
|
} = global.value?.data ?? ({} as Global);
|
||||||
|
|
||||||
const navbar_sub_items = computed(() => {
|
const navbar_sub_items = computed(() => {
|
||||||
return navbar_items.find((ni) => ni.URL == params[0])?.navbar_sub_items ?? [];
|
return navbar_items.find((ni) => ni.URL == params[0])?.navbar_sub_items ?? [];
|
||||||
|
@ -31,14 +31,21 @@ const active_sub_item = computed(() => {
|
||||||
return navbar_sub_items.value.find((si) => si.URL == params[1])?.page;
|
return navbar_sub_items.value.find((si) => si.URL == params[1])?.page;
|
||||||
});
|
});
|
||||||
const active_page_id = computed<string>(() => {
|
const active_page_id = computed<string>(() => {
|
||||||
return active_sub_item.value?.slug ?? active_item.value?.slug ?? "";
|
return active_sub_item.value?.documentId ?? active_item.value?.documentId ?? "";
|
||||||
});
|
});
|
||||||
|
|
||||||
const { data: pages } = await useAsyncData("pages", () =>
|
const { data: pages } = await useAsyncData("pages", () =>
|
||||||
findOne<Array<Page>>("pages", {
|
findOne<Page>("pages", active_page_id.value, {
|
||||||
|
populate: {
|
||||||
populate: "*",
|
populate: "*",
|
||||||
filters: { slug: active_page_id.value },
|
content: {
|
||||||
|
populate: "*",
|
||||||
|
},
|
||||||
|
hero: {
|
||||||
|
populate: "*",
|
||||||
|
},
|
||||||
|
},
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
const data = pages.value?.data as unknown as Array<Page>;
|
const { content, hero } = pages.value?.data ?? {};
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<NuxtLayout name="landing">
|
<NuxtLayout name="landing">
|
||||||
<ContentBuilder class="min-h-[calc(100vh-9rem)] w-full" />
|
<ContentBuilder class="min-h-[calc(100vh-9rem)] w-full" :content="content" />
|
||||||
</NuxtLayout>
|
</NuxtLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -10,5 +10,5 @@ import type Homepage from "../types/single/homepage";
|
||||||
const { findOne } = useStrapi();
|
const { findOne } = useStrapi();
|
||||||
|
|
||||||
const { data: homepage } = await useAsyncData("homepage", () => findOne<Homepage>("homepage"));
|
const { data: homepage } = await useAsyncData("homepage", () => findOne<Homepage>("homepage"));
|
||||||
const { content } = homepage.value?.data as unknown as Homepage;
|
const { content } = homepage.value?.data ?? {};
|
||||||
</script>
|
</script>
|
||||||
|
|
13
types/collection/article.ts
Normal file
13
types/collection/article.ts
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
export default interface Article {
|
||||||
|
id: number;
|
||||||
|
documentId: string;
|
||||||
|
title: string;
|
||||||
|
description: string;
|
||||||
|
slug: string;
|
||||||
|
content: Array<{ type: string; children: Array<{ type: string; text: string }>; level?: number }>;
|
||||||
|
date: string;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
publishedAt: string;
|
||||||
|
locale: string;
|
||||||
|
}
|
|
@ -1,3 +1,6 @@
|
||||||
|
import type { ComponentTypes } from "../component/baseComponent";
|
||||||
|
import type SharedHero from "../component/sharedHero";
|
||||||
|
|
||||||
export default interface Page {
|
export default interface Page {
|
||||||
id: number;
|
id: number;
|
||||||
documentId: string;
|
documentId: string;
|
||||||
|
@ -7,7 +10,7 @@ export default interface Page {
|
||||||
publishedAt: string;
|
publishedAt: string;
|
||||||
locale: string;
|
locale: string;
|
||||||
slug: string;
|
slug: string;
|
||||||
Hero: { id: number; titel: string };
|
hero: SharedHero;
|
||||||
content: { __component: string; id: number; list: string; enable_detail: boolean }[];
|
content: Array<ComponentTypes>;
|
||||||
localizations: any[];
|
localizations: any[];
|
||||||
}
|
}
|
||||||
|
|
30
types/component/baseComponent.ts
Normal file
30
types/component/baseComponent.ts
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
import type DynamicZoneColumnImageText from "./dynamicZoneColumnImageText";
|
||||||
|
import type DynamicZoneDualColumnText from "./dynamicZoneDualColumnText";
|
||||||
|
import type DynamicZoneEmphasiseArticle from "./dynamicZoneEmphasiseArticle";
|
||||||
|
import type DynamicZoneFullImage from "./dynamicZoneFullImage";
|
||||||
|
import type DynamicZoneFullText from "./dynamicZoneFullText";
|
||||||
|
import type DynamicZoneGallery from "./dynamicZoneGallery";
|
||||||
|
import type SharedList from "./sharedList";
|
||||||
|
|
||||||
|
export default interface BaseComponent {
|
||||||
|
__component: ComponentNames;
|
||||||
|
id: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type ComponentNames =
|
||||||
|
| "shared.list"
|
||||||
|
| "dynamic-zone.gallery"
|
||||||
|
| "dynamic-zone.full-text"
|
||||||
|
| "dynamic-zone.full-image"
|
||||||
|
| "dynamic-zone.emphasise-article"
|
||||||
|
| "dynamic-zone.dual-column-text"
|
||||||
|
| "dynamic-zone.column-image-text";
|
||||||
|
|
||||||
|
export type ComponentTypes =
|
||||||
|
| SharedList
|
||||||
|
| DynamicZoneGallery
|
||||||
|
| DynamicZoneFullText
|
||||||
|
| DynamicZoneFullImage
|
||||||
|
| DynamicZoneEmphasiseArticle
|
||||||
|
| DynamicZoneDualColumnText
|
||||||
|
| DynamicZoneColumnImageText;
|
|
@ -1,4 +1,4 @@
|
||||||
export default interface Image {
|
export default interface BaseImage {
|
||||||
id: number;
|
id: number;
|
||||||
documentId: string;
|
documentId: string;
|
||||||
name: string;
|
name: string;
|
||||||
|
@ -6,7 +6,7 @@ export default interface Image {
|
||||||
caption: string | null;
|
caption: string | null;
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
formats: any;
|
formats: Record<string, ImageFormat> | null;
|
||||||
hash: string;
|
hash: string;
|
||||||
ext: string;
|
ext: string;
|
||||||
mime: string;
|
mime: string;
|
||||||
|
@ -19,3 +19,16 @@ export default interface Image {
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
publishedAt: string;
|
publishedAt: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ImageFormat {
|
||||||
|
name: string;
|
||||||
|
hash: string;
|
||||||
|
ext: string;
|
||||||
|
mime: string;
|
||||||
|
path: string | null;
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
size: number;
|
||||||
|
sizeInBytes: number;
|
||||||
|
url: string;
|
||||||
|
}
|
9
types/component/dynamicZoneColumnImageText.ts
Normal file
9
types/component/dynamicZoneColumnImageText.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
import type BaseImage from "./baseImage";
|
||||||
|
|
||||||
|
export default interface DynamicZoneColumnImageText extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.column-image-text";
|
||||||
|
text: Array<{ type: string; children: Array<{ type: string; text: string }> }>;
|
||||||
|
image_left: boolean;
|
||||||
|
image: BaseImage;
|
||||||
|
}
|
7
types/component/dynamicZoneDualColumnText.ts
Normal file
7
types/component/dynamicZoneDualColumnText.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
|
||||||
|
export default interface DynamicZoneDualColumnText extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.dual-column-text";
|
||||||
|
left_side: Array<{ type: string; children: Array<{ type: string; text: string }> }>;
|
||||||
|
right_side: Array<{ type: string; children: Array<{ type: string; text: string }> }>;
|
||||||
|
}
|
9
types/component/dynamicZoneEmphasiseArticle.ts
Normal file
9
types/component/dynamicZoneEmphasiseArticle.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
import type Article from "../collection/article";
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
|
||||||
|
export default interface DynamicZoneEmphasiseArticle extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.emphasise-article";
|
||||||
|
titel: string;
|
||||||
|
description: string;
|
||||||
|
articles: Array<Article>;
|
||||||
|
}
|
7
types/component/dynamicZoneFullImage.ts
Normal file
7
types/component/dynamicZoneFullImage.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
import type BaseImage from "./baseImage";
|
||||||
|
|
||||||
|
export default interface DynamicZoneFullImage extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.full-image";
|
||||||
|
image: BaseImage;
|
||||||
|
}
|
6
types/component/dynamicZoneFullText.ts
Normal file
6
types/component/dynamicZoneFullText.ts
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
|
||||||
|
export default interface DynamicZoneFullText extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.full-text";
|
||||||
|
text: Array<{ type: string; children: Array<{ type: string; text: string }> }>;
|
||||||
|
}
|
7
types/component/dynamicZoneGallery.ts
Normal file
7
types/component/dynamicZoneGallery.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
import type BaseImage from "./baseImage";
|
||||||
|
|
||||||
|
export default interface DynamicZoneGallery extends BaseComponent {
|
||||||
|
__component: "dynamic-zone.gallery";
|
||||||
|
images: Array<BaseImage>;
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import type FooterLink from "./footerLink";
|
import type FooterLink from "./itemsFooterLink";
|
||||||
|
|
||||||
export default interface Footer {
|
export default interface Footer {
|
||||||
id: number;
|
id: number;
|
8
types/component/globalNavbar.ts
Normal file
8
types/component/globalNavbar.ts
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
import type BaseImage from "./baseImage";
|
||||||
|
import type NavbarItem from "./itemsNavbarItem";
|
||||||
|
|
||||||
|
export default interface Navbar {
|
||||||
|
id: number;
|
||||||
|
logo: BaseImage;
|
||||||
|
navbar_items: NavbarItem[];
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
import type NavbarSubItem from "./navbarSubItem";
|
import type NavbarSubItem from "./itemsNavbarSubItem";
|
||||||
|
|
||||||
export default interface NavbarItem {
|
export default interface NavbarItem {
|
||||||
id: number;
|
id: number;
|
|
@ -1,8 +0,0 @@
|
||||||
import type Image from "./image";
|
|
||||||
import type NavbarItem from "./navbarItem";
|
|
||||||
|
|
||||||
export default interface Navbar {
|
|
||||||
id: number;
|
|
||||||
logo: Image;
|
|
||||||
navbar_items: NavbarItem[];
|
|
||||||
}
|
|
7
types/component/sharedHero.ts
Normal file
7
types/component/sharedHero.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import type BaseImage from "./baseImage";
|
||||||
|
|
||||||
|
export default interface SharedHero {
|
||||||
|
id: number;
|
||||||
|
title: string;
|
||||||
|
banner: BaseImage;
|
||||||
|
}
|
5
types/component/sharedLink.ts
Normal file
5
types/component/sharedLink.ts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
export default interface SharedLink {
|
||||||
|
text: string;
|
||||||
|
URL: string;
|
||||||
|
target: "_blank" | "_self" | "_parent" | "_top";
|
||||||
|
}
|
7
types/component/sharedList.ts
Normal file
7
types/component/sharedList.ts
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import type BaseComponent from "./baseComponent";
|
||||||
|
|
||||||
|
export default interface SharedList extends BaseComponent {
|
||||||
|
__component: "shared.list";
|
||||||
|
list: string;
|
||||||
|
enable_detail: boolean;
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
import type Footer from "../component/footer";
|
import type Footer from "../component/globalFooter";
|
||||||
import type Navbar from "../component/navbar";
|
import type Navbar from "../component/globalNavbar";
|
||||||
|
|
||||||
export default interface Global {
|
export default interface Global {
|
||||||
id: number;
|
id: number;
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import type Image from "../component/image";
|
import type BaseImage from "../component/baseImage";
|
||||||
|
import type { ComponentTypes } from "../component/baseComponent";
|
||||||
|
|
||||||
export default interface Homepage {
|
export default interface Homepage {
|
||||||
id: number;
|
id: number;
|
||||||
|
@ -7,6 +8,6 @@ export default interface Homepage {
|
||||||
updatedAt: string;
|
updatedAt: string;
|
||||||
publishedAt: string;
|
publishedAt: string;
|
||||||
locale: string;
|
locale: string;
|
||||||
backdrop: Image;
|
backdrop: BaseImage;
|
||||||
content: Array<any>;
|
content: Array<ComponentTypes>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue