Fix of board request fix PR (#5829)

Fix again board requests as first merged PR appears to have missing
commits / code. https://github.com/twentyhq/twenty/pull/5819
This commit is contained in:
Lucas Bordeau
2024-06-11 22:30:38 +02:00
committed by GitHub
parent a57e251208
commit 7d068095cd
9 changed files with 85 additions and 29 deletions

View File

@ -240,5 +240,6 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
error, error,
fetchMoreRecords, fetchMoreRecords,
queryStateIdentifier: findManyQueryStateIdentifier, queryStateIdentifier: findManyQueryStateIdentifier,
hasNextPage,
}; };
}; };

View File

@ -3,6 +3,7 @@ import { isFirstRecordBoardColumnComponentFamilyState } from '@/object-record/re
import { isLastRecordBoardColumnComponentFamilyState } from '@/object-record/record-board/states/isLastRecordBoardColumnComponentFamilyState'; import { isLastRecordBoardColumnComponentFamilyState } from '@/object-record/record-board/states/isLastRecordBoardColumnComponentFamilyState';
import { isRecordBoardCardSelectedComponentFamilyState } from '@/object-record/record-board/states/isRecordBoardCardSelectedComponentFamilyState'; import { isRecordBoardCardSelectedComponentFamilyState } from '@/object-record/record-board/states/isRecordBoardCardSelectedComponentFamilyState';
import { isRecordBoardCompactModeActiveComponentState } from '@/object-record/record-board/states/isRecordBoardCompactModeActiveComponentState'; import { isRecordBoardCompactModeActiveComponentState } from '@/object-record/record-board/states/isRecordBoardCompactModeActiveComponentState';
import { isRecordBoardFetchingRecordsByColumnFamilyState } from '@/object-record/record-board/states/isRecordBoardFetchingRecordsByColumnFamilyState';
import { isRecordBoardFetchingRecordsComponentState } from '@/object-record/record-board/states/isRecordBoardFetchingRecordsComponentState'; import { isRecordBoardFetchingRecordsComponentState } from '@/object-record/record-board/states/isRecordBoardFetchingRecordsComponentState';
import { recordBoardColumnIdsComponentState } from '@/object-record/record-board/states/recordBoardColumnIdsComponentState'; import { recordBoardColumnIdsComponentState } from '@/object-record/record-board/states/recordBoardColumnIdsComponentState';
import { recordBoardFieldDefinitionsComponentState } from '@/object-record/record-board/states/recordBoardFieldDefinitionsComponentState'; import { recordBoardFieldDefinitionsComponentState } from '@/object-record/record-board/states/recordBoardFieldDefinitionsComponentState';
@ -42,6 +43,10 @@ export const useRecordBoardStates = (recordBoardId?: string) => {
isRecordBoardFetchingRecordsComponentState, isRecordBoardFetchingRecordsComponentState,
scopeId, scopeId,
), ),
isFetchingRecordsByColumnState: extractComponentFamilyState(
isRecordBoardFetchingRecordsByColumnFamilyState,
scopeId,
),
columnIdsState: extractComponentState( columnIdsState: extractComponentState(
recordBoardColumnIdsComponentState, recordBoardColumnIdsComponentState,
scopeId, scopeId,

View File

@ -14,6 +14,7 @@ export const useRecordBoard = (recordBoardId?: string) => {
isCompactModeActiveState, isCompactModeActiveState,
kanbanFieldMetadataNameState, kanbanFieldMetadataNameState,
shouldFetchMoreSelector, shouldFetchMoreSelector,
isFetchingRecordsByColumnState,
} = useRecordBoardStates(recordBoardId); } = useRecordBoardStates(recordBoardId);
const { setColumns } = useSetRecordBoardColumns(recordBoardId); const { setColumns } = useSetRecordBoardColumns(recordBoardId);
@ -37,5 +38,6 @@ export const useRecordBoard = (recordBoardId?: string) => {
isCompactModeActiveState, isCompactModeActiveState,
shouldFetchMoreSelector, shouldFetchMoreSelector,
setRecordIdsForColumn, setRecordIdsForColumn,
isFetchingRecordsByColumnState,
}; };
}; };

View File

@ -23,7 +23,6 @@ import { Checkbox, CheckboxVariant } from '@/ui/input/components/Checkbox';
import { contextMenuIsOpenState } from '@/ui/navigation/context-menu/states/contextMenuIsOpenState'; import { contextMenuIsOpenState } from '@/ui/navigation/context-menu/states/contextMenuIsOpenState';
import { contextMenuPositionState } from '@/ui/navigation/context-menu/states/contextMenuPositionState'; import { contextMenuPositionState } from '@/ui/navigation/context-menu/states/contextMenuPositionState';
import { AnimatedEaseInOut } from '@/ui/utilities/animation/components/AnimatedEaseInOut'; import { AnimatedEaseInOut } from '@/ui/utilities/animation/components/AnimatedEaseInOut';
import { useDragSelect } from '@/ui/utilities/drag-select/hooks/useDragSelect';
import { ScrollWrapperContext } from '@/ui/utilities/scroll/components/ScrollWrapper'; import { ScrollWrapperContext } from '@/ui/utilities/scroll/components/ScrollWrapper';
const StyledBoardCard = styled.div<{ selected: boolean }>` const StyledBoardCard = styled.div<{ selected: boolean }>`
@ -200,7 +199,6 @@ export const RecordBoardCard = () => {
}; };
const scrollWrapperRef = useContext(ScrollWrapperContext); const scrollWrapperRef = useContext(ScrollWrapperContext);
const { isDragSelectionStartEnabled } = useDragSelect();
const { ref: cardRef, inView } = useInView({ const { ref: cardRef, inView } = useInView({
root: scrollWrapperRef.current, root: scrollWrapperRef.current,
@ -280,7 +278,7 @@ export const RecordBoardCard = () => {
hotkeyScope: InlineCellHotkeyScope.InlineCell, hotkeyScope: InlineCellHotkeyScope.InlineCell,
}} }}
> >
{inView || isDragSelectionStartEnabled() ? ( {inView ? (
<RecordInlineCell /> <RecordInlineCell />
) : ( ) : (
<StyledRecordInlineCellPlaceholder /> <StyledRecordInlineCellPlaceholder />

View File

@ -19,9 +19,12 @@ const StyledText = styled.div`
export const RecordBoardColumnFetchMoreLoader = () => { export const RecordBoardColumnFetchMoreLoader = () => {
const { columnDefinition } = useContext(RecordBoardColumnContext); const { columnDefinition } = useContext(RecordBoardColumnContext);
const { isFetchingRecordState, shouldFetchMoreInColumnFamilyState } = const { shouldFetchMoreInColumnFamilyState, isFetchingRecordsByColumnState } =
useRecordBoardStates(); useRecordBoardStates();
const isFetchingRecord = useRecoilValue(isFetchingRecordState);
const isFetchingRecord = useRecoilValue(
isFetchingRecordsByColumnState({ columnId: columnDefinition.id }),
);
const setShouldFetchMore = useSetRecoilState( const setShouldFetchMore = useSetRecoilState(
shouldFetchMoreInColumnFamilyState(columnDefinition.id), shouldFetchMoreInColumnFamilyState(columnDefinition.id),

View File

@ -0,0 +1,7 @@
import { createComponentFamilyState } from '@/ui/utilities/state/component-state/utils/createComponentFamilyState';
export const isRecordBoardFetchingRecordsByColumnFamilyState =
createComponentFamilyState<boolean, { columnId: string }>({
key: 'isRecordBoardFetchingRecordsByColumnFamilyState',
defaultValue: false,
});

View File

@ -1,8 +1,10 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
import { useRecoilValue } from 'recoil'; import { useRecoilState } from 'recoil';
import { useRecordBoard } from '@/object-record/record-board/hooks/useRecordBoard'; import { isRecordBoardFetchingRecordsByColumnFamilyState } from '@/object-record/record-board/states/isRecordBoardFetchingRecordsByColumnFamilyState';
import { recordBoardShouldFetchMoreInColumnComponentFamilyState } from '@/object-record/record-board/states/recordBoardShouldFetchMoreInColumnComponentFamilyState';
import { useLoadRecordIndexBoardColumn } from '@/object-record/record-index/hooks/useLoadRecordIndexBoardColumn'; import { useLoadRecordIndexBoardColumn } from '@/object-record/record-index/hooks/useLoadRecordIndexBoardColumn';
import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/getScopeIdFromComponentId';
export const RecordIndexBoardColumnLoaderEffect = ({ export const RecordIndexBoardColumnLoaderEffect = ({
objectNameSingular, objectNameSingular,
@ -17,23 +19,54 @@ export const RecordIndexBoardColumnLoaderEffect = ({
boardFieldMetadataId: string | null; boardFieldMetadataId: string | null;
columnId: string; columnId: string;
}) => { }) => {
const { shouldFetchMoreSelector } = useRecordBoard(recordBoardId); const [shouldFetchMore, setShouldFetchMore] = useRecoilState(
recordBoardShouldFetchMoreInColumnComponentFamilyState({
scopeId: getScopeIdFromComponentId(recordBoardId),
familyKey: columnId,
}),
);
const shouldFetchMore = useRecoilValue(shouldFetchMoreSelector()); const [loadingRecordsForThisColumn, setLoadingRecordsForThisColumn] =
useRecoilState(
isRecordBoardFetchingRecordsByColumnFamilyState({
scopeId: getScopeIdFromComponentId(recordBoardId),
familyKey: { columnId },
}),
);
const { fetchMoreRecords, loading } = useLoadRecordIndexBoardColumn({ const { fetchMoreRecords, loading, hasNextPage } =
objectNameSingular, useLoadRecordIndexBoardColumn({
recordBoardId, objectNameSingular,
boardFieldMetadataId, recordBoardId,
columnFieldSelectValue: boardFieldSelectValue, boardFieldMetadataId,
columnId, columnFieldSelectValue: boardFieldSelectValue,
}); columnId,
});
useEffect(() => { useEffect(() => {
if (!loading && shouldFetchMore) { const run = async () => {
fetchMoreRecords?.(); if (!loading && shouldFetchMore && hasNextPage) {
} setLoadingRecordsForThisColumn(true);
}, [fetchMoreRecords, loading, shouldFetchMore, boardFieldSelectValue]); setShouldFetchMore(false);
await fetchMoreRecords?.();
setLoadingRecordsForThisColumn(false);
}
};
run();
}, [
setShouldFetchMore,
fetchMoreRecords,
loading,
shouldFetchMore,
boardFieldSelectValue,
setLoadingRecordsForThisColumn,
loadingRecordsForThisColumn,
hasNextPage,
]);
return <></>; return <></>;
}; };

View File

@ -56,13 +56,19 @@ export const useLoadRecordIndexBoardColumn = ({
}, },
}; };
const { records, loading, fetchMoreRecords, queryStateIdentifier } = const {
useFindManyRecords({ records,
objectNameSingular, loading,
filter, fetchMoreRecords,
orderBy, queryStateIdentifier,
recordGqlFields, hasNextPage,
}); } = useFindManyRecords({
objectNameSingular,
filter,
orderBy,
recordGqlFields,
limit: 10,
});
useEffect(() => { useEffect(() => {
setRecordIdsForColumn(columnId, records); setRecordIdsForColumn(columnId, records);
@ -77,5 +83,6 @@ export const useLoadRecordIndexBoardColumn = ({
loading, loading,
fetchMoreRecords, fetchMoreRecords,
queryStateIdentifier, queryStateIdentifier,
hasNextPage,
}; };
}; };

View File

@ -7,7 +7,7 @@ export const useSetRecordInStore = () => {
const setRecords = useRecoilCallback( const setRecords = useRecoilCallback(
({ set, snapshot }) => ({ set, snapshot }) =>
(records: ObjectRecord[]) => { (records: ObjectRecord[]) => {
records.forEach((record) => { for (const record of records) {
const currentRecord = snapshot const currentRecord = snapshot
.getLoadable(recordStoreFamilyState(record.id)) .getLoadable(recordStoreFamilyState(record.id))
.getValue(); .getValue();
@ -15,7 +15,7 @@ export const useSetRecordInStore = () => {
if (JSON.stringify(currentRecord) !== JSON.stringify(record)) { if (JSON.stringify(currentRecord) !== JSON.stringify(record)) {
set(recordStoreFamilyState(record.id), record); set(recordStoreFamilyState(record.id), record);
} }
}); }
}, },
[], [],
); );