feat(core): use enter change workspace the name (#4007)

Co-authored-by: Alex Yang <himself65@outlook.com>
This commit is contained in:
pdx 2023-08-30 05:20:30 +08:00 committed by GitHub
parent 5c0f73c535
commit e3b105f1cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,7 +7,12 @@ import { IconButton } from '@toeverything/components/button';
import { useBlockSuiteWorkspaceAvatarUrl } from '@toeverything/hooks/use-block-suite-workspace-avatar-url';
import { useBlockSuiteWorkspaceName } from '@toeverything/hooks/use-block-suite-workspace-name';
import clsx from 'clsx';
import { useCallback, useState } from 'react';
import {
type KeyboardEvent,
startTransition,
useCallback,
useState,
} from 'react';
import { Upload } from '../../pure/file-upload';
import { type WorkspaceSettingDetailProps } from './index';
@ -38,6 +43,25 @@ export const ProfilePanel = ({ workspace, isOwner }: ProfilePanelProps) => {
[setName, t]
);
const handleSetInput = useCallback((value: string) => {
startTransition(() => {
setInput(value);
});
}, []);
const handleKeyUp = useCallback(
(e: KeyboardEvent<HTMLInputElement>) => {
if (e.code === 'Enter' && name !== input) {
handleUpdateWorkspaceName(input);
}
},
[handleUpdateWorkspaceName, input, name]
);
const handleClick = useCallback(() => {
handleUpdateWorkspaceName(input);
}, [handleUpdateWorkspaceName, input]);
return (
<div className={style.profileWrapper}>
<div className={clsx(style.avatarWrapper, { disable: !isOwner })}>
@ -69,14 +93,13 @@ export const ProfilePanel = ({ workspace, isOwner }: ProfilePanelProps) => {
placeholder={t['Workspace Name']()}
maxLength={64}
minLength={0}
onChange={setInput}
onChange={handleSetInput}
onKeyUp={handleKeyUp}
/>
{input === workspace.blockSuiteWorkspace.meta.name ? null : (
<IconButton
data-testid="save-workspace-name"
onClick={() => {
handleUpdateWorkspaceName(input);
}}
onClick={handleClick}
active={true}
style={{
marginLeft: '12px',