feat: sign up flow v2

This commit is contained in:
2023-11-08 14:47:35 +00:00
parent a2bcb936ef
commit d119a5f626
27 changed files with 815 additions and 1379 deletions

View File

@ -1,8 +1,9 @@
import { useEffect, useState, type ReactNode } from "react";
import { useEffect, useState, type ReactNode, useSyncExternalStore } from "react";
import { IntlProvider as ReactIntlProvider } from "react-intl";
import enMessages from "translations/en.json";
import useLogin from "Hooks/useLogin";
import { ExternalStore } from "@snort/shared";
const DefaultLocale = "en-US";
@ -80,9 +81,35 @@ const getMessages = (locale: string) => {
return matchLang(locale) ?? matchLang(truncatedLocale) ?? Promise.resolve(enMessages);
};
export const IntlProvider = ({ children }: { children: ReactNode }) => {
class LangStore extends ExternalStore<string> {
setLang(s: string) {
localStorage.setItem("lang", s);
this.notifyChange();
}
takeSnapshot(): string {
return localStorage.getItem("lang") ?? DefaultLocale;
}
}
const LangOverride = new LangStore();
export function useLocale() {
const { language } = useLogin(s => ({ language: s.preferences.language }));
const locale = language ?? getLocale();
const loggedOutLang = useSyncExternalStore(
c => LangOverride.hook(c),
() => LangOverride.snapshot(),
);
const locale = language ?? loggedOutLang ?? getLocale();
return {
locale,
lang: locale.toLowerCase().split(/[_-]+/)[0],
setOverride: (s: string) => LangOverride.setLang(s),
};
}
export const IntlProvider = ({ children }: { children: ReactNode }) => {
const { locale } = useLocale();
const [messages, setMessages] = useState<Record<string, string>>(enMessages);
useEffect(() => {
@ -93,7 +120,7 @@ export const IntlProvider = ({ children }: { children: ReactNode }) => {
}
})
.catch(console.error);
}, [language]);
}, [locale]);
return (
<ReactIntlProvider locale={locale} messages={messages}>