Melissa: promove rota oficial + redirect automatico da home
Sai do estado "preview/sandbox" e liga o Melissa como layout real
ativavel pelo user em Configuracoes -> Profile.
Mudancas:
- routes.misc.js: /preview/melissa/:secao? -> /melissa/:secao?,
nome PreviewMelissa -> Melissa. Sem alias por compat (autorizado).
- router/index.js: novo beforeEach apos o supportGuard e antes do
applyGuards. Quando to.name e' therapist.dashboard ou admin.dashboard
E localStorage.layout_variant === 'melissa' E viewport >= 1280px,
redireciona pra { name: 'Melissa' }. Le do localStorage (gravado pelo
bootstrapUserSettings + setVariant) pra evitar esperar store do DB e
evitar flash do shell antes do redirect. Bypassa mobile pq Melissa
nao foi feito pra <xl e o effectiveVariant ja forca 'classic' la.
- MelissaLayout.vue: 2 chamadas router.push apontavam pra
'PreviewMelissa', agora 'Melissa'. Header doc atualizado.
- useMelissaPacientes.js: comment doc citando /preview/melissa
generalizado pra "sem session retorna vazio".
- ProfilePage.vue: card Melissa perde badge "Em construcao" e ganha
badge "Beta". Texto explicativo perde "navegacao completa ainda
nao esta integrada" e ganha "Ao salvar, sua proxima entrada na
home cai direto no Melissa". Link /preview/melissa -> /melissa.
Remove regra CSS .lv-card--wip orfa.
Tradeoff aceito: rotas especificas (/therapist/agenda etc.) seguem
no shell classico/rail. So a HOME do role e' interceptada pra /melissa.
Coerente com o desenho atual do MelissaLayout, que ja abre Agenda /
Pacientes / etc. como overlays internos via deep-link /melissa/<secao>.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,8 @@
|
||||
*
|
||||
* Dados ainda em mock. Próxima fase pluga Supabase.
|
||||
*
|
||||
* Rota atual (sandbox): /preview/melissa
|
||||
* Rota: /melissa (com :secao? opcional). User com layout_variant='melissa'
|
||||
* em user_settings e' redirecionado da home do role pra ca pelo router.
|
||||
*/
|
||||
import { ref, computed, watch, onMounted, onBeforeUnmount, provide } from 'vue';
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
@@ -93,7 +94,7 @@ const SECOES = {
|
||||
};
|
||||
|
||||
// Seção ativa = param `:secao?` da rota. URL é a fonte da verdade pra
|
||||
// permitir back/forward e deep-link (ex: /preview/melissa/agenda abre o
|
||||
// permitir back/forward e deep-link (ex: /melissa/agenda abre o
|
||||
// overlay da agenda direto). Se a chave for inválida, vira null.
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
@@ -107,11 +108,11 @@ function abrirSecao(key) {
|
||||
workspaceOpen.value = false;
|
||||
eventoSelecionado.value = null;
|
||||
if (key === secaoAberta.value) return; // no-op, evita push duplicado
|
||||
router.push({ name: 'PreviewMelissa', params: { secao: key } });
|
||||
router.push({ name: 'Melissa', params: { secao: key } });
|
||||
}
|
||||
function fecharSecao() {
|
||||
if (!secaoAberta.value) return;
|
||||
router.push({ name: 'PreviewMelissa', params: {} });
|
||||
router.push({ name: 'Melissa', params: {} });
|
||||
}
|
||||
|
||||
// Prefs de layout/UI (toque, fundo, opacidade, formato hora)
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
* - withTenantFilter (defesa em profundidade — RLS cobre, mas blindamos no client)
|
||||
* - normalizeStatus client-side (DB pode ter 'ativo'/'active'/null/etc.)
|
||||
*
|
||||
* Sem auth (sem uid ou tenant), retorna vazio sem erro — uso em /preview/melissa
|
||||
* permite a página renderizar mesmo sem session.
|
||||
* Sem auth (sem uid ou tenant), retorna vazio sem erro — permite a pagina
|
||||
* renderizar mesmo sem session (defesa em profundidade).
|
||||
*
|
||||
* Forma normalizada do paciente:
|
||||
* { id, nome, email, telefone, avatar_url, status, last_attended_at, created_at }
|
||||
|
||||
Reference in New Issue
Block a user