diff --git a/apps/sanity/schema/Components.ts b/apps/sanity/schema/Components.ts index 5901640..2395307 100644 --- a/apps/sanity/schema/Components.ts +++ b/apps/sanity/schema/Components.ts @@ -6,6 +6,7 @@ import FeatureAccordionSection from "./components/FeatureAccordionSection"; import CtaSectionWithShapedImage from "./components/CtaSectionWithShapedImage"; import ServicesOverview from "./components/ServicesOverview"; import MetricsSection from "./components/MetricsSection"; +import Faq from "./components/Faq"; export default defineType({ name: 'components', @@ -19,6 +20,7 @@ export default defineType({ CtaSectionWithShapedImage, ServicesOverview, MetricsSection, + Faq, ], options: { insertMenu: { diff --git a/apps/sanity/schema/components/Faq.ts b/apps/sanity/schema/components/Faq.ts new file mode 100644 index 0000000..c92b840 --- /dev/null +++ b/apps/sanity/schema/components/Faq.ts @@ -0,0 +1,63 @@ +import { defineField } from 'sanity'; +import { toPlainText } from '../../utils/to-plain-text'; + +const name = 'Faq'; +const title = 'Sekcja FAQ'; +const icon = () => '❓'; + +export default defineField({ + name, + type: 'object', + title, + icon, + fields: [ + defineField({ + name: 'heading', + type: 'Heading', + title: 'Heading', + validation: Rule => Rule.required(), + }), + defineField({ + name: 'items', + type: 'array', + title: 'Items', + of: [ + defineField({ + name: 'item', + type: 'reference', + to: [{ type: 'Faq_Collection' }], + options: { + filter: ({ parent }) => { + const selectedIds = (parent as { _ref?: string }[])?.filter(item => item._ref).map(item => item._ref) || []; + if (selectedIds.length > 0) { + return { + filter: '!(_id in $selectedIds)', + params: { selectedIds } + } + } + return {} + } + } + }), + ], + validation: Rule => Rule.required().unique(), + }), + defineField({ + name: 'img', + type: 'image', + title: 'Image', + validation: Rule => Rule.required(), + }), + ], + preview: { + select: { + heading: 'heading', + media: 'img', + }, + prepare: ({ heading, media }) => ({ + title: title, + subtitle: toPlainText(heading), + media: media || icon, + }), + }, +}); diff --git a/apps/sanity/schema/components/ServicesOverview.ts b/apps/sanity/schema/components/ServicesOverview.ts index 8e7e4c6..e5c8392 100644 --- a/apps/sanity/schema/components/ServicesOverview.ts +++ b/apps/sanity/schema/components/ServicesOverview.ts @@ -2,7 +2,7 @@ import { defineField } from 'sanity'; import { toPlainText } from '../../utils/to-plain-text'; const name = 'ServicesOverview'; -const title = 'Przegląd usług'; +const title = 'Sekcja z przeglądem usług'; const icon = () => '🛠️'; export default defineField({ diff --git a/apps/sanity/schema/components/SimpleCtaSection.ts b/apps/sanity/schema/components/SimpleCtaSection.ts index ff7d460..199139f 100644 --- a/apps/sanity/schema/components/SimpleCtaSection.ts +++ b/apps/sanity/schema/components/SimpleCtaSection.ts @@ -2,7 +2,7 @@ import { defineField } from 'sanity'; import { toPlainText } from '../../utils/to-plain-text'; const name = 'SimpleCtaSection'; -const title = 'Prosta sekcja z wezwaniem do działania'; +const title = 'Prosta sekcja z CTA'; const icon = () => '📞'; export default defineField({ diff --git a/apps/sanity/schema/ui/PortableText/CustomInput.tsx b/apps/sanity/schema/ui/portable-text/CustomInput.tsx similarity index 100% rename from apps/sanity/schema/ui/PortableText/CustomInput.tsx rename to apps/sanity/schema/ui/portable-text/CustomInput.tsx diff --git a/apps/sanity/schema/ui/PortableText/Heading.tsx b/apps/sanity/schema/ui/portable-text/Heading.tsx similarity index 100% rename from apps/sanity/schema/ui/PortableText/Heading.tsx rename to apps/sanity/schema/ui/portable-text/Heading.tsx diff --git a/apps/sanity/schema/ui/PortableText/index.tsx b/apps/sanity/schema/ui/portable-text/index.tsx similarity index 100% rename from apps/sanity/schema/ui/PortableText/index.tsx rename to apps/sanity/schema/ui/portable-text/index.tsx diff --git a/apps/sanity/static/Faq.webp b/apps/sanity/static/Faq.webp new file mode 100644 index 0000000..3328559 Binary files /dev/null and b/apps/sanity/static/Faq.webp differ diff --git a/apps/sanity/structure/schema-types.ts b/apps/sanity/structure/schema-types.ts index 34eea1c..4a511fc 100644 --- a/apps/sanity/structure/schema-types.ts +++ b/apps/sanity/structure/schema-types.ts @@ -34,8 +34,8 @@ const components = [ // UI Components import cta from '../schema/ui/cta'; import seo from '../schema/ui/seo'; -import PortableText from '../schema/ui/PortableText'; -import Heading from '../schema/ui/PortableText/Heading'; +import PortableText from '../schema/ui/portable-text'; +import Heading from '../schema/ui/portable-text/Heading'; const ui = [ cta,