fix: empty state should not appear during table loading (#3040)
* fix: empty state should not appear during table loading * feat: add initla load tracking * Fix lint --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -6,6 +6,7 @@ import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObje
|
|||||||
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
|
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
|
||||||
import { useRecordTableScopedStates } from '@/object-record/record-table/hooks/internal/useRecordTableScopedStates';
|
import { useRecordTableScopedStates } from '@/object-record/record-table/hooks/internal/useRecordTableScopedStates';
|
||||||
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
|
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
|
||||||
|
import { isRecordTableInitialLoadingState } from '@/object-record/record-table/states/isRecordTableInitialLoadingState';
|
||||||
import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause';
|
import { turnFiltersIntoObjectRecordFilters } from '@/object-record/utils/turnFiltersIntoWhereClause';
|
||||||
import { signInBackgroundMockCompanies } from '@/sign-in-background-mock/constants/signInBackgroundMockCompanies';
|
import { signInBackgroundMockCompanies } from '@/sign-in-background-mock/constants/signInBackgroundMockCompanies';
|
||||||
|
|
||||||
@ -41,6 +42,10 @@ export const useObjectRecordTable = () => {
|
|||||||
foundObjectMetadataItem?.fields ?? [],
|
foundObjectMetadataItem?.fields ?? [],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const setIsRecordTableInitialLoading = useSetRecoilState(
|
||||||
|
isRecordTableInitialLoadingState,
|
||||||
|
);
|
||||||
|
|
||||||
const { records, loading, fetchMoreRecords, queryStateIdentifier } =
|
const { records, loading, fetchMoreRecords, queryStateIdentifier } =
|
||||||
useFindManyRecords({
|
useFindManyRecords({
|
||||||
objectNameSingular,
|
objectNameSingular,
|
||||||
@ -48,6 +53,7 @@ export const useObjectRecordTable = () => {
|
|||||||
orderBy,
|
orderBy,
|
||||||
onCompleted: () => {
|
onCompleted: () => {
|
||||||
setLastRowVisible(false);
|
setLastRowVisible(false);
|
||||||
|
setIsRecordTableInitialLoading(false);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { useRecoilCallback, useRecoilValue } from 'recoil';
|
|||||||
|
|
||||||
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
|
||||||
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
|
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
|
||||||
|
import { isRecordTableInitialLoadingState } from '@/object-record/record-table/states/isRecordTableInitialLoadingState';
|
||||||
import { IconPlus } from '@/ui/display/icon';
|
import { IconPlus } from '@/ui/display/icon';
|
||||||
import { Button } from '@/ui/input/button/components/Button';
|
import { Button } from '@/ui/input/button/components/Button';
|
||||||
import { DragSelect } from '@/ui/utilities/drag-select/components/DragSelect';
|
import { DragSelect } from '@/ui/utilities/drag-select/components/DragSelect';
|
||||||
@ -126,6 +127,10 @@ export const RecordTable = ({
|
|||||||
|
|
||||||
const numberOfTableRows = useRecoilValue(numberOfTableRowsState);
|
const numberOfTableRows = useRecoilValue(numberOfTableRowsState);
|
||||||
|
|
||||||
|
const isRecordTableInitialLoading = useRecoilValue(
|
||||||
|
isRecordTableInitialLoadingState,
|
||||||
|
);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
scopeId: objectNamePlural,
|
scopeId: objectNamePlural,
|
||||||
resetTableRowSelection,
|
resetTableRowSelection,
|
||||||
@ -170,7 +175,7 @@ export const RecordTable = ({
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<RecordTableInternalEffect tableBodyRef={tableBodyRef} />
|
<RecordTableInternalEffect tableBodyRef={tableBodyRef} />
|
||||||
{numberOfTableRows === 0 && (
|
{!isRecordTableInitialLoading && numberOfTableRows === 0 && (
|
||||||
<StyledObjectEmptyContainer>
|
<StyledObjectEmptyContainer>
|
||||||
<StyledEmptyObjectTitle>
|
<StyledEmptyObjectTitle>
|
||||||
No {foundObjectMetadataItem?.namePlural}
|
No {foundObjectMetadataItem?.namePlural}
|
||||||
|
|||||||
@ -4,20 +4,11 @@ import { RecordTableBodyFetchMoreLoader } from '@/object-record/record-table/com
|
|||||||
import { RecordTableRow } from '@/object-record/record-table/components/RecordTableRow';
|
import { RecordTableRow } from '@/object-record/record-table/components/RecordTableRow';
|
||||||
import { RowIdContext } from '@/object-record/record-table/contexts/RowIdContext';
|
import { RowIdContext } from '@/object-record/record-table/contexts/RowIdContext';
|
||||||
import { RowIndexContext } from '@/object-record/record-table/contexts/RowIndexContext';
|
import { RowIndexContext } from '@/object-record/record-table/contexts/RowIndexContext';
|
||||||
import { isFetchingRecordTableDataState } from '@/object-record/record-table/states/isFetchingRecordTableDataState';
|
|
||||||
import { tableRowIdsState } from '@/object-record/record-table/states/tableRowIdsState';
|
import { tableRowIdsState } from '@/object-record/record-table/states/tableRowIdsState';
|
||||||
|
|
||||||
export const RecordTableBody = () => {
|
export const RecordTableBody = () => {
|
||||||
const tableRowIds = useRecoilValue(tableRowIdsState);
|
const tableRowIds = useRecoilValue(tableRowIdsState);
|
||||||
|
|
||||||
const isFetchingRecordTableData = useRecoilValue(
|
|
||||||
isFetchingRecordTableDataState,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (isFetchingRecordTableData) {
|
|
||||||
return <></>;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{tableRowIds.map((rowId, rowIndex) => (
|
{tableRowIds.map((rowId, rowIndex) => (
|
||||||
|
|||||||
@ -4,7 +4,6 @@ import { useRecoilCallback, useRecoilValue } from 'recoil';
|
|||||||
import { useObjectRecordTable } from '@/object-record/hooks/useObjectRecordTable';
|
import { useObjectRecordTable } from '@/object-record/hooks/useObjectRecordTable';
|
||||||
import { StyledRow } from '@/object-record/record-table/components/RecordTableRow';
|
import { StyledRow } from '@/object-record/record-table/components/RecordTableRow';
|
||||||
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
|
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
|
||||||
import { isFetchingRecordTableDataState } from '@/object-record/record-table/states/isFetchingRecordTableDataState';
|
|
||||||
import { getRecordTableScopedStates } from '@/object-record/record-table/utils/getRecordTableScopedStates';
|
import { getRecordTableScopedStates } from '@/object-record/record-table/utils/getRecordTableScopedStates';
|
||||||
import { isFetchingMoreRecordsFamilyState } from '@/object-record/states/isFetchingMoreRecordsFamilyState';
|
import { isFetchingMoreRecordsFamilyState } from '@/object-record/states/isFetchingMoreRecordsFamilyState';
|
||||||
|
|
||||||
@ -16,10 +15,6 @@ export const RecordTableBodyFetchMoreLoader = () => {
|
|||||||
isFetchingMoreRecordsFamilyState(queryStateIdentifier),
|
isFetchingMoreRecordsFamilyState(queryStateIdentifier),
|
||||||
);
|
);
|
||||||
|
|
||||||
const isFetchingRecordTableData = useRecoilValue(
|
|
||||||
isFetchingRecordTableDataState,
|
|
||||||
);
|
|
||||||
|
|
||||||
const onLastRowVisible = useRecoilCallback(
|
const onLastRowVisible = useRecoilCallback(
|
||||||
({ set }) =>
|
({ set }) =>
|
||||||
async (inView: boolean) => {
|
async (inView: boolean) => {
|
||||||
@ -35,10 +30,6 @@ export const RecordTableBodyFetchMoreLoader = () => {
|
|||||||
onChange: onLastRowVisible,
|
onChange: onLastRowVisible,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isFetchingRecordTableData) {
|
|
||||||
return <></>;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<tbody ref={tbodyRef}>
|
<tbody ref={tbodyRef}>
|
||||||
{isFetchingMoreObjects && (
|
{isFetchingMoreObjects && (
|
||||||
|
|||||||
@ -2,7 +2,6 @@ import { useRecoilCallback } from 'recoil';
|
|||||||
|
|
||||||
import { entityFieldsFamilyState } from '@/object-record/field/states/entityFieldsFamilyState';
|
import { entityFieldsFamilyState } from '@/object-record/field/states/entityFieldsFamilyState';
|
||||||
import { useResetTableRowSelection } from '@/object-record/record-table/hooks/internal/useResetTableRowSelection';
|
import { useResetTableRowSelection } from '@/object-record/record-table/hooks/internal/useResetTableRowSelection';
|
||||||
import { isFetchingRecordTableDataState } from '@/object-record/record-table/states/isFetchingRecordTableDataState';
|
|
||||||
import { numberOfTableRowsState } from '@/object-record/record-table/states/numberOfTableRowsState';
|
import { numberOfTableRowsState } from '@/object-record/record-table/states/numberOfTableRowsState';
|
||||||
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
||||||
|
|
||||||
@ -41,7 +40,6 @@ export const useSetRecordTableData = ({
|
|||||||
|
|
||||||
set(numberOfTableRowsState, entityIds.length);
|
set(numberOfTableRowsState, entityIds.length);
|
||||||
onEntityCountChange(entityIds.length);
|
onEntityCountChange(entityIds.length);
|
||||||
set(isFetchingRecordTableDataState, false);
|
|
||||||
},
|
},
|
||||||
[onEntityCountChange, resetTableRowSelection],
|
[onEntityCountChange, resetTableRowSelection],
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,6 +0,0 @@
|
|||||||
import { atom } from 'recoil';
|
|
||||||
|
|
||||||
export const isFetchingRecordTableDataState = atom<boolean>({
|
|
||||||
key: 'isFetchingRecordTableDataState',
|
|
||||||
default: true,
|
|
||||||
});
|
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
import { atom } from 'recoil';
|
||||||
|
|
||||||
|
export const isRecordTableInitialLoadingState = atom<boolean>({
|
||||||
|
key: 'isRecordTableInitialLoadingState',
|
||||||
|
default: true,
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user