- Replaced `window.electron.invoke` calls with equivalent `tauri` function calls for all IPC interactions. - Removed `electron.d.ts` TypeScript definitions as they are no longer needed. - Updated related logic for offline/online state synchronization. - Added `types.rs` and `shared/mod.rs` modules to support Tauri IPC integration with Rust enums and shared logic. - Refactored IPC request queues to use updated handler names for consistency with Tauri.
77 lines
3.0 KiB
TypeScript
77 lines
3.0 KiB
TypeScript
'use client'
|
|
|
|
import frMessages from '@/lib/locales/fr.json';
|
|
import enMessages from '@/lib/locales/en.json';
|
|
import {useEffect, useState} from "react";
|
|
import {LangContext} from "@/context/LangContext";
|
|
import {NextIntlClientProvider} from "next-intl";
|
|
import StaticAlert from "@/components/StaticAlert";
|
|
import {SessionProps} from "@/lib/models/Session";
|
|
import System from "@/lib/models/System";
|
|
import {SessionContext} from "@/context/SessionContext";
|
|
import {AlertContext} from "@/context/AlertContext";
|
|
import * as tauri from '@/lib/tauri';
|
|
|
|
const messagesMap = {
|
|
fr: frMessages,
|
|
en: enMessages
|
|
};
|
|
|
|
export default function LoginWrapper({children}: { children: React.ReactNode }) {
|
|
const [locale, setLocale] = useState<'fr' | 'en'>('fr');
|
|
const [errorMessage, setErrorMessage] = useState('');
|
|
const [successMessage, setSuccessMessage] = useState('');
|
|
const [infoMessage, setInfoMessage] = useState('');
|
|
const [warningMessage, setWarningMessage] = useState('');
|
|
const messages = messagesMap[locale];
|
|
|
|
const [session, setSession] = useState<SessionProps>({
|
|
isConnected: false,
|
|
user: null,
|
|
accessToken: ''
|
|
})
|
|
|
|
useEffect((): void => {
|
|
checkAuthentification().then()
|
|
}, []);
|
|
|
|
useEffect((): void => {
|
|
if (session.isConnected) {
|
|
tauri.loginSuccess();
|
|
}
|
|
}, [session]);
|
|
|
|
async function checkAuthentification(): Promise<void> {
|
|
const language: "fr" | "en" | null = System.getCookie('lang') as "fr" | "en" | null;
|
|
if (language) {
|
|
setLocale(language);
|
|
}
|
|
|
|
// Pas besoin de vérifier le token ici dans Electron
|
|
// Le main process gère quelle fenêtre ouvrir
|
|
}
|
|
|
|
return (
|
|
<SessionContext.Provider value={{session: session, setSession: setSession}}>
|
|
<LangContext.Provider value={{lang: locale, setLang: setLocale}}>
|
|
<NextIntlClientProvider locale={locale} messages={messages}>
|
|
<AlertContext.Provider value={{errorMessage: setErrorMessage, successMessage: setSuccessMessage, infoMessage: setInfoMessage, warningMessage: setWarningMessage}}>
|
|
{children}
|
|
<div className="fixed top-4 right-4 z-[9999] flex flex-col gap-3">
|
|
{
|
|
successMessage && <StaticAlert type={'success'} message={successMessage} onClose={() => {
|
|
setSuccessMessage('')
|
|
}}/>
|
|
}
|
|
{
|
|
errorMessage && <StaticAlert type={'error'} message={errorMessage} onClose={() => {
|
|
setErrorMessage('')
|
|
}}/>
|
|
}
|
|
</div>
|
|
</AlertContext.Provider>
|
|
</NextIntlClientProvider>
|
|
</LangContext.Provider>
|
|
</SessionContext.Provider>
|
|
)
|
|
} |