fix: remove locking closeOnBlur

This commit is contained in:
Antonella Sgarlatta
2021-05-07 18:51:49 -03:00
parent 24eb348b08
commit 461f3ccfa4
4 changed files with 6 additions and 26 deletions

View File

@@ -2,7 +2,7 @@ import { AppState } from '@/ui_models/app_state';
import { toDirective, useCloseOnBlur } from './utils'; import { toDirective, useCloseOnBlur } from './utils';
import { observer } from 'mobx-react-lite'; import { observer } from 'mobx-react-lite';
import { NotesOptions } from './NotesOptions'; import { NotesOptions } from './NotesOptions';
import { useEffect, useRef, useState } from 'preact/hooks'; import { useEffect, useRef } from 'preact/hooks';
type Props = { type Props = {
appState: AppState; appState: AppState;
@@ -12,18 +12,12 @@ const NotesContextMenu = observer(({ appState }: Props) => {
const contextMenuRef = useRef<HTMLDivElement>(); const contextMenuRef = useRef<HTMLDivElement>();
const [closeOnBlur, setLockCloseOnBlur] = useCloseOnBlur( const [closeOnBlur, setLockCloseOnBlur] = useCloseOnBlur(
contextMenuRef, contextMenuRef,
(open: boolean) => null (open: boolean) => appState.notes.setContextMenuOpen(open)
); );
const [submenuOpen, setSubmenuOpen] = useState(false);
const closeOnClickOutside = (event: MouseEvent) => { const closeOnClickOutside = (event: MouseEvent) => {
if (!contextMenuRef.current?.contains(event.target as Node)) { if (!contextMenuRef.current?.contains(event.target as Node)) {
if (submenuOpen) { appState.notes.setContextMenuOpen(false);
setSubmenuOpen(false);
} else {
console.log('here');
appState.notes.setContextMenuOpen(false);
}
} }
}; };
@@ -43,9 +37,6 @@ const NotesContextMenu = observer(({ appState }: Props) => {
<NotesOptions <NotesOptions
appState={appState} appState={appState}
closeOnBlur={closeOnBlur} closeOnBlur={closeOnBlur}
setLockCloseOnBlur={setLockCloseOnBlur}
submenuOpen={submenuOpen}
setSubmenuOpen={setSubmenuOpen}
/> />
</div> </div>
) : null; ) : null;

View File

@@ -12,14 +12,13 @@ import {
type Props = { type Props = {
appState: AppState; appState: AppState;
closeOnBlur: (event: { relatedTarget: EventTarget | null }) => void; closeOnBlur: (event: { relatedTarget: EventTarget | null }) => void;
setLockCloseOnBlur: (lock: boolean) => void;
onSubmenuChange?: (submenuOpen: boolean) => void; onSubmenuChange?: (submenuOpen: boolean) => void;
}; };
const MAX_TAGS_MENU_HEIGHT = 265; const MAX_TAGS_MENU_HEIGHT = 265;
export const NotesOptions = observer( export const NotesOptions = observer(
({ appState, closeOnBlur, setLockCloseOnBlur, onSubmenuChange }: Props) => { ({ appState, closeOnBlur, onSubmenuChange }: Props) => {
const [tagsMenuOpen, setTagsMenuOpen] = useState(false); const [tagsMenuOpen, setTagsMenuOpen] = useState(false);
const [tagsMenuPosition, setTagsMenuPosition] = useState({ const [tagsMenuPosition, setTagsMenuPosition] = useState({
top: 0, top: 0,
@@ -33,7 +32,6 @@ export const NotesOptions = observer(
const trashed = !notes.some((note) => !note.trashed); const trashed = !notes.some((note) => !note.trashed);
const pinned = !notes.some((note) => !note.pinned); const pinned = !notes.some((note) => !note.pinned);
const trashButtonRef = useRef<HTMLButtonElement>();
const tagsButtonRef = useRef<HTMLButtonElement>(); const tagsButtonRef = useRef<HTMLButtonElement>();
const iconClass = 'fill-current color-neutral mr-2'; const iconClass = 'fill-current color-neutral mr-2';
@@ -176,13 +174,10 @@ export const NotesOptions = observer(
{archived ? 'Unarchive' : 'Archive'} {archived ? 'Unarchive' : 'Archive'}
</button> </button>
<button <button
ref={trashButtonRef}
onBlur={closeOnBlur} onBlur={closeOnBlur}
className={`${buttonClass} py-1.5`} className={`${buttonClass} py-1.5`}
onClick={async () => { onClick={async () => {
setLockCloseOnBlur(true); await appState.notes.setTrashSelectedNotes(!trashed);
await appState.notes.setTrashSelectedNotes(!trashed, trashButtonRef);
setLockCloseOnBlur(false);
}} }}
> >
<Icon type={trashed ? IconType.Restore : IconType.Trash} className={iconClass} /> <Icon type={trashed ? IconType.Restore : IconType.Trash} className={iconClass} />
@@ -193,9 +188,7 @@ export const NotesOptions = observer(
onBlur={closeOnBlur} onBlur={closeOnBlur}
className={`${buttonClass} py-1.5`} className={`${buttonClass} py-1.5`}
onClick={async () => { onClick={async () => {
setLockCloseOnBlur(true);
await appState.notes.deleteNotesPermanently(); await appState.notes.deleteNotesPermanently();
setLockCloseOnBlur(false);
}} }}
> >
<Icon type={IconType.Close} className="fill-current color-danger mr-2" /> <Icon type={IconType.Close} className="fill-current color-danger mr-2" />

View File

@@ -76,7 +76,6 @@ export const NotesOptionsPanel = observer(({ appState }: Props) => {
<NotesOptions <NotesOptions
appState={appState} appState={appState}
closeOnBlur={closeOnBlur} closeOnBlur={closeOnBlur}
setLockCloseOnBlur={setLockCloseOnBlur}
onSubmenuChange={onSubmenuChange} onSubmenuChange={onSubmenuChange}
/> />
)} )}

View File

@@ -186,8 +186,7 @@ export class NotesState {
} }
async setTrashSelectedNotes( async setTrashSelectedNotes(
trashed: boolean, trashed: boolean
trashButtonRef: RefObject<HTMLButtonElement>
): Promise<void> { ): Promise<void> {
if (trashed) { if (trashed) {
const notesDeleted = await this.deleteNotes(false); const notesDeleted = await this.deleteNotes(false);
@@ -196,8 +195,6 @@ export class NotesState {
this.selectedNotes = {}; this.selectedNotes = {};
this.contextMenuOpen = false; this.contextMenuOpen = false;
}); });
} else {
trashButtonRef.current?.focus();
} }
} else { } else {
this.application.changeItems<NoteMutator>( this.application.changeItems<NoteMutator>(