blob: 806c0993042486a261d71d72a61c195c0e47adf4 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import create from 'zustand';
import type { UserInfoRes } from '@/common/interface';
import Storage from '@/utils/storage';
import { LOGGED_TOKEN_STORAGE_KEY } from '@/common/constants';
interface UserInfoStore {
user: UserInfoRes;
update: (params: UserInfoRes) => void;
clear: (removeToken?: boolean) => void;
}
const initUser: UserInfoRes = {
access_token: '',
username: '',
avatar: '',
rank: 0,
bio: '',
bio_html: '',
display_name: '',
location: '',
website: '',
status: 'normal',
mail_status: 1,
language: 'Default',
color_scheme: 'default',
is_admin: false,
have_password: true,
role_id: 1,
};
const loggedUserInfo = create<UserInfoStore>((set) => ({
user: initUser,
update: (params) => {
if (typeof params !== 'object' || !params) {
return;
}
if (!params?.language) {
params.language = 'Default';
}
if (!params?.color_scheme) {
params.color_scheme = 'default';
}
set(() => {
Storage.set(LOGGED_TOKEN_STORAGE_KEY, params.access_token);
return { user: params };
});
},
clear: (removeToken = true) =>
set(() => {
if (removeToken) {
Storage.remove(LOGGED_TOKEN_STORAGE_KEY);
}
return { user: initUser };
}),
}));
export default loggedUserInfo;