diff --git a/auth/dbc/users.sql.go b/auth/dbc/users.sql.go index 3d8bfbb4..1426d231 100644 --- a/auth/dbc/users.sql.go +++ b/auth/dbc/users.sql.go @@ -276,7 +276,7 @@ set username = coalesce($2, username), email = coalesce($3, email), password = coalesce($4, password), - claims = coalesce($5, claims) + claims = claims || coalesce($5, '{}'::jsonb) where id = $1 returning diff --git a/auth/sql/queries/users.sql b/auth/sql/queries/users.sql index f73dce75..bc888803 100644 --- a/auth/sql/queries/users.sql +++ b/auth/sql/queries/users.sql @@ -72,7 +72,7 @@ set username = coalesce(sqlc.narg(username), username), email = coalesce(sqlc.narg(email), email), password = coalesce(sqlc.narg(password), password), - claims = coalesce(sqlc.narg(claims), claims) + claims = claims || coalesce(sqlc.narg(claims), '{}'::jsonb) where id = $1 returning diff --git a/front/src/models/user.ts b/front/src/models/user.ts index 2b768ff8..ab03df22 100644 --- a/front/src/models/user.ts +++ b/front/src/models/user.ts @@ -2,8 +2,8 @@ import { z } from "zod/v4"; export const User = z .object({ - // // keep a default for older versions of the api - // .default({}), + // // keep a default for older versions of the api + // .default({}), id: z.string(), username: z.string(), email: z.string(), diff --git a/front/src/providers/translations.compile.ts b/front/src/providers/translations.compile.ts index 1296173f..33c1fa37 100644 --- a/front/src/providers/translations.compile.ts +++ b/front/src/providers/translations.compile.ts @@ -68,4 +68,4 @@ export const supportedLanguages = [ "tr", "uk", "zh", -]; \ No newline at end of file +]; diff --git a/front/src/query/query.tsx b/front/src/query/query.tsx index b8ea38d0..ec5ae269 100644 --- a/front/src/query/query.tsx +++ b/front/src/query/query.tsx @@ -275,7 +275,7 @@ export const useMutation = ({ ...queryParams }: MutationParams & { compute?: (param: T) => MutationParams; - optimistic?: ((param: T) => QueryRet); + optimistic?: (param: T) => QueryRet; invalidate: string[] | null; }) => { const { apiUrl, authToken } = useContext(AccountContext); @@ -299,13 +299,19 @@ export const useMutation = ({ ? { onMutate: async (params) => { const next = optimistic(params); - await queryClient.cancelQueries({ queryKey: invalidate }); - const previous = queryClient.getQueryData(invalidate); - queryClient.setQueryData(invalidate, next); + const queryKey = toQueryKey({ apiUrl, path: invalidate }); + await queryClient.cancelQueries({ + queryKey, + }); + const previous = queryClient.getQueryData(queryKey); + queryClient.setQueryData(queryKey, next); return { previous, next }; }, onError: (_, __, context) => { - queryClient.setQueryData(invalidate, context!.previous); + queryClient.setQueryData( + toQueryKey({ apiUrl, path: invalidate }), + context!.previous, + ); }, } : {}), diff --git a/front/src/ui/settings/account.tsx b/front/src/ui/settings/account.tsx index 43ff61a2..db06f661 100644 --- a/front/src/ui/settings/account.tsx +++ b/front/src/ui/settings/account.tsx @@ -22,10 +22,10 @@ import { usePopup, } from "~/primitives"; import { useAccount } from "~/providers/account-context"; +import { useMutation } from "~/query"; import { deleteAccount, logout } from "../login/logic"; import { PasswordInput } from "../login/password-input"; import { Preference, SettingsContainer } from "./base"; -import { useMutation } from "~/query"; // function dataURItoBlob(dataURI: string) { // const byteString = atob(dataURI.split(",")[1]); diff --git a/front/src/ui/settings/base.tsx b/front/src/ui/settings/base.tsx index 55c9f77a..5f00db58 100644 --- a/front/src/ui/settings/base.tsx +++ b/front/src/ui/settings/base.tsx @@ -125,18 +125,15 @@ export const useSetting = ( compute: (update: Partial) => ({ body: { claims: { - ...account!.claims, settings: { ...account!.claims.settings, ...update }, }, }, }), optimistic: (update) => ({ - body: { - ...account, - claims: { - ...account!.claims, - settings: { ...account!.claims.settings, ...update }, - }, + ...account, + claims: { + ...account!.claims, + settings: { ...account!.claims.settings, ...update }, }, }), invalidate: ["auth", "users", "me"], diff --git a/front/src/ui/settings/playback.tsx b/front/src/ui/settings/playback.tsx index 8975bf6f..458fbfd5 100644 --- a/front/src/ui/settings/playback.tsx +++ b/front/src/ui/settings/playback.tsx @@ -1,12 +1,12 @@ import SubtitleLanguage from "@material-symbols/svg-400/rounded/closed_caption-fill.svg"; import PlayModeI from "@material-symbols/svg-400/rounded/display_settings-fill.svg"; import AudioLanguage from "@material-symbols/svg-400/rounded/music_note-fill.svg"; +import langmap from "langmap"; import { useTranslation } from "react-i18next"; import { Select } from "~/primitives"; import { useLocalSetting } from "~/providers/settings"; import { useLanguageName } from "~/track-utils"; import { Preference, SettingsContainer, useSetting } from "./base"; -import langmap from "langmap"; const seenNativeNames = new Set(); export const languageCodes = Object.keys(langmap)