MelissaPaciente: usa AgendaEventDialog GLOBAL via inject (em vez de dialog local)
User pediu pra trazer o AgendaEventDialog completo da Agenda pra dentro do prontuario. Estrategia: NAO duplicar o dialog (que ja vive no MelissaLayout). Em vez disso, reusar via provide/inject — pattern que ja existe (MELISSA_AGENDA_KEY). NOVO em src/layout/melissa/composables/useMelissaAgenda.js - onCreateEventoForPatient(patientId) — espelha onCreateEvento (defaults hoje proximo slot 15min, duracao default), mas injeta paciente_id no dialogEventRow. Adicionada ao return do composable. MELISSAPACIENTE.VUE - inject(MELISSA_AGENDA_KEY) pra acessar a instancia do useMelissaAgenda do MelissaLayout. - goAgendar(): chama melissaAgenda.onCreateEventoForPatient(patientId) (defensive: warn toast se nao tem inject ou funcao). - Watch em melissaAgenda.dialogOpen pra refetchar sessions+recorrencias quando o dialog fecha (true -> false), independente se foi save ou cancel. REMOVIDO (sem mais necessario — AgendaEventDialog faz tudo) - Refs novaSessaoOpen, novaSessaoForm - Catalogos FREQ_OPCOES, DIAS_SEMANA_OPCOES, QTD_SESSOES_OPCOES, SESSAO_TIPOS, SESSAO_DURACOES, SESSAO_MODALIDADES - Helpers toggleDiaSelecionado, qtdSessoesEfetiva, novaSessaoCtaLabel - Function salvarSessao (~110L de logica avulsa+recorrencia) - Import supabase (nao usado direto mais) - Import useRecurrence (era pro createRule no salvarSessao) - Import WEEKDAY_LABEL_BLOCK (era pro preview de freq) - Template <Dialog> Nova Sessao com header custom + form + freq chips + qtd sessoes + footer (~180L) Resultado: MelissaPaciente fica mais enxuto e usa exatamente o mesmo dialog completo que MelissaAgenda — todos os recursos do AgendaEventDialog (tipos de evento, paciente picker, comprometimento de servicos/billing, freq com preview de ocorrencias + conflitos, validacao por work rules, edicao de serie etc) ficam disponiveis no prontuario sem duplicacao. ESLint: 0 errors. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -590,6 +590,48 @@ function _buildHandlers(deps) {
|
||||
dialogOpen.value = true;
|
||||
}
|
||||
|
||||
// ── onCreateEventoForPatient — abre o AgendaEventDialog com paciente
|
||||
// pre-selecionado. Usado pelo MelissaPaciente quando o user clica
|
||||
// "Agendar" na sidebar Acoes Rapidas. Mesma logica de onCreateEvento
|
||||
// (defaults razoaveis: hoje proximo slot 15min, duracao default), so
|
||||
// que injeta paciente_id no dialogEventRow.
|
||||
function onCreateEventoForPatient(patientId) {
|
||||
if (!ownerId.value) {
|
||||
toast.add({
|
||||
severity: 'warn',
|
||||
summary: 'Agenda',
|
||||
detail: 'Aguarde carregar as configurações da agenda.',
|
||||
life: 3000
|
||||
});
|
||||
return;
|
||||
}
|
||||
const durMin =
|
||||
settings.value?.session_duration_min ??
|
||||
settings.value?.duracao_padrao_minutos ??
|
||||
50;
|
||||
const base = new Date();
|
||||
base.setSeconds(0, 0);
|
||||
const remainder = base.getMinutes() % 15;
|
||||
if (remainder !== 0) {
|
||||
base.setMinutes(base.getMinutes() + (15 - remainder));
|
||||
}
|
||||
|
||||
dialogEventRow.value = {
|
||||
owner_id: ownerId.value,
|
||||
terapeuta_id: null,
|
||||
paciente_id: patientId ? String(patientId) : null,
|
||||
tipo: EVENTO_TIPO.SESSAO,
|
||||
status: 'agendado',
|
||||
titulo: deriveTituloDefaultByTipo(EVENTO_TIPO.SESSAO),
|
||||
observacoes: null,
|
||||
visibility_scope: 'public',
|
||||
determined_commitment_id: null
|
||||
};
|
||||
dialogStartISO.value = base.toISOString();
|
||||
dialogEndISO.value = new Date(base.getTime() + durMin * 60000).toISOString();
|
||||
dialogOpen.value = true;
|
||||
}
|
||||
|
||||
// ── onSelectTime — click-drag no FC pra criar evento novo ──
|
||||
// Dinâmica de duração:
|
||||
// click sem drag → settings.session_duration_min (default 50)
|
||||
@@ -814,6 +856,7 @@ function _buildHandlers(deps) {
|
||||
return {
|
||||
onEditEvento,
|
||||
onCreateEvento,
|
||||
onCreateEventoForPatient,
|
||||
onSelectTime,
|
||||
persistMoveOrResize,
|
||||
onEditSeriesOccurrence,
|
||||
|
||||
Reference in New Issue
Block a user