Skip to content

Commit 7590afb

Browse files
authored
fix(cells): minor glitches (#19170)
* feat(CellsNewMenu): remove file option from new item dropdown * feat(PDFViewer): open sidebar by default * feat(CellsNewNodeForm): add inputFocusEnabled prop for auto-focusing input field * feat(CellsMoveNodeModal): prevent moving folder to its own * refactor(CellsNewItemModal, CellsMoveNodeModal, CellsNewNodeForm): replace inputFocusEnabled prop with isOpen for input auto-focusing
1 parent f23c6fe commit 7590afb

File tree

9 files changed

+28
-29
lines changed

9 files changed

+28
-29
lines changed

src/script/components/Conversation/ConversationCells/CellsHeader/CellsNewMenu/CellsNewItemModal/CellsNewItemModal.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,14 @@ export const CellsNewItemModal = ({
6666
<p css={descriptionStyles}>
6767
{t(isFolder ? 'cells.newItemMenuModal.descriptionFolder' : 'cells.newItemMenuModal.descriptionFile')}
6868
</p>
69-
<CellsNewNodeForm type={type} onSubmit={handleSubmit} inputValue={name} onChange={handleChange} error={error} />
69+
<CellsNewNodeForm
70+
type={type}
71+
onSubmit={handleSubmit}
72+
inputValue={name}
73+
onChange={handleChange}
74+
error={error}
75+
isOpen={isOpen}
76+
/>
7077
<CellsModal.Actions>
7178
<CellsModal.SecondaryButton onClick={onClose}>
7279
{t('cells.newItemMenuModal.secondaryAction')}

src/script/components/Conversation/ConversationCells/CellsHeader/CellsNewMenu/CellsNewMenu.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export const CellsNewMenu = ({cellsRepository, conversationQualifiedId, onRefres
5757
</Button>
5858
</DropdownMenu.Trigger>
5959
<DropdownMenu.Content>
60-
<DropdownMenu.Item onClick={() => openModal('file')}>{t('cells.newItemMenu.file')}</DropdownMenu.Item>
6160
<DropdownMenu.Item onClick={() => openModal('folder')}>{t('cells.newItemMenu.folder')}</DropdownMenu.Item>
6261
</DropdownMenu.Content>
6362
</DropdownMenu>

src/script/components/Conversation/ConversationCells/CellsTable/CellsTableColumns/CellsTableRowOptions/CellsMoveNodeModal/CellsFoldersListModalContent/CellsCreateNewFolderHint/CellsCreateNewFolderHint.styles.ts

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,7 @@ export const textStyles: CSSObject = {
3434
};
3535

3636
export const buttonStyles: CSSObject = {
37-
background: 'none',
38-
border: 'none',
39-
padding: '0 8px',
40-
cursor: 'pointer',
41-
fontSize: 'var(--font-size-medium)',
42-
color: 'var(--gray-70)',
43-
display: 'flex',
44-
alignItems: 'center',
45-
gap: '8px',
46-
47-
'&:hover': {
48-
color: 'var(--main-color)',
49-
},
37+
margin: '0',
5038
};
5139

5240
export const activeItemStyles: CSSObject = {

src/script/components/Conversation/ConversationCells/CellsTable/CellsTableColumns/CellsTableRowOptions/CellsMoveNodeModal/CellsFoldersListModalContent/CellsCreateNewFolderHint/CellsCreateNewFolderHint.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {Button, ButtonVariant, PlusIcon} from '@wireapp/react-ui-kit';
2121

2222
import {t} from 'Util/LocalizerUtil';
2323

24-
import {iconStyles, textStyles, wrapperStyles, buttonStyles} from './CellsCreateNewFolderHint.styles';
24+
import {buttonStyles, iconStyles, textStyles, wrapperStyles} from './CellsCreateNewFolderHint.styles';
2525

2626
interface CellsCreateNewFolderHintProps {
2727
onCreate: () => void;

src/script/components/Conversation/ConversationCells/CellsTable/CellsTableColumns/CellsTableRowOptions/CellsMoveNodeModal/CellsMoveNodeModal.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export const CellsMoveNodeModal = ({
5454
const [activeModalContent, setActiveModalContent] = useState<'move' | 'create'>('move');
5555

5656
const {folders, refresh, status, shouldShowLoadingSpinner} = useGetCellsFolders({
57+
nodeToMove,
5758
cellsRepository,
5859
conversationQualifiedId,
5960
currentPath,
@@ -134,6 +135,7 @@ export const CellsMoveNodeModal = ({
134135
inputValue={name}
135136
onChange={handleChange}
136137
error={error}
138+
isOpen={isOpen}
137139
/>
138140
<CellsModal.Actions>
139141
<CellsModal.SecondaryButton onClick={() => setActiveModalContent('move')}>

src/script/components/Conversation/ConversationCells/CellsTable/CellsTableColumns/CellsTableRowOptions/CellsMoveNodeModal/useGetCellsFolders/useGetCellsFolders.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ import {useCallback, useEffect, useState} from 'react';
2121

2222
import {QualifiedId} from '@wireapp/api-client/lib/user/';
2323

24+
import {CellNode} from 'Components/Conversation/ConversationCells/common/cellNode/cellNode';
2425
import {getCellsApiPath} from 'Components/Conversation/ConversationCells/common/getCellsApiPath/getCellsApiPath';
2526
import {CellsRepository} from 'src/script/cells/CellsRepository';
2627

2728
import {transformNodesToCellsFolders} from './transformNodesToCellsFolders';
2829

2930
interface UseGetCellsFoldersProps {
3031
currentPath: string;
32+
nodeToMove: CellNode;
3133
cellsRepository: CellsRepository;
3234
conversationQualifiedId: QualifiedId;
3335

@@ -44,6 +46,7 @@ interface Folder {
4446
const SHOW_LOADING_SPINNER_DELAY_MS = 1000;
4547

4648
export const useGetCellsFolders = ({
49+
nodeToMove,
4750
cellsRepository,
4851
conversationQualifiedId,
4952
currentPath,
@@ -73,7 +76,9 @@ export const useGetCellsFolders = ({
7376
}
7477

7578
const transformedFolders = transformNodesToCellsFolders(result.Nodes);
76-
setFolders(transformedFolders);
79+
const filteredFolders = transformedFolders.filter(folder => folder.path !== nodeToMove.path);
80+
81+
setFolders(filteredFolders);
7782
setStatus('success');
7883
} catch (error) {
7984
setFolders([]);
@@ -82,7 +87,7 @@ export const useGetCellsFolders = ({
8287
}
8388
// cellsRepository is not a dependency because it's a singleton
8489
// eslint-disable-next-line react-hooks/exhaustive-deps
85-
}, [setFolders, setStatus, conversationQualifiedId, enabled, currentPath]);
90+
}, [setFolders, setStatus, conversationQualifiedId, enabled, currentPath, nodeToMove]);
8691

8792
useEffect(() => {
8893
void fetchFolders();

src/script/components/Conversation/ConversationCells/common/CellsNewNodeForm/CellsNewNodeForm.tsx

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*
1818
*/
1919

20-
import {ChangeEvent, FormEvent, useEffect, useRef} from 'react';
20+
import {ChangeEvent, FormEvent} from 'react';
2121

2222
import {ErrorMessage, Input, Label} from '@wireapp/react-ui-kit';
2323

@@ -26,21 +26,19 @@ import {t} from 'Util/LocalizerUtil';
2626
import {inputWrapperStyles} from './CellsNewNodeForm.styles';
2727

2828
import {CellNode} from '../cellNode/cellNode';
29+
import {useInputAutoFocus} from '../useInputAutoFocus/useInputAutoFocus';
2930

3031
interface CellsNewNodeFormProps {
3132
type: CellNode['type'];
3233
onSubmit: (event: FormEvent<HTMLFormElement>) => void;
3334
inputValue: string;
3435
onChange: (event: ChangeEvent<HTMLInputElement>) => void;
3536
error: string | null;
37+
isOpen: boolean;
3638
}
3739

38-
export const CellsNewNodeForm = ({type, onSubmit, inputValue, onChange, error}: CellsNewNodeFormProps) => {
39-
const inputRef = useRef<HTMLInputElement>(null);
40-
41-
useEffect(() => {
42-
inputRef.current?.focus();
43-
}, []);
40+
export const CellsNewNodeForm = ({type, onSubmit, inputValue, onChange, error, isOpen}: CellsNewNodeFormProps) => {
41+
const {inputRef} = useInputAutoFocus({enabled: isOpen});
4442

4543
return (
4644
<form onSubmit={onSubmit}>

src/script/components/Conversation/ConversationCells/common/useInputAutoFocus/useInputAutoFocus.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import {useEffect, useRef} from 'react';
2121

22-
export const useInputAutoFocus = ({enabled}: {enabled: boolean}) => {
22+
export const useInputAutoFocus = ({enabled = true, delayMs = 1}: {enabled?: boolean; delayMs?: number}) => {
2323
const inputRef = useRef<HTMLInputElement>(null);
2424

2525
useEffect(() => {
@@ -30,12 +30,12 @@ export const useInputAutoFocus = ({enabled}: {enabled: boolean}) => {
3030
// Ensure the input is fully rendered
3131
const timeoutId = setTimeout(() => {
3232
inputRef.current?.focus();
33-
});
33+
}, delayMs);
3434

3535
return () => {
3636
clearTimeout(timeoutId);
3737
};
38-
}, [enabled]);
38+
}, [enabled, delayMs]);
3939

4040
return {
4141
inputRef,

src/script/components/FileFullscreenModal/PdfViewer/PdfViewer.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ interface PDFViewerProps {
3535

3636
export const PDFViewer = ({src}: PDFViewerProps) => {
3737
const [pagesCount, setPagesCount] = useState(0);
38-
const [sidebarOpen, setSidebarOpen] = useState(false);
38+
const [sidebarOpen, setSidebarOpen] = useState(true);
3939

4040
const {scale, zoomIn, zoomOut} = useZoomControls();
4141

0 commit comments

Comments
 (0)