Fix soft delete filter hook bug with actions (#10077)
This PR fixes a bug that happened when we open the command menu with multiple records selected. The problem was that the new useCheckIsSoftDeleteFilter hook depended on RecordIndexContext which can be undefined in the command menu context. Because our direction right now is not completely clear with RecordIndexContext and ContextStore, in this PR I just removed the dependency and used objectMetadataItems state directly so that the hook has no dependency anymore. Also renamed useFilterableFieldMetadataItems to useFilterableFieldMetadataItemsInRecordIndexContext.
This commit is contained in:
@ -1,7 +1,7 @@
|
|||||||
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
|
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
|
||||||
|
|
||||||
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
|
import { ObjectFilterDropdownComponentInstanceContext } from '@/object-record/object-filter-dropdown/states/contexts/ObjectFilterDropdownComponentInstanceContext';
|
||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
|
||||||
import { MultipleFiltersDropdownButton } from './MultipleFiltersDropdownButton';
|
import { MultipleFiltersDropdownButton } from './MultipleFiltersDropdownButton';
|
||||||
import { SingleEntityObjectFilterDropdownButton } from './SingleEntityObjectFilterDropdownButton';
|
import { SingleEntityObjectFilterDropdownButton } from './SingleEntityObjectFilterDropdownButton';
|
||||||
|
|
||||||
@ -14,7 +14,8 @@ export const ObjectFilterDropdownButton = ({
|
|||||||
filterDropdownId,
|
filterDropdownId,
|
||||||
hotkeyScope,
|
hotkeyScope,
|
||||||
}: ObjectFilterDropdownButtonProps) => {
|
}: ObjectFilterDropdownButtonProps) => {
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { filterableFieldMetadataItems } =
|
||||||
|
useFilterableFieldMetadataItemsInRecordIndexContext();
|
||||||
|
|
||||||
const hasOnlyOneEntityFilter =
|
const hasOnlyOneEntityFilter =
|
||||||
filterableFieldMetadataItems.length === 1 &&
|
filterableFieldMetadataItems.length === 1 &&
|
||||||
|
|||||||
@ -27,7 +27,7 @@ import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/uti
|
|||||||
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
|
import { advancedFilterViewFilterIdComponentState } from '@/object-record/object-filter-dropdown/states/advancedFilterViewFilterIdComponentState';
|
||||||
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
|
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
|
||||||
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
|
import { FiltersHotkeyScope } from '@/object-record/object-filter-dropdown/types/FiltersHotkeyScope';
|
||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
|
||||||
import { useLingui } from '@lingui/react/macro';
|
import { useLingui } from '@lingui/react/macro';
|
||||||
|
|
||||||
export const StyledInput = styled.input`
|
export const StyledInput = styled.input`
|
||||||
@ -81,7 +81,8 @@ export const ObjectFilterDropdownFilterSelect = ({
|
|||||||
advancedFilterViewFilterId,
|
advancedFilterViewFilterId,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { filterableFieldMetadataItems } =
|
||||||
|
useFilterableFieldMetadataItemsInRecordIndexContext();
|
||||||
|
|
||||||
const visibleTableColumns = useRecoilComponentValueV2(
|
const visibleTableColumns = useRecoilComponentValueV2(
|
||||||
visibleTableColumnsComponentSelector,
|
visibleTableColumnsComponentSelector,
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/uti
|
|||||||
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
|
import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/fieldMetadataItemIdUsedInDropdownComponentState';
|
||||||
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
|
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
|
||||||
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
|
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
|
||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
|
||||||
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
|
import { getRecordFilterOperandsForRecordFilterDefinition } from '@/object-record/record-filter/utils/getRecordFilterOperandsForRecordFilterDefinition';
|
||||||
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
@ -20,7 +20,8 @@ export const SingleEntityObjectFilterDropdownButtonEffect = () => {
|
|||||||
selectedOperandInDropdownComponentState,
|
selectedOperandInDropdownComponentState,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { filterableFieldMetadataItems } =
|
||||||
|
useFilterableFieldMetadataItemsInRecordIndexContext();
|
||||||
|
|
||||||
const firstFieldMetadataItem = filterableFieldMetadataItems[0];
|
const firstFieldMetadataItem = filterableFieldMetadataItems[0];
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||||
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
|
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
|
||||||
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
|
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
|
||||||
import { isSoftDeleteFilterActiveComponentState } from '@/object-record/record-table/states/isSoftDeleteFilterActiveComponentState';
|
import { isSoftDeleteFilterActiveComponentState } from '@/object-record/record-table/states/isSoftDeleteFilterActiveComponentState';
|
||||||
@ -6,14 +6,18 @@ import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/
|
|||||||
import { isDefined } from 'twenty-shared';
|
import { isDefined } from 'twenty-shared';
|
||||||
|
|
||||||
export const useCheckIsSoftDeleteFilter = () => {
|
export const useCheckIsSoftDeleteFilter = () => {
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { objectMetadataItems } = useObjectMetadataItems();
|
||||||
|
|
||||||
const isSoftDeleteFilterActive = useRecoilComponentValueV2(
|
const isSoftDeleteFilterActive = useRecoilComponentValueV2(
|
||||||
isSoftDeleteFilterActiveComponentState,
|
isSoftDeleteFilterActiveComponentState,
|
||||||
);
|
);
|
||||||
|
|
||||||
const checkIsSoftDeleteFilter = (recordFilter: RecordFilter) => {
|
const checkIsSoftDeleteFilter = (recordFilter: RecordFilter) => {
|
||||||
const foundFieldMetadataItem = filterableFieldMetadataItems.find(
|
const allFieldMetadataItems = objectMetadataItems.flatMap(
|
||||||
|
(objectMetadataItem) => objectMetadataItem.fields,
|
||||||
|
);
|
||||||
|
|
||||||
|
const foundFieldMetadataItem = allFieldMetadataItems.find(
|
||||||
(fieldMetadataItem) =>
|
(fieldMetadataItem) =>
|
||||||
fieldMetadataItem.id === recordFilter.fieldMetadataId,
|
fieldMetadataItem.id === recordFilter.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { availableFieldMetadataItemsForFilterFamilySelector } from '@/object-met
|
|||||||
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
|
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
|
||||||
import { useRecoilValue } from 'recoil';
|
import { useRecoilValue } from 'recoil';
|
||||||
|
|
||||||
export const useFilterableFieldMetadataItems = () => {
|
export const useFilterableFieldMetadataItemsInRecordIndexContext = () => {
|
||||||
const { objectMetadataItem } = useRecordIndexContextOrThrow();
|
const { objectMetadataItem } = useRecordIndexContextOrThrow();
|
||||||
|
|
||||||
const filterableFieldMetadataItems = useRecoilValue(
|
const filterableFieldMetadataItems = useRecoilValue(
|
||||||
@ -5,7 +5,7 @@ import { fieldMetadataItemIdUsedInDropdownComponentState } from '@/object-record
|
|||||||
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
|
import { filterDefinitionUsedInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/filterDefinitionUsedInDropdownComponentState';
|
||||||
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
|
import { selectedFilterComponentState } from '@/object-record/object-filter-dropdown/states/selectedFilterComponentState';
|
||||||
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
|
import { selectedOperandInDropdownComponentState } from '@/object-record/object-filter-dropdown/states/selectedOperandInDropdownComponentState';
|
||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
|
||||||
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
|
import { RecordFilter } from '@/object-record/record-filter/types/RecordFilter';
|
||||||
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
import { useSetRecoilComponentStateV2 } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentStateV2';
|
||||||
import { isDefined } from 'twenty-shared';
|
import { isDefined } from 'twenty-shared';
|
||||||
@ -38,7 +38,8 @@ export const EditableFilterDropdownButtonEffect = ({
|
|||||||
viewFilterDropdownId,
|
viewFilterDropdownId,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { filterableFieldMetadataItems } =
|
||||||
|
useFilterableFieldMetadataItemsInRecordIndexContext();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fieldMetadataItem = filterableFieldMetadataItems.find(
|
const fieldMetadataItem = filterableFieldMetadataItems.find(
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
|
import { formatFieldMetadataItemAsFilterDefinition } from '@/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions';
|
||||||
import { useFilterableFieldMetadataItems } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItems';
|
import { useFilterableFieldMetadataItemsInRecordIndexContext } from '@/object-record/record-filter/hooks/useFilterableFieldMetadataItemsInRecordIndexContext';
|
||||||
import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState';
|
import { currentRecordFiltersComponentState } from '@/object-record/record-filter/states/currentRecordFiltersComponentState';
|
||||||
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
|
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
|
||||||
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
|
||||||
@ -22,7 +22,8 @@ export const ViewBarRecordFilterEffect = () => {
|
|||||||
currentRecordFiltersComponentState,
|
currentRecordFiltersComponentState,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { filterableFieldMetadataItems } = useFilterableFieldMetadataItems();
|
const { filterableFieldMetadataItems } =
|
||||||
|
useFilterableFieldMetadataItemsInRecordIndexContext();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isDataPrefetched) {
|
if (isDataPrefetched) {
|
||||||
|
|||||||
Reference in New Issue
Block a user