Commit d9a52db6 authored by Lê Bảo Hồng Đức's avatar Lê Bảo Hồng Đức

fix

parents 8c9baba4 f680aadf
......@@ -649,7 +649,8 @@ export default function AdminBaseConfigPage() {
const handleDeleteItem = async () => {
if (!config || !deleteTarget) return;
const nextConfig = cloneBaseConfigData(config);
try {
const nextConfig = cloneBaseConfigData(config);
if (deleteTarget.mode === "logo") {
try {
......@@ -668,9 +669,13 @@ export default function AdminBaseConfigPage() {
);
}
saveConfig(nextConfig);
toast.success("Đã xóa cấu hình");
setDeleteTarget(null);
saveConfig(nextConfig);
toast.success("Đã xóa cấu hình");
} catch (err) {
toast.error(err instanceof Error ? err.message : "Không thể xóa cấu hình");
} finally {
setDeleteTarget(null);
}
};
const handleBranchChange = <K extends keyof BaseConfigBranchItem>(
......
......@@ -124,11 +124,8 @@ const normalizePersistedAuthState = (
const persistSession = persisted.appPersistSession === true;
const refreshTokenExpiredAt = getRefreshTokenExpiredAt(persisted.appSession ?? null);
const hasUsableSession =
persistSession &&
Boolean(persisted.appRefreshToken) &&
(!refreshTokenExpiredAt || refreshTokenExpiredAt > Date.now()) &&
(!persisted.appAccessTokenExpired ||
typeof persisted.appAccessTokenExpired === "number");
(!refreshTokenExpiredAt || refreshTokenExpiredAt > Date.now());
if (!hasUsableSession) {
return {
......@@ -141,25 +138,12 @@ const normalizePersistedAuthState = (
return {
...currentState,
...persisted,
appPersistSession: true,
appPersistSession: persistSession,
appUserRemember: rememberState,
appIsRefreshing: false,
};
};
const shouldPersistAuthStorage = (value: string) => {
try {
const parsed = JSON.parse(value) as {
state?: Partial<AuthStoreStateType>;
};
const state = parsed.state ?? {};
return state.appPersistSession === true || state.appUserRemember?.remember === true;
} catch {
return true;
}
};
const useAuthStore = create<AuthStoreStateType>()(
devtools(
persist(
......@@ -252,30 +236,44 @@ const useAuthStore = create<AuthStoreStateType>()(
{
name: "app-auth-storage",
storage: createJSONStorage(() => ({
getItem: (name) => localStorage.getItem(name),
getItem: (name) => {
if (typeof window === "undefined") return null;
return localStorage.getItem(name) ?? sessionStorage.getItem(name);
},
setItem: (name, value) => {
if (shouldPersistAuthStorage(value)) {
if (typeof window === "undefined") return;
try {
const parsed = JSON.parse(value) as {
state?: Partial<AuthStoreStateType>;
};
const state = parsed.state ?? {};
if (state.appPersistSession === true) {
localStorage.setItem(name, value);
sessionStorage.removeItem(name);
} else {
sessionStorage.setItem(name, value);
localStorage.removeItem(name);
}
} catch {
localStorage.setItem(name, value);
return;
}
},
removeItem: (name) => {
if (typeof window === "undefined") return;
localStorage.removeItem(name);
sessionStorage.removeItem(name);
},
removeItem: (name) => localStorage.removeItem(name),
})),
partialize: (state) => ({
appPersistSession: state.appPersistSession,
...(state.appPersistSession
? {
appIsLoggedIn: state.appIsLoggedIn,
appAccessToken: state.appAccessToken,
appAccessTokenExpired: state.appAccessTokenExpired,
appRefreshToken: state.appRefreshToken,
appSession: state.appSession,
appUser: state.appUser,
appSessionExpiredNotified: state.appSessionExpiredNotified,
}
: {}),
appIsLoggedIn: state.appIsLoggedIn,
appAccessToken: state.appAccessToken,
appAccessTokenExpired: state.appAccessTokenExpired,
appRefreshToken: state.appRefreshToken,
appSession: state.appSession,
appUser: state.appUser,
appSessionExpiredNotified: state.appSessionExpiredNotified,
appUserRemember: state.appUserRemember,
}),
merge: (persistedState, currentState) =>
......
......@@ -3,7 +3,6 @@
@theme inline {
/* Fonts */
--font-reddit-sans: RedditSans, sans-serif;
/* Use Roboto as the default font. Ensure Roboto is loaded (e.g., via Google Fonts or local import). */
--default-font-family: 'Roboto', 'Helvetica Neue', Arial, system-ui, -apple-system, 'Segoe UI', 'Noto Sans', sans-serif;
/* Border Radius */
--radius-lg: hsl(var(--radius));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment