mirror of
https://github.com/versia-pub/frontend.git
synced 2026-06-14 15:39:15 +02:00
refactor: ♻️ Rewrite state system to use Pinia for composer and auth
This commit is contained in:
parent
a6db9e059d
commit
b510782a30
80 changed files with 999 additions and 1011 deletions
|
|
@ -1,66 +1,47 @@
|
|||
import type { Client } from "@versia/client";
|
||||
import type { RolePermission } from "@versia/client/schemas";
|
||||
import { toast } from "vue-sonner";
|
||||
import * as m from "~~/paraglide/messages.js";
|
||||
|
||||
export const useCacheRefresh = (client: MaybeRef<Client | null>) => {
|
||||
export const useCacheRefresh = () => {
|
||||
const authStore = useAuthStore();
|
||||
const { identity } = storeToRefs(authStore);
|
||||
|
||||
authStore.client.getInstance().then((res) => {
|
||||
authStore.updateActiveIdentity({
|
||||
instance: res.data,
|
||||
});
|
||||
});
|
||||
|
||||
// Refresh custom emojis and instance data and me on every reload
|
||||
watch(
|
||||
[identity, client],
|
||||
async () => {
|
||||
console.info("Refreshing emoji, instance and account cache");
|
||||
if (identity.value) {
|
||||
toValue(client)
|
||||
?.verifyAccountCredentials()
|
||||
identity,
|
||||
async (oldIdentity, newIdentity) => {
|
||||
if (newIdentity && newIdentity.id !== oldIdentity?.id) {
|
||||
console.info("Refreshing emoji, instance and account cache");
|
||||
authStore.client
|
||||
.verifyAccountCredentials()
|
||||
.then((res) => {
|
||||
if (identity.value) {
|
||||
identity.value.account = res.data;
|
||||
}
|
||||
authStore.updateActiveIdentity({
|
||||
account: res.data,
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
const code = err.response.status;
|
||||
|
||||
if (code === 401) {
|
||||
// Reset tokenData
|
||||
identity.value = null;
|
||||
authStore.setActiveIdentity(null);
|
||||
toast.error(m.fancy_this_wasp_renew(), {
|
||||
description: m.real_weird_deer_stop(),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
toValue(client)
|
||||
?.getInstanceCustomEmojis()
|
||||
.then((res) => {
|
||||
if (identity.value) {
|
||||
identity.value.emojis = res.data;
|
||||
}
|
||||
authStore.client.getInstanceCustomEmojis().then((res) => {
|
||||
authStore.updateActiveIdentity({
|
||||
emojis: res.data,
|
||||
});
|
||||
|
||||
toValue(client)
|
||||
?.getAccountRoles(identity.value.account.id)
|
||||
.then((res) => {
|
||||
const roles = res.data;
|
||||
|
||||
// Get all permissions and deduplicate
|
||||
const permissions = roles
|
||||
?.flatMap((r) => r.permissions)
|
||||
.filter((p, i, arr) => arr.indexOf(p) === i);
|
||||
|
||||
if (identity.value) {
|
||||
identity.value.permissions =
|
||||
permissions as unknown as RolePermission[];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
toValue(client)
|
||||
?.getInstance()
|
||||
.then((res) => {
|
||||
if (identity.value) {
|
||||
identity.value.instance = res.data;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
{ flush: "sync", immediate: true },
|
||||
);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue