diff --git a/packages/core/client/src/route-switch/antd/admin-layout/index.tsx b/packages/core/client/src/route-switch/antd/admin-layout/index.tsx index 2375f67677..50870551a9 100644 --- a/packages/core/client/src/route-switch/antd/admin-layout/index.tsx +++ b/packages/core/client/src/route-switch/antd/admin-layout/index.tsx @@ -8,7 +8,7 @@ */ import { EllipsisOutlined } from '@ant-design/icons'; -import ProLayout, { RouteContext } from '@ant-design/pro-layout'; +import ProLayout, { RouteContext, RouteContextType } from '@ant-design/pro-layout'; import { HeaderViewProps } from '@ant-design/pro-layout/es/components/Header'; import { css } from '@emotion/css'; import { theme as antdTheme, ConfigProvider, Popover, Tooltip } from 'antd'; @@ -53,7 +53,6 @@ import { KeepAlive } from './KeepAlive'; import { NocoBaseDesktopRoute, NocoBaseDesktopRouteType } from './convertRoutesToSchema'; import { MenuSchemaToolbar, ResetThemeTokenAndKeepAlgorithm } from './menuItemSettings'; import { userCenterSettings } from './userCenterSettings'; -import { isMobile } from 'react-device-detect'; export { KeepAlive, NocoBaseDesktopRouteType }; @@ -76,7 +75,7 @@ const AllAccessDesktopRoutesContext = createContext<{ refresh: () => void; }>({ allAccessRoutes: emptyArray, - refresh: () => { }, + refresh: () => {}, }); AllAccessDesktopRoutesContext.displayName = 'AllAccessDesktopRoutesContext'; @@ -565,11 +564,11 @@ const IsMobileLayoutContext = React.createContext<{ setIsMobileLayout: React.Dispatch>; }>({ isMobileLayout: false, - setIsMobileLayout: () => { }, + setIsMobileLayout: () => {}, }); const MobileLayoutProvider: FC = (props) => { - const [isMobileLayout, setIsMobileLayout] = useState(isMobile); + const [isMobileLayout, setIsMobileLayout] = useState(false); const value = useMemo(() => ({ isMobileLayout, setIsMobileLayout }), [isMobileLayout]); return {props.children}; @@ -586,7 +585,7 @@ export const InternalAdminLayout = () => { const location = useLocation(); const { onDragEnd } = useMenuDragEnd(); const { token } = useToken(); - const { isMobileLayout } = useMobileLayout(); + const { isMobileLayout, setIsMobileLayout } = useMobileLayout(); const [collapsed, setCollapsed] = useState(isMobileLayout); const doNotChangeCollapsedRef = useRef(false); const { t } = useMenuTranslation(); @@ -681,9 +680,21 @@ export const InternalAdminLayout = () => { onPageChange={onPageChange} menuProps={menuProps} > - - - + + {(value: RouteContextType) => { + const { isMobile: _isMobile } = value; + + if (_isMobile !== isMobileLayout) { + setIsMobileLayout(_isMobile); + } + + return ( + + + + ); + }} + ); diff --git a/packages/plugins/@nocobase/plugin-public-forms/src/client/components/PublicFormPage.tsx b/packages/plugins/@nocobase/plugin-public-forms/src/client/components/PublicFormPage.tsx index 3e8635b3dd..f9af7fba98 100644 --- a/packages/plugins/@nocobase/plugin-public-forms/src/client/components/PublicFormPage.tsx +++ b/packages/plugins/@nocobase/plugin-public-forms/src/client/components/PublicFormPage.tsx @@ -33,7 +33,7 @@ import { import { Input, Modal, Spin } from 'antd'; import { useTranslation } from 'react-i18next'; import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; -import { isDesktop } from 'react-device-detect'; +import { isDesktop, isMobile } from 'react-device-detect'; import { useParams } from 'react-router'; import { usePublicSubmitActionProps } from '../hooks'; import { UnEnabledFormPlaceholder, UnFoundFormPlaceholder } from './UnEnabledFormPlaceholder'; @@ -129,9 +129,6 @@ const PublicFormMessageProvider = ({ children }) => { ); }; -function isMobile() { - return window.matchMedia('(max-width: 768px)').matches; -} const AssociationFieldMobile = (props) => { return ; @@ -165,7 +162,6 @@ const mobileComponents = { function InternalPublicForm() { const params = useParams(); const apiClient = useAPIClient(); - const isMobileMedia = isMobile(); const { error, data, loading, run } = useRequest( { url: `publicForms:getMeta/${params.name}`, @@ -243,7 +239,7 @@ function InternalPublicForm() { if (!data?.data) { return ; } - const components = isMobileMedia ? mobileComponents : {}; + const components = isMobile ? mobileComponents : {}; return (