diff --git a/src/api/routes/breadcrumbs/controller.ts b/src/api/routes/breadcrumbs/controller.ts index 42ddc81..6cef11c 100644 --- a/src/api/routes/breadcrumbs/controller.ts +++ b/src/api/routes/breadcrumbs/controller.ts @@ -51,6 +51,12 @@ const masterClassesPageBreadcrumbs: BreadcrumbsType[] = [ { href: PAGE_LINK.MASTER_CLASSES, label: PAGE_LINK_LABEL[PAGE_LINK.MASTER_CLASSES] }, ]; +const showProgramsPageBreadcrumbs: BreadcrumbsType[] = [ + { href: PAGE_LINK.HOME, label: PAGE_LINK_LABEL[PAGE_LINK.HOME] }, + { href: PAGE_LINK.SERVICES, label: PAGE_LINK_LABEL[PAGE_LINK.SERVICES] }, + { href: PAGE_LINK.SHOW_PROGRAMS, label: PAGE_LINK_LABEL[PAGE_LINK.SHOW_PROGRAMS] }, +]; + export const getBreadcrumbs = (req: Request, res: Response) => { // @ts-ignore const { page } = req.body; @@ -88,6 +94,10 @@ export const getBreadcrumbs = (req: Request, res: Response) => { return res.status(200).json(masterClassesPageBreadcrumbs); } + case PAGE_LINK.SHOW_PROGRAMS: { + return res.status(200).json(showProgramsPageBreadcrumbs); + } + default: return res.status(404); } diff --git a/src/api/routes/faq/controller.ts b/src/api/routes/faq/controller.ts index 291ef7f..3605945 100644 --- a/src/api/routes/faq/controller.ts +++ b/src/api/routes/faq/controller.ts @@ -89,6 +89,25 @@ const masterClassesQuestions: QuestionType[] = [ }, ]; +const showPragramsQuestions: QuestionType[] = [ + { + answer: 'Ответ на вопрос как забронировать зал для проведения выездного праздника?', + id: uuid(), + question: 'Как забронировать зал для проведения Дня рождения?', + }, + { + answer: 'Мы не требуем предоплату. Для бронирования мероприятия достаточно Вашего номера телефона. ' + + 'Мероприятие оплачивается на месте перед его началом.', + id: uuid(), + question: 'Как производится оплата мероприятия?', + }, + { + answer: 'Ответ на вопрос какое максимальное количество детей допустимо на празднике?', + id: uuid(), + question: 'Какое максимальное количество детей допустимо на празднике?', + }, +]; + type QuestionsType = { categories: QuestionCategoryType[]; group: string; @@ -116,6 +135,10 @@ export const getFaq = (req: Request, res: Response) => { return res.status(200).json(masterClassesQuestions); } + case PAGE_LINK.SHOW_PROGRAMS: { + return res.status(200).json(showPragramsQuestions); + } + case PAGE_LINK.QUESTS: { switch (id) { case 'eger': diff --git a/src/api/routes/image/controller.ts b/src/api/routes/image/controller.ts index 599dded..8a43402 100644 --- a/src/api/routes/image/controller.ts +++ b/src/api/routes/image/controller.ts @@ -37,6 +37,9 @@ const aboutDesktopImage = path.join(imageRootDir, 'about/desktop.png'); const masterClassesMobileImage = path.join(imageRootDir, 'master-classes/mobile.png'); const masterClassesDesktopImage = path.join(imageRootDir, 'master-classes/desktop.png'); +const showProgramsMobileImage = path.join(imageRootDir, 'show-programs/mobile.png'); +const showProgramsDesktopImage = path.join(imageRootDir, 'show-programs/desktop.png'); + export const getTitleImage = (req: Request, res: Response) => { // @ts-ignore const { body } = req; @@ -111,6 +114,14 @@ export const getTitleImage = (req: Request, res: Response) => { }); } + case PAGE_LINK.SHOW_PROGRAMS: { + return res.status(200).json({ + alt: 'show-programs', + mobileSrc: showProgramsMobileImage, + src: showProgramsDesktopImage, + }); + } + default: return res.status(404); } diff --git a/src/api/routes/services/controller.ts b/src/api/routes/services/controller.ts index 2c0633b..bf6b93d 100644 --- a/src/api/routes/services/controller.ts +++ b/src/api/routes/services/controller.ts @@ -16,6 +16,13 @@ const fishImage = path.join(imageRootDir, 'master-classes/desktop/fish.png'); const paintImage = path.join(imageRootDir, 'master-classes/desktop/paint.png'); const shopImage = path.join(imageRootDir, 'master-classes/desktop/shop.png'); +const bubbleImage = path.join(imageRootDir, 'show-programs/desktop/bubble.png'); +const chemistryImage = path.join(imageRootDir, 'show-programs/desktop/chemistry.png'); +const diskoImage = path.join(imageRootDir, 'show-programs/desktop/disko.png'); +const egerImage = path.join(imageRootDir, 'show-programs/desktop/eger.png'); +const magicImage = path.join(imageRootDir, 'show-programs/desktop/magic.png'); +const neonImage = path.join(imageRootDir, 'show-programs/desktop/neon.png'); + const cakesMobileImage = path.join(imageRootDir, 'master-classes/mobile/cakes.png'); const cupImMobileImage = path.join(imageRootDir, 'master-classes/mobile/cup.png'); const cutImMobileImage = path.join(imageRootDir, 'master-classes/mobile/cut.png'); @@ -23,6 +30,13 @@ const fishIMobileImage = path.join(imageRootDir, 'master-classes/mobile/fish.png const paintMobileImage = path.join(imageRootDir, 'master-classes/mobile/paint.png'); const shopIMobileImage = path.join(imageRootDir, 'master-classes/mobile/shop.png'); +const bubbleMobileImage = path.join(imageRootDir, 'show-programs/mobile/bubble.png'); +const chemistryMobileImage = path.join(imageRootDir, 'show-programs/mobile/chemistry.png'); +const diskoMobileImage = path.join(imageRootDir, 'show-programs/mobile/disko.png'); +const egerMobileImage = path.join(imageRootDir, 'show-programs/mobile/eger.png'); +const magicMobileImage = path.join(imageRootDir, 'show-programs/mobile/magic.png'); +const neonMobileImage = path.join(imageRootDir, 'show-programs/mobile/neon.png'); + const birthdayPageServices: ServiceType[] = [ servicesList[SERVICE.QUEST], servicesList[SERVICE.HALL], @@ -282,6 +296,233 @@ const masterClassItems: ServiceItemType[] = [ }, ]; +const showProgramsItems: ServiceItemType[] = [ + { + age: { + text: '5+', + }, + description: 'Активное шоу для детей всех возрастов. Огромное количество переливающейся\n' + + 'серебряной бумаги не оставит равнодушным любого ребёнка: вместе с ведущим дети\n' + + 'окунутся в мир развлечений с головой, подбрасывая вверх волшебные бумажные фонтаны,\n' + + 'а световое сопровождение превратит праздник в настоящую дискотеку', + id: uuid(), + image: { + alt: 'Бумажная дискотека', + height: 241, + mobileHeight: 160, + mobilePosition: { + left: -10, + top: -24, + }, + mobileSrc: diskoMobileImage, + mobileWidth: 330, + position: { + left: -20, + top: -24, + }, + src: diskoImage, + width: 300, + }, + partySize: { + max: 30, + min: 4, + }, + price: 5000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Бумажная дискотека', + variant: 'disko', + }, + { + age: { + text: '5+', + }, + description: 'Интерактивное шоу, где каждый ребёнок примет участие в безопасных опытах.\n' + + 'Вместе мы проведём эксперименты по изменению цвета жидкости и созданию вулкана,\n' + + 'познакомимся с сухим льдом и попробуем волшебный дым на вкус, запустим пузыри\n' + + 'с дымом и сделаем волшебную ракету из огромного шара', + id: uuid(), + image: { + alt: 'Химическое шоу', + height: 254, + mobileHeight: 235, + mobilePosition: { + left: 10, + top: -50, + }, + mobileSrc: chemistryMobileImage, + mobileWidth: 310, + position: { + left: 5, + top: -38, + }, + src: chemistryImage, + width: 240, + }, + partySize: { + max: 30, + min: 4, + }, + price: 8000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Химическое шоу', + variant: 'chemistry', + }, + { + age: { + text: '5+', + }, + description: 'Здесь будет описание шоу-программы “Школа магии” по типу описания шоу-программы “Бумажная дискотека”', + id: uuid(), + image: { + alt: 'Школа магии ', + height: 225, + mobileHeight: 210, + mobilePosition: { + left: 10, + top: -35, + }, + mobileSrc: magicMobileImage, + mobileWidth: 310, + position: { + left: 20, + top: -25, + }, + src: magicImage, + width: 260, + }, + partySize: { + max: 30, + min: 4, + }, + price: 5000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Школа магии ', + variant: 'magic', + }, + { + age: { + text: '5+', + }, + description: 'Отправляемся в волшебный мир, где познакомим детей с мыльными пузырями\n' + + 'различных размеров и форм: пузыри-малыши, двойные пузыри, пузыри-бабочки,\n' + + 'цветная радуга, волшебные облака, пузыри с дымом и даже пузырь, в котором будет\n' + + 'более 10 пузырей! Завершит программу опыт «окажись внутри пузыря»', + id: uuid(), + image: { + alt: 'Шоу мыльных пузырей', + height: 241, + mobileHeight: 218, + mobilePosition: { + left: 10, + top: -30, + }, + mobileSrc: bubbleMobileImage, + mobileWidth: 310, + position: { + left: -13, + top: -15, + }, + src: bubbleImage, + width: 254, + }, + partySize: { + max: 30, + min: 4, + }, + price: 8000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Шоу мыльных пузырей', + variant: 'bubble', + }, + { + age: { + text: '5+', + }, + description: 'Дети попадают на вечеринку, где под неоновым освещением пространство начинает играть\n' + + 'яркими красками: белая одежда приобретает новый оттенок, неоновый аквагрим будет сиять\n' + + 'на лицах, а светящаяся бумага сделает праздник незабываемым! В подарок дети получают\n' + + 'неоновые браслеты и переводные неоновые татуировки', + id: uuid(), + image: { + alt: 'Неоновая дискотека', + height: 264, + mobileHeight: 253, + mobilePosition: { + left: -30, + top: -47, + }, + mobileSrc: neonMobileImage, + mobileWidth: 370, + position: { + left: -6, + top: -30, + }, + src: neonImage, + width: 250, + }, + partySize: { + max: 30, + min: 4, + }, + price: 8000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Неоновая дискотека', + variant: 'neon', + }, + { + age: { + text: '5+', + }, + description: 'Здесь будет описание шоу-программы\n' + + '“Химическое шоу” по типу описания\n' + + 'шоу-программы “Бумажная дискотека”', + id: uuid(), + image: { + alt: 'Лаборатория егеря', + height: 238, + mobileHeight: 230, + mobilePosition: { + left: 38, + top: -35, + }, + mobileSrc: egerMobileImage, + mobileWidth: 257, + position: { + left: 20, + top: -38, + }, + src: egerImage, + width: 244, + }, + partySize: { + max: 30, + min: 4, + }, + price: 5000, + priceDescription: 'Цена за группу до 12 человек, далее +500 ₽/участник', + time: { + text: '60 минут', + }, + title: 'Лаборатория егеря', + variant: 'lab', + }, +]; + export const getServices = (req: Request, res: Response) => { // @ts-ignore const { page } = req.body; @@ -303,6 +544,10 @@ export const getServices = (req: Request, res: Response) => { return res.status(200).json(masterClassItems); } + case PAGE_LINK.SHOW_PROGRAMS: { + return res.status(200).json(showProgramsItems); + } + default: return res.status(404); } diff --git a/src/api/routes/text/controller.ts b/src/api/routes/text/controller.ts index 14a7eb6..7ffcb12 100644 --- a/src/api/routes/text/controller.ts +++ b/src/api/routes/text/controller.ts @@ -49,6 +49,12 @@ const masterClassesTitleText = { title: 'Мастер-классы', }; +const showProgramsTitleText = { + description: 'Сделайте праздник ярче, добавив фирменное шоу\\n' + + ' к любой комбо-программе из категорий «День Рождения», «Выпускной», «Выездной праздник»', + title: 'ШОУ-ПРОГРАММЫ\\n И ДИСКОТЕКИ', +}; + const masterClassesInfo = [ 'Знакомимся и проводим общий инструктаж', 'Рассказываем и показываем, как пользоваться реквизитом', @@ -208,6 +214,16 @@ export const getTitle = (req: Request, res: Response) => { } } + case PAGE_LINK.SHOW_PROGRAMS: { + switch (section) { + case TextSection.TITLE: + return res.status(200).json(showProgramsTitleText); + + default: + return res.status(404); + } + } + default: return res.status(404); } diff --git a/src/constants/index.ts b/src/constants/index.ts index d652855..93de342 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -51,7 +51,7 @@ export const PAGE_LINK_LABEL: PAGE_LINK_LABEL_TYPE = { [PAGE_LINK.QUESTS]: 'Квесты', [PAGE_LINK.RENT]: 'Аренда залов', [PAGE_LINK.SERVICES]: 'Услуги', - [PAGE_LINK.SHOW_PROGRAMS]: 'Шоу программы', + [PAGE_LINK.SHOW_PROGRAMS]: 'Шоу-программы', }; export enum TextSection { @@ -97,7 +97,18 @@ export type ServiceItemType = { priceDescription: string; time: { text: string }; title: string; - variant?: 'hexadecimal' | 'primary' | 'quaternary' | 'quinary' | 'secondary' | 'tertiary'; + variant?: 'bubble' + | 'chemistry' + | 'disko' + | 'hexadecimal' + | 'lab' + | 'magic' + | 'neon' + | 'primary' + | 'quaternary' + | 'quinary' + | 'secondary' + | 'tertiary'; }; export enum ApiRoute { diff --git a/static/images/show-programs/desktop/bubble.png b/static/images/show-programs/desktop/bubble.png new file mode 100644 index 0000000..316870e Binary files /dev/null and b/static/images/show-programs/desktop/bubble.png differ diff --git a/static/images/show-programs/desktop/chemistry.png b/static/images/show-programs/desktop/chemistry.png new file mode 100644 index 0000000..e1c8e1a Binary files /dev/null and b/static/images/show-programs/desktop/chemistry.png differ diff --git a/static/images/show-programs/desktop/disko.png b/static/images/show-programs/desktop/disko.png new file mode 100644 index 0000000..0b9de2f Binary files /dev/null and b/static/images/show-programs/desktop/disko.png differ diff --git a/static/images/show-programs/desktop/eger.png b/static/images/show-programs/desktop/eger.png new file mode 100644 index 0000000..5d7dbef Binary files /dev/null and b/static/images/show-programs/desktop/eger.png differ diff --git a/static/images/show-programs/desktop/magic.png b/static/images/show-programs/desktop/magic.png new file mode 100644 index 0000000..e40f8fb Binary files /dev/null and b/static/images/show-programs/desktop/magic.png differ diff --git a/static/images/show-programs/desktop/neon.png b/static/images/show-programs/desktop/neon.png new file mode 100644 index 0000000..4ee909c Binary files /dev/null and b/static/images/show-programs/desktop/neon.png differ diff --git a/static/images/show-programs/mobile/bubble.png b/static/images/show-programs/mobile/bubble.png new file mode 100644 index 0000000..690cd3f Binary files /dev/null and b/static/images/show-programs/mobile/bubble.png differ diff --git a/static/images/show-programs/mobile/chemistry.png b/static/images/show-programs/mobile/chemistry.png new file mode 100644 index 0000000..97edd49 Binary files /dev/null and b/static/images/show-programs/mobile/chemistry.png differ diff --git a/static/images/show-programs/mobile/disko.png b/static/images/show-programs/mobile/disko.png new file mode 100644 index 0000000..4ef9ea3 Binary files /dev/null and b/static/images/show-programs/mobile/disko.png differ diff --git a/static/images/show-programs/mobile/eger.png b/static/images/show-programs/mobile/eger.png new file mode 100644 index 0000000..7eb3dfd Binary files /dev/null and b/static/images/show-programs/mobile/eger.png differ diff --git a/static/images/show-programs/mobile/magic.png b/static/images/show-programs/mobile/magic.png new file mode 100644 index 0000000..d75196b Binary files /dev/null and b/static/images/show-programs/mobile/magic.png differ diff --git a/static/images/show-programs/mobile/neon.png b/static/images/show-programs/mobile/neon.png new file mode 100644 index 0000000..9de2be7 Binary files /dev/null and b/static/images/show-programs/mobile/neon.png differ diff --git a/static/images/title/show-programs/desktop.png b/static/images/title/show-programs/desktop.png new file mode 100644 index 0000000..dcc66da Binary files /dev/null and b/static/images/title/show-programs/desktop.png differ diff --git a/static/images/title/show-programs/mobile.png b/static/images/title/show-programs/mobile.png new file mode 100644 index 0000000..fca327c Binary files /dev/null and b/static/images/title/show-programs/mobile.png differ