Store compact view status (#3850)

* Store compact view status

* Rename to isCompact

* Fixes

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
Thomas Trompette
2024-02-08 16:33:52 +01:00
committed by GitHub
parent 6ee179442a
commit 719da29795
16 changed files with 110 additions and 7 deletions

View File

@ -32,6 +32,9 @@ export type ViewBarProps = {
onViewFiltersChange?: (filters: ViewFilter[]) => void | Promise<void>;
onViewFieldsChange?: (fields: ViewField[]) => void | Promise<void>;
onViewTypeChange?: (viewType: ViewType) => void | Promise<void>;
onViewCompactModeChange?: (
isCompactModeActive: boolean,
) => void | Promise<void>;
};
export const ViewBar = ({
@ -43,6 +46,7 @@ export const ViewBar = ({
onViewFiltersChange,
onViewSortsChange,
onViewTypeChange,
onViewCompactModeChange,
}: ViewBarProps) => {
const { openDropdown: openOptionsDropdownButton } = useDropdown(
optionsDropdownScopeId,
@ -62,6 +66,7 @@ export const ViewBar = ({
onViewFiltersChange={onViewFiltersChange}
onViewSortsChange={onViewSortsChange}
onViewTypeChange={onViewTypeChange}
onViewCompactModeChange={onViewCompactModeChange}
>
<ViewBarEffect />
<ViewBarFilterEffect

View File

@ -41,6 +41,7 @@ export const useViewScopedStates = (args?: { viewScopeId?: string }) => {
onViewFiltersChangeState,
onViewSortsChangeState,
onViewTypeChangeState,
onViewCompactModeChangeState,
savedViewFieldsByKeySelector,
savedViewFieldsState,
savedViewFiltersByKeySelector,
@ -74,6 +75,7 @@ export const useViewScopedStates = (args?: { viewScopeId?: string }) => {
onViewFiltersChangeState,
onViewSortsChangeState,
onViewTypeChangeState,
onViewCompactModeChangeState,
savedViewFieldsByKeySelector,
savedViewFieldsState,
savedViewFiltersByKeySelector,

View File

@ -54,6 +54,7 @@ export const useViews = (scopeId: string) => {
input: {
id: view.id,
name: view.name,
isCompact: view.isCompact,
},
},
refetchQueries: [findManyQuery],

View File

@ -236,7 +236,7 @@ export const useViewBar = (props?: UseViewProps) => {
(viewId: string) => {
setCurrentViewId?.(viewId);
const { currentView, onViewTypeChange } =
const { currentView, onViewTypeChange, onViewCompactModeChange } =
getViewScopedStateValuesFromSnapshot({
snapshot,
viewScopeId: scopeId,
@ -248,6 +248,7 @@ export const useViewBar = (props?: UseViewProps) => {
}
onViewTypeChange?.(currentView.type);
onViewCompactModeChange?.(currentView.isCompact);
loadViewFields(currentView.viewFields, viewId);
loadViewFilters(currentView.viewFilters, viewId);
loadViewSorts(currentView.viewSorts, viewId);

View File

@ -16,6 +16,9 @@ type ViewScopeProps = {
onViewFiltersChange?: (filters: ViewFilter[]) => void | Promise<void>;
onViewFieldsChange?: (fields: ViewField[]) => void | Promise<void>;
onViewTypeChange?: (viewType: ViewType) => void | Promise<void>;
onViewCompactModeChange?: (
isCompactModeActive: boolean,
) => void | Promise<void>;
};
export const ViewScope = ({
@ -25,6 +28,7 @@ export const ViewScope = ({
onViewFiltersChange,
onViewFieldsChange,
onViewTypeChange,
onViewCompactModeChange,
}: ViewScopeProps) => {
return (
<ViewScopeInternalContext.Provider
@ -38,6 +42,7 @@ export const ViewScope = ({
onViewFiltersChange={onViewFiltersChange}
onViewFieldsChange={onViewFieldsChange}
onViewTypeChange={onViewTypeChange}
onViewCompactModeChange={onViewCompactModeChange}
/>
{children}
</ViewScopeInternalContext.Provider>

View File

@ -13,6 +13,9 @@ type ViewScopeInitEffectProps = {
onViewFiltersChange?: (filters: ViewFilter[]) => void | Promise<void>;
onViewFieldsChange?: (fields: ViewField[]) => void | Promise<void>;
onViewTypeChange?: (viewType: ViewType) => void | Promise<void>;
onViewCompactModeChange?: (
isCompactModeActive: boolean,
) => void | Promise<void>;
};
export const ViewScopeInitEffect = ({
@ -20,29 +23,37 @@ export const ViewScopeInitEffect = ({
onViewFiltersChange,
onViewFieldsChange,
onViewTypeChange,
onViewCompactModeChange,
}: ViewScopeInitEffectProps) => {
const {
onViewFieldsChangeState,
onViewFiltersChangeState,
onViewSortsChangeState,
onViewTypeChangeState,
onViewCompactModeChangeState,
} = useViewScopedStates();
const setOnViewSortsChange = useSetRecoilState(onViewSortsChangeState);
const setOnViewFiltersChange = useSetRecoilState(onViewFiltersChangeState);
const setOnViewFieldsChange = useSetRecoilState(onViewFieldsChangeState);
const setOnViewTypeChange = useSetRecoilState(onViewTypeChangeState);
const setOnViewCompactModeChange = useSetRecoilState(
onViewCompactModeChangeState,
);
useEffect(() => {
setOnViewSortsChange(() => onViewSortsChange);
setOnViewFiltersChange(() => onViewFiltersChange);
setOnViewFieldsChange(() => onViewFieldsChange);
setOnViewTypeChange(() => onViewTypeChange);
setOnViewCompactModeChange(() => onViewCompactModeChange);
}, [
onViewCompactModeChange,
onViewFieldsChange,
onViewFiltersChange,
onViewSortsChange,
onViewTypeChange,
setOnViewCompactModeChange,
setOnViewFieldsChange,
setOnViewFiltersChange,
setOnViewSortsChange,

View File

@ -0,0 +1,8 @@
import { createStateScopeMap } from '@/ui/utilities/recoil-scope/utils/createStateScopeMap';
export const onViewCompactModeChangeScopeState = createStateScopeMap<
((isCompactModeActive: boolean) => void | Promise<void>) | undefined
>({
key: 'onViewCompactModeChangeScopeState',
defaultValue: undefined,
});

View File

@ -8,6 +8,7 @@ export type GraphQLView = {
name: string;
type: ViewType;
objectMetadataId: string;
isCompact: boolean;
viewFields: ViewField[];
viewFilters: ViewFilter[];
viewSorts: ViewSort[];

View File

@ -42,6 +42,7 @@ export const getViewScopedStateValuesFromSnapshot = ({
onViewFiltersChangeState,
onViewSortsChangeState,
onViewTypeChangeState,
onViewCompactModeChangeState,
savedViewFieldsByKeySelector,
savedViewFieldsState,
savedViewFiltersByKeySelector,
@ -87,6 +88,10 @@ export const getViewScopedStateValuesFromSnapshot = ({
onViewFiltersChange: getSnapshotValue(snapshot, onViewFiltersChangeState),
onViewSortsChange: getSnapshotValue(snapshot, onViewSortsChangeState),
onViewTypeChange: getSnapshotValue(snapshot, onViewTypeChangeState),
onViewCompactModeChange: getSnapshotValue(
snapshot,
onViewCompactModeChangeState,
),
savedViewFieldsByKey: getSnapshotValue(
snapshot,
savedViewFieldsByKeySelector,

View File

@ -3,6 +3,7 @@ import { getScopedSelectorDeprecated } from '@/ui/utilities/recoil-scope/utils/g
import { getScopedStateDeprecated } from '@/ui/utilities/recoil-scope/utils/getScopedStateDeprecated';
import { currentViewIdScopedState } from '@/views/states/currentViewIdScopedState';
import { isPersistingViewScopedState } from '@/views/states/isPersistingViewScopedState';
import { onViewCompactModeChangeScopeState } from '@/views/states/onViewCompactModeChangeScopeState';
import { onViewTypeChangeScopedState } from '@/views/states/onViewTypeChangeScopedState';
import { currentViewScopedSelector } from '@/views/states/selectors/currentViewScopedSelector';
@ -170,6 +171,11 @@ export const getViewScopedStates = ({
viewScopeId,
);
const onViewCompactModeChangeState = getScopedStateDeprecated(
onViewCompactModeChangeScopeState,
viewScopeId,
);
const currentViewIdState = getScopedStateDeprecated(
currentViewIdScopedState,
viewScopeId,
@ -214,5 +220,6 @@ export const getViewScopedStates = ({
onViewFiltersChangeState,
onViewFieldsChangeState,
onViewTypeChangeState,
onViewCompactModeChangeState,
};
};