fix: fix record deletion optimistic effect (#3683)
* fix: fix record deletion optimistic effect * fix: fix renamed method after rebase * Re-add evict --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -29,7 +29,7 @@ export const triggerCreateRecordsOptimisticEffect = ({
|
||||
[objectMetadataItem.namePlural]: (
|
||||
cachedConnection,
|
||||
{
|
||||
INVALIDATE: _INVALIDATE,
|
||||
DELETE: _DELETE,
|
||||
readField,
|
||||
storeFieldName: _storeFieldName,
|
||||
toReference,
|
||||
@ -97,7 +97,7 @@ export const triggerCreateRecordsOptimisticEffect = ({
|
||||
cachedEdges?.length === variables.first &&
|
||||
nextCachedEdges.length < variables.first
|
||||
) {
|
||||
return INVALIDATE;
|
||||
return DELETE;
|
||||
}
|
||||
|
||||
if (nextCachedEdges.length > variables.first) {
|
||||
|
||||
@ -21,7 +21,7 @@ export const triggerDeleteRecordsOptimisticEffect = ({
|
||||
fields: {
|
||||
[objectMetadataItem.namePlural]: (
|
||||
cachedConnection,
|
||||
{ INVALIDATE, readField, storeFieldName },
|
||||
{ DELETE, readField, storeFieldName },
|
||||
) => {
|
||||
if (
|
||||
!isCachedObjectConnection(
|
||||
@ -49,12 +49,14 @@ export const triggerDeleteRecordsOptimisticEffect = ({
|
||||
return nodeId && !recordIds.includes(nodeId);
|
||||
}) || [];
|
||||
|
||||
if (nextCachedEdges.length === cachedEdges?.length)
|
||||
return cachedConnection;
|
||||
|
||||
if (
|
||||
isDefined(variables?.first) &&
|
||||
cachedEdges?.length === variables.first &&
|
||||
nextCachedEdges.length < variables.first
|
||||
cachedEdges?.length === variables.first
|
||||
) {
|
||||
return INVALIDATE;
|
||||
return DELETE;
|
||||
}
|
||||
|
||||
return { ...cachedConnection, edges: nextCachedEdges };
|
||||
|
||||
@ -28,7 +28,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
fields: {
|
||||
[objectMetadataItem.namePlural]: (
|
||||
cachedConnection,
|
||||
{ INVALIDATE, readField, storeFieldName, toReference },
|
||||
{ DELETE, readField, storeFieldName, toReference },
|
||||
) => {
|
||||
if (
|
||||
!isCachedObjectConnection(
|
||||
@ -93,7 +93,7 @@ export const triggerUpdateRecordOptimisticEffect = ({
|
||||
cachedEdges?.length === variables.first &&
|
||||
nextCachedEdges.length < variables.first
|
||||
) {
|
||||
return INVALIDATE;
|
||||
return DELETE;
|
||||
}
|
||||
|
||||
// If next edges length exceeds the required limit,
|
||||
|
||||
@ -8,6 +8,7 @@ import { Company } from '@/companies/types/Company';
|
||||
import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu';
|
||||
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables';
|
||||
import { Person } from '@/people/types/Person';
|
||||
import { IconNotes } from '@/ui/display/icon';
|
||||
import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem';
|
||||
@ -134,33 +135,35 @@ export const CommandMenu = () => {
|
||||
const { records: people } = useFindManyRecords<Person>({
|
||||
skip: !isCommandMenuOpened,
|
||||
objectNameSingular: CoreObjectNameSingular.Person,
|
||||
filter: {
|
||||
or: [
|
||||
{ name: { firstName: { ilike: `%${search}%` } } },
|
||||
{ name: { firstName: { ilike: `%${search}%` } } },
|
||||
],
|
||||
},
|
||||
filter: search
|
||||
? makeOrFilterVariables([
|
||||
{ name: { firstName: { ilike: `%${search}%` } } },
|
||||
{ name: { firstName: { ilike: `%${search}%` } } },
|
||||
])
|
||||
: undefined,
|
||||
limit: 3,
|
||||
});
|
||||
|
||||
const { records: companies } = useFindManyRecords<Company>({
|
||||
skip: !isCommandMenuOpened,
|
||||
objectNameSingular: CoreObjectNameSingular.Company,
|
||||
filter: {
|
||||
name: { ilike: `%${search}%` },
|
||||
},
|
||||
filter: search
|
||||
? {
|
||||
name: { ilike: `%${search}%` },
|
||||
}
|
||||
: undefined,
|
||||
limit: 3,
|
||||
});
|
||||
|
||||
const { records: activities } = useFindManyRecords<Activity>({
|
||||
skip: !isCommandMenuOpened,
|
||||
objectNameSingular: CoreObjectNameSingular.Activity,
|
||||
filter: {
|
||||
or: [
|
||||
{ title: { ilike: `%${search}%` } },
|
||||
{ body: { ilike: `%${search}%` } },
|
||||
],
|
||||
},
|
||||
filter: search
|
||||
? makeOrFilterVariables([
|
||||
{ title: { ilike: `%${search}%` } },
|
||||
{ body: { ilike: `%${search}%` } },
|
||||
])
|
||||
: undefined,
|
||||
limit: 3,
|
||||
});
|
||||
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
import {
|
||||
CurrencyFilter,
|
||||
DateFilter,
|
||||
@ -13,6 +11,7 @@ import {
|
||||
import { makeAndFilterVariables } from '@/object-record/utils/makeAndFilterVariables';
|
||||
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
||||
import { Field } from '~/generated/graphql';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
import { Filter } from '../../object-filter-dropdown/types/Filter';
|
||||
|
||||
@ -39,6 +38,10 @@ export const turnObjectDropdownFilterIntoQueryFilter = (
|
||||
);
|
||||
}
|
||||
|
||||
if (!isDefined(rawUIFilter.value) || rawUIFilter.value === '') {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
switch (rawUIFilter.definition.type) {
|
||||
case 'EMAIL':
|
||||
case 'PHONE':
|
||||
@ -111,10 +114,6 @@ export const turnObjectDropdownFilterIntoQueryFilter = (
|
||||
}
|
||||
break;
|
||||
case 'RELATION': {
|
||||
if (!isNonEmptyString(rawUIFilter.value)) {
|
||||
break;
|
||||
}
|
||||
|
||||
try {
|
||||
JSON.parse(rawUIFilter.value);
|
||||
} catch (e) {
|
||||
|
||||
@ -1,8 +1,7 @@
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
|
||||
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { getLabelIdentifierFieldMetadataItem } from '@/object-metadata/utils/getLabelIdentifierFieldMetadataItem';
|
||||
import { ObjectRecordQueryFilter } from '@/object-record/record-filter/types/ObjectRecordQueryFilter';
|
||||
import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables';
|
||||
import { FieldMetadataType } from '~/generated/graphql';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
@ -17,7 +16,7 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
Object.fromEntries<ObjectRecordQueryFilter>(
|
||||
objectMetadataItems
|
||||
.map((objectMetadataItem) => {
|
||||
if (!isNonEmptyString(searchFilterValue)) return null;
|
||||
if (searchFilterValue === '') return null;
|
||||
|
||||
const labelIdentifierFieldMetadataItem =
|
||||
getLabelIdentifierFieldMetadataItem(objectMetadataItem);
|
||||
@ -27,8 +26,8 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
if (labelIdentifierFieldMetadataItem) {
|
||||
switch (labelIdentifierFieldMetadataItem.type) {
|
||||
case FieldMetadataType.FullName: {
|
||||
searchFilter = {
|
||||
or: [
|
||||
if (searchFilterValue) {
|
||||
const fullNameFilter = makeOrFilterVariables([
|
||||
{
|
||||
[labelIdentifierFieldMetadataItem.name]: {
|
||||
firstName: {
|
||||
@ -43,16 +42,23 @@ export const useSearchFilterPerMetadataItem = ({
|
||||
},
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
]);
|
||||
|
||||
if (fullNameFilter) {
|
||||
searchFilter = fullNameFilter;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
searchFilter = {
|
||||
[labelIdentifierFieldMetadataItem.name]: {
|
||||
ilike: `%${searchFilterValue}%`,
|
||||
},
|
||||
};
|
||||
default: {
|
||||
if (searchFilterValue) {
|
||||
searchFilter = {
|
||||
[labelIdentifierFieldMetadataItem.name]: {
|
||||
ilike: `%${searchFilterValue}%`,
|
||||
},
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user