Correcao Sidebar Classico e Rail, Correcao Layout, Ajuste de Breakpoint para Tailwind, Ajuste AppTopbar, Ajuste Menu PopOver, Recriado Paleta de Cores, Inserido algumas animações leves, Reajuste Cor items NOVOS da tabela, Drawer Ajuda Corrigido no Logout, Whatsapp, sms, email, recursos extras
This commit is contained in:
@@ -14,64 +14,50 @@
|
||||
| © 2026 — Todos os direitos reservados
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
import { supabase } from '@/lib/supabase/client'
|
||||
import { supabase } from '@/lib/supabase/client';
|
||||
|
||||
export async function getOwnerId() {
|
||||
const { data, error } = await supabase.auth.getUser()
|
||||
if (error) throw error
|
||||
const uid = data?.user?.id
|
||||
if (!uid) throw new Error('Sessão inválida.')
|
||||
return uid
|
||||
const { data, error } = await supabase.auth.getUser();
|
||||
if (error) throw error;
|
||||
const uid = data?.user?.id;
|
||||
if (!uid) throw new Error('Sessão inválida.');
|
||||
return uid;
|
||||
}
|
||||
|
||||
export async function fetchSlotsRegras(ownerId) {
|
||||
const { data, error } = await supabase
|
||||
.from('agenda_slots_regras')
|
||||
.select('*')
|
||||
.eq('owner_id', ownerId)
|
||||
.order('dia_semana', { ascending: true })
|
||||
if (error) throw error
|
||||
return data || []
|
||||
const { data, error } = await supabase.from('agenda_slots_regras').select('*').eq('owner_id', ownerId).order('dia_semana', { ascending: true });
|
||||
if (error) throw error;
|
||||
return data || [];
|
||||
}
|
||||
|
||||
export async function upsertSlotRegra(ownerId, payload) {
|
||||
const row = {
|
||||
owner_id: ownerId,
|
||||
dia_semana: Number(payload.dia_semana),
|
||||
passo_minutos: Number(payload.passo_minutos),
|
||||
offset_minutos: Number(payload.offset_minutos),
|
||||
buffer_antes_min: Number(payload.buffer_antes_min || 0),
|
||||
buffer_depois_min: Number(payload.buffer_depois_min || 0),
|
||||
min_antecedencia_horas: Number(payload.min_antecedencia_horas || 0),
|
||||
ativo: !!payload.ativo
|
||||
}
|
||||
const row = {
|
||||
owner_id: ownerId,
|
||||
dia_semana: Number(payload.dia_semana),
|
||||
passo_minutos: Number(payload.passo_minutos),
|
||||
offset_minutos: Number(payload.offset_minutos),
|
||||
buffer_antes_min: Number(payload.buffer_antes_min || 0),
|
||||
buffer_depois_min: Number(payload.buffer_depois_min || 0),
|
||||
min_antecedencia_horas: Number(payload.min_antecedencia_horas || 0),
|
||||
ativo: !!payload.ativo
|
||||
};
|
||||
|
||||
const { data, error } = await supabase
|
||||
.from('agenda_slots_regras')
|
||||
.upsert(row, { onConflict: 'owner_id,dia_semana' })
|
||||
.select('*')
|
||||
.single()
|
||||
const { data, error } = await supabase.from('agenda_slots_regras').upsert(row, { onConflict: 'owner_id,dia_semana' }).select('*').single();
|
||||
|
||||
if (error) throw error
|
||||
return data
|
||||
if (error) throw error;
|
||||
return data;
|
||||
}
|
||||
|
||||
export function normalizeHHMM(v) {
|
||||
if (v == null) return null
|
||||
const s = String(v).trim()
|
||||
if (/^\d{2}:\d{2}$/.test(s)) return s
|
||||
if (/^\d{2}:\d{2}:\d{2}$/.test(s)) return s.slice(0, 5)
|
||||
return s
|
||||
if (v == null) return null;
|
||||
const s = String(v).trim();
|
||||
if (/^\d{2}:\d{2}$/.test(s)) return s;
|
||||
if (/^\d{2}:\d{2}:\d{2}$/.test(s)) return s.slice(0, 5);
|
||||
return s;
|
||||
}
|
||||
|
||||
export function ruleKey(r) {
|
||||
return [
|
||||
r.dia_semana,
|
||||
normalizeHHMM(r.hora_inicio),
|
||||
normalizeHHMM(r.hora_fim),
|
||||
(r.modalidade || 'ambos'),
|
||||
!!r.ativo
|
||||
].join('|')
|
||||
return [r.dia_semana, normalizeHHMM(r.hora_inicio), normalizeHHMM(r.hora_fim), r.modalidade || 'ambos', !!r.ativo].join('|');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -79,13 +65,13 @@ export function ruleKey(r) {
|
||||
* (DB já tem UNIQUE, mas isso evita erro e deixa UX melhor)
|
||||
*/
|
||||
export function dedupeRegrasSemanais(regras) {
|
||||
const seen = new Set()
|
||||
const out = []
|
||||
for (const r of regras || []) {
|
||||
const k = ruleKey(r)
|
||||
if (seen.has(k)) continue
|
||||
seen.add(k)
|
||||
out.push(r)
|
||||
}
|
||||
return out
|
||||
const seen = new Set();
|
||||
const out = [];
|
||||
for (const r of regras || []) {
|
||||
const k = ruleKey(r);
|
||||
if (seen.has(k)) continue;
|
||||
seen.add(k);
|
||||
out.push(r);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user