From dc5cebdc742f8a7f11703f7c3487d325bf928eb9 Mon Sep 17 00:00:00 2001 From: Vadym Samoilenko Date: Fri, 12 Jun 2026 10:21:55 +0100 Subject: [PATCH] fix(frontend): render locations shortDesc via RichText, regenerate payload types/schema shortDesc is richText since 0021 but /lokatsii and the home Locations section still rendered it as a string (object-as-React-child crash once data exists). payload-types.ts and payload-generated-schema.ts were stale since the conversion commits. Co-Authored-By: Claude Fable 5 --- src/app/(frontend)/lokatsii/page.tsx | 17 +- src/components/sections/Locations.tsx | 5 +- src/components/sections/LocationsSlider.tsx | 3 +- src/payload-generated-schema.ts | 911 +++++++++----------- src/payload-types.ts | 398 ++++++++- src/types/globals.ts | 2 +- 6 files changed, 807 insertions(+), 529 deletions(-) diff --git a/src/app/(frontend)/lokatsii/page.tsx b/src/app/(frontend)/lokatsii/page.tsx index b3c55d3..05d041a 100644 --- a/src/app/(frontend)/lokatsii/page.tsx +++ b/src/app/(frontend)/lokatsii/page.tsx @@ -1,5 +1,6 @@ import type { Metadata } from 'next' import Link from 'next/link' +import { RichText } from '@payloadcms/richtext-lexical/react' import { getPayload } from 'payload' import configPromise from '@payload-config' import { PageHero } from '@/components/ui/PageHero' @@ -9,6 +10,8 @@ import type { LocationCMS, Media } from '@/types/globals' export const revalidate = 60 +type RichTextData = Parameters[0]['data'] + async function getPageData() { try { const payload = await getPayload({ config: configPromise }) @@ -147,12 +150,14 @@ export default async function LocationsPage() { > {loc.name} -

- {loc.shortDesc} -

+ {loc.shortDesc ? ( +
+ +
+ ) : null}
{detailHref && ( [0]['data'] + function getMediaUrl(img: Media | string | null | undefined): string | null { if (!img) return null if (typeof img === 'string') return img @@ -79,7 +82,7 @@ export function Locations({ data, title }: LocationsProps) { name: loc.name, slug: loc.slug, tagline: loc.tagline ?? '', - description: loc.shortDesc ?? '', + description: loc.shortDesc ? : '', image: getMediaUrl(loc.image) ?? FALLBACK_IMAGES[loc.slug] ?? diff --git a/src/components/sections/LocationsSlider.tsx b/src/components/sections/LocationsSlider.tsx index 4a1db7c..f05d8c0 100644 --- a/src/components/sections/LocationsSlider.tsx +++ b/src/components/sections/LocationsSlider.tsx @@ -1,4 +1,5 @@ /* eslint-disable @next/next/no-img-element */ +import type { ReactNode } from 'react' import Link from 'next/link' import { BtnGradient } from '@/components/ui/BtnGradient' @@ -6,7 +7,7 @@ export interface LocationData { name: string slug: string tagline: string - description: string + description: ReactNode image: string href: string } diff --git a/src/payload-generated-schema.ts b/src/payload-generated-schema.ts index 3e5d55f..98a065d 100644 --- a/src/payload-generated-schema.ts +++ b/src/payload-generated-schema.ts @@ -102,6 +102,29 @@ export const enum_forms_confirmation_type = pgEnum('enum_forms_confirmation_type 'redirect', ]) export const enum_forms_redirect_type = pgEnum('enum_forms_redirect_type', ['reference', 'custom']) +export const enum_home_page_hero_slides_type = pgEnum('enum_home_page_hero_slides_type', [ + 'brand', + 'location', +]) +export const enum_home_page_sections_type = pgEnum('enum_home_page_sections_type', [ + 'locations', + 'whyParents', + 'video', + 'birthday', + 'gallery', + 'reviews', + 'faq', + 'news', + 'map', +]) +export const enum__home_page_v_version_hero_slides_type = pgEnum( + 'enum__home_page_v_version_hero_slides_type', + ['brand', 'location'] +) +export const enum__home_page_v_version_sections_type = pgEnum( + 'enum__home_page_v_version_sections_type', + ['locations', 'whyParents', 'video', 'birthday', 'gallery', 'reviews', 'faq', 'news', 'map'] +) export const enum_header_nav_links_auto_children_from = pgEnum( 'enum_header_nav_links_auto_children_from', ['none', 'locations'] @@ -112,6 +135,15 @@ export const enum_footer_socials_platform = pgEnum('enum_footer_socials_platform 'youtube', 'tiktok', ]) +export const enum_group_visits_page_hero_font = pgEnum('enum_group_visits_page_hero_font', [ + 'montserrat', + 'poppins', + 'inter', +]) +export const enum__group_visits_page_v_version_hero_font = pgEnum( + 'enum__group_visits_page_v_version_hero_font', + ['montserrat', 'poppins', 'inter'] +) export const users_sessions = pgTable( 'users_sessions', @@ -1433,7 +1465,7 @@ export const locations_why_visit_items = pgTable( _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), }, (columns) => [ index('locations_why_visit_items_order_idx').on(columns._order), @@ -1474,12 +1506,13 @@ export const locations = pgTable( name: varchar('name').notNull(), slug: varchar('slug').notNull(), tagline: varchar('tagline'), - shortDesc: varchar('short_desc'), + shortDesc: jsonb('short_desc'), description: jsonb('description'), image: integer('image_id').references(() => media.id, { onDelete: 'set null', }), href: varchar('href'), + showOnLokatsii: boolean('show_on_lokatsii').default(true), showInMenu: boolean('show_in_menu').default(true), showOnHome: boolean('show_on_home').default(true), sort: numeric('sort', { mode: 'number' }).default(0), @@ -2208,6 +2241,54 @@ export const payload_migrations = pgTable( ] ) +export const home_page_hero_slides = pgTable( + 'home_page_hero_slides', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: varchar('id').primaryKey(), + backgroundImage: integer('background_image_id').references(() => media.id, { + onDelete: 'set null', + }), + backgroundImageUrl: varchar('background_image_url'), + type: enum_home_page_hero_slides_type('type').default('location'), + title: varchar('title').notNull(), + subtitle: jsonb('subtitle'), + ctaLabel: varchar('cta_label').default('Купити квиток'), + ctaHref: varchar('cta_href').default('/payments'), + }, + (columns) => [ + index('home_page_hero_slides_order_idx').on(columns._order), + index('home_page_hero_slides_parent_id_idx').on(columns._parentID), + index('home_page_hero_slides_background_image_idx').on(columns.backgroundImage), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [home_page.id], + name: 'home_page_hero_slides_parent_id_fk', + }).onDelete('cascade'), + ] +) + +export const home_page_sections = pgTable( + 'home_page_sections', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: varchar('id').primaryKey(), + type: enum_home_page_sections_type('type').notNull(), + enabled: boolean('enabled').default(true), + }, + (columns) => [ + index('home_page_sections_order_idx').on(columns._order), + index('home_page_sections_parent_id_idx').on(columns._parentID), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [home_page.id], + name: 'home_page_sections_parent_id_fk', + }).onDelete('cascade'), + ] +) + export const home_page_why_parents_items = pgTable( 'home_page_why_parents_items', { @@ -2215,7 +2296,7 @@ export const home_page_why_parents_items = pgTable( _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), title: varchar('title'), - description: varchar('description'), + description: jsonb('description'), }, (columns) => [ index('home_page_why_parents_items_order_idx').on(columns._order), @@ -2273,12 +2354,32 @@ export const home_page_gallery_images = pgTable( ] ) +export const home_page_faq_items = pgTable( + 'home_page_faq_items', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: varchar('id').primaryKey(), + question: varchar('question').notNull(), + answer: jsonb('answer').notNull(), + }, + (columns) => [ + index('home_page_faq_items_order_idx').on(columns._order), + index('home_page_faq_items_parent_id_idx').on(columns._parentID), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [home_page.id], + name: 'home_page_faq_items_parent_id_fk', + }).onDelete('cascade'), + ] +) + export const home_page = pgTable( 'home_page', { id: serial('id').primaryKey(), hero_title: varchar('hero_title'), - hero_subtitle: varchar('hero_subtitle'), + hero_subtitle: jsonb('hero_subtitle'), hero_ctaLabel: varchar('hero_cta_label'), hero_ctaHref: varchar('hero_cta_href'), hero_backgroundVideo: varchar('hero_background_video'), @@ -2299,15 +2400,31 @@ export const home_page = pgTable( sectionTitles_birthday: varchar('section_titles_birthday'), sectionTitles_gallery: varchar('section_titles_gallery'), sectionTitles_reviews: varchar('section_titles_reviews'), + sectionTitles_googleReviewUrl: varchar('section_titles_google_review_url').default( + 'https://g.page/r/shumiland/review' + ), sectionTitles_news: varchar('section_titles_news'), video_poster: integer('video_poster_id').references(() => media.id, { onDelete: 'set null', }), video_src: varchar('video_src'), - birthdayIntro_text: varchar('birthday_intro_text'), + birthdayIntro_text: jsonb('birthday_intro_text'), + birthdayIntro_patternGreen: integer('birthday_intro_pattern_green_id').references( + () => media.id, + { + onDelete: 'set null', + } + ), + birthdayIntro_patternOrange: integer('birthday_intro_pattern_orange_id').references( + () => media.id, + { + onDelete: 'set null', + } + ), news_title: varchar('news_title'), - news_subtitle: varchar('news_subtitle'), + news_subtitle: jsonb('news_subtitle'), news_limit: numeric('news_limit', { mode: 'number' }).default(3), + faq_title: varchar('faq_title').default('ЧАСТІ ЗАПИТАННЯ'), map_embedUrl: varchar('map_embed_url'), map_address: varchar('map_address'), map_lat: numeric('map_lat', { mode: 'number' }), @@ -2328,10 +2445,66 @@ export const home_page = pgTable( columns.pageHero_backgroundImage ), index('home_page_video_video_poster_idx').on(columns.video_poster), + index('home_page_birthday_intro_birthday_intro_pattern_green_idx').on( + columns.birthdayIntro_patternGreen + ), + index('home_page_birthday_intro_birthday_intro_pattern_orange_idx').on( + columns.birthdayIntro_patternOrange + ), index('home_page_meta_meta_image_idx').on(columns.meta_image), ] ) +export const _home_page_v_version_hero_slides = pgTable( + '_home_page_v_version_hero_slides', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: serial('id').primaryKey(), + backgroundImage: integer('background_image_id').references(() => media.id, { + onDelete: 'set null', + }), + backgroundImageUrl: varchar('background_image_url'), + type: enum__home_page_v_version_hero_slides_type('type').default('location'), + title: varchar('title').notNull(), + subtitle: jsonb('subtitle'), + ctaLabel: varchar('cta_label').default('Купити квиток'), + ctaHref: varchar('cta_href').default('/payments'), + _uuid: varchar('_uuid'), + }, + (columns) => [ + index('_home_page_v_version_hero_slides_order_idx').on(columns._order), + index('_home_page_v_version_hero_slides_parent_id_idx').on(columns._parentID), + index('_home_page_v_version_hero_slides_background_image_idx').on(columns.backgroundImage), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [_home_page_v.id], + name: '_home_page_v_version_hero_slides_parent_id_fk', + }).onDelete('cascade'), + ] +) + +export const _home_page_v_version_sections = pgTable( + '_home_page_v_version_sections', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: serial('id').primaryKey(), + type: enum__home_page_v_version_sections_type('type').notNull(), + enabled: boolean('enabled').default(true), + _uuid: varchar('_uuid'), + }, + (columns) => [ + index('_home_page_v_version_sections_order_idx').on(columns._order), + index('_home_page_v_version_sections_parent_id_idx').on(columns._parentID), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [_home_page_v.id], + name: '_home_page_v_version_sections_parent_id_fk', + }).onDelete('cascade'), + ] +) + export const _home_page_v_version_why_parents_items = pgTable( '_home_page_v_version_why_parents_items', { @@ -2339,7 +2512,7 @@ export const _home_page_v_version_why_parents_items = pgTable( _parentID: integer('_parent_id').notNull(), id: serial('id').primaryKey(), title: varchar('title'), - description: varchar('description'), + description: jsonb('description'), _uuid: varchar('_uuid'), }, (columns) => [ @@ -2400,12 +2573,33 @@ export const _home_page_v_version_gallery_images = pgTable( ] ) +export const _home_page_v_version_faq_items = pgTable( + '_home_page_v_version_faq_items', + { + _order: integer('_order').notNull(), + _parentID: integer('_parent_id').notNull(), + id: serial('id').primaryKey(), + question: varchar('question').notNull(), + answer: jsonb('answer').notNull(), + _uuid: varchar('_uuid'), + }, + (columns) => [ + index('_home_page_v_version_faq_items_order_idx').on(columns._order), + index('_home_page_v_version_faq_items_parent_id_idx').on(columns._parentID), + foreignKey({ + columns: [columns['_parentID']], + foreignColumns: [_home_page_v.id], + name: '_home_page_v_version_faq_items_parent_id_fk', + }).onDelete('cascade'), + ] +) + export const _home_page_v = pgTable( '_home_page_v', { id: serial('id').primaryKey(), version_hero_title: varchar('version_hero_title'), - version_hero_subtitle: varchar('version_hero_subtitle'), + version_hero_subtitle: jsonb('version_hero_subtitle'), version_hero_ctaLabel: varchar('version_hero_cta_label'), version_hero_ctaHref: varchar('version_hero_cta_href'), version_hero_backgroundVideo: varchar('version_hero_background_video'), @@ -2438,15 +2632,29 @@ export const _home_page_v = pgTable( version_sectionTitles_birthday: varchar('version_section_titles_birthday'), version_sectionTitles_gallery: varchar('version_section_titles_gallery'), version_sectionTitles_reviews: varchar('version_section_titles_reviews'), + version_sectionTitles_googleReviewUrl: varchar( + 'version_section_titles_google_review_url' + ).default('https://g.page/r/shumiland/review'), version_sectionTitles_news: varchar('version_section_titles_news'), version_video_poster: integer('version_video_poster_id').references(() => media.id, { onDelete: 'set null', }), version_video_src: varchar('version_video_src'), - version_birthdayIntro_text: varchar('version_birthday_intro_text'), + version_birthdayIntro_text: jsonb('version_birthday_intro_text'), + version_birthdayIntro_patternGreen: integer( + 'version_birthday_intro_pattern_green_id' + ).references(() => media.id, { + onDelete: 'set null', + }), + version_birthdayIntro_patternOrange: integer( + 'version_birthday_intro_pattern_orange_id' + ).references(() => media.id, { + onDelete: 'set null', + }), version_news_title: varchar('version_news_title'), - version_news_subtitle: varchar('version_news_subtitle'), + version_news_subtitle: jsonb('version_news_subtitle'), version_news_limit: numeric('version_news_limit', { mode: 'number' }).default(3), + version_faq_title: varchar('version_faq_title').default('ЧАСТІ ЗАПИТАННЯ'), version_map_embedUrl: varchar('version_map_embed_url'), version_map_address: varchar('version_map_address'), version_map_lat: numeric('version_map_lat', { mode: 'number' }), @@ -2487,6 +2695,12 @@ export const _home_page_v = pgTable( columns.version_pageHero_backgroundImage ), index('_home_page_v_version_video_version_video_poster_idx').on(columns.version_video_poster), + index('_home_page_v_version_birthday_intro_version_birthday_int_idx').on( + columns.version_birthdayIntro_patternGreen + ), + index('_home_page_v_version_birthday_intro_version_birthday_i_1_idx').on( + columns.version_birthdayIntro_patternOrange + ), index('_home_page_v_version_meta_version_meta_image_idx').on(columns.version_meta_image), index('_home_page_v_created_at_idx').on(columns.createdAt), index('_home_page_v_updated_at_idx').on(columns.updatedAt), @@ -2671,6 +2885,7 @@ export const site_settings = pgTable( 'site_settings', { id: serial('id').primaryKey(), + gtmId: varchar('gtm_id'), ga4Id: varchar('ga4_id'), binotelId: varchar('binotel_id'), telegramChatId: varchar('telegram_chat_id'), @@ -2686,127 +2901,6 @@ export const site_settings = pgTable( (columns) => [index('site_settings_default_og_image_idx').on(columns.defaultOgImage)] ) -export const dyvolis_page_hero_tips = pgTable( - 'dyvolis_page_hero_tips', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - text: varchar('text').notNull(), - }, - (columns) => [ - index('dyvolis_page_hero_tips_order_idx').on(columns._order), - index('dyvolis_page_hero_tips_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [dyvolis_page.id], - name: 'dyvolis_page_hero_tips_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const dyvolis_page_gallery_images = pgTable( - 'dyvolis_page_gallery_images', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - image: integer('image_id') - .notNull() - .references(() => media.id, { - onDelete: 'set null', - }), - }, - (columns) => [ - index('dyvolis_page_gallery_images_order_idx').on(columns._order), - index('dyvolis_page_gallery_images_parent_id_idx').on(columns._parentID), - index('dyvolis_page_gallery_images_image_idx').on(columns.image), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [dyvolis_page.id], - name: 'dyvolis_page_gallery_images_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const dyvolis_page_why_visit_items = pgTable( - 'dyvolis_page_why_visit_items', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - title: varchar('title').notNull(), - description: varchar('description').notNull(), - }, - (columns) => [ - index('dyvolis_page_why_visit_items_order_idx').on(columns._order), - index('dyvolis_page_why_visit_items_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [dyvolis_page.id], - name: 'dyvolis_page_why_visit_items_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const dyvolis_page_review_videos = pgTable( - 'dyvolis_page_review_videos', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - src: varchar('src').notNull(), - poster: varchar('poster'), - label: varchar('label'), - }, - (columns) => [ - index('dyvolis_page_review_videos_order_idx').on(columns._order), - index('dyvolis_page_review_videos_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [dyvolis_page.id], - name: 'dyvolis_page_review_videos_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const dyvolis_page = pgTable( - 'dyvolis_page', - { - id: serial('id').primaryKey(), - heroImage: integer('hero_image_id').references(() => media.id, { - onDelete: 'set null', - }), - heroTitle: varchar('hero_title').default('ДивоЛіс – територія магії та фантазії'), - heroDescription: varchar('hero_description').default( - 'Топіарні фігури зроблені з урахуванням важливих деталей, тому ви одразу впізнаєте в них улюблених казкових героїв. Тут можна бігати, стрибати, лазити по фігурках і ставати героями власної казки.' - ), - heroStat: varchar('hero_stat').default('60+'), - heroStatLabel: varchar('hero_stat_label').default( - 'експонатів з безпечних для дітей матеріалів' - ), - workingHours: varchar('working_hours').default('щодня з 11:00 до 20:00'), - galleryQuote: varchar('gallery_quote').default( - 'Це місце – де малеча зустрічає героїв улюблених казок. Простір справжнього дитинства.' - ), - whyVisitTitle: varchar('why_visit_title').default('Чому варто відвідати ДивоЛіс'), - comboDescription: varchar('combo_description').default( - 'Динопарк + Диволіс із казковими топіарними фігурами + Дзеркальний лабіринт' - ), - meta_title: varchar('meta_title'), - meta_description: varchar('meta_description'), - meta_image: integer('meta_image_id').references(() => media.id, { - onDelete: 'set null', - }), - updatedAt: timestamp('updated_at', { mode: 'string', withTimezone: true, precision: 3 }), - createdAt: timestamp('created_at', { mode: 'string', withTimezone: true, precision: 3 }), - }, - (columns) => [ - index('dyvolis_page_hero_image_idx').on(columns.heroImage), - index('dyvolis_page_meta_meta_image_idx').on(columns.meta_image), - ] -) - export const group_visits_page_feature_images = pgTable( 'group_visits_page_feature_images', { @@ -2889,6 +2983,9 @@ export const group_visits_page = pgTable( heroSubtitle: varchar('hero_subtitle').default( 'Спеціальні умови для організованих груп. Мінімум 10 осіб — максимум вражень.' ), + heroTitleSize: numeric('hero_title_size', { mode: 'number' }), + heroSubtitleSize: numeric('hero_subtitle_size', { mode: 'number' }), + heroFont: enum_group_visits_page_hero_font('hero_font'), heroDescription: jsonb('hero_description'), heroCta: varchar('hero_cta').default('Забронювати пригоду'), featureText: jsonb('feature_text'), @@ -2904,9 +3001,7 @@ export const group_visits_page = pgTable( ), priceMinPeople: varchar('price_min_people').default('Пропозиція для груп від 10 людей'), priceCta: varchar('price_cta').default('Купити квиток'), - priceDescription: varchar('price_description').default( - 'У вартість входить відвідування Динопарку та ДивоЛісу.\nЧас перебування на локаціях необмежений.' - ), + priceDescription: jsonb('price_description'), bottomText: jsonb('bottom_text'), formTitle: varchar('form_title').default('Подати заявку на групове відвідування'), formSubtitle: varchar('form_subtitle').default( @@ -3015,6 +3110,9 @@ export const _group_visits_page_v = pgTable( version_heroSubtitle: varchar('version_hero_subtitle').default( 'Спеціальні умови для організованих груп. Мінімум 10 осіб — максимум вражень.' ), + version_heroTitleSize: numeric('version_hero_title_size', { mode: 'number' }), + version_heroSubtitleSize: numeric('version_hero_subtitle_size', { mode: 'number' }), + version_heroFont: enum__group_visits_page_v_version_hero_font('version_hero_font'), version_heroDescription: jsonb('version_hero_description'), version_heroCta: varchar('version_hero_cta').default('Забронювати пригоду'), version_featureText: jsonb('version_feature_text'), @@ -3036,9 +3134,7 @@ export const _group_visits_page_v = pgTable( 'Пропозиція для груп від 10 людей' ), version_priceCta: varchar('version_price_cta').default('Купити квиток'), - version_priceDescription: varchar('version_price_description').default( - 'У вартість входить відвідування Динопарку та ДивоЛісу.\nЧас перебування на локаціях необмежений.' - ), + version_priceDescription: jsonb('version_price_description'), version_bottomText: jsonb('version_bottom_text'), version_formTitle: varchar('version_form_title').default( 'Подати заявку на групове відвідування' @@ -3089,7 +3185,7 @@ export const birthday_page_package_items = pgTable( _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), image: integer('image_id').references(() => media.id, { onDelete: 'set null', }), @@ -3115,7 +3211,7 @@ export const birthday_page_why_items = pgTable( _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), }, (columns) => [ index('birthday_page_why_items_order_idx').on(columns._order), @@ -3134,13 +3230,21 @@ export const birthday_page_why_videos = pgTable( _order: integer('_order').notNull(), _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), - src: varchar('src').notNull(), - poster: varchar('poster'), + video: integer('video_id') + .notNull() + .references(() => media.id, { + onDelete: 'set null', + }), + poster: integer('poster_id').references(() => media.id, { + onDelete: 'set null', + }), label: varchar('label'), }, (columns) => [ index('birthday_page_why_videos_order_idx').on(columns._order), index('birthday_page_why_videos_parent_id_idx').on(columns._parentID), + index('birthday_page_why_videos_video_idx').on(columns.video), + index('birthday_page_why_videos_poster_idx').on(columns.poster), foreignKey({ columns: [columns['_parentID']], foreignColumns: [birthday_page.id], @@ -3149,74 +3253,6 @@ export const birthday_page_why_videos = pgTable( ] ) -export const birthday_page_pricing_packages = pgTable( - 'birthday_page_pricing_packages', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - note: varchar('note'), - ctaLabel: varchar('cta_label').default('Купити квиток'), - ctaHref: varchar('cta_href').default('/payments'), - }, - (columns) => [ - index('birthday_page_pricing_packages_order_idx').on(columns._order), - index('birthday_page_pricing_packages_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [birthday_page.id], - name: 'birthday_page_pricing_packages_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const birthday_page_entrance_prices = pgTable( - 'birthday_page_entrance_prices', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - note: varchar('note'), - ctaLabel: varchar('cta_label').default('Забронювати пригоду'), - ctaHref: varchar('cta_href').default('#order-form'), - }, - (columns) => [ - index('birthday_page_entrance_prices_order_idx').on(columns._order), - index('birthday_page_entrance_prices_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [birthday_page.id], - name: 'birthday_page_entrance_prices_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const birthday_page_entertainment_packages = pgTable( - 'birthday_page_entertainment_packages', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: varchar('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - ctaLabel: varchar('cta_label').default('Замовити'), - ctaHref: varchar('cta_href').default('#order-form'), - }, - (columns) => [ - index('birthday_page_entertainment_packages_order_idx').on(columns._order), - index('birthday_page_entertainment_packages_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [birthday_page.id], - name: 'birthday_page_entertainment_packages_parent_id_fk', - }).onDelete('cascade'), - ] -) - export const birthday_page = pgTable( 'birthday_page', { @@ -3228,23 +3264,8 @@ export const birthday_page = pgTable( heroSubtitle: varchar('hero_subtitle').default( 'Будьте повноцінними гостями на дні народження вашої дитини. Залиште нам усі турботи про організацію. Ваш єдиний обовʼязок — відпочивати, святкувати, фотографуватися та насолоджуватися моментами.' ), - heroCta: varchar('hero_cta').default('Забронювати пригоду'), packageSectionTitle: varchar('package_section_title').default('ЩО ВХОДИТЬ У ПАКЕТ СВЯТА'), - packageSectionSubtitle: varchar('package_section_subtitle').default( - 'Єдиний квиток для іменинника та 15-ти гостей' - ), whyTitle: varchar('why_title').default('Чому варто відвідати ДивоЛіс'), - workingHours: varchar('working_hours').default("п'ятниця-субота-неділя з 11:00 до 20:00"), - pricingSectionTitle: varchar('pricing_section_title').default('ВАРТІСТЬ КВИТКІВ:'), - entranceSectionTitle: varchar('entrance_section_title').default( - 'Вхід на локації (для інших дітей):' - ), - freeInclusions: varchar('free_inclusions').default( - 'Діти до 3 років, Діти з іменинником до 18 років, VIP (за наявності запрошення), Діти-сироти' - ), - entertainmentSectionTitle: varchar('entertainment_section_title').default( - 'Розважальна програма:' - ), formTitle: varchar('form_title').default('Замовити святкування'), formSubtitle: varchar('form_subtitle').default( "Залиште заявку і наш менеджер зв'яжеться з вами протягом 30 хвилин" @@ -3274,7 +3295,7 @@ export const _birthday_page_v_version_package_items = pgTable( _parentID: integer('_parent_id').notNull(), id: serial('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), image: integer('image_id').references(() => media.id, { onDelete: 'set null', }), @@ -3301,7 +3322,7 @@ export const _birthday_page_v_version_why_items = pgTable( _parentID: integer('_parent_id').notNull(), id: serial('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), _uuid: varchar('_uuid'), }, (columns) => [ @@ -3321,14 +3342,22 @@ export const _birthday_page_v_version_why_videos = pgTable( _order: integer('_order').notNull(), _parentID: integer('_parent_id').notNull(), id: serial('id').primaryKey(), - src: varchar('src').notNull(), - poster: varchar('poster'), + video: integer('video_id') + .notNull() + .references(() => media.id, { + onDelete: 'set null', + }), + poster: integer('poster_id').references(() => media.id, { + onDelete: 'set null', + }), label: varchar('label'), _uuid: varchar('_uuid'), }, (columns) => [ index('_birthday_page_v_version_why_videos_order_idx').on(columns._order), index('_birthday_page_v_version_why_videos_parent_id_idx').on(columns._parentID), + index('_birthday_page_v_version_why_videos_video_idx').on(columns.video), + index('_birthday_page_v_version_why_videos_poster_idx').on(columns.poster), foreignKey({ columns: [columns['_parentID']], foreignColumns: [_birthday_page_v.id], @@ -3337,77 +3366,6 @@ export const _birthday_page_v_version_why_videos = pgTable( ] ) -export const _birthday_page_v_version_pricing_packages = pgTable( - '_birthday_page_v_version_pricing_packages', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: serial('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - note: varchar('note'), - ctaLabel: varchar('cta_label').default('Купити квиток'), - ctaHref: varchar('cta_href').default('/payments'), - _uuid: varchar('_uuid'), - }, - (columns) => [ - index('_birthday_page_v_version_pricing_packages_order_idx').on(columns._order), - index('_birthday_page_v_version_pricing_packages_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [_birthday_page_v.id], - name: '_birthday_page_v_version_pricing_packages_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const _birthday_page_v_version_entrance_prices = pgTable( - '_birthday_page_v_version_entrance_prices', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: serial('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - note: varchar('note'), - ctaLabel: varchar('cta_label').default('Забронювати пригоду'), - ctaHref: varchar('cta_href').default('#order-form'), - _uuid: varchar('_uuid'), - }, - (columns) => [ - index('_birthday_page_v_version_entrance_prices_order_idx').on(columns._order), - index('_birthday_page_v_version_entrance_prices_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [_birthday_page_v.id], - name: '_birthday_page_v_version_entrance_prices_parent_id_fk', - }).onDelete('cascade'), - ] -) - -export const _birthday_page_v_version_entertainment_packages = pgTable( - '_birthday_page_v_version_entertainment_packages', - { - _order: integer('_order').notNull(), - _parentID: integer('_parent_id').notNull(), - id: serial('id').primaryKey(), - label: varchar('label').notNull(), - price: varchar('price').notNull(), - ctaLabel: varchar('cta_label').default('Замовити'), - ctaHref: varchar('cta_href').default('#order-form'), - _uuid: varchar('_uuid'), - }, - (columns) => [ - index('_birthday_page_v_version_entertainment_packages_order_idx').on(columns._order), - index('_birthday_page_v_version_entertainment_packages_parent_id_idx').on(columns._parentID), - foreignKey({ - columns: [columns['_parentID']], - foreignColumns: [_birthday_page_v.id], - name: '_birthday_page_v_version_entertainment_packages_parent_id_fk', - }).onDelete('cascade'), - ] -) - export const _birthday_page_v = pgTable( '_birthday_page_v', { @@ -3421,29 +3379,10 @@ export const _birthday_page_v = pgTable( version_heroSubtitle: varchar('version_hero_subtitle').default( 'Будьте повноцінними гостями на дні народження вашої дитини. Залиште нам усі турботи про організацію. Ваш єдиний обовʼязок — відпочивати, святкувати, фотографуватися та насолоджуватися моментами.' ), - version_heroCta: varchar('version_hero_cta').default('Забронювати пригоду'), version_packageSectionTitle: varchar('version_package_section_title').default( 'ЩО ВХОДИТЬ У ПАКЕТ СВЯТА' ), - version_packageSectionSubtitle: varchar('version_package_section_subtitle').default( - 'Єдиний квиток для іменинника та 15-ти гостей' - ), version_whyTitle: varchar('version_why_title').default('Чому варто відвідати ДивоЛіс'), - version_workingHours: varchar('version_working_hours').default( - "п'ятниця-субота-неділя з 11:00 до 20:00" - ), - version_pricingSectionTitle: varchar('version_pricing_section_title').default( - 'ВАРТІСТЬ КВИТКІВ:' - ), - version_entranceSectionTitle: varchar('version_entrance_section_title').default( - 'Вхід на локації (для інших дітей):' - ), - version_freeInclusions: varchar('version_free_inclusions').default( - 'Діти до 3 років, Діти з іменинником до 18 років, VIP (за наявності запрошення), Діти-сироти' - ), - version_entertainmentSectionTitle: varchar('version_entertainment_section_title').default( - 'Розважальна програма:' - ), version_formTitle: varchar('version_form_title').default('Замовити святкування'), version_formSubtitle: varchar('version_form_subtitle').default( "Залиште заявку і наш менеджер зв'яжеться з вами протягом 30 хвилин" @@ -3510,7 +3449,7 @@ export const tickets_page_combo_cards = pgTable( name: varchar('name').notNull(), subtitle: varchar('subtitle'), price: varchar('price').notNull(), - description: varchar('description'), + description: jsonb('description'), featured: boolean('featured'), badge: varchar('badge'), }, @@ -3591,9 +3530,7 @@ export const tickets_page = pgTable( freeEntryBadge: varchar('free_entry_badge').default('0 грн'), discountsTitle: varchar('discounts_title').default('Спеціальні знижки'), discountsBadge: varchar('discounts_badge').default('-30%'), - benefitsFootnote: varchar('benefits_footnote').default( - '*Знижки та пільги поширюються виключно на індивідуальне відвідування 3 основних локацій (Динопарк, Зона топіарних фігур, Дзеркальний лабіринт) та не сумуються з тарифами категорії «КОМБО».' - ), + benefitsFootnote: jsonb('benefits_footnote'), meta_title: varchar('meta_title'), meta_description: varchar('meta_description'), meta_image: integer('meta_image_id').references(() => media.id, { @@ -3637,7 +3574,7 @@ export const _tickets_page_v_version_combo_cards = pgTable( name: varchar('name').notNull(), subtitle: varchar('subtitle'), price: varchar('price').notNull(), - description: varchar('description'), + description: jsonb('description'), featured: boolean('featured'), badge: varchar('badge'), _uuid: varchar('_uuid'), @@ -3727,9 +3664,7 @@ export const _tickets_page_v = pgTable( version_freeEntryBadge: varchar('version_free_entry_badge').default('0 грн'), version_discountsTitle: varchar('version_discounts_title').default('Спеціальні знижки'), version_discountsBadge: varchar('version_discounts_badge').default('-30%'), - version_benefitsFootnote: varchar('version_benefits_footnote').default( - '*Знижки та пільги поширюються виключно на індивідуальне відвідування 3 основних локацій (Динопарк, Зона топіарних фігур, Дзеркальний лабіринт) та не сумуються з тарифами категорії «КОМБО».' - ), + version_benefitsFootnote: jsonb('version_benefits_footnote'), version_meta_title: varchar('version_meta_title'), version_meta_description: varchar('version_meta_description'), version_meta_image: integer('version_meta_image_id').references(() => media.id, { @@ -3951,7 +3886,7 @@ export const dinosaur_page_activities = pgTable( id: varchar('id').primaryKey(), name: varchar('name').notNull(), price: varchar('price'), - description: varchar('description'), + description: jsonb('description'), image: integer('image_id').references(() => media.id, { onDelete: 'set null', }), @@ -3976,7 +3911,7 @@ export const dinosaur_page_why_visit_items = pgTable( _parentID: integer('_parent_id').notNull(), id: varchar('id').primaryKey(), title: varchar('title').notNull(), - description: varchar('description').notNull(), + description: jsonb('description').notNull(), }, (columns) => [ index('dinosaur_page_why_visit_items_order_idx').on(columns._order), @@ -4015,18 +3950,14 @@ export const dinosaur_page = pgTable( { id: serial('id').primaryKey(), heroTitle: varchar('hero_title').default('Динопарк — портал у світ динозаврів'), - heroDescription: varchar('hero_description').default( - 'Великі динозаври, що рухаються та гарчать, справжнє роздоволлє, цікаві екскурсії та динородео — тут є все, щоб ваша дитина не нудьгувала.' - ), + heroDescription: jsonb('hero_description'), heroStat: varchar('hero_stat').default('26'), heroStatLabel: varchar('hero_stat_label').default('унікальних експонатів'), heroImage: integer('hero_image_id').references(() => media.id, { onDelete: 'set null', }), activitiesTitle: varchar('activities_title').default('Додаткові розваги у динопарку'), - activitiesDescription: varchar('activities_description').default( - 'Хочете дізнатись ще більше про динозаврів? Замовте екскурсію з гідом, поринь у світ палеонтологічних розкопок або підкорюй справжнього динозавра!' - ), + activitiesDescription: jsonb('activities_description'), whyVisitTitle: varchar('why_visit_title').default('Чому варто відвідати динопарк'), workingHours: varchar('working_hours').default("п'ятниця-субота-неділя з 11:00 до 20:00"), comboDescription: varchar('combo_description').default( @@ -4046,6 +3977,20 @@ export const dinosaur_page = pgTable( ] ) +export const legal_pages = pgTable('legal_pages', { + id: serial('id').primaryKey(), + privacy_title: varchar('privacy_title').default('Політика конфіденційності'), + privacy_content: jsonb('privacy_content'), + terms_title: varchar('terms_title').default('Умови використання'), + terms_content: jsonb('terms_content'), + offer_title: varchar('offer_title').default('Публічна оферта'), + offer_content: jsonb('offer_content'), + dataProcessing_title: varchar('data_processing_title').default('Обробка персональних даних'), + dataProcessing_content: jsonb('data_processing_content'), + updatedAt: timestamp('updated_at', { mode: 'string', withTimezone: true, precision: 3 }), + createdAt: timestamp('created_at', { mode: 'string', withTimezone: true, precision: 3 }), +}) + export const relations_users_sessions = relations(users_sessions, ({ one }) => ({ _parentID: one(users, { fields: [users_sessions._parentID], @@ -4944,6 +4889,25 @@ export const relations_payload_preferences = relations(payload_preferences, ({ m }), })) export const relations_payload_migrations = relations(payload_migrations, () => ({})) +export const relations_home_page_hero_slides = relations(home_page_hero_slides, ({ one }) => ({ + _parentID: one(home_page, { + fields: [home_page_hero_slides._parentID], + references: [home_page.id], + relationName: 'heroSlides', + }), + backgroundImage: one(media, { + fields: [home_page_hero_slides.backgroundImage], + references: [media.id], + relationName: 'backgroundImage', + }), +})) +export const relations_home_page_sections = relations(home_page_sections, ({ one }) => ({ + _parentID: one(home_page, { + fields: [home_page_sections._parentID], + references: [home_page.id], + relationName: 'sections', + }), +})) export const relations_home_page_why_parents_items = relations( home_page_why_parents_items, ({ one }) => ({ @@ -4984,7 +4948,17 @@ export const relations_home_page_gallery_images = relations( }), }) ) +export const relations_home_page_faq_items = relations(home_page_faq_items, ({ one }) => ({ + _parentID: one(home_page, { + fields: [home_page_faq_items._parentID], + references: [home_page.id], + relationName: 'faq_items', + }), +})) export const relations_home_page = relations(home_page, ({ one, many }) => ({ + heroSlides: many(home_page_hero_slides, { + relationName: 'heroSlides', + }), hero_backgroundImage: one(media, { fields: [home_page.hero_backgroundImage], references: [media.id], @@ -5005,6 +4979,9 @@ export const relations_home_page = relations(home_page, ({ one, many }) => ({ references: [media.id], relationName: 'pageHero_backgroundImage', }), + sections: many(home_page_sections, { + relationName: 'sections', + }), whyParents_items: many(home_page_why_parents_items, { relationName: 'whyParents_items', }), @@ -5019,12 +4996,50 @@ export const relations_home_page = relations(home_page, ({ one, many }) => ({ references: [media.id], relationName: 'video_poster', }), + birthdayIntro_patternGreen: one(media, { + fields: [home_page.birthdayIntro_patternGreen], + references: [media.id], + relationName: 'birthdayIntro_patternGreen', + }), + birthdayIntro_patternOrange: one(media, { + fields: [home_page.birthdayIntro_patternOrange], + references: [media.id], + relationName: 'birthdayIntro_patternOrange', + }), + faq_items: many(home_page_faq_items, { + relationName: 'faq_items', + }), meta_image: one(media, { fields: [home_page.meta_image], references: [media.id], relationName: 'meta_image', }), })) +export const relations__home_page_v_version_hero_slides = relations( + _home_page_v_version_hero_slides, + ({ one }) => ({ + _parentID: one(_home_page_v, { + fields: [_home_page_v_version_hero_slides._parentID], + references: [_home_page_v.id], + relationName: 'version_heroSlides', + }), + backgroundImage: one(media, { + fields: [_home_page_v_version_hero_slides.backgroundImage], + references: [media.id], + relationName: 'backgroundImage', + }), + }) +) +export const relations__home_page_v_version_sections = relations( + _home_page_v_version_sections, + ({ one }) => ({ + _parentID: one(_home_page_v, { + fields: [_home_page_v_version_sections._parentID], + references: [_home_page_v.id], + relationName: 'version_sections', + }), + }) +) export const relations__home_page_v_version_why_parents_items = relations( _home_page_v_version_why_parents_items, ({ one }) => ({ @@ -5065,7 +5080,20 @@ export const relations__home_page_v_version_gallery_images = relations( }), }) ) +export const relations__home_page_v_version_faq_items = relations( + _home_page_v_version_faq_items, + ({ one }) => ({ + _parentID: one(_home_page_v, { + fields: [_home_page_v_version_faq_items._parentID], + references: [_home_page_v.id], + relationName: 'version_faq_items', + }), + }) +) export const relations__home_page_v = relations(_home_page_v, ({ one, many }) => ({ + version_heroSlides: many(_home_page_v_version_hero_slides, { + relationName: 'version_heroSlides', + }), version_hero_backgroundImage: one(media, { fields: [_home_page_v.version_hero_backgroundImage], references: [media.id], @@ -5086,6 +5114,9 @@ export const relations__home_page_v = relations(_home_page_v, ({ one, many }) => references: [media.id], relationName: 'version_pageHero_backgroundImage', }), + version_sections: many(_home_page_v_version_sections, { + relationName: 'version_sections', + }), version_whyParents_items: many(_home_page_v_version_why_parents_items, { relationName: 'version_whyParents_items', }), @@ -5100,6 +5131,19 @@ export const relations__home_page_v = relations(_home_page_v, ({ one, many }) => references: [media.id], relationName: 'version_video_poster', }), + version_birthdayIntro_patternGreen: one(media, { + fields: [_home_page_v.version_birthdayIntro_patternGreen], + references: [media.id], + relationName: 'version_birthdayIntro_patternGreen', + }), + version_birthdayIntro_patternOrange: one(media, { + fields: [_home_page_v.version_birthdayIntro_patternOrange], + references: [media.id], + relationName: 'version_birthdayIntro_patternOrange', + }), + version_faq_items: many(_home_page_v_version_faq_items, { + relationName: 'version_faq_items', + }), version_meta_image: one(media, { fields: [_home_page_v.version_meta_image], references: [media.id], @@ -5197,72 +5241,6 @@ export const relations_site_settings = relations(site_settings, ({ one, many }) relationName: 'tariffCategoryLabels', }), })) -export const relations_dyvolis_page_hero_tips = relations(dyvolis_page_hero_tips, ({ one }) => ({ - _parentID: one(dyvolis_page, { - fields: [dyvolis_page_hero_tips._parentID], - references: [dyvolis_page.id], - relationName: 'heroTips', - }), -})) -export const relations_dyvolis_page_gallery_images = relations( - dyvolis_page_gallery_images, - ({ one }) => ({ - _parentID: one(dyvolis_page, { - fields: [dyvolis_page_gallery_images._parentID], - references: [dyvolis_page.id], - relationName: 'galleryImages', - }), - image: one(media, { - fields: [dyvolis_page_gallery_images.image], - references: [media.id], - relationName: 'image', - }), - }) -) -export const relations_dyvolis_page_why_visit_items = relations( - dyvolis_page_why_visit_items, - ({ one }) => ({ - _parentID: one(dyvolis_page, { - fields: [dyvolis_page_why_visit_items._parentID], - references: [dyvolis_page.id], - relationName: 'whyVisitItems', - }), - }) -) -export const relations_dyvolis_page_review_videos = relations( - dyvolis_page_review_videos, - ({ one }) => ({ - _parentID: one(dyvolis_page, { - fields: [dyvolis_page_review_videos._parentID], - references: [dyvolis_page.id], - relationName: 'reviewVideos', - }), - }) -) -export const relations_dyvolis_page = relations(dyvolis_page, ({ one, many }) => ({ - heroImage: one(media, { - fields: [dyvolis_page.heroImage], - references: [media.id], - relationName: 'heroImage', - }), - heroTips: many(dyvolis_page_hero_tips, { - relationName: 'heroTips', - }), - galleryImages: many(dyvolis_page_gallery_images, { - relationName: 'galleryImages', - }), - whyVisitItems: many(dyvolis_page_why_visit_items, { - relationName: 'whyVisitItems', - }), - reviewVideos: many(dyvolis_page_review_videos, { - relationName: 'reviewVideos', - }), - meta_image: one(media, { - fields: [dyvolis_page.meta_image], - references: [media.id], - relationName: 'meta_image', - }), -})) export const relations_group_visits_page_feature_images = relations( group_visits_page_feature_images, ({ one }) => ({ @@ -5435,35 +5413,15 @@ export const relations_birthday_page_why_videos = relations( references: [birthday_page.id], relationName: 'whyVideos', }), - }) -) -export const relations_birthday_page_pricing_packages = relations( - birthday_page_pricing_packages, - ({ one }) => ({ - _parentID: one(birthday_page, { - fields: [birthday_page_pricing_packages._parentID], - references: [birthday_page.id], - relationName: 'pricingPackages', + video: one(media, { + fields: [birthday_page_why_videos.video], + references: [media.id], + relationName: 'video', }), - }) -) -export const relations_birthday_page_entrance_prices = relations( - birthday_page_entrance_prices, - ({ one }) => ({ - _parentID: one(birthday_page, { - fields: [birthday_page_entrance_prices._parentID], - references: [birthday_page.id], - relationName: 'entrancePrices', - }), - }) -) -export const relations_birthday_page_entertainment_packages = relations( - birthday_page_entertainment_packages, - ({ one }) => ({ - _parentID: one(birthday_page, { - fields: [birthday_page_entertainment_packages._parentID], - references: [birthday_page.id], - relationName: 'entertainmentPackages', + poster: one(media, { + fields: [birthday_page_why_videos.poster], + references: [media.id], + relationName: 'poster', }), }) ) @@ -5482,15 +5440,6 @@ export const relations_birthday_page = relations(birthday_page, ({ one, many }) whyVideos: many(birthday_page_why_videos, { relationName: 'whyVideos', }), - pricingPackages: many(birthday_page_pricing_packages, { - relationName: 'pricingPackages', - }), - entrancePrices: many(birthday_page_entrance_prices, { - relationName: 'entrancePrices', - }), - entertainmentPackages: many(birthday_page_entertainment_packages, { - relationName: 'entertainmentPackages', - }), form: one(forms, { fields: [birthday_page.form], references: [forms.id], @@ -5535,35 +5484,15 @@ export const relations__birthday_page_v_version_why_videos = relations( references: [_birthday_page_v.id], relationName: 'version_whyVideos', }), - }) -) -export const relations__birthday_page_v_version_pricing_packages = relations( - _birthday_page_v_version_pricing_packages, - ({ one }) => ({ - _parentID: one(_birthday_page_v, { - fields: [_birthday_page_v_version_pricing_packages._parentID], - references: [_birthday_page_v.id], - relationName: 'version_pricingPackages', + video: one(media, { + fields: [_birthday_page_v_version_why_videos.video], + references: [media.id], + relationName: 'video', }), - }) -) -export const relations__birthday_page_v_version_entrance_prices = relations( - _birthday_page_v_version_entrance_prices, - ({ one }) => ({ - _parentID: one(_birthday_page_v, { - fields: [_birthday_page_v_version_entrance_prices._parentID], - references: [_birthday_page_v.id], - relationName: 'version_entrancePrices', - }), - }) -) -export const relations__birthday_page_v_version_entertainment_packages = relations( - _birthday_page_v_version_entertainment_packages, - ({ one }) => ({ - _parentID: one(_birthday_page_v, { - fields: [_birthday_page_v_version_entertainment_packages._parentID], - references: [_birthday_page_v.id], - relationName: 'version_entertainmentPackages', + poster: one(media, { + fields: [_birthday_page_v_version_why_videos.poster], + references: [media.id], + relationName: 'poster', }), }) ) @@ -5582,15 +5511,6 @@ export const relations__birthday_page_v = relations(_birthday_page_v, ({ one, ma version_whyVideos: many(_birthday_page_v_version_why_videos, { relationName: 'version_whyVideos', }), - version_pricingPackages: many(_birthday_page_v_version_pricing_packages, { - relationName: 'version_pricingPackages', - }), - version_entrancePrices: many(_birthday_page_v_version_entrance_prices, { - relationName: 'version_entrancePrices', - }), - version_entertainmentPackages: many(_birthday_page_v_version_entertainment_packages, { - relationName: 'version_entertainmentPackages', - }), version_form: one(forms, { fields: [_birthday_page_v.version_form], references: [forms.id], @@ -5865,6 +5785,7 @@ export const relations_dinosaur_page = relations(dinosaur_page, ({ one, many }) relationName: 'meta_image', }), })) +export const relations_legal_pages = relations(legal_pages, () => ({})) type DatabaseSchema = { enum_users_role: typeof enum_users_role @@ -5885,8 +5806,14 @@ type DatabaseSchema = { enum_redirects_type: typeof enum_redirects_type enum_forms_confirmation_type: typeof enum_forms_confirmation_type enum_forms_redirect_type: typeof enum_forms_redirect_type + enum_home_page_hero_slides_type: typeof enum_home_page_hero_slides_type + enum_home_page_sections_type: typeof enum_home_page_sections_type + enum__home_page_v_version_hero_slides_type: typeof enum__home_page_v_version_hero_slides_type + enum__home_page_v_version_sections_type: typeof enum__home_page_v_version_sections_type enum_header_nav_links_auto_children_from: typeof enum_header_nav_links_auto_children_from enum_footer_socials_platform: typeof enum_footer_socials_platform + enum_group_visits_page_hero_font: typeof enum_group_visits_page_hero_font + enum__group_visits_page_v_version_hero_font: typeof enum__group_visits_page_v_version_hero_font users_sessions: typeof users_sessions users: typeof users media: typeof media @@ -5963,13 +5890,19 @@ type DatabaseSchema = { payload_preferences: typeof payload_preferences payload_preferences_rels: typeof payload_preferences_rels payload_migrations: typeof payload_migrations + home_page_hero_slides: typeof home_page_hero_slides + home_page_sections: typeof home_page_sections home_page_why_parents_items: typeof home_page_why_parents_items home_page_why_parents_side_gallery: typeof home_page_why_parents_side_gallery home_page_gallery_images: typeof home_page_gallery_images + home_page_faq_items: typeof home_page_faq_items home_page: typeof home_page + _home_page_v_version_hero_slides: typeof _home_page_v_version_hero_slides + _home_page_v_version_sections: typeof _home_page_v_version_sections _home_page_v_version_why_parents_items: typeof _home_page_v_version_why_parents_items _home_page_v_version_why_parents_side_gallery: typeof _home_page_v_version_why_parents_side_gallery _home_page_v_version_gallery_images: typeof _home_page_v_version_gallery_images + _home_page_v_version_faq_items: typeof _home_page_v_version_faq_items _home_page_v: typeof _home_page_v checkout_page: typeof checkout_page thank_you_page: typeof thank_you_page @@ -5981,11 +5914,6 @@ type DatabaseSchema = { footer: typeof footer site_settings_tariff_category_labels: typeof site_settings_tariff_category_labels site_settings: typeof site_settings - dyvolis_page_hero_tips: typeof dyvolis_page_hero_tips - dyvolis_page_gallery_images: typeof dyvolis_page_gallery_images - dyvolis_page_why_visit_items: typeof dyvolis_page_why_visit_items - dyvolis_page_review_videos: typeof dyvolis_page_review_videos - dyvolis_page: typeof dyvolis_page group_visits_page_feature_images: typeof group_visits_page_feature_images group_visits_page_amenities: typeof group_visits_page_amenities group_visits_page_bottom_images: typeof group_visits_page_bottom_images @@ -5997,16 +5925,10 @@ type DatabaseSchema = { birthday_page_package_items: typeof birthday_page_package_items birthday_page_why_items: typeof birthday_page_why_items birthday_page_why_videos: typeof birthday_page_why_videos - birthday_page_pricing_packages: typeof birthday_page_pricing_packages - birthday_page_entrance_prices: typeof birthday_page_entrance_prices - birthday_page_entertainment_packages: typeof birthday_page_entertainment_packages birthday_page: typeof birthday_page _birthday_page_v_version_package_items: typeof _birthday_page_v_version_package_items _birthday_page_v_version_why_items: typeof _birthday_page_v_version_why_items _birthday_page_v_version_why_videos: typeof _birthday_page_v_version_why_videos - _birthday_page_v_version_pricing_packages: typeof _birthday_page_v_version_pricing_packages - _birthday_page_v_version_entrance_prices: typeof _birthday_page_v_version_entrance_prices - _birthday_page_v_version_entertainment_packages: typeof _birthday_page_v_version_entertainment_packages _birthday_page_v: typeof _birthday_page_v tickets_page_combo_cards_locations: typeof tickets_page_combo_cards_locations tickets_page_combo_cards: typeof tickets_page_combo_cards @@ -6029,6 +5951,7 @@ type DatabaseSchema = { dinosaur_page_why_visit_items: typeof dinosaur_page_why_visit_items dinosaur_page_review_videos: typeof dinosaur_page_review_videos dinosaur_page: typeof dinosaur_page + legal_pages: typeof legal_pages relations_users_sessions: typeof relations_users_sessions relations_users: typeof relations_users relations_media: typeof relations_media @@ -6105,13 +6028,19 @@ type DatabaseSchema = { relations_payload_preferences_rels: typeof relations_payload_preferences_rels relations_payload_preferences: typeof relations_payload_preferences relations_payload_migrations: typeof relations_payload_migrations + relations_home_page_hero_slides: typeof relations_home_page_hero_slides + relations_home_page_sections: typeof relations_home_page_sections relations_home_page_why_parents_items: typeof relations_home_page_why_parents_items relations_home_page_why_parents_side_gallery: typeof relations_home_page_why_parents_side_gallery relations_home_page_gallery_images: typeof relations_home_page_gallery_images + relations_home_page_faq_items: typeof relations_home_page_faq_items relations_home_page: typeof relations_home_page + relations__home_page_v_version_hero_slides: typeof relations__home_page_v_version_hero_slides + relations__home_page_v_version_sections: typeof relations__home_page_v_version_sections relations__home_page_v_version_why_parents_items: typeof relations__home_page_v_version_why_parents_items relations__home_page_v_version_why_parents_side_gallery: typeof relations__home_page_v_version_why_parents_side_gallery relations__home_page_v_version_gallery_images: typeof relations__home_page_v_version_gallery_images + relations__home_page_v_version_faq_items: typeof relations__home_page_v_version_faq_items relations__home_page_v: typeof relations__home_page_v relations_checkout_page: typeof relations_checkout_page relations_thank_you_page: typeof relations_thank_you_page @@ -6123,11 +6052,6 @@ type DatabaseSchema = { relations_footer: typeof relations_footer relations_site_settings_tariff_category_labels: typeof relations_site_settings_tariff_category_labels relations_site_settings: typeof relations_site_settings - relations_dyvolis_page_hero_tips: typeof relations_dyvolis_page_hero_tips - relations_dyvolis_page_gallery_images: typeof relations_dyvolis_page_gallery_images - relations_dyvolis_page_why_visit_items: typeof relations_dyvolis_page_why_visit_items - relations_dyvolis_page_review_videos: typeof relations_dyvolis_page_review_videos - relations_dyvolis_page: typeof relations_dyvolis_page relations_group_visits_page_feature_images: typeof relations_group_visits_page_feature_images relations_group_visits_page_amenities: typeof relations_group_visits_page_amenities relations_group_visits_page_bottom_images: typeof relations_group_visits_page_bottom_images @@ -6139,16 +6063,10 @@ type DatabaseSchema = { relations_birthday_page_package_items: typeof relations_birthday_page_package_items relations_birthday_page_why_items: typeof relations_birthday_page_why_items relations_birthday_page_why_videos: typeof relations_birthday_page_why_videos - relations_birthday_page_pricing_packages: typeof relations_birthday_page_pricing_packages - relations_birthday_page_entrance_prices: typeof relations_birthday_page_entrance_prices - relations_birthday_page_entertainment_packages: typeof relations_birthday_page_entertainment_packages relations_birthday_page: typeof relations_birthday_page relations__birthday_page_v_version_package_items: typeof relations__birthday_page_v_version_package_items relations__birthday_page_v_version_why_items: typeof relations__birthday_page_v_version_why_items relations__birthday_page_v_version_why_videos: typeof relations__birthday_page_v_version_why_videos - relations__birthday_page_v_version_pricing_packages: typeof relations__birthday_page_v_version_pricing_packages - relations__birthday_page_v_version_entrance_prices: typeof relations__birthday_page_v_version_entrance_prices - relations__birthday_page_v_version_entertainment_packages: typeof relations__birthday_page_v_version_entertainment_packages relations__birthday_page_v: typeof relations__birthday_page_v relations_tickets_page_combo_cards_locations: typeof relations_tickets_page_combo_cards_locations relations_tickets_page_combo_cards: typeof relations_tickets_page_combo_cards @@ -6171,6 +6089,7 @@ type DatabaseSchema = { relations_dinosaur_page_why_visit_items: typeof relations_dinosaur_page_why_visit_items relations_dinosaur_page_review_videos: typeof relations_dinosaur_page_review_videos relations_dinosaur_page: typeof relations_dinosaur_page + relations_legal_pages: typeof relations_legal_pages } declare module '@payloadcms/db-postgres' { diff --git a/src/payload-types.ts b/src/payload-types.ts index 0e77cf7..c92f82a 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -553,7 +553,21 @@ export interface Location { name: string slug: string tagline?: string | null - shortDesc?: string | null + shortDesc?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null description?: { root: { type: string @@ -611,7 +625,21 @@ export interface Location { whyVisitItems?: | { title: string - description: string + description: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } id?: string | null }[] | null @@ -1712,7 +1740,21 @@ export interface HomePage { backgroundImageUrl?: string | null type?: ('brand' | 'location') | null title: string - subtitle?: string | null + subtitle?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null ctaLabel?: string | null ctaHref?: string | null id?: string | null @@ -1720,7 +1762,21 @@ export interface HomePage { | null hero?: { title?: string | null - subtitle?: string | null + subtitle?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null ctaLabel?: string | null ctaHref?: string | null backgroundVideo?: string | null @@ -1775,7 +1831,21 @@ export interface HomePage { items?: | { title?: string | null - description?: string | null + description?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null id?: string | null }[] | null @@ -1803,7 +1873,21 @@ export interface HomePage { src?: string | null } birthdayIntro?: { - text?: string | null + text?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null /** * Фоновий паттерн для не-featured карток (зелений фон). */ @@ -1818,7 +1902,21 @@ export interface HomePage { /** * Підзаголовок секції новин на головній. */ - subtitle?: string | null + subtitle?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null limit?: number | null } faq?: { @@ -1826,7 +1924,21 @@ export interface HomePage { items?: | { question: string - answer: string + answer: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } id?: string | null }[] | null @@ -2015,6 +2127,7 @@ export interface Footer { */ export interface SiteSetting { id: number + gtmId?: string | null ga4Id?: string | null binotelId?: string | null telegramChatId?: string | null @@ -2050,9 +2163,46 @@ export interface GroupVisitsPage { heroImage?: (number | null) | Media heroTitle?: string | null heroSubtitle?: string | null - heroDescription?: string | null + /** + * Порожнє — стандарт 56px. Мобільний масштабується автоматично. + */ + heroTitleSize?: number | null + /** + * Порожнє — стандарт 24px. + */ + heroSubtitleSize?: number | null + heroFont?: ('montserrat' | 'poppins' | 'inter') | null + heroDescription?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null heroCta?: string | null - featureText?: string | null + featureText?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null /** * Завантажте 2 фото — відображаються перекошено side by side */ @@ -2082,8 +2232,36 @@ export interface GroupVisitsPage { priceNote?: string | null priceMinPeople?: string | null priceCta?: string | null - priceDescription?: string | null - bottomText?: string | null + priceDescription?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null + bottomText?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null bottomImages?: | { image: number | Media @@ -2120,7 +2298,21 @@ export interface BirthdayPage { packageItems?: | { title: string - description: string + description: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } /** * Фото для картки */ @@ -2137,7 +2329,21 @@ export interface BirthdayPage { whyItems?: | { title: string - description: string + description: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } id?: string | null }[] | null @@ -2188,7 +2394,21 @@ export interface TicketsPage { * Напр. «600 ₴» */ price: string - description?: string | null + description?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null featured?: boolean | null /** * Напр. «Найпопулярніший» @@ -2225,7 +2445,21 @@ export interface TicketsPage { id?: string | null }[] | null - benefitsFootnote?: string | null + benefitsFootnote?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null meta?: { title?: string | null description?: string | null @@ -2282,7 +2516,21 @@ export interface BlogIndexPage { export interface DinosaurPage { id: number heroTitle?: string | null - heroDescription?: string | null + heroDescription?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null /** * Число у круглому бейджі (наприклад "26") */ @@ -2340,7 +2588,21 @@ export interface DinosaurPage { }[] | null activitiesTitle?: string | null - activitiesDescription?: string | null + activitiesDescription?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null activities?: | { name: string @@ -2348,7 +2610,21 @@ export interface DinosaurPage { * Наприклад: 150 грн */ price?: string | null - description?: string | null + description?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null image?: (number | null) | Media href?: string | null id?: string | null @@ -2358,7 +2634,21 @@ export interface DinosaurPage { whyVisitItems?: | { title: string - description: string + description: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } id?: string | null }[] | null @@ -2397,19 +2687,75 @@ export interface LegalPage { id: number privacy?: { title?: string | null - content?: string | null + content?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null } terms?: { title?: string | null - content?: string | null + content?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null } offer?: { title?: string | null - content?: string | null + content?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null } dataProcessing?: { title?: string | null - content?: string | null + content?: { + root: { + type: string + children: { + type: any + version: number + [k: string]: unknown + }[] + direction: ('ltr' | 'rtl') | null + format: 'left' | 'start' | 'center' | 'right' | 'end' | 'justify' | '' + indent: number + version: number + } + [k: string]: unknown + } | null } updatedAt?: string | null createdAt?: string | null @@ -2651,6 +2997,7 @@ export interface FooterSelect { * via the `definition` "site-settings_select". */ export interface SiteSettingsSelect { + gtmId?: T ga4Id?: T binotelId?: T telegramChatId?: T @@ -2677,6 +3024,9 @@ export interface GroupVisitsPageSelect { heroImage?: T heroTitle?: T heroSubtitle?: T + heroTitleSize?: T + heroSubtitleSize?: T + heroFont?: T heroDescription?: T heroCta?: T featureText?: T diff --git a/src/types/globals.ts b/src/types/globals.ts index b70c1e4..7948628 100644 --- a/src/types/globals.ts +++ b/src/types/globals.ts @@ -168,7 +168,7 @@ export interface LocationCMS { name: string slug: string tagline?: string | null - shortDesc?: string | null + shortDesc?: unknown description?: unknown image?: Media | string | null gallery?: { image?: Media | string | null }[] | null