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:
Thaïs
2024-01-30 05:33:28 -03:00
committed by GitHub
parent e951fb70f8
commit 49f33bbe2e
6 changed files with 52 additions and 42 deletions

View File

@ -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) {

View File

@ -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 };

View File

@ -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,

View File

@ -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,
});

View File

@ -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) {

View File

@ -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}%`,
},
};
}
}
}
}