This PR implements hooks and utils logic for handling CRUD and view filter group comparison. The main hook is useAreViewFilterGroupsDifferentFromRecordFilterGroups, like view filters and view sorts. Inside this hook we implement getViewFilterGroupsToCreate, getViewFilterGroupsToDelete and getViewFilterGroupsToUpdate. All of those come with their unit tests. In this PR we also introduce a new util to prevent nasty bugs happening when we compare undefined === null, This util is called compareStrictlyExceptForNullAndUndefined and it should replace every strict equality comparison between values that can be null or undefined (which we have a lot) This could be enforced by a custom ESLint rule, the autofix may also be implemented (maybe the util should be put in twenty-shared ?)
16 lines
464 B
TypeScript
16 lines
464 B
TypeScript
import { isDefined } from 'twenty-shared';
|
|
import { Nullable } from 'twenty-ui';
|
|
|
|
// TODO: we should create a custom eslint rule that enforces the use of this function
|
|
// instead of using the `===` operator where a and b are | undefined | null
|
|
export const compareStrictlyExceptForNullAndUndefined = <A, B>(
|
|
valueA: Nullable<A>,
|
|
valueB: Nullable<B>,
|
|
) => {
|
|
if (!isDefined(valueA) && !isDefined(valueB)) {
|
|
return true;
|
|
}
|
|
|
|
return valueA === valueB;
|
|
};
|