<img width="1512" alt="image" src="https://github.com/user-attachments/assets/9fcdd5ca-4329-467c-ada8-4dd5d45be259"> Open questions: - the Tag component does not match Figma in term of style and API for "transparent" | "outline". We need to discuss with @Bonapara what is the desired behavior here - right now opportunity.stage is not nullable. We need to discuss with @FelixMalfait and @Bonapara what we want here. I would advocate to make a it nullable for now until we introduce settings on select fields. custom select are nullable and it could be confusing for the user Follow up: - enhance tests on Tags - add story to cover the No Value column on record board
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { isUndefined } from '@sniptt/guards';
|
|
import { useEffect, useState } from 'react';
|
|
import { useRecoilValue } from 'recoil';
|
|
|
|
import { useViewStates } from '@/views/hooks/internal/useViewStates';
|
|
import { useGetCurrentView } from '@/views/hooks/useGetCurrentView';
|
|
import { View } from '@/views/types/View';
|
|
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
|
|
|
|
type ViewBarEffectProps = {
|
|
viewBarId: string;
|
|
};
|
|
|
|
export const ViewBarEffect = ({ viewBarId }: ViewBarEffectProps) => {
|
|
const { currentViewWithCombinedFiltersAndSorts } =
|
|
useGetCurrentView(viewBarId);
|
|
const {
|
|
onCurrentViewChangeState,
|
|
availableFilterDefinitionsState,
|
|
isPersistingViewFieldsState,
|
|
} = useViewStates(viewBarId);
|
|
|
|
const [currentViewSnapshot, setCurrentViewSnapshot] = useState<
|
|
View | undefined
|
|
>(undefined);
|
|
|
|
const onCurrentViewChange = useRecoilValue(onCurrentViewChangeState);
|
|
const availableFilterDefinitions = useRecoilValue(
|
|
availableFilterDefinitionsState,
|
|
);
|
|
const isPersistingViewFields = useRecoilValue(isPersistingViewFieldsState);
|
|
|
|
useEffect(() => {
|
|
if (
|
|
!isDeeplyEqual(
|
|
currentViewWithCombinedFiltersAndSorts,
|
|
currentViewSnapshot,
|
|
)
|
|
) {
|
|
if (isUndefined(currentViewWithCombinedFiltersAndSorts)) {
|
|
setCurrentViewSnapshot(currentViewWithCombinedFiltersAndSorts);
|
|
onCurrentViewChange?.(undefined);
|
|
return;
|
|
}
|
|
|
|
if (!isPersistingViewFields) {
|
|
setCurrentViewSnapshot(currentViewWithCombinedFiltersAndSorts);
|
|
onCurrentViewChange?.(currentViewWithCombinedFiltersAndSorts);
|
|
}
|
|
}
|
|
}, [
|
|
availableFilterDefinitions,
|
|
currentViewSnapshot,
|
|
currentViewWithCombinedFiltersAndSorts,
|
|
isPersistingViewFields,
|
|
onCurrentViewChange,
|
|
]);
|
|
|
|
return <></>;
|
|
};
|