Support old relation filter value format (#9590)
Fix production bug caused by old relation filter value. **Draft, not tested yet at all, working on it right now.** --------- Co-authored-by: ad-elias <elias@autodiligence.com> Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -18,7 +18,8 @@ import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownM
|
||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
||||
import { RelationFilterValue } from '@/views/view-filter-value/types/RelationFilterValue';
|
||||
import { relationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/relationFilterValueSchema';
|
||||
import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema';
|
||||
import { simpleRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/simpleRelationFilterValueSchema';
|
||||
import { IconUserCircle } from 'twenty-ui';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
@ -63,10 +64,12 @@ export const ObjectFilterDropdownRecordSelect = ({
|
||||
|
||||
const [fieldId] = useState(v4());
|
||||
|
||||
const { isCurrentWorkspaceMemberSelected } = relationFilterValueSchema
|
||||
const { isCurrentWorkspaceMemberSelected } = jsonRelationFilterValueSchema
|
||||
.catch({
|
||||
isCurrentWorkspaceMemberSelected: false,
|
||||
selectedRecordIds: [],
|
||||
selectedRecordIds: simpleRelationFilterValueSchema.parse(
|
||||
selectedFilter?.value,
|
||||
),
|
||||
})
|
||||
.parse(selectedFilter?.value);
|
||||
|
||||
|
||||
@ -35,7 +35,8 @@ import { ViewFilterGroup } from '@/views/types/ViewFilterGroup';
|
||||
import { ViewFilterGroupLogicalOperator } from '@/views/types/ViewFilterGroupLogicalOperator';
|
||||
import { resolveDateViewFilterValue } from '@/views/view-filter-value/utils/resolveDateViewFilterValue';
|
||||
import { resolveSelectViewFilterValue } from '@/views/view-filter-value/utils/resolveSelectViewFilterValue';
|
||||
import { relationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/relationFilterValueSchema';
|
||||
import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema';
|
||||
import { simpleRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/simpleRelationFilterValueSchema';
|
||||
import { endOfDay, roundToNearestMinutes, startOfDay } from 'date-fns';
|
||||
import { z } from 'zod';
|
||||
|
||||
@ -306,7 +307,14 @@ const computeFilterRecordGqlOperationFilter = (
|
||||
case 'RELATION': {
|
||||
if (!isEmptyOperand) {
|
||||
const { isCurrentWorkspaceMemberSelected, selectedRecordIds } =
|
||||
relationFilterValueSchema.parse(filter.value);
|
||||
jsonRelationFilterValueSchema
|
||||
.catch({
|
||||
isCurrentWorkspaceMemberSelected: false,
|
||||
selectedRecordIds: simpleRelationFilterValueSchema.parse(
|
||||
filter.value,
|
||||
),
|
||||
})
|
||||
.parse(filter.value);
|
||||
|
||||
const recordIds = isCurrentWorkspaceMemberSelected
|
||||
? [
|
||||
|
||||
@ -12,7 +12,8 @@ import { onFilterSelectComponentState } from '@/object-record/object-filter-drop
|
||||
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
||||
import { useUpsertCombinedViewFilters } from '@/views/hooks/useUpsertCombinedViewFilters';
|
||||
import { availableFilterDefinitionsComponentState } from '@/views/states/availableFilterDefinitionsComponentState';
|
||||
import { relationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/relationFilterValueSchema';
|
||||
import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema';
|
||||
import { simpleRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/simpleRelationFilterValueSchema';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
|
||||
type ViewBarFilterEffectProps = {
|
||||
@ -82,10 +83,12 @@ export const ViewBarFilterEffect = ({
|
||||
filterDefinitionUsedInDropdown?.fieldMetadataId,
|
||||
);
|
||||
|
||||
const { selectedRecordIds } = relationFilterValueSchema
|
||||
const { selectedRecordIds } = jsonRelationFilterValueSchema
|
||||
.catch({
|
||||
isCurrentWorkspaceMemberSelected: false,
|
||||
selectedRecordIds: [],
|
||||
selectedRecordIds: simpleRelationFilterValueSchema.parse(
|
||||
viewFilterUsedInDropdown?.value,
|
||||
),
|
||||
})
|
||||
.parse(viewFilterUsedInDropdown?.value);
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord';
|
||||
import { generateFindManyRecordsQuery } from '@/object-record/utils/generateFindManyRecordsQuery';
|
||||
import { ViewFilter } from '@/views/types/ViewFilter';
|
||||
import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
||||
import { relationFilterValueSchemaObject } from '@/views/view-filter-value/validation-schemas/relationFilterValueSchema';
|
||||
import { relationFilterValueSchemaObject } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema';
|
||||
import { isDefined } from '~/utils/isDefined';
|
||||
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import { relationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/relationFilterValueSchema';
|
||||
import { jsonRelationFilterValueSchema } from '@/views/view-filter-value/validation-schemas/jsonRelationFilterValueSchema';
|
||||
import { z } from 'zod';
|
||||
|
||||
export type RelationFilterValue = z.infer<typeof relationFilterValueSchema>;
|
||||
export type RelationFilterValue = z.infer<typeof jsonRelationFilterValueSchema>;
|
||||
|
||||
@ -5,7 +5,7 @@ export const relationFilterValueSchemaObject = z.object({
|
||||
selectedRecordIds: z.array(z.string()),
|
||||
});
|
||||
|
||||
export const relationFilterValueSchema = z
|
||||
export const jsonRelationFilterValueSchema = z
|
||||
.string()
|
||||
.transform((value, ctx) => {
|
||||
try {
|
||||
@ -0,0 +1,11 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
export const simpleRelationFilterValueSchema = z
|
||||
.preprocess((value) => {
|
||||
try {
|
||||
return typeof value === 'string' ? JSON.parse(value) : [];
|
||||
} catch {
|
||||
return [];
|
||||
}
|
||||
}, z.array(z.string().uuid()))
|
||||
.catch([]);
|
||||
Reference in New Issue
Block a user