Files
AFFiNE-Mirror/apps/web/src/hooks/use-blocksuite-workspace-name.ts
T
2023-03-15 11:58:43 -05:00

34 lines
985 B
TypeScript

import { UNTITLED_WORKSPACE_NAME } from '@affine/env';
import { assertExists } from '@blocksuite/store';
import { useCallback, useEffect, useState } from 'react';
import type { BlockSuiteWorkspace } from '../shared';
export function useBlockSuiteWorkspaceName(
blockSuiteWorkspace: BlockSuiteWorkspace | null
) {
const [name, set] = useState(
() => blockSuiteWorkspace?.meta.name ?? UNTITLED_WORKSPACE_NAME
);
useEffect(() => {
if (blockSuiteWorkspace) {
set(blockSuiteWorkspace.meta.name ?? '');
const dispose = blockSuiteWorkspace.meta.commonFieldsUpdated.on(() => {
set(blockSuiteWorkspace.meta.name ?? '');
});
return () => {
dispose.dispose();
};
}
}, [blockSuiteWorkspace]);
const setName = useCallback(
(name: string) => {
assertExists(blockSuiteWorkspace);
blockSuiteWorkspace.meta.setName(name);
set(name);
},
[blockSuiteWorkspace]
);
return [name, setName] as const;
}