mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-25 18:26:05 +08:00
refactor: extract store package (#1109)
This commit is contained in:
57
packages/store/src/app/user/index.ts
Normal file
57
packages/store/src/app/user/index.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { User } from '@affine/datacenter';
|
||||
|
||||
import { GlobalActionsCreator } from '..';
|
||||
|
||||
export interface UserState {
|
||||
user: User | null;
|
||||
isOwner: boolean;
|
||||
}
|
||||
|
||||
export interface UserActions {
|
||||
login: () => Promise<User | null>;
|
||||
logout: () => Promise<void>;
|
||||
}
|
||||
|
||||
export const createUserState = (): UserState => ({
|
||||
// initialized in DataCenterLoader (restore from localStorage)
|
||||
user: null,
|
||||
isOwner: false,
|
||||
});
|
||||
|
||||
export const createUserActions: GlobalActionsCreator<UserActions> = (
|
||||
set,
|
||||
get
|
||||
) => {
|
||||
return {
|
||||
login: async () => {
|
||||
const { dataCenter, currentDataCenterWorkspace: workspace } = get();
|
||||
try {
|
||||
await dataCenter.login();
|
||||
const user = (await dataCenter.getUserInfo()) as User;
|
||||
|
||||
if (!user) {
|
||||
// Add ErrorBoundary
|
||||
throw new Error('User info not found');
|
||||
}
|
||||
|
||||
let isOwner;
|
||||
if (workspace?.provider === 'local') {
|
||||
// isOwner is useful only in the cloud
|
||||
isOwner = true;
|
||||
} else {
|
||||
isOwner = user.id === workspace?.owner?.id;
|
||||
}
|
||||
|
||||
set({ user, isOwner });
|
||||
return user;
|
||||
} catch (error) {
|
||||
return null; // login failed
|
||||
}
|
||||
},
|
||||
logout: async () => {
|
||||
const { dataCenter } = get();
|
||||
await dataCenter.logout();
|
||||
set({ user: null });
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user