mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-09 05:05:52 +08:00
fix(core): creating multiple workspaces with consecutive clicks (#6259)
Closes #6213
This commit is contained in:
@@ -39,6 +39,7 @@ interface ModalProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface NameWorkspaceContentProps extends ConfirmModalProps {
|
interface NameWorkspaceContentProps extends ConfirmModalProps {
|
||||||
|
loading: boolean;
|
||||||
onConfirmName: (
|
onConfirmName: (
|
||||||
name: string,
|
name: string,
|
||||||
workspaceFlavour: WorkspaceFlavour,
|
workspaceFlavour: WorkspaceFlavour,
|
||||||
@@ -50,6 +51,7 @@ const shouldEnableCloud =
|
|||||||
!runtimeConfig.allowLocalWorkspace && !environment.isDesktop;
|
!runtimeConfig.allowLocalWorkspace && !environment.isDesktop;
|
||||||
|
|
||||||
const NameWorkspaceContent = ({
|
const NameWorkspaceContent = ({
|
||||||
|
loading,
|
||||||
onConfirmName,
|
onConfirmName,
|
||||||
...props
|
...props
|
||||||
}: NameWorkspaceContentProps) => {
|
}: NameWorkspaceContentProps) => {
|
||||||
@@ -108,7 +110,7 @@ const NameWorkspaceContent = ({
|
|||||||
cancelText={t['com.affine.nameWorkspace.button.cancel']()}
|
cancelText={t['com.affine.nameWorkspace.button.cancel']()}
|
||||||
confirmButtonOptions={{
|
confirmButtonOptions={{
|
||||||
type: 'primary',
|
type: 'primary',
|
||||||
disabled: !workspaceName,
|
disabled: !workspaceName || loading,
|
||||||
['data-testid' as string]: 'create-workspace-create-button',
|
['data-testid' as string]: 'create-workspace-create-button',
|
||||||
children: t['com.affine.nameWorkspace.button.create'](),
|
children: t['com.affine.nameWorkspace.button.create'](),
|
||||||
}}
|
}}
|
||||||
@@ -180,6 +182,7 @@ export const CreateWorkspaceModal = ({
|
|||||||
const [step, setStep] = useState<CreateWorkspaceStep>();
|
const [step, setStep] = useState<CreateWorkspaceStep>();
|
||||||
const t = useAFFiNEI18N();
|
const t = useAFFiNEI18N();
|
||||||
const workspaceManager = useService(WorkspaceManager);
|
const workspaceManager = useService(WorkspaceManager);
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
// todo: maybe refactor using xstate?
|
// todo: maybe refactor using xstate?
|
||||||
useLayoutEffect(() => {
|
useLayoutEffect(() => {
|
||||||
@@ -224,6 +227,9 @@ export const CreateWorkspaceModal = ({
|
|||||||
|
|
||||||
const onConfirmName = useAsyncCallback(
|
const onConfirmName = useAsyncCallback(
|
||||||
async (name: string, workspaceFlavour: WorkspaceFlavour) => {
|
async (name: string, workspaceFlavour: WorkspaceFlavour) => {
|
||||||
|
if (loading) return;
|
||||||
|
setLoading(true);
|
||||||
|
|
||||||
// this will be the last step for web for now
|
// this will be the last step for web for now
|
||||||
// fix me later
|
// fix me later
|
||||||
if (runtimeConfig.enablePreloading) {
|
if (runtimeConfig.enablePreloading) {
|
||||||
@@ -247,8 +253,10 @@ export const CreateWorkspaceModal = ({
|
|||||||
);
|
);
|
||||||
onCreate(id);
|
onCreate(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setLoading(false);
|
||||||
},
|
},
|
||||||
[onCreate, workspaceManager]
|
[loading, onCreate, workspaceManager]
|
||||||
);
|
);
|
||||||
|
|
||||||
const onOpenChange = useCallback(
|
const onOpenChange = useCallback(
|
||||||
@@ -259,9 +267,11 @@ export const CreateWorkspaceModal = ({
|
|||||||
},
|
},
|
||||||
[onClose]
|
[onClose]
|
||||||
);
|
);
|
||||||
|
|
||||||
if (step === 'name-workspace') {
|
if (step === 'name-workspace') {
|
||||||
return (
|
return (
|
||||||
<NameWorkspaceContent
|
<NameWorkspaceContent
|
||||||
|
loading={loading}
|
||||||
open={mode !== false && !!step}
|
open={mode !== false && !!step}
|
||||||
onOpenChange={onOpenChange}
|
onOpenChange={onOpenChange}
|
||||||
onConfirmName={onConfirmName}
|
onConfirmName={onConfirmName}
|
||||||
|
|||||||
Reference in New Issue
Block a user