Fix table focus taking over auth and filter and sort (#478)

This commit is contained in:
Charles Bochet
2023-06-30 00:24:06 +03:00
committed by GitHub
parent 30fd3320b7
commit 74ea2718ca
5 changed files with 35 additions and 4 deletions

View File

@ -167,7 +167,7 @@ function DropdownButton({
const onButtonClick = () => { const onButtonClick = () => {
setIsUnfolded && setIsUnfolded(!isUnfolded); setIsUnfolded && setIsUnfolded(!isUnfolded);
setCaptureHotkeyTypeInFocus(!isUnfolded); setCaptureHotkeyTypeInFocus((isPreviousUnfolded) => !isPreviousUnfolded);
}; };
const onOutsideClick = () => { const onOutsideClick = () => {

View File

@ -1,5 +1,6 @@
import { ChangeEvent, useCallback, useState } from 'react'; import { ChangeEvent, useCallback, useState } from 'react';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { useRecoilState } from 'recoil';
import { import {
FilterableFieldsType, FilterableFieldsType,
@ -7,6 +8,7 @@ import {
FilterOperandType, FilterOperandType,
SelectedFilterType, SelectedFilterType,
} from '@/filters-and-sorts/interfaces/filters/interface'; } from '@/filters-and-sorts/interfaces/filters/interface';
import { captureHotkeyTypeInFocusState } from '@/hotkeys/states/captureHotkeyTypeInFocusState';
import { SearchResultsType, useSearch } from '@/search/services/search'; import { SearchResultsType, useSearch } from '@/search/services/search';
import { humanReadableDate } from '@/utils/utils'; import { humanReadableDate } from '@/utils/utils';
@ -31,6 +33,9 @@ export const FilterDropdownButton = <TData extends FilterableFieldsType>({
onFilterRemove, onFilterRemove,
}: OwnProps<TData>) => { }: OwnProps<TData>) => {
const [isUnfolded, setIsUnfolded] = useState(false); const [isUnfolded, setIsUnfolded] = useState(false);
const [, setCaptureHotkeyTypeInFocus] = useRecoilState(
captureHotkeyTypeInFocusState,
);
const [selectedEntityId, setSelectedEntityId] = useState<string | null>(null); const [selectedEntityId, setSelectedEntityId] = useState<string | null>(null);
@ -127,6 +132,7 @@ export const FilterDropdownButton = <TData extends FilterableFieldsType>({
operand: selectedFilterOperand, operand: selectedFilterOperand,
}); });
setIsUnfolded(false); setIsUnfolded(false);
setCaptureHotkeyTypeInFocus(false);
setSelectedFilter(undefined); setSelectedFilter(undefined);
}} }}
> >

View File

@ -1,9 +1,11 @@
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { useRecoilState } from 'recoil';
import { import {
SelectedSortType, SelectedSortType,
SortType, SortType,
} from '@/filters-and-sorts/interfaces/sorts/interface'; } from '@/filters-and-sorts/interfaces/sorts/interface';
import { captureHotkeyTypeInFocusState } from '@/hotkeys/states/captureHotkeyTypeInFocusState';
import DropdownButton from './DropdownButton'; import DropdownButton from './DropdownButton';
@ -21,6 +23,9 @@ export function SortDropdownButton<SortField>({
onSortSelect, onSortSelect,
}: OwnProps<SortField>) { }: OwnProps<SortField>) {
const [isUnfolded, setIsUnfolded] = useState(false); const [isUnfolded, setIsUnfolded] = useState(false);
const [, setCaptureHotkeyTypeInFocus] = useRecoilState(
captureHotkeyTypeInFocusState,
);
const [isOptionUnfolded, setIsOptionUnfolded] = useState(false); const [isOptionUnfolded, setIsOptionUnfolded] = useState(false);
@ -36,8 +41,9 @@ export function SortDropdownButton<SortField>({
const resetState = useCallback(() => { const resetState = useCallback(() => {
setIsOptionUnfolded(false); setIsOptionUnfolded(false);
setCaptureHotkeyTypeInFocus(false);
setSelectedSortDirection('asc'); setSelectedSortDirection('asc');
}, []); }, [setCaptureHotkeyTypeInFocus]);
return ( return (
<DropdownButton <DropdownButton
@ -53,6 +59,7 @@ export function SortDropdownButton<SortField>({
key={index} key={index}
onClick={() => { onClick={() => {
setSelectedSortDirection(option); setSelectedSortDirection(option);
setCaptureHotkeyTypeInFocus(false);
setIsOptionUnfolded(false); setIsOptionUnfolded(false);
}} }}
> >
@ -73,6 +80,7 @@ export function SortDropdownButton<SortField>({
key={index + 1} key={index + 1}
onClick={() => { onClick={() => {
setIsUnfolded(false); setIsUnfolded(false);
setCaptureHotkeyTypeInFocus(false);
onSortItemSelect(sort); onSortItemSelect(sort);
}} }}
> >

View File

@ -12,6 +12,7 @@ import { Modal } from '@/auth/components/ui/Modal';
import { Title } from '@/auth/components/ui/Title'; import { Title } from '@/auth/components/ui/Title';
import { authFlowUserEmailState } from '@/auth/states/authFlowUserEmailState'; import { authFlowUserEmailState } from '@/auth/states/authFlowUserEmailState';
import { isMockModeState } from '@/auth/states/isMockModeState'; import { isMockModeState } from '@/auth/states/isMockModeState';
import { captureHotkeyTypeInFocusState } from '@/hotkeys/states/captureHotkeyTypeInFocusState';
import { PrimaryButton } from '@/ui/components/buttons/PrimaryButton'; import { PrimaryButton } from '@/ui/components/buttons/PrimaryButton';
import { SecondaryButton } from '@/ui/components/buttons/SecondaryButton'; import { SecondaryButton } from '@/ui/components/buttons/SecondaryButton';
import { TextInput } from '@/ui/components/inputs/TextInput'; import { TextInput } from '@/ui/components/inputs/TextInput';
@ -25,6 +26,9 @@ const StyledContentContainer = styled.div`
`; `;
export function Index() { export function Index() {
const [, setCaptureHotkeyTypeInFocus] = useRecoilState(
captureHotkeyTypeInFocusState,
);
const navigate = useNavigate(); const navigate = useNavigate();
const theme = useTheme(); const theme = useTheme();
const [, setMockMode] = useRecoilState(isMockModeState); const [, setMockMode] = useRecoilState(isMockModeState);
@ -55,7 +59,8 @@ export function Index() {
useEffect(() => { useEffect(() => {
setMockMode(true); setMockMode(true);
}, [navigate, setMockMode]); setCaptureHotkeyTypeInFocus(true);
}, [navigate, setMockMode, setCaptureHotkeyTypeInFocus]);
return ( return (
<> <>

View File

@ -12,6 +12,7 @@ import { Title } from '@/auth/components/ui/Title';
import { useAuth } from '@/auth/hooks/useAuth'; import { useAuth } from '@/auth/hooks/useAuth';
import { authFlowUserEmailState } from '@/auth/states/authFlowUserEmailState'; import { authFlowUserEmailState } from '@/auth/states/authFlowUserEmailState';
import { isMockModeState } from '@/auth/states/isMockModeState'; import { isMockModeState } from '@/auth/states/isMockModeState';
import { captureHotkeyTypeInFocusState } from '@/hotkeys/states/captureHotkeyTypeInFocusState';
import { PrimaryButton } from '@/ui/components/buttons/PrimaryButton'; import { PrimaryButton } from '@/ui/components/buttons/PrimaryButton';
import { TextInput } from '@/ui/components/inputs/TextInput'; import { TextInput } from '@/ui/components/inputs/TextInput';
import { Companies } from '~/pages/companies/Companies'; import { Companies } from '~/pages/companies/Companies';
@ -37,6 +38,9 @@ const StyledErrorContainer = styled.div`
export function PasswordLogin() { export function PasswordLogin() {
const navigate = useNavigate(); const navigate = useNavigate();
const [, setMockMode] = useRecoilState(isMockModeState); const [, setMockMode] = useRecoilState(isMockModeState);
const [, setCaptureHotkeyTypeInFocus] = useRecoilState(
captureHotkeyTypeInFocusState,
);
const prefillPassword = const prefillPassword =
process.env.NODE_ENV === 'development' ? 'applecar2025' : ''; process.env.NODE_ENV === 'development' ? 'applecar2025' : '';
@ -53,11 +57,19 @@ export function PasswordLogin() {
try { try {
await login(authFlowUserEmail, internalPassword); await login(authFlowUserEmail, internalPassword);
setMockMode(false); setMockMode(false);
setCaptureHotkeyTypeInFocus(false);
navigate('/'); navigate('/');
} catch (err: any) { } catch (err: any) {
setFormError(err.message); setFormError(err.message);
} }
}, [authFlowUserEmail, internalPassword, login, navigate, setMockMode]); }, [
authFlowUserEmail,
internalPassword,
login,
navigate,
setMockMode,
setCaptureHotkeyTypeInFocus,
]);
useHotkeys( useHotkeys(
'enter', 'enter',