fix(desktop): онбординг ЦПП — авто-обновление столов по завершении

После утверждения Советом обоих документов ЦПП «Стол заказов» расширение
подключается и grants в getDesktop меняются, но фронт перечитывал desktop
workspace только на init и при install/enable расширения — для онбординга
триггера не было. Итог: рабочие столы и страницы Стола заказов появлялись лишь
после ручной перезагрузки страницы.

Добавлен watcher на isCompleted в useMarketplaceOnboarding: при переходе
false→true (оба шага completed) вызывается desktopStore.loadDesktop(), который
перечитывает getDesktop с новыми grants. Меню/столы появляются сразу.
loadDesktop идемпотентен (мерджит маршруты); watch не срабатывает на initial
mount, только на реальном завершении онбординга в течение сессии.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ant
2026-05-31 07:31:50 +00:00
parent da9e125a21
commit eb3751bad2
@@ -1,7 +1,8 @@
import { computed, ref } from 'vue';
import { computed, ref, watch } from 'vue';
import { FailAlert, SuccessAlert } from 'src/shared/api';
import { useSystemStore } from 'src/entities/System/model';
import { useSessionStore } from 'src/entities/Session';
import { useDesktopStore } from 'src/entities/Desktop/model';
import type {
ICouncilOnboardingConfig,
ICouncilOnboardingStep,
@@ -63,6 +64,7 @@ const STEP_META: StepMeta[] = [
export const useMarketplaceOnboarding = () => {
const systemStore = useSystemStore();
const sessionStore = useSessionStore();
const desktopStore = useDesktopStore();
const onboardingState = ref<MarketplaceOnboardingState | null>(null);
const loading = ref(false);
@@ -117,6 +119,17 @@ export const useMarketplaceOnboarding = () => {
stepsConfig.value.every((s) => s.status === 'completed'),
);
// Как только онбординг завершился (оба документа утверждены Советом →
// расширение подключилось), grants в getDesktop меняются. Перечитываем
// desktop workspace, чтобы рабочие столы и страницы Стола заказов появились
// сразу, без перезагрузки страницы. watch не срабатывает на initial mount —
// только на реальном переходе false→true в течение сессии.
watch(isCompleted, async (completed) => {
if (completed) {
await desktopStore.loadDesktop();
}
});
const loadState = async () => {
try {
loading.value = true;