Skip to content

Commit f332c3b

Browse files
Fix View update button not being displayed in View Bar (#1469)
1 parent c05d24d commit f332c3b

File tree

10 files changed

+37
-52
lines changed

10 files changed

+37
-52
lines changed

front/src/modules/ui/filter-n-sort/components/MultipleFiltersDropdownButton.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { selectedOperandInDropdownScopedState } from '@/ui/filter-n-sort/states/
99
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
1010
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
1111

12-
import { sortAndFilterBarScopedState } from '../states/sortAndFilterBarScopedState';
12+
import { isViewBarExpandedScopedState } from '../states/isViewBarExpandedScopedState';
1313
import { FiltersHotkeyScope } from '../types/FiltersHotkeyScope';
1414

1515
import DropdownButton from './DropdownButton';
@@ -76,14 +76,14 @@ export function MultipleFiltersDropdownButton({
7676

7777
const setHotkeyScope = useSetHotkeyScope();
7878

79-
const [sortAndFilterBar, setSortAndFilterBar] = useRecoilScopedState(
80-
sortAndFilterBarScopedState,
79+
const [isViewBarExpanded, setIsViewBarExpanded] = useRecoilScopedState(
80+
isViewBarExpandedScopedState,
8181
context,
8282
);
8383

8484
function handleIsUnfoldedChange(unfolded: boolean) {
8585
if (unfolded && isPrimaryButton) {
86-
setSortAndFilterBar(!sortAndFilterBar);
86+
setIsViewBarExpanded(!isViewBarExpanded);
8787
}
8888

8989
if (

front/src/modules/ui/filter-n-sort/components/SortAndFilterBar.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoi
1212
import { useRemoveFilter } from '../hooks/useRemoveFilter';
1313
import { availableFiltersScopedState } from '../states/availableFiltersScopedState';
1414
import { filtersScopedState } from '../states/filtersScopedState';
15-
import { sortAndFilterBarScopedState } from '../states/sortAndFilterBarScopedState';
15+
import { isViewBarExpandedScopedState } from '../states/isViewBarExpandedScopedState';
1616
import { FiltersHotkeyScope } from '../types/FiltersHotkeyScope';
1717
import { SelectedSortType } from '../types/interface';
1818
import { getOperandLabelShort } from '../utils/getOperandLabel';
@@ -21,7 +21,7 @@ import { FilterDropdownButton } from './FilterDropdownButton';
2121
import SortOrFilterChip from './SortOrFilterChip';
2222

2323
type OwnProps<SortField> = {
24-
canToggle?: boolean;
24+
canPersistView?: boolean;
2525
context: Context<string | null>;
2626
sorts: Array<SelectedSortType<SortField>>;
2727
onRemoveSort: (sortId: SelectedSortType<SortField>['key']) => void;
@@ -99,7 +99,7 @@ const StyledAddFilterContainer = styled.div`
9999
`;
100100

101101
function SortAndFilterBar<SortField>({
102-
canToggle,
102+
canPersistView,
103103
context,
104104
sorts,
105105
onRemoveSort,
@@ -119,8 +119,8 @@ function SortAndFilterBar<SortField>({
119119
context,
120120
);
121121

122-
const [sortAndFilterBar] = useRecoilScopedState(
123-
sortAndFilterBarScopedState,
122+
const [isViewBarExpanded] = useRecoilScopedState(
123+
isViewBarExpandedScopedState,
124124
context,
125125
);
126126

@@ -142,10 +142,11 @@ function SortAndFilterBar<SortField>({
142142
onCancelClick();
143143
}
144144

145-
if (
146-
(!canToggle && !filtersWithDefinition.length && !sorts.length) ||
147-
!sortAndFilterBar
148-
) {
145+
const shouldExpandViewBar =
146+
canPersistView ||
147+
((filtersWithDefinition.length || sorts.length) && isViewBarExpanded);
148+
149+
if (!shouldExpandViewBar) {
149150
return null;
150151
}
151152

front/src/modules/ui/filter-n-sort/components/SortDropdownButton.tsx

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import { StyledDropdownMenuItemsContainer } from '@/ui/dropdown/components/Style
77
import { StyledDropdownMenuSeparator } from '@/ui/dropdown/components/StyledDropdownMenuSeparator';
88
import { IconChevronDown } from '@/ui/icon';
99
import { OverflowingTextWithTooltip } from '@/ui/tooltip/OverflowingTextWithTooltip';
10-
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
1110

12-
import { sortAndFilterBarScopedState } from '../states/sortAndFilterBarScopedState';
1311
import { FiltersHotkeyScope } from '../types/FiltersHotkeyScope';
1412
import { SelectedSortType, SortType } from '../types/interface';
1513

@@ -31,7 +29,6 @@ export function SortDropdownButton<SortField>({
3129
availableSorts,
3230
onSortSelect,
3331
HotkeyScope,
34-
context,
3532
}: OwnProps<SortField>) {
3633
const theme = useTheme();
3734

@@ -52,11 +49,6 @@ export function SortDropdownButton<SortField>({
5249
setSelectedSortDirection('asc');
5350
}, []);
5451

55-
const [, setSortAndFilterBar] = useRecoilScopedState(
56-
sortAndFilterBarScopedState,
57-
context,
58-
);
59-
6052
function handleIsUnfoldedChange(newIsUnfolded: boolean) {
6153
if (newIsUnfolded) {
6254
setIsUnfolded(true);
@@ -69,7 +61,6 @@ export function SortDropdownButton<SortField>({
6961
function handleAddSort(sort: SortType<SortField>) {
7062
setIsUnfolded(false);
7163
onSortItemSelect(sort);
72-
setSortAndFilterBar(true);
7364
}
7465

7566
return (
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { atomFamily } from 'recoil';
2+
3+
export const isViewBarExpandedScopedState = atomFamily<boolean, string>({
4+
key: 'isViewBarExpandedScopedState',
5+
default: true,
6+
});

front/src/modules/ui/filter-n-sort/states/sortAndFilterBarScopedState.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

front/src/modules/ui/table/components/EntityTableBody.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export function EntityTableBody() {
5050
}
5151

5252
return (
53-
<>
53+
<tbody>
5454
{paddingTop > 0 && (
5555
<tr>
5656
<StyledSpace top={paddingTop} />
@@ -76,6 +76,6 @@ export function EntityTableBody() {
7676
<StyledSpace bottom={paddingBottom} />
7777
</tr>
7878
)}
79-
</>
79+
</tbody>
8080
);
8181
}

front/src/modules/ui/table/components/EntityTableHeader.tsx

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import styled from '@emotion/styled';
33
import { useRecoilCallback, useRecoilState } from 'recoil';
44

55
import { IconButton } from '@/ui/button/components/IconButton';
6-
import { sortAndFilterBarScopedState } from '@/ui/filter-n-sort/states/sortAndFilterBarScopedState';
76
import { IconPlus } from '@/ui/icon';
87
import { useTrackPointer } from '@/ui/utilities/pointer-event/hooks/useTrackPointer';
98
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
@@ -91,10 +90,6 @@ export function EntityTableHeader() {
9190
visibleTableColumnsScopedSelector,
9291
TableRecoilScopeContext,
9392
);
94-
const [, setSortAndFilterBar] = useRecoilScopedState(
95-
sortAndFilterBarScopedState,
96-
TableRecoilScopeContext,
97-
);
9893

9994
const [initialPointerPositionX, setInitialPointerPositionX] = useState<
10095
number | null
@@ -135,20 +130,13 @@ export function EntityTableHeader() {
135130
);
136131

137132
setTableColumns(nextColumns);
138-
setSortAndFilterBar(true);
139133
}
140134

141135
set(resizeFieldOffsetState, 0);
142136
setInitialPointerPositionX(null);
143137
setResizedFieldKey(null);
144138
},
145-
[
146-
resizedFieldKey,
147-
tableColumnsByKey,
148-
tableColumns,
149-
setTableColumns,
150-
setSortAndFilterBar,
151-
],
139+
[resizedFieldKey, tableColumnsByKey, tableColumns, setTableColumns],
152140
);
153141

154142
useTrackPointer({

front/src/modules/ui/table/hooks/useTableColumns.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { useCallback } from 'react';
22

33
import type { ViewFieldMetadata } from '@/ui/editable-field/types/ViewField';
4-
import { sortAndFilterBarScopedState } from '@/ui/filter-n-sort/states/sortAndFilterBarScopedState';
54
import { useRecoilScopedState } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedState';
65
import { useRecoilScopedValue } from '@/ui/utilities/recoil-scope/hooks/useRecoilScopedValue';
76

@@ -19,10 +18,6 @@ export const useTableColumns = () => {
1918
tableColumnsByKeyScopedSelector,
2019
TableRecoilScopeContext,
2120
);
22-
const [, setSortAndFilterBar] = useRecoilScopedState(
23-
sortAndFilterBarScopedState,
24-
TableRecoilScopeContext,
25-
);
2621

2722
const handleColumnVisibilityChange = useCallback(
2823
(column: ColumnDefinition<ViewFieldMetadata>) => {
@@ -37,9 +32,8 @@ export const useTableColumns = () => {
3732
);
3833

3934
setTableColumns(nextColumns);
40-
setSortAndFilterBar(true);
4135
},
42-
[tableColumnsByKey, tableColumns, setTableColumns, setSortAndFilterBar],
36+
[tableColumnsByKey, tableColumns, setTableColumns],
4337
);
4438

4539
return { handleColumnVisibilityChange };

front/src/modules/ui/table/table-header/components/TableHeader.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import { DropdownRecoilScopeContext } from '@/ui/dropdown/states/recoil-scope-co
55
import { FilterDropdownButton } from '@/ui/filter-n-sort/components/FilterDropdownButton';
66
import SortAndFilterBar from '@/ui/filter-n-sort/components/SortAndFilterBar';
77
import { SortDropdownButton } from '@/ui/filter-n-sort/components/SortDropdownButton';
8+
import { canPersistFiltersScopedSelector } from '@/ui/filter-n-sort/states/selectors/canPersistFiltersScopedSelector';
9+
import { canPersistSortsScopedSelector } from '@/ui/filter-n-sort/states/selectors/canPersistSortsScopedSelector';
810
import { sortsScopedState } from '@/ui/filter-n-sort/states/sortsScopedState';
911
import { FiltersHotkeyScope } from '@/ui/filter-n-sort/types/FiltersHotkeyScope';
1012
import { SelectedSortType, SortType } from '@/ui/filter-n-sort/types/interface';
@@ -54,6 +56,13 @@ export function TableHeader<SortField>({
5456
const canPersistTableColumns = useRecoilValue(
5557
canPersistTableColumnsScopedSelector([tableScopeId, currentTableViewId]),
5658
);
59+
const canPersistFilters = useRecoilValue(
60+
canPersistFiltersScopedSelector([tableScopeId, currentTableViewId]),
61+
);
62+
63+
const canPersistSorts = useRecoilValue(
64+
canPersistSortsScopedSelector([tableScopeId, currentTableViewId]),
65+
);
5766

5867
const sortSelect = useCallback(
5968
(newSort: SelectedSortType<SortField>) => {
@@ -106,7 +115,9 @@ export function TableHeader<SortField>({
106115
}
107116
bottomComponent={
108117
<SortAndFilterBar
109-
canToggle={canPersistTableColumns}
118+
canPersistView={
119+
canPersistTableColumns || canPersistFilters || canPersistSorts
120+
}
110121
context={TableRecoilScopeContext}
111122
sorts={sorts}
112123
onRemoveSort={sortUnselect}

packages/eslint-plugin-twenty/rules/matching-state-variable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module.exports = {
2222
'useRecoilState',
2323
'useRecoilFamilyState',
2424
'useRecoilSelector',
25-
'useRecoilScopedDate',
25+
'useRecoilScopedState',
2626
'useRecoilScopedFamilyState',
2727
'useRecoilScopedSelector',
2828
'useRecoilValue',

0 commit comments

Comments
 (0)