fix(mobx): properly persist login state

This commit is contained in:
Paul 2021-12-24 12:00:24 +00:00
parent ef1ddb7771
commit 189d0b5ff9
5 changed files with 12 additions and 4 deletions

View file

@ -11,6 +11,7 @@ import Locale from "./Locale";
import Theme from "./Theme";
import Intermediate from "./intermediate/Intermediate";
import Client from "./revoltjs/RevoltClient";
import SyncManager from "./revoltjs/SyncManager";
/**
* This component provides all of the application's context layers.
@ -29,7 +30,10 @@ export default function Context({ children }: { children: Children }) {
<Router basename={import.meta.env.BASE_URL}>
<Locale>
<Intermediate>
<Client>{children}</Client>
<Client>
{children}
<SyncManager />
</Client>
</Intermediate>
</Locale>
<Theme />

View file

@ -15,7 +15,9 @@ export default function SyncManager() {
// Sync settings from Revolt.
useEffect(() => {
if (client) {
state.sync.pull(client);
}
}, [client]);
// Keep data synced.
@ -23,6 +25,7 @@ export default function SyncManager() {
// Take data updates from Revolt.
useEffect(() => {
if (!client) return;
function onPacket(packet: ClientboundNotification) {
if (packet.type === "UserSettingsUpdate") {
state.sync.apply(packet.update);

View file

@ -112,7 +112,7 @@ export default class State {
* Register reaction listeners for persistent data stores.
* @returns Function to dispose of listeners
*/
registerListeners(client: Client) {
registerListeners(client?: Client) {
const listeners = this.persistent.map(([id, store]) => {
return reaction(
() => stringify(store.toJSON()),
@ -120,6 +120,7 @@ export default class State {
try {
await localforage.setItem(id, JSON.parse(value));
if (id === "sync") return;
if (!client) return;
const revision = +new Date();
switch (id) {

View file

@ -85,6 +85,7 @@ export default class Auth implements Store, Persistent<Data> {
@action setSession(session: Session) {
this.sessions.set(session.user_id, { session });
this.current = session.user_id;
console.log(this.sessions, this.current);
}
/**

View file

@ -129,7 +129,6 @@ export default function App() {
<Popovers />
<Notifications />
<StateMonitor />
<SyncManager />
</OverlappingPanels>
</>
);