Used query fields for record table and record board (#4857)

- Added two hooks for computing query keys for index table and index
board.
- Using query keys for findManyRecords on index table and index board
This commit is contained in:
Lucas Bordeau
2024-04-05 20:30:16 +02:00
committed by GitHub
parent a95972f808
commit a3184dcc2f
7 changed files with 109 additions and 8 deletions

View File

@ -0,0 +1,20 @@
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
export const getObjectMetadataIdentifierFields = ({
objectMetadataItem,
}: {
objectMetadataItem: ObjectMetadataItem;
}) => {
const labelIdentifierFieldMetadataItem =
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
const imageIdentifierFieldMetadataItem = objectMetadataItem.fields.find(
(field) => field.id === objectMetadataItem.imageIdentifierFieldMetadataId,
);
return {
labelIdentifierFieldMetadataItem,
imageIdentifierFieldMetadataItem,
};
};

View File

@ -2,7 +2,7 @@ import styled from '@emotion/styled';
import { useRecoilCallback, useRecoilState, useSetRecoilState } from 'recoil';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
import { useObjectNameSingularFromPlural } from '@/object-metadata/hooks/useObjectNameSingularFromPlural';
import { RecordIndexBoardContainer } from '@/object-record/record-index/components/RecordIndexBoardContainer';
import { RecordIndexBoardContainerEffect } from '@/object-record/record-index/components/RecordIndexBoardContainerEffect';
@ -53,7 +53,7 @@ export const RecordIndexContainer = ({
objectNamePlural,
});
const { objectMetadataItem } = useObjectMetadataItem({
const { objectMetadataItem } = useObjectMetadataItemOnly({
objectNameSingular,
});

View File

@ -2,7 +2,7 @@ import { useEffect } from 'react';
import { useRecoilValue } from 'recoil';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
import { useRecordActionBar } from '@/object-record/record-action-bar/hooks/useRecordActionBar';
import { useHandleToggleColumnFilter } from '@/object-record/record-index/hooks/useHandleToggleColumnFilter';
import { useHandleToggleColumnSort } from '@/object-record/record-index/hooks/useHandleToggleColumnSort';
@ -31,7 +31,7 @@ export const RecordIndexTableContainerEffect = ({
recordTableId,
});
const { objectMetadataItem } = useObjectMetadataItem({
const { objectMetadataItem } = useObjectMetadataItemOnly({
objectNameSingular,
});

View File

@ -1,11 +1,12 @@
import { useEffect } from 'react';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
import { useRecordBoard } from '@/object-record/record-board/hooks/useRecordBoard';
import { turnObjectDropdownFilterIntoQueryFilter } from '@/object-record/record-filter/utils/turnObjectDropdownFilterIntoQueryFilter';
import { useRecordBoardQueryFields } from '@/object-record/record-index/hooks/useRecordBoardQueryFields';
import { recordIndexFieldDefinitionsState } from '@/object-record/record-index/states/recordIndexFieldDefinitionsState';
import { recordIndexFiltersState } from '@/object-record/record-index/states/recordIndexFiltersState';
import { recordIndexIsCompactModeActiveState } from '@/object-record/record-index/states/recordIndexIsCompactModeActiveState';
@ -24,7 +25,7 @@ export const useLoadRecordIndexBoard = ({
viewBarId,
recordBoardId,
}: UseLoadRecordIndexBoardProps) => {
const { objectMetadataItem } = useObjectMetadataItem({
const { objectMetadataItem } = useObjectMetadataItemOnly({
objectNameSingular,
});
const {
@ -55,6 +56,11 @@ export const useLoadRecordIndexBoard = ({
recordIndexIsCompactModeActiveState,
);
const queryFields = useRecordBoardQueryFields({
objectMetadataItem,
recordBoardId,
});
const {
records,
totalCount,
@ -65,6 +71,7 @@ export const useLoadRecordIndexBoard = ({
objectNameSingular,
filter: requestFilters,
orderBy,
queryFields,
});
const { setRecordCountInCurrentView } =

View File

@ -1,10 +1,11 @@
import { useRecoilValue, useSetRecoilState } from 'recoil';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState.ts';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectMetadataItemOnly } from '@/object-metadata/hooks/useObjectMetadataItemOnly';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { turnSortsIntoOrderBy } from '@/object-record/object-sort-dropdown/utils/turnSortsIntoOrderBy';
import { turnObjectDropdownFilterIntoQueryFilter } from '@/object-record/record-filter/utils/turnObjectDropdownFilterIntoQueryFilter';
import { useRecordTableQueryFields } from '@/object-record/record-index/hooks/useRecordTableQueryFields';
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
import { useRecordTable } from '@/object-record/record-table/hooks/useRecordTable';
import { SIGN_IN_BACKGROUND_MOCK_COMPANIES } from '@/sign-in-background-mock/constants/SignInBackgroundMockCompanies';
@ -13,7 +14,7 @@ export const useFindManyParams = (
objectNameSingular: string,
recordTableId?: string,
) => {
const { objectMetadataItem } = useObjectMetadataItem({
const { objectMetadataItem } = useObjectMetadataItemOnly({
objectNameSingular,
});
@ -48,6 +49,8 @@ export const useLoadRecordIndexTable = (objectNameSingular: string) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const params = useFindManyParams(objectNameSingular);
const queryFields = useRecordTableQueryFields();
const {
records,
loading,
@ -56,6 +59,7 @@ export const useLoadRecordIndexTable = (objectNameSingular: string) => {
queryStateIdentifier,
} = useFindManyRecords({
...params,
queryFields,
onCompleted: () => {
setLastRowVisible(false);
setIsRecordTableInitialLoading(false);

View File

@ -0,0 +1,52 @@
import { useRecoilValue } from 'recoil';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { getObjectMetadataIdentifierFields } from '@/object-metadata/utils/getObjectMetadataIdentifierFields';
import { useRecordBoardStates } from '@/object-record/record-board/hooks/internal/useRecordBoardStates';
import { isDefined } from '~/utils/isDefined';
export const useRecordBoardQueryFields = ({
objectMetadataItem,
recordBoardId,
}: {
recordBoardId: string;
objectMetadataItem: ObjectMetadataItem;
}) => {
const { kanbanFieldMetadataNameState, visibleFieldDefinitionsState } =
useRecordBoardStates(recordBoardId);
const { imageIdentifierFieldMetadataItem, labelIdentifierFieldMetadataItem } =
getObjectMetadataIdentifierFields({ objectMetadataItem });
const kanbanFieldMetadataName = useRecoilValue(kanbanFieldMetadataNameState);
const visibleFieldDefinitions = useRecoilValue(
visibleFieldDefinitionsState(),
);
const identifierQueryFields: Record<string, boolean> = {};
if (isDefined(labelIdentifierFieldMetadataItem)) {
identifierQueryFields[labelIdentifierFieldMetadataItem.name] = true;
}
if (isDefined(imageIdentifierFieldMetadataItem)) {
identifierQueryFields[imageIdentifierFieldMetadataItem.name] = true;
}
const queryFields: Record<string, any> = {
id: true,
...Object.fromEntries(
visibleFieldDefinitions.map((visibleFieldDefinition) => [
visibleFieldDefinition.metadata.fieldName,
true,
]),
),
...identifierQueryFields,
};
if (isDefined(kanbanFieldMetadataName)) {
queryFields[kanbanFieldMetadataName] = true;
}
return queryFields;
};

View File

@ -0,0 +1,18 @@
import { useRecoilValue } from 'recoil';
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
export const useRecordTableQueryFields = () => {
const { visibleTableColumnsSelector } = useRecordTableStates();
const visibleTableColumns = useRecoilValue(visibleTableColumnsSelector());
const queryFields: Record<string, any> = {
id: true,
...Object.fromEntries(
visibleTableColumns.map((column) => [column.metadata.fieldName, true]),
),
};
return queryFields;
};