feat(builder): redesign marketplace builder experience and navigation

Renamed the experience consistently to Marketplace Builder everywhere
visible (page title/subtitle, breadcrumbs, sidebar, dashboard quick
action/shortcut copy) - internal ProjectEditor class/selector names
kept as-is to avoid regressions. builder.title/subtitle no longer say
'bootstrap-config editing surface' to end users.

New business-oriented IA (builder-groups.model.ts): 12 existing
ProjectEditorSectionIds regrouped into 8 groups (Marketplace, Branding
and Design, Homepage, Content, Languages, Marketplace Features,
Navigation and Search, Preview) - every existing section mapped to
exactly one group, none dropped, no group points at a page that
doesn't exist.

New Builder landing page at /edit (was a redirect straight into the
General form): readiness percent, recommended next step, one overview
card per group (purpose + real complete/in-progress/not-started/unknown
status, icon+text never color-alone), a Marketplace Readiness
checklist, quick links. All derived from real facade/schema signals
(required-field fill state, modifiedSections, staticPages, catalog
counts via BackofficeDataService) or explicitly marked unknown
(the "preview reviewed" check has no tracking - shown as unknown,
never guessed).

Section pages (/edit/:section) now share one consistent header:
breadcrumb (Builder > Group > Section), draft/published + modified
badges, and a contextual help panel (what is this / where visible /
what happens if you skip it) sourced per group. Sidebar nav rewritten
as grouped, icon-led sections with per-section and per-group status
indicators; layout converted from a top pill-tab bar to a responsive
sidebar (desktop 280px, tablet 72px icon rail, mobile drawer with
Escape-to-close), matching the Sprint 1 admin shell pattern. Section
form components themselves untouched.

Routes: 'edit' is now its own landing route instead of redirecting to
'edit/general'; /builder and /project-editor redirect to 'edit'.
Sprint 1/2 destinations that pointed at edit/general now point at the
new edit landing page.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-18 09:43:03 +04:00
parent 419cb9a32c
commit 821a1c6ba8
19 changed files with 1699 additions and 152 deletions

View File

@@ -406,8 +406,8 @@ export const ru: Translations = {
notAvailable: 'н/д',
},
builder: {
title: 'Редактор проекта маркетплейса',
subtitle: 'Поверхность редактирования только bootstrap-конфигурации.',
title: 'Конструктор маркетплейса',
subtitle: 'Соберите свой маркетплейс шаг за шагом.',
general: 'Общие',
branding: 'Брендинг',
theme: 'Тема',
@@ -685,6 +685,83 @@ export const ru: Translations = {
linkLabelDesc: 'Текст, отображаемый для этой ссылки навигации.',
linkUrlDesc: 'Путь или URL, на который ведёт эта ссылка навигации.',
linkVisibleDesc: 'Показывать ли эту ссылку навигации покупателям.',
appName: 'Конструктор маркетплейса',
breadcrumbRoot: 'Конструктор маркетплейса',
statusComplete: 'Готово',
statusInProgress: 'В процессе',
statusNotStarted: 'Не начато',
statusUnknown: 'Пока не отслеживается',
draftBadge: 'Черновик',
publishedBadge: 'Опубликовано',
modifiedBadge: 'Есть несохранённые изменения',
helpToggleShow: 'Что это такое?',
helpToggleHide: 'Скрыть подсказку',
helpWhatIsThis: 'Что это',
helpWhySkip: 'Зачем это настраивать',
helpWhereVisible: 'Где это видят покупатели',
helpWhatIfSkip: 'Что будет, если пропустить',
helpWhenReturn: 'Когда возвращаться к этому разделу',
openSidebar: 'Открыть меню разделов',
closeSidebar: 'Закрыть меню разделов',
overviewTitle: 'Конструктор маркетплейса',
overviewSubtitle: 'Соберите свой маркетплейс шаг за шагом',
overviewReadinessLabel: 'Маркетплейс настроен на {{percent}}%',
overviewReadinessHint: 'Основано на обязательных полях, которые вы уже заполнили.',
overviewNextStepLabel: 'Рекомендуемый следующий шаг',
overviewNextStepFallback: 'Все обязательные шаги выполнены — можно опубликовать маркетплейс.',
overviewQuickLinksTitle: 'Быстрые ссылки',
overviewSectionsTitle: 'Разделы конструктора',
overviewOpenSection: 'Открыть раздел',
overviewReadinessTitle: 'Готовность маркетплейса',
readinessLogoUploaded: 'Логотип загружен',
readinessHomepageConfigured: 'Главная страница настроена',
readinessThemeConfigured: 'Тема настроена',
readinessLanguagesConfigured: 'Языки настроены',
readinessContentPagesAdded: 'Добавлены информационные страницы',
readinessPreviewReviewed: 'Просмотр проверен',
readinessPublished: 'Маркетплейс опубликован',
readinessCategoriesExist: 'Есть категории',
readinessProductsExist: 'Есть товары',
groupMarketplaceLabel: 'Маркетплейс',
groupMarketplaceDescription: 'Название, адрес и основная информация о вашем маркетплейсе.',
groupMarketplacePurpose: 'Базовая информация, которая определяет ваш маркетплейс: название, домен и язык по умолчанию.',
groupMarketplaceWhere: 'Название и адрес видны во вкладке браузера, поисковой выдаче и на всех страницах магазина.',
groupMarketplaceSkip: 'Без названия и адреса маркетплейс не будет выглядеть завершённым для покупателей.',
groupBrandingLabel: 'Брендинг и оформление',
groupBrandingDescription: 'Логотип, цвета, шапка и подвал — визуальный стиль вашего магазина.',
groupBrandingPurpose: 'Настройте, как выглядит ваш маркетплейс: логотип, цветовую палитру и элементы шапки/подвала сайта.',
groupBrandingWhere: 'Изменения видны на каждой странице, которую видят покупатели.',
groupBrandingSkip: 'Маркетплейс будет использовать оформление по умолчанию, не отражающее ваш бренд.',
groupHomepageLabel: 'Главная страница',
groupHomepageDescription: 'Баннеры, витрины и виджеты, которые покупатели видят первыми.',
groupHomepagePurpose: 'Соберите главную страницу из блоков: приветственный баннер, подборки категорий и товаров, акции.',
groupHomepageWhere: 'Это первая страница, которую видит покупатель, открыв ваш маркетплейс.',
groupHomepageSkip: 'Главная страница останется пустой или будет использовать макет по умолчанию.',
groupContentLabel: 'Контент',
groupContentDescription: 'О компании, контакты, доставка, возврат и другие информационные страницы.',
groupContentPurpose: 'Добавьте страницы, которым покупатели доверяют: о компании, контакты, условия доставки и возврата.',
groupContentWhere: 'Ссылки на эти страницы обычно показываются в подвале сайта.',
groupContentSkip: 'У покупателей не будет ответов на вопросы о доставке, возврате и контактах — это снижает доверие.',
groupLanguagesLabel: 'Языки',
groupLanguagesDescription: 'На каких языках работает ваш маркетплейс.',
groupLanguagesPurpose: 'Выберите язык по умолчанию и добавьте дополнительные языки для покупателей из других регионов.',
groupLanguagesWhere: 'Переключатель языка виден в шапке сайта на каждой странице.',
groupLanguagesSkip: 'Маркетплейс будет доступен только на одном языке по умолчанию.',
groupFeaturesLabel: 'Функции маркетплейса',
groupFeaturesDescription: 'Список желаний, сравнение, отзывы, оформление заказа без регистрации и другое.',
groupFeaturesPurpose: 'Включите или отключите функции для покупателей: список желаний, сравнение товаров, гостевой заказ.',
groupFeaturesWhere: 'Влияет на страницы каталога, товара и оформления заказа.',
groupFeaturesSkip: 'Маркетплейс будет использовать функции по умолчанию.',
groupNavigationLabel: 'Навигация и поиск',
groupNavigationDescription: 'Меню сайта и то, как покупатели находят товары.',
groupNavigationPurpose: 'Настройте пункты меню и то, как устроена навигация по каталогу.',
groupNavigationWhere: 'Видно в шапке сайта на каждой странице.',
groupNavigationSkip: 'Покупатели будут использовать навигацию по умолчанию.',
groupPreviewLabel: 'Просмотр',
groupPreviewDescription: 'Посмотрите, как маркетплейс выглядит на десктопе, планшете и телефоне.',
groupPreviewPurpose: 'Проверьте маркетплейс глазами покупателя перед публикацией — на разных экранах.',
groupPreviewWhere: 'Это предпросмотр — покупатели его не видят.',
groupPreviewSkip: 'Вы можете опубликовать изменения непроверенными.',
},
dashboard: {
title: 'Панель управления',
@@ -708,7 +785,7 @@ export const ru: Translations = {
statePendingBackend: 'Ожидает интеграции с бэкендом',
never: 'Никогда',
quickActionsTitle: 'Быстрые действия',
actionEditProject: 'Редактировать проект',
actionEditProject: 'Конструктор маркетплейса',
actionCategories: 'Категории',
actionProducts: 'Товары',
actionStaticPages: 'Статические страницы',