Fix/debounce company card onchange (#580)
* Add internal state and debounce for editable text card * Use debounce for date fields too * Update refetch * Nit
This commit is contained in:
@ -83,7 +83,7 @@ export function Board({
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setBoardItems(initialItems);
|
setBoardItems(initialItems);
|
||||||
}, [initialItems, setBoardItems]);
|
}, [initialItems, setBoardItems, boardItems]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isInitialBoardLoaded) return;
|
if (isInitialBoardLoaded) return;
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
import { getOperationName } from '@apollo/client/utilities';
|
||||||
import { useRecoilState } from 'recoil';
|
import { useRecoilState } from 'recoil';
|
||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
|
||||||
@ -13,6 +14,7 @@ import {
|
|||||||
useCreateOnePipelineProgressMutation,
|
useCreateOnePipelineProgressMutation,
|
||||||
} from '~/generated/graphql';
|
} from '~/generated/graphql';
|
||||||
|
|
||||||
|
import { GET_PIPELINES } from '../queries';
|
||||||
import { boardColumnsState } from '../states/boardColumnsState';
|
import { boardColumnsState } from '../states/boardColumnsState';
|
||||||
import { boardItemsState } from '../states/boardItemsState';
|
import { boardItemsState } from '../states/boardItemsState';
|
||||||
|
|
||||||
@ -28,7 +30,9 @@ export function NewButton({ pipelineId, columnId }: OwnProps) {
|
|||||||
const [board, setBoard] = useRecoilState(boardColumnsState);
|
const [board, setBoard] = useRecoilState(boardColumnsState);
|
||||||
const [boardItems, setBoardItems] = useRecoilState(boardItemsState);
|
const [boardItems, setBoardItems] = useRecoilState(boardItemsState);
|
||||||
|
|
||||||
const [createOnePipelineProgress] = useCreateOnePipelineProgressMutation();
|
const [createOnePipelineProgress] = useCreateOnePipelineProgressMutation({
|
||||||
|
refetchQueries: [getOperationName(GET_PIPELINES) ?? ''],
|
||||||
|
});
|
||||||
const onEntitySelect = useCallback(
|
const onEntitySelect = useCallback(
|
||||||
async (company: Pick<Company, 'id' | 'name' | 'domainName'>) => {
|
async (company: Pick<Company, 'id' | 'name' | 'domainName'>) => {
|
||||||
setIsCreatingCard(false);
|
setIsCreatingCard(false);
|
||||||
|
|||||||
@ -21,6 +21,7 @@ type Items = { [key: string]: Item };
|
|||||||
export function useBoard(pipelineId: string) {
|
export function useBoard(pipelineId: string) {
|
||||||
const pipelines = useGetPipelinesQuery({
|
const pipelines = useGetPipelinesQuery({
|
||||||
variables: { where: { id: { equals: pipelineId } } },
|
variables: { where: { id: { equals: pipelineId } } },
|
||||||
|
skip: pipelineId === '',
|
||||||
});
|
});
|
||||||
const pipelineStages = pipelines.data?.findManyPipeline[0]?.pipelineStages;
|
const pipelineStages = pipelines.data?.findManyPipeline[0]?.pipelineStages;
|
||||||
const orderedPipelineStages = pipelineStages
|
const orderedPipelineStages = pipelineStages
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
|
import { useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { BoardCardEditableField } from '@/ui/board-card-field/components/BoardCardEditableField';
|
import { BoardCardEditableField } from '@/ui/board-card-field/components/BoardCardEditableField';
|
||||||
import { InplaceInputDateDisplayMode } from '@/ui/inplace-inputs/components/InplaceInputDateDisplayMode';
|
import { InplaceInputDateDisplayMode } from '@/ui/inplace-inputs/components/InplaceInputDateDisplayMode';
|
||||||
|
import { debounce } from '@/utils/debounce';
|
||||||
|
|
||||||
import { BoardCardEditableFieldDateEditMode } from './BoardCardEditableFieldDateEditMode';
|
import { BoardCardEditableFieldDateEditMode } from './BoardCardEditableFieldDateEditMode';
|
||||||
|
|
||||||
@ -14,11 +17,21 @@ export function BoardCardEditableFieldDate({
|
|||||||
onChange,
|
onChange,
|
||||||
editModeHorizontalAlign,
|
editModeHorizontalAlign,
|
||||||
}: OwnProps) {
|
}: OwnProps) {
|
||||||
|
const [internalValue, setInternalValue] = useState(value);
|
||||||
|
const debouncedOnChange = useMemo(() => {
|
||||||
|
return debounce(onChange, 200);
|
||||||
|
}, [onChange]);
|
||||||
return (
|
return (
|
||||||
<BoardCardEditableField
|
<BoardCardEditableField
|
||||||
editModeHorizontalAlign={editModeHorizontalAlign}
|
editModeHorizontalAlign={editModeHorizontalAlign}
|
||||||
editModeContent={
|
editModeContent={
|
||||||
<BoardCardEditableFieldDateEditMode value={value} onChange={onChange} />
|
<BoardCardEditableFieldDateEditMode
|
||||||
|
value={internalValue}
|
||||||
|
onChange={(date: Date) => {
|
||||||
|
setInternalValue(date);
|
||||||
|
debouncedOnChange(date);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
}
|
}
|
||||||
nonEditModeContent={<InplaceInputDateDisplayMode value={value} />}
|
nonEditModeContent={<InplaceInputDateDisplayMode value={value} />}
|
||||||
></BoardCardEditableField>
|
></BoardCardEditableField>
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
import { ChangeEvent } from 'react';
|
import { ChangeEvent, useMemo, useState } from 'react';
|
||||||
|
|
||||||
import { BoardCardEditableField } from '@/ui/board-card-field/components/BoardCardEditableField';
|
import { BoardCardEditableField } from '@/ui/board-card-field/components/BoardCardEditableField';
|
||||||
import { InplaceInputTextDisplayMode } from '@/ui/inplace-inputs/components/InplaceInputTextDisplayMode';
|
import { InplaceInputTextDisplayMode } from '@/ui/inplace-inputs/components/InplaceInputTextDisplayMode';
|
||||||
import { InplaceInputTextEditMode } from '@/ui/inplace-inputs/components/InplaceInputTextEditMode';
|
import { InplaceInputTextEditMode } from '@/ui/inplace-inputs/components/InplaceInputTextEditMode';
|
||||||
|
import { debounce } from '@/utils/debounce';
|
||||||
|
|
||||||
type OwnProps = {
|
type OwnProps = {
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
@ -17,6 +18,10 @@ export function BoardCardEditableFieldText({
|
|||||||
onChange,
|
onChange,
|
||||||
editModeHorizontalAlign,
|
editModeHorizontalAlign,
|
||||||
}: OwnProps) {
|
}: OwnProps) {
|
||||||
|
const [internalValue, setInternalValue] = useState(value);
|
||||||
|
const debouncedOnChange = useMemo(() => {
|
||||||
|
return debounce(onChange, 200);
|
||||||
|
}, [onChange]);
|
||||||
return (
|
return (
|
||||||
<BoardCardEditableField
|
<BoardCardEditableField
|
||||||
editModeHorizontalAlign={editModeHorizontalAlign}
|
editModeHorizontalAlign={editModeHorizontalAlign}
|
||||||
@ -24,9 +29,10 @@ export function BoardCardEditableFieldText({
|
|||||||
<InplaceInputTextEditMode
|
<InplaceInputTextEditMode
|
||||||
placeholder={placeholder || ''}
|
placeholder={placeholder || ''}
|
||||||
autoFocus
|
autoFocus
|
||||||
value={value}
|
value={internalValue}
|
||||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||||
onChange(event.target.value);
|
setInternalValue(event.target.value);
|
||||||
|
debouncedOnChange(event.target.value);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user