Skip to content

Commit 664f4f5

Browse files
committed
feat: wip
1 parent ea548f1 commit 664f4f5

File tree

5 files changed

+65
-16
lines changed

5 files changed

+65
-16
lines changed

src/context/ActionViewContext.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ export type ActionViewContextType = Omit<
7171
setLimit?: (value: number) => void;
7272
setTitle?: (value: string) => void;
7373
treeFirstVisibleRow: number;
74-
setTreeFirstVisibleRow: (totalItems: number) => void;
74+
setTreeFirstVisibleRow: (value: number) => void;
75+
treeFirstVisibleColumn: string | undefined;
76+
setTreeFirstVisibleColumn: (value: string | undefined) => void;
7577
searchQuery?: SearchQueryParams;
7678
setSearchQuery?: (value: SearchQueryParams) => void;
7779
treeType?: TreeType;
@@ -147,6 +149,9 @@ const ActionViewProvider = (props: ActionViewProviderProps): any => {
147149
),
148150
);
149151
const [treeFirstVisibleRow, setTreeFirstVisibleRow] = useState<number>(0);
152+
const [treeFirstVisibleColumn, setTreeFirstVisibleColumn] = useState<
153+
string | undefined
154+
>(undefined);
150155
const [searchQuery, setSearchQuery] = useState<SearchQueryParams>();
151156
const [treeType, setTreeType] = useState<TreeType>(DEFAULT_TREE_TYPE);
152157
const [sortState, setSortState] = useState<ColumnState[]>();
@@ -257,6 +262,8 @@ const ActionViewProvider = (props: ActionViewProviderProps): any => {
257262
isActive,
258263
setTreeFirstVisibleRow,
259264
treeFirstVisibleRow,
265+
treeFirstVisibleColumn,
266+
setTreeFirstVisibleColumn,
260267
searchQuery,
261268
setSearchQuery,
262269
treeType,
@@ -339,6 +346,8 @@ export const useActionViewContext = () => {
339346
setTitle: () => {},
340347
treeFirstVisibleRow: 0,
341348
setTreeFirstVisibleRow: () => {},
349+
treeFirstVisibleColumn: undefined,
350+
setTreeFirstVisibleColumn: () => {},
342351
searchQuery: undefined,
343352
setSearchQuery: () => {},
344353
treeType: DEFAULT_TREE_TYPE,

src/helpers/treeHelper.tsx

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ const getTableColumns = (
6262

6363
let isSortable = true;
6464

65-
if (treeType === "legacy" || treeType === "paginated") {
65+
if (treeType === "legacy") {
6666
isSortable = type !== "one2many";
6767
} else {
6868
isSortable =
@@ -74,19 +74,6 @@ const getTableColumns = (
7474
dataIndex: key,
7575
title: column.label,
7676
render,
77-
comparator: (valueA: any, valueB: any, nodeA: any, nodeB: any) => {
78-
let aItem = nodeA?.data?.[key] || "";
79-
let bItem = nodeB?.data?.[key] || "";
80-
81-
if (type === "many2one") {
82-
aItem = nodeA?.data?.[key]?.value || "";
83-
bItem = nodeB?.data?.[key]?.value || "";
84-
}
85-
86-
if (aItem < bItem) return -1;
87-
if (aItem > bItem) return 1;
88-
return 0;
89-
},
9077
sorter: (a: any, b: any) => {
9178
let aItem = a[key] || "";
9279
let bItem = b[key] || "";

src/hooks/usePaginatedSearch.ts

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@ import { ConnectionProvider, TreeView } from "..";
1414
import { useShowErrorDialog } from "@/ui/GenericErrorDialog";
1515
import { useDeepCompareEffect } from "use-deep-compare";
1616
import deepEqual from "deep-equal";
17-
import { getColorMap, getStatusMap, getTableItems } from "@/helpers/treeHelper";
17+
import {
18+
getColorMap,
19+
getStatusMap,
20+
getTableItems,
21+
getTree,
22+
getSortedFieldsFromState,
23+
getOrderFromSortFields,
24+
} from "@/helpers/treeHelper";
1825
import { Tree as TreeOoui } from "@gisce/ooui";
1926
import { getKey } from "@/helpers/tree-columnStorageHelper";
2027
import { useTreeColumnStorageFetch } from "@/widgets/base/one2many/useTreeColumnStorageFetch";
@@ -57,6 +64,8 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
5764
setSelectedRowItems,
5865
setTreeFirstVisibleRow,
5966
treeFirstVisibleRow,
67+
treeFirstVisibleColumn,
68+
setTreeFirstVisibleColumn,
6069
selectedRowItems,
6170
setSearchParams,
6271
searchValues,
@@ -72,12 +81,15 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
7281
setCurrentPage,
7382
pageSize,
7483
setPageSize,
84+
sortState: actionViewSortState,
85+
setSortState: setActionViewSortState,
7586
} = useSearchTreeState({ useLocalState: !rootTree });
7687

7788
// Local state
7889
const [totalRowsLoading, setTotalRowsLoading] = useState<boolean>(true);
7990
const [totalRows, setTotalRows] = useState<number | null>();
8091
const [results, setResults] = useState<any[]>([]);
92+
const hasRestoredSortStateForFirstTime = useRef<boolean>(false);
8193

8294
// Refs
8395
const nameSearch = nameSearchProps || searchTreeNameSearch;
@@ -173,6 +185,10 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
173185
return treeFirstVisibleRow;
174186
}, [treeFirstVisibleRow]);
175187

188+
const onGetFirstVisibleColumn = useCallback(() => {
189+
return treeFirstVisibleColumn;
190+
}, [treeFirstVisibleColumn]);
191+
176192
const onRowStyle = useCallback((item: Record<string, any>): CSSProperties => {
177193
if (colorsForResults.current[item.node?.data?.id]) {
178194
return { color: colorsForResults.current[item.node?.data?.id] };
@@ -269,6 +285,7 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
269285
mergedParams,
270286
nameSearch,
271287
domain,
288+
actionViewSortState,
272289
]);
273290

274291
useEffect(() => {
@@ -320,6 +337,14 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
320337
attrs.status = treeOoui.status;
321338
}
322339

340+
let order;
341+
if (actionViewSortState?.length) {
342+
const sortFields = getSortedFieldsFromState({
343+
state: actionViewSortState,
344+
});
345+
order = getOrderFromSortFields(sortFields);
346+
}
347+
323348
const params = nameSearch ? domain : mergedParams;
324349

325350
const { results, attrsEvaluated } = await searchForTree({
@@ -332,6 +357,7 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
332357
: treeView!.fields,
333358
context,
334359
attrs,
360+
order,
335361
name_search: nameSearch,
336362
});
337363

@@ -401,6 +427,7 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
401427
treeView,
402428
treeViewFetching,
403429
updateTotalRows,
430+
actionViewSortState,
404431
]);
405432

406433
const refresh = useCallback(async () => {
@@ -504,5 +531,10 @@ export const usePaginatedSearch = (props: PaginatedSearchProps) => {
504531
updateColumnState,
505532
currentPage,
506533
pageSize,
534+
sortState: actionViewSortState,
535+
setSortState: setActionViewSortState,
536+
treeFirstVisibleColumn,
537+
setTreeFirstVisibleColumn,
538+
onGetFirstVisibleColumn,
507539
};
508540
};

src/hooks/useSearchTreeState.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ export type SearchTreeState = {
2020
setSelectedRowItems: (value: any[] | ((prevValue: any[]) => any[])) => void;
2121
treeFirstVisibleRow: number;
2222
setTreeFirstVisibleRow: (value: number) => void;
23+
treeFirstVisibleColumn: string | undefined;
24+
setTreeFirstVisibleColumn: (value: string | undefined) => void;
2325
searchParams: any[];
2426
setSearchParams: (value: any[]) => void;
2527
searchValues: any;
@@ -57,6 +59,8 @@ export function useSearchTreeState({
5759
const [localSearchVisible, setLocalSearchVisible] = useState(false);
5860
const [localSelectedRowItems, setLocalSelectedRowItems] = useState<any[]>([]);
5961
const [localTreeFirstVisibleRow, setLocalTreeFirstVisibleRow] = useState(0);
62+
const [localTreeFirstVisibleColumn, setLocalTreeFirstVisibleColumn] =
63+
useState<string | undefined>(undefined);
6064
const [localSearchParams, setLocalSearchParams] = useState<any[]>([]);
6165
const [localSearchValues, setLocalSearchValues] = useState<any>({});
6266
const [localSearchTreeNameSearch, setLocalSearchTreeNameSearch] =
@@ -85,6 +89,9 @@ export function useSearchTreeState({
8589
treeFirstVisibleRow: actionViewContext.treeFirstVisibleRow ?? 0,
8690
setTreeFirstVisibleRow:
8791
actionViewContext.setTreeFirstVisibleRow ?? (() => {}),
92+
treeFirstVisibleColumn: actionViewContext.treeFirstVisibleColumn,
93+
setTreeFirstVisibleColumn:
94+
actionViewContext.setTreeFirstVisibleColumn ?? (() => {}),
8895
searchParams: actionViewContext.searchParams || [],
8996
setSearchParams: actionViewContext.setSearchParams ?? (() => {}),
9097
searchValues: actionViewContext.searchValues || {},
@@ -117,6 +124,8 @@ export function useSearchTreeState({
117124
setSelectedRowItems: setLocalSelectedRowItems,
118125
treeFirstVisibleRow: localTreeFirstVisibleRow,
119126
setTreeFirstVisibleRow: setLocalTreeFirstVisibleRow,
127+
treeFirstVisibleColumn: localTreeFirstVisibleColumn,
128+
setTreeFirstVisibleColumn: setLocalTreeFirstVisibleColumn,
120129
searchParams: localSearchParams,
121130
setSearchParams: setLocalSearchParams,
122131
searchValues: localSearchValues,

src/widgets/views/Tree/Paginated/SearchTreePaginated.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ function SearchTreePaginatedComp(props: SearchTreePaginatedProps, ref: any) {
145145
updateColumnState,
146146
currentPage,
147147
pageSize,
148+
sortState: actionViewSortState,
149+
setSortState: setActionViewSortState,
150+
setTreeFirstVisibleColumn,
151+
onGetFirstVisibleColumn,
148152
} = usePaginatedSearch({
149153
treeViewFetching: loading,
150154
treeOoui,
@@ -279,6 +283,8 @@ function SearchTreePaginatedComp(props: SearchTreePaginatedProps, ref: any) {
279283
onGetColumnsState={getColumnState}
280284
onChangeFirstVisibleRowIndex={setTreeFirstVisibleRow}
281285
onGetFirstVisibleRowIndex={onGetFirstVisibleRowIndex}
286+
onGetFirstVisibleColumn={onGetFirstVisibleColumn}
287+
onChangeFirstVisibleColumn={setTreeFirstVisibleColumn}
282288
footer={footerComp}
283289
hasStatusColumn={treeOoui?.status !== null}
284290
statusComponent={statusComp}
@@ -287,6 +293,8 @@ function SearchTreePaginatedComp(props: SearchTreePaginatedProps, ref: any) {
287293
headerCheckboxState={headerCheckboxState}
288294
onHeaderCheckboxClick={onHeaderCheckboxClick}
289295
onForceReload={refresh}
296+
initialSortState={actionViewSortState}
297+
onSortChange={setActionViewSortState}
290298
/>
291299
);
292300
}, [
@@ -303,13 +311,17 @@ function SearchTreePaginatedComp(props: SearchTreePaginatedProps, ref: any) {
303311
getColumnState,
304312
setTreeFirstVisibleRow,
305313
onGetFirstVisibleRowIndex,
314+
setTreeFirstVisibleColumn,
315+
onGetFirstVisibleColumn,
306316
footerComp,
307317
statusComp,
308318
onRowStatus,
309319
onRowStyle,
310320
headerCheckboxState,
311321
onHeaderCheckboxClick,
312322
refresh,
323+
actionViewSortState,
324+
setActionViewSortState,
313325
]);
314326

315327
// Render

0 commit comments

Comments
 (0)