refactor: simplify — мёртвые поля контента, общие хелперы api и тестов, липкая CTA без site в бандле
landing: - site.ts: убраны неиспользуемые roast, brew, priceDisplay, hero.eyebrow, footer.phone (Footer берёт CONTACT_PHONE) - form.ts: убраны FORM_TEXT.title/lead, CTAS, CtaPreset - StickyCta получает тексты пропсами от layout: клиентский чанк больше не тащит все тексты страницы - LeadForm/useLeadForm: без неиспользуемой подмены sendLead и className; leadPrefill без счётчика seq - Stamp без мёртвого tone; убраны data-interest, data-hot, класс lead-form (ничем не читались) - одно LEAD_FIELDS на sendLead и leadFormModel; регэксп typo вынесен из вызова; дубль фона body api: - changedFields и Version общие для leads и outbox; countLeads и leadStamps без копий SQL - errorMessage в system.ts вместо четырёх копий; take() для ожидающих подтверждений - backup: один Intl.DateTimeFormat на модуль, без невызываемых параметров timeZone/hour - без мёртвых LOOPBACK '::ffff:127.0.0.1', client.call, Pick<BackupCommands> со всеми ключами - testing.ts: validLead, addLead, count, leadIds вместо копий в тестах deploy.sh: deployed_field и цикл по REPOS вместо повторов имён
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
// Все тексты формы заявки и CTA в одном месте — для вычитки.
|
||||
import type { Interest } from '@kvarta/shared/lead';
|
||||
// Все тексты формы заявки в одном месте — для вычитки.
|
||||
|
||||
export const CONTACT_PHONE = {
|
||||
display: '+375 29 000-00-00',
|
||||
@@ -7,8 +6,6 @@ export const CONTACT_PHONE = {
|
||||
} as const;
|
||||
|
||||
export const FORM_TEXT = {
|
||||
title: 'Оставьте заявку',
|
||||
lead: 'Перезвоним в рабочее время и всё уточним.',
|
||||
name: { label: 'Имя', placeholder: 'Как к вам обращаться' },
|
||||
phone: { label: 'Телефон', placeholder: '+375 29 123-45-67' },
|
||||
interest: { legend: 'Что вас интересует' },
|
||||
@@ -26,11 +23,3 @@ export const FORM_TEXT = {
|
||||
errorTag: 'Не отправлено',
|
||||
stamp: { created: 'Принято', clarified: 'Дописали' },
|
||||
} as const;
|
||||
|
||||
export type CtaPreset = { label: string; interest: Interest; comment?: string };
|
||||
|
||||
export const CTAS = {
|
||||
subscription: { label: 'Оформить подписку', interest: 'subscription' },
|
||||
ethiopia: { label: 'Заказать пачку Эфиопии', interest: 'one_time', comment: 'Эфиопия Иргачеффе, 250 г' },
|
||||
question: { label: 'Задать вопрос', interest: 'question' },
|
||||
} as const satisfies Record<string, CtaPreset>;
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
// Все тексты и факты лендинга по блокам — для вычитки. Факты только из «Фактов из ТЗ» (docs/plan.md).
|
||||
// Тексты формы — в ./form.ts.
|
||||
import type { Interest } from '@kvarta/shared/lead';
|
||||
import { CONTACT_PHONE } from './form';
|
||||
|
||||
type Cta = { label: string; interest: Interest; comment?: string };
|
||||
|
||||
@@ -31,7 +30,6 @@ export const site = {
|
||||
|
||||
hero: {
|
||||
stamp: 'ЧТ · обжарка',
|
||||
eyebrow: 'Обжарка кофе в Минске',
|
||||
title: 'Кофе, обжаренный в четверг',
|
||||
subtitle:
|
||||
'В пятницу привозим по Минску, и пачка попадает к вам на 1–3 день после обжарки.',
|
||||
@@ -61,49 +59,37 @@ export const site = {
|
||||
id: 'ethiopia',
|
||||
name: 'Эфиопия Иргачеффе',
|
||||
notes: ['цветочный', 'бергамот'],
|
||||
roast: 'светлая обжарка',
|
||||
brew: null,
|
||||
// поле этикетки (итерация критика 1, нужна вычитка автора)
|
||||
spec: { label: 'Обжарка', value: 'светлая' },
|
||||
size: '250 г',
|
||||
price: 32,
|
||||
priceDisplay: '32 BYN',
|
||||
cta: { label: 'Заказать', interest: 'one_time', comment: 'Эфиопия Иргачеффе, 250 г' } satisfies Cta,
|
||||
},
|
||||
{
|
||||
id: 'colombia',
|
||||
name: 'Колумбия Уила',
|
||||
notes: ['карамель', 'красное яблоко'],
|
||||
roast: null,
|
||||
brew: null,
|
||||
spec: null,
|
||||
size: '250 г',
|
||||
price: 29,
|
||||
priceDisplay: '29 BYN',
|
||||
cta: { label: 'Заказать', interest: 'one_time', comment: 'Колумбия Уила, 250 г' } satisfies Cta,
|
||||
},
|
||||
{
|
||||
id: 'brazil',
|
||||
name: 'Бразилия Серрадо',
|
||||
notes: ['орех', 'шоколад'],
|
||||
roast: null,
|
||||
brew: 'под эспрессо',
|
||||
spec: { label: 'Для', value: 'эспрессо' },
|
||||
size: '250 г',
|
||||
price: 26,
|
||||
priceDisplay: '26 BYN',
|
||||
cta: { label: 'Заказать', interest: 'one_time', comment: 'Бразилия Серрадо, 250 г' } satisfies Cta,
|
||||
},
|
||||
{
|
||||
id: 'drip',
|
||||
name: 'Дрип-пакеты ассорти',
|
||||
notes: [],
|
||||
roast: null,
|
||||
brew: 'заваривается прямо в чашке',
|
||||
spec: { label: 'Как', value: 'заваривается прямо в чашке' },
|
||||
size: '10 шт',
|
||||
price: 18,
|
||||
priceDisplay: '18 BYN',
|
||||
cta: { label: 'Заказать', interest: 'one_time', comment: 'Дрип-пакеты ассорти, 10 шт' } satisfies Cta,
|
||||
},
|
||||
],
|
||||
@@ -113,7 +99,6 @@ export const site = {
|
||||
title: 'Две пачки каждый месяц',
|
||||
text: 'Раз в месяц привозим две пачки по 250 г. Доставка бесплатно.',
|
||||
price: 54,
|
||||
priceDisplay: '54 BYN',
|
||||
priceUnit: 'в месяц',
|
||||
note: 'Подробности менеджер расскажет по телефону.',
|
||||
fields: [
|
||||
@@ -176,7 +161,6 @@ export const site = {
|
||||
tagline: 'Обжарка кофе в Минске с 2019 года',
|
||||
address: 'Минск, ул. Короля, 9',
|
||||
hours: 'Пн–пт 8:00–20:00, сб–вс 10:00–18:00',
|
||||
phone: CONTACT_PHONE,
|
||||
phoneNote: 'Номер демонстрационный.',
|
||||
photoCredit: 'Фото: Mona Jain, Tina Guina, Scott Soltys-Curry / Unsplash',
|
||||
disclaimer: 'Учебный проект. Обжарка «Кварта» вымышленная.',
|
||||
|
||||
Reference in New Issue
Block a user