first commit

This commit is contained in:
Leonardo
2026-02-18 22:36:45 -03:00
parent ec6b6ef53a
commit 676042268b
122 changed files with 26354 additions and 1615 deletions
+105 -20
View File
@@ -1,27 +1,112 @@
import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import App from './App.vue'
import router from '@/router'
import { setOnSignedOut, initSession, listenAuthChanges, refreshSession } from '@/app/session'
import Aura from '@primeuix/themes/aura';
import PrimeVue from 'primevue/config';
import ConfirmationService from 'primevue/confirmationservice';
import ToastService from 'primevue/toastservice';
import Aura from '@primeuix/themes/aura'
import PrimeVue from 'primevue/config'
import ConfirmationService from 'primevue/confirmationservice'
import ToastService from 'primevue/toastservice'
import '@/assets/tailwind.css';
import '@/assets/styles.scss';
import '@/assets/tailwind.css'
import '@/assets/styles.scss'
const app = createApp(App);
import { supabase } from '@/lib/supabase/client'
app.use(router);
app.use(PrimeVue, {
async function applyUserThemeEarly() {
try {
const { data } = await supabase.auth.getUser()
const user = data?.user
if (!user) return
const { data: settings, error } = await supabase
.from('user_settings')
.select('theme_mode')
.eq('user_id', user.id)
.maybeSingle()
if (error || !settings?.theme_mode) return
const isDark = settings.theme_mode === 'dark'
// o PrimeVue usa o selector .app-dark
const root = document.documentElement
root.classList.toggle('app-dark', isDark)
// opcional: marca em storage pra teu layout composable ler depois
localStorage.setItem('ui_theme_mode', settings.theme_mode)
} catch {}
}
setOnSignedOut(() => {
router.replace('/auth/login')
})
// ===== flags globais (debug/controle) =====
window.__sessionRefreshing = false
window.__fromVisibilityRefresh = false
window.__appBootstrapped = false
// ========================================
// 🛟 ao voltar da aba: refresh leve (sem concorrência + com flag global)
let refreshing = false
let refreshTimer = null
let lastVisibilityRefreshAt = 0
document.addEventListener('visibilitychange', async () => {
if (document.visibilityState !== 'visible') return
const now = Date.now()
// evita martelar: no máximo 1 refresh a cada 10s
if (now - lastVisibilityRefreshAt < 10_000) return
// se já tem refresh em andamento, não entra
if (window.__sessionRefreshing) return
lastVisibilityRefreshAt = now
console.log('[VISIBILITY] Aba voltou -> refreshSession()')
try {
window.__sessionRefreshing = true
await refreshSession()
} finally {
window.__sessionRefreshing = false
}
})
async function bootstrap () {
await initSession({ initial: true })
listenAuthChanges()
await applyUserThemeEarly()
const app = createApp(App)
const pinia = createPinia()
app.use(pinia)
app.use(router)
// ✅ garante router pronto antes de montar
await router.isReady()
app.use(PrimeVue, {
theme: {
preset: Aura,
options: {
darkModeSelector: '.app-dark'
}
preset: Aura,
options: { darkModeSelector: '.app-dark' }
}
});
app.use(ToastService);
app.use(ConfirmationService);
})
app.use(ToastService)
app.use(ConfirmationService)
app.mount('#app');
app.mount('#app')
// ✅ marca boot completo
window.__appBootstrapped = true
}
bootstrap()