mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-05 13:39:24 +08:00
fix: block refresh issue (#6233)
This commit is contained in:
parent
250efcd6ed
commit
05e107f4fa
@ -9,7 +9,7 @@
|
||||
|
||||
import { Schema } from '@formily/json-schema';
|
||||
import _ from 'lodash';
|
||||
import React, { FC, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import React, { FC, useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import {
|
||||
Location,
|
||||
NavigateFunction,
|
||||
@ -62,11 +62,13 @@ const RouterBasenameContext = React.createContext<string>('');
|
||||
RouterBasenameContext.displayName = 'RouterBasenameContext';
|
||||
|
||||
const IsSubPageClosedByPageMenuContext = React.createContext<{
|
||||
isSubPageClosedByPageMenu: boolean;
|
||||
isSubPageClosedByPageMenu: () => boolean;
|
||||
setFieldSchema: React.Dispatch<React.SetStateAction<Schema>>;
|
||||
reset: () => void;
|
||||
}>({
|
||||
isSubPageClosedByPageMenu: false,
|
||||
setFieldSchema: () => {},
|
||||
isSubPageClosedByPageMenu: () => false,
|
||||
setFieldSchema: () => { },
|
||||
reset: () => { },
|
||||
});
|
||||
IsSubPageClosedByPageMenuContext.displayName = 'IsSubPageClosedByPageMenuContext';
|
||||
|
||||
@ -75,7 +77,7 @@ export const IsSubPageClosedByPageMenuProvider: FC = ({ children }) => {
|
||||
const prevParamsRef = useRef<any>({});
|
||||
const [fieldSchema, setFieldSchema] = useState<Schema>(null);
|
||||
|
||||
const isSubPageClosedByPageMenu = useMemo(() => {
|
||||
const isSubPageClosedByPageMenu = useCallback(() => {
|
||||
const result =
|
||||
_.isEmpty(params['*']) &&
|
||||
fieldSchema?.['x-component-props']?.openMode === 'page' &&
|
||||
@ -86,7 +88,11 @@ export const IsSubPageClosedByPageMenuProvider: FC = ({ children }) => {
|
||||
return result;
|
||||
}, [fieldSchema, params]);
|
||||
|
||||
const value = useMemo(() => ({ isSubPageClosedByPageMenu, setFieldSchema }), [isSubPageClosedByPageMenu]);
|
||||
const reset = useCallback(() => {
|
||||
prevParamsRef.current = {};
|
||||
}, []);
|
||||
|
||||
const value = useMemo(() => ({ isSubPageClosedByPageMenu, setFieldSchema, reset }), [isSubPageClosedByPageMenu, reset]);
|
||||
|
||||
return (
|
||||
<IsSubPageClosedByPageMenuContext.Provider value={value}>{children}</IsSubPageClosedByPageMenuContext.Provider>
|
||||
@ -242,13 +248,13 @@ export const useRouterBasename = () => {
|
||||
* @returns
|
||||
*/
|
||||
export const useIsSubPageClosedByPageMenu = (fieldSchema: Schema) => {
|
||||
const { isSubPageClosedByPageMenu, setFieldSchema } = React.useContext(IsSubPageClosedByPageMenuContext);
|
||||
const { isSubPageClosedByPageMenu, setFieldSchema, reset } = React.useContext(IsSubPageClosedByPageMenuContext);
|
||||
|
||||
useEffect(() => {
|
||||
setFieldSchema(fieldSchema);
|
||||
}, [fieldSchema, setFieldSchema]);
|
||||
|
||||
return isSubPageClosedByPageMenu;
|
||||
return { isSubPageClosedByPageMenu, reset };
|
||||
};
|
||||
|
||||
export const CustomRouterContextProvider: FC = ({ children }) => {
|
||||
|
@ -25,11 +25,13 @@ export const ActionContextProvider: React.FC<ActionContextProps & { value?: Acti
|
||||
const { visible } = { ...props, ...props.value };
|
||||
const { setSubmitted: setParentSubmitted } = { ...props, ...props.value };
|
||||
const service = useBlockServiceInActionButton();
|
||||
const isSubPageClosedByPageMenu = useIsSubPageClosedByPageMenu(useFieldSchema());
|
||||
const { isSubPageClosedByPageMenu, reset } = useIsSubPageClosedByPageMenu(useFieldSchema());
|
||||
|
||||
useEffect(() => {
|
||||
const run = async () => {
|
||||
if (visible === false && service && !service.loading && (submitted || isSubPageClosedByPageMenu)) {
|
||||
if (visible === false && service && !service.loading && (submitted || isSubPageClosedByPageMenu())) {
|
||||
reset();
|
||||
|
||||
// Prevent multiple requests from being triggered
|
||||
service.loading = true;
|
||||
await service.refreshAsync();
|
||||
@ -41,7 +43,7 @@ export const ActionContextProvider: React.FC<ActionContextProps & { value?: Acti
|
||||
};
|
||||
|
||||
run();
|
||||
}, [visible, service?.refresh, setParentSubmitted, isSubPageClosedByPageMenu]);
|
||||
}, [visible, service, setParentSubmitted, isSubPageClosedByPageMenu, submitted, reset]);
|
||||
|
||||
const value = useMemo(() => ({ ...props, ...props?.value, submitted, setSubmitted }), [props, submitted]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user