Skip to content

Commit

Permalink
feat: sync changes from v2 to v2-develop (#712) [skip ci]
Browse files Browse the repository at this point in the history
Co-authored-by: mguellsegarra <5711443+mguellsegarra@users.noreply.github.com>
  • Loading branch information
giscegit and mguellsegarra authored Nov 25, 2024
1 parent e58583a commit 7d5a2e7
Show file tree
Hide file tree
Showing 12 changed files with 477 additions and 154 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@gisce/react-ooui",
"version": "2.36.0-rc.3",
"version": "2.39.0",
"engines": {
"node": "20.5.0"
},
Expand Down
2 changes: 1 addition & 1 deletion src/actionbar/FormActionBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ function FormActionBar({ toolbar }: { toolbar: any }) {
setPreviousView,
goToResourceId,
isActive,
} = useActionViewContext(true);
} = useActionViewContext();

const { processAction } = contentRootContext || {};
const { openRelate, openDefaultActionForModel } = tabManagerContext || {};
Expand Down
2 changes: 1 addition & 1 deletion src/actionbar/useNextPrevious.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export const useNextPrevious = () => {
setCurrentItemIndex,
results,
searchQuery,
} = useActionViewContext(true);
} = useActionViewContext();

const [fetchRequest, cancelRequest] = useNetworkRequest(
ConnectionProvider.getHandler().searchForTree,
Expand Down
86 changes: 72 additions & 14 deletions src/context/ActionViewContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -241,21 +241,79 @@ const ActionViewProvider = (props: ActionViewProviderProps): any => {
);
};

export const useActionViewContext = (
isRoot: boolean,
): ActionViewContextType => {
const actionViewContext = useContext(
ActionViewContext,
) as ActionViewContextType;
if (!isRoot) {
return {} as ActionViewContextType;
}
if (!actionViewContext) {
throw new Error(
"useActionViewContext must be used within a ActionViewProvider",
);
export const useIsUnderActionViewContext = () => {
const context = useContext(ActionViewContext);
return !!context;
};

export const useActionViewContext = () => {
const context = useContext(ActionViewContext);

// If no context, return empty functions and default values
if (!context) {
return {
title: "",
currentView: {} as View,
setCurrentView: () => {},
availableViews: [],
formRef: { current: null },
searchTreeRef: { current: null },
onNewClicked: () => {},
currentId: undefined,
setCurrentId: () => {},
setCurrentItemIndex: () => {},
currentItemIndex: undefined,
results: [],
setResults: () => {},
currentModel: "",
sorter: undefined,
setSorter: () => {},
totalItems: 0,
setTotalItems: () => {},
selectedRowItems: [],
setSelectedRowItems: () => {},
setSearchTreeNameSearch: () => {},
searchTreeNameSearch: undefined,
goToResourceId: async () => {},
limit: DEFAULT_SEARCH_LIMIT,
isActive: false,
formIsSaving: false,
setFormIsSaving: () => {},
formHasChanges: false,
setFormHasChanges: () => {},
onFormSave: async () => ({ succeed: false, id: 0 }),
removingItem: false,
setRemovingItem: () => {},
formIsLoading: false,
setFormIsLoading: () => {},
treeIsLoading: false,
setTreeIsLoading: () => {},
graphIsLoading: false,
setGraphIsLoading: () => {},
attachments: [],
setAttachments: () => {},
duplicatingItem: false,
setDuplicatingItem: () => {},
searchParams: [],
setSearchParams: () => {},
searchVisible: false,
setSearchVisible: () => {},
previousView: undefined,
setPreviousView: () => {},
searchValues: {},
setSearchValues: () => {},
setLimit: () => {},
setTitle: () => {},
treeFirstVisibleRow: 0,
setTreeFirstVisibleRow: () => {},
searchQuery: undefined,
setSearchQuery: () => {},
isInfiniteTree: false,
setIsInfiniteTree: () => {},
};
}
return actionViewContext;

return context;
};

export default ActionViewProvider;
12 changes: 9 additions & 3 deletions src/hooks/useFetchTreeViews.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useCallback, useState } from "react";
import { useCallback, useState, useRef } from "react";
import { ConnectionProvider, FormView, TreeView } from "..";
import { useNetworkRequest } from "@/hooks/useNetworkRequest";
import { showErrorDialog } from "@/ui/GenericErrorDialog";
Expand All @@ -9,30 +9,35 @@ export type UseFetchTreeViewsOpts = {
formViewProps?: FormView;
treeViewProps?: TreeView;
context?: any;
enabled?: boolean;
};

export const useFetchTreeViews = ({
model,
formViewProps,
treeViewProps,
context,
enabled = true,
}: UseFetchTreeViewsOpts) => {
const [loading, setLoading] = useState(true);
const [treeView, setTreeView] = useState<TreeView>();
const [formView, setFormView] = useState<FormView>();
const isRequestInProgress = useRef(false);

const [fetchGetViewRequest, cancelGetViewRequest] = useNetworkRequest(
ConnectionProvider.getHandler().getView,
);

useDeepCompareEffect(() => {
fetchViewData();
if (enabled) fetchViewData();
return () => {
cancelGetViewRequest();
};
}, [context, formViewProps, model, treeViewProps]);
}, [context, formViewProps, model, treeViewProps, enabled]);

const fetchViewData = useCallback(async () => {
if (isRequestInProgress.current) return;
isRequestInProgress.current = true;
setLoading(true);
try {
const fetchPromises: Array<Promise<any>> = [];
Expand Down Expand Up @@ -60,6 +65,7 @@ export const useFetchTreeViews = ({
showErrorDialog(error);
} finally {
setLoading(false);
isRequestInProgress.current = false;
}
}, [context, fetchGetViewRequest, formViewProps, model, treeViewProps]);

Expand Down
102 changes: 102 additions & 0 deletions src/hooks/useSearchTreeState.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import { useState } from "react";
import {
useActionViewContext,
SearchQueryParams,
useIsUnderActionViewContext,
} from "@/context/ActionViewContext";

export type SearchTreeState = {
treeIsLoading: boolean;
setTreeIsLoading: (value: boolean) => void;
searchVisible: boolean;
setSearchVisible: (value: boolean) => void;
selectedRowItems: any[];
setSelectedRowItems: (value: any[]) => void;
treeFirstVisibleRow: number;
setTreeFirstVisibleRow: (value: number) => void;
searchParams: any[];
setSearchParams: (value: any[]) => void;
searchValues: any;
setSearchValues: (value: any) => void;
searchTreeNameSearch?: string;
setSearchTreeNameSearch: (value?: string) => void;
results: any[];
setResults: (value: any[]) => void;
searchQuery?: SearchQueryParams;
setSearchQuery: (value: SearchQueryParams) => void;
totalItems: number;
setTotalItems: (value: number) => void;
};

export function useSearchTreeState({
useLocalState = false,
}: {
useLocalState: boolean;
}): SearchTreeState {
const isUnderActionViewContext =
useIsUnderActionViewContext() && !useLocalState;
const actionViewContext = useActionViewContext();

// If we're not using ActionView context, create local state
const [localTreeIsLoading, setLocalTreeIsLoading] = useState(false);
const [localSearchVisible, setLocalSearchVisible] = useState(false);
const [localSelectedRowItems, setLocalSelectedRowItems] = useState<any[]>([]);
const [localTreeFirstVisibleRow, setLocalTreeFirstVisibleRow] = useState(0);
const [localSearchParams, setLocalSearchParams] = useState<any[]>([]);
const [localSearchValues, setLocalSearchValues] = useState<any>({});
const [localSearchTreeNameSearch, setLocalSearchTreeNameSearch] =
useState<string>();
const [localResults, setLocalResults] = useState<any[]>([]);
const [localSearchQuery, setLocalSearchQuery] = useState<SearchQueryParams>();
const [localTotalItems, setLocalTotalItems] = useState(0);

// Return either context values or local state values based on isUnderActionViewContext
return isUnderActionViewContext
? {
treeIsLoading: actionViewContext.treeIsLoading ?? false,
setTreeIsLoading: actionViewContext.setTreeIsLoading ?? (() => {}),
searchVisible: actionViewContext.searchVisible ?? false,
setSearchVisible: actionViewContext.setSearchVisible ?? (() => {}),
selectedRowItems: actionViewContext.selectedRowItems || [],
setSelectedRowItems:
actionViewContext.setSelectedRowItems ?? (() => {}),
treeFirstVisibleRow: actionViewContext.treeFirstVisibleRow ?? 0,
setTreeFirstVisibleRow:
actionViewContext.setTreeFirstVisibleRow ?? (() => {}),
searchParams: actionViewContext.searchParams || [],
setSearchParams: actionViewContext.setSearchParams ?? (() => {}),
searchValues: actionViewContext.searchValues || {},
setSearchValues: actionViewContext.setSearchValues ?? (() => {}),
searchTreeNameSearch: actionViewContext.searchTreeNameSearch,
setSearchTreeNameSearch:
actionViewContext.setSearchTreeNameSearch ?? (() => {}),
results: actionViewContext.results || [],
setResults: actionViewContext.setResults ?? (() => {}),
searchQuery: actionViewContext.searchQuery,
setSearchQuery: actionViewContext.setSearchQuery ?? (() => {}),
totalItems: actionViewContext.totalItems ?? 0,
setTotalItems: actionViewContext.setTotalItems ?? (() => {}),
}
: {
treeIsLoading: localTreeIsLoading,
setTreeIsLoading: setLocalTreeIsLoading,
searchVisible: localSearchVisible,
setSearchVisible: setLocalSearchVisible,
selectedRowItems: localSelectedRowItems,
setSelectedRowItems: setLocalSelectedRowItems,
treeFirstVisibleRow: localTreeFirstVisibleRow,
setTreeFirstVisibleRow: setLocalTreeFirstVisibleRow,
searchParams: localSearchParams,
setSearchParams: setLocalSearchParams,
searchValues: localSearchValues,
setSearchValues: setLocalSearchValues,
searchTreeNameSearch: localSearchTreeNameSearch,
setSearchTreeNameSearch: setLocalSearchTreeNameSearch,
results: localResults,
setResults: setLocalResults,
searchQuery: localSearchQuery,
setSearchQuery: setLocalSearchQuery,
totalItems: localTotalItems,
setTotalItems: setLocalTotalItems,
};
}
4 changes: 2 additions & 2 deletions src/views/actionViews/TreeActionView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import SearchTree from "@/widgets/views/SearchTree";
import { extractTreeXmlAttribute } from "@/helpers/treeHelper";

export type TreeActionViewProps = {
formView?: FormView;
treeView?: TreeView;
formView: FormView;
treeView: TreeView;
visible: boolean;
searchTreeRef: any;
model: string;
Expand Down
Loading

0 comments on commit 7d5a2e7

Please sign in to comment.