diff --git a/src/components/highlight-code/code-viewer-dark.tsx b/src/components/highlight-code/code-viewer-dark.tsx index 789418d9..f18bb42c 100644 --- a/src/components/highlight-code/code-viewer-dark.tsx +++ b/src/components/highlight-code/code-viewer-dark.tsx @@ -1,4 +1,3 @@ -import { memo } from 'react'; import CodeViewer from './code-viewer'; import './styles/dark.less'; @@ -38,4 +37,4 @@ const DarkViewer: React.FC = (props) => { ); }; -export default memo(DarkViewer); +export default DarkViewer; diff --git a/src/components/highlight-code/code-viewer-light.tsx b/src/components/highlight-code/code-viewer-light.tsx index 60d7e523..821d312c 100644 --- a/src/components/highlight-code/code-viewer-light.tsx +++ b/src/components/highlight-code/code-viewer-light.tsx @@ -1,4 +1,3 @@ -import { memo } from 'react'; import CodeViewer from './code-viewer'; import './styles/light.less'; @@ -39,4 +38,4 @@ const LightViewer: React.FC = (props) => { ); }; -export default memo(LightViewer); +export default LightViewer; diff --git a/src/components/highlight-code/code-viewer.tsx b/src/components/highlight-code/code-viewer.tsx index 8b5210ff..6047afbc 100644 --- a/src/components/highlight-code/code-viewer.tsx +++ b/src/components/highlight-code/code-viewer.tsx @@ -1,6 +1,6 @@ import classNames from 'classnames'; import hljs from 'highlight.js'; -import { memo, useMemo } from 'react'; +import { useMemo } from 'react'; import styled from 'styled-components'; import CopyButton from '../copy-button'; import { escapeHtml } from './utils'; @@ -155,4 +155,4 @@ const CodeViewer: React.FC = (props) => { ); }; -export default memo(CodeViewer); +export default CodeViewer; diff --git a/src/components/logs-viewer/xterm-viewer.tsx b/src/components/logs-viewer/xterm-viewer.tsx index 2042f707..cea7e1c4 100644 --- a/src/components/logs-viewer/xterm-viewer.tsx +++ b/src/components/logs-viewer/xterm-viewer.tsx @@ -6,7 +6,6 @@ import classNames from 'classnames'; import _ from 'lodash'; import { forwardRef, - memo, useEffect, useImperativeHandle, useRef, @@ -176,4 +175,4 @@ const LogsViewer: React.FC = forwardRef((props, ref) => { ); }); -export default memo(LogsViewer); +export default LogsViewer; diff --git a/src/config/index.ts b/src/config/index.ts index cccb8a30..0ec45e96 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -49,7 +49,7 @@ export const WatchEventType = { }; export const PasswordReg = - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*_+])[a-zA-Z\d!@#$%^&*_+]{6,12}$/; + /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*_+])[a-zA-Z\d!@#$%^&*_+]{6,32}$/; export const uppercaseReg = /(?=.*[A-Z])/; @@ -61,7 +61,7 @@ export const specialCharacterReg = /(?=.*[\W_])/; export const noSpaceReg = /(?=\S+$)/; -export const lengthReg = /^.{6,12}$/; +export const lengthReg = /^.{6,32}$/; /** * Model name rules: diff --git a/src/layouts/extraRender.tsx b/src/layouts/extraRender.tsx index 818dc85e..469c5c3a 100644 --- a/src/layouts/extraRender.tsx +++ b/src/layouts/extraRender.tsx @@ -10,30 +10,38 @@ import { DiscordOutlined, GithubOutlined, HomeOutlined, - InfoCircleOutlined, LogoutOutlined, ReadOutlined, SettingOutlined } from '@ant-design/icons'; import { history, useIntl, useNavigate } from '@umijs/max'; -import { Avatar, Divider, Modal } from 'antd'; +import { Avatar, Button, Divider, Modal } from 'antd'; import { useAtom } from 'jotai'; import { useMemo } from 'react'; import styled from 'styled-components'; import { DEFAULT_ENTER_PAGE } from '../config/settings'; +const UpdateDot = styled.span` + margin-left: 5px; + display: flex; + width: 8px; + height: 8px; + border-radius: 4px; + background-color: var(--ant-orange-5); +`; + const NewLabel = styled.span` position: relative; - bottom: 3px; + top: -4px; + right: 4px; + padding: 2px 4px; display: flex; color: #fff; - width: 36px; height: 15px; - margin-left: 5px; justify-content: center; align-items: center; background-color: var(--ant-orange-5); - border-radius: 8px 8px 8px 0; + border-radius: 6px 6px 6px 0; transform: scale(0.9); .text { @@ -187,11 +195,6 @@ export const ExtraContent = (props: { isDarkTheme?: boolean }) => { icon: , label: intl.formatMessage({ id: 'common.button.docs' }), url: externalLinks.documentation - }, - { - key: 'version', - icon: , - label: intl.formatMessage({ id: 'common.button.version' }) } ]; @@ -201,27 +204,14 @@ export const ExtraContent = (props: { isDarkTheme?: boolean }) => { label: ( {item.icon} - {item.key === 'version' ? ( - <> - {item.label} - {showUpgrade && ( - - - {intl.formatMessage({ id: 'common.text.new' })} - - - )} - - ) : ( - - {item.label} - - )} + + {item.label} + ), onClick() { @@ -301,21 +291,37 @@ export const ExtraContent = (props: { isDarkTheme?: boolean }) => { return ( {contextHolder} +
+ + {showUpgrade && ( + + + {intl.formatMessage({ id: 'common.text.new' })} + + + )} +
- - {showUpgrade && ( - - )} + diff --git a/src/pages/backends/forms/version-info.tsx b/src/pages/backends/forms/version-info.tsx index da892c33..b52f0025 100644 --- a/src/pages/backends/forms/version-info.tsx +++ b/src/pages/backends/forms/version-info.tsx @@ -168,7 +168,7 @@ const VersionList: React.FC<{ versionConfigs: VersionListItem[] }> = ({ {option.label} {data.tips ? ( - data.locale ? ( + data.tipLocale ? ( {` [${intl.formatMessage({ id: data.tips })}]`} ) : ( {` [${data.tips}]`} diff --git a/src/pages/cluster-management/hooks/use-cluster-list.ts b/src/pages/cluster-management/hooks/use-cluster-list.ts index 162918aa..5d865164 100644 --- a/src/pages/cluster-management/hooks/use-cluster-list.ts +++ b/src/pages/cluster-management/hooks/use-cluster-list.ts @@ -30,8 +30,8 @@ export default function useClusterList() { name: string; }[] >([]); - const [, setClusterListAtom] = useAtom(clusterListAtom); - const [, setWorkerListAtom] = useAtom(workerListAtom); + const [clustersAtom, setClusterListAtom] = useAtom(clusterListAtom); + const [workersAtom, setWorkerListAtom] = useAtom(workerListAtom); const fetchClusterList = async () => { try { @@ -85,6 +85,8 @@ export default function useClusterList() { return { clusterList, workerList, + clustersAtom, + workersAtom, fetchAll, fetchWorkerList, fetchClusterList diff --git a/src/pages/dashboard/components/active-table.tsx b/src/pages/dashboard/components/active-table.tsx index 61efb795..9deeec66 100644 --- a/src/pages/dashboard/components/active-table.tsx +++ b/src/pages/dashboard/components/active-table.tsx @@ -4,7 +4,7 @@ import { modelCategoriesMap } from '@/pages/llmodels/config'; import { convertFileSize } from '@/utils'; import { useIntl } from '@umijs/max'; import { Col, Row, Table } from 'antd'; -import { memo, useContext } from 'react'; +import { useContext } from 'react'; import { DashboardContext } from '../config/dashboard-context'; const NACategories = [ @@ -96,4 +96,4 @@ const ActiveTable = () => { ); }; -export default memo(ActiveTable); +export default ActiveTable; diff --git a/src/pages/dashboard/components/over-view.tsx b/src/pages/dashboard/components/over-view.tsx index 0ec4d233..f0250ff5 100644 --- a/src/pages/dashboard/components/over-view.tsx +++ b/src/pages/dashboard/components/over-view.tsx @@ -74,4 +74,4 @@ const Overview: React.FC = () => { ); }; -export default React.memo(Overview); +export default Overview; diff --git a/src/pages/dashboard/components/resource-utilization.tsx b/src/pages/dashboard/components/resource-utilization.tsx index d6001ba3..a801e6c4 100644 --- a/src/pages/dashboard/components/resource-utilization.tsx +++ b/src/pages/dashboard/components/resource-utilization.tsx @@ -2,7 +2,7 @@ import LineChart from '@/components/echarts/line-chart'; import { useIntl } from '@umijs/max'; import dayjs from 'dayjs'; import _ from 'lodash'; -import { memo, useMemo } from 'react'; +import { useMemo } from 'react'; const TypeKeyMap = { cpu: { @@ -106,4 +106,4 @@ const UtilizationOvertime: React.FC<{ ); }; -export default memo(UtilizationOvertime); +export default UtilizationOvertime; diff --git a/src/pages/dashboard/index.tsx b/src/pages/dashboard/index.tsx index 74036c33..8c584d4e 100644 --- a/src/pages/dashboard/index.tsx +++ b/src/pages/dashboard/index.tsx @@ -12,9 +12,13 @@ import { DashboardProps } from './config/types'; const Dashboard: React.FC = () => { const intl = useIntl(); - const [loading, setLoading] = useState(false); + const [loadingStatus, setLoadingStatus] = useState({ + loading: false, + loadend: false + }); const [data, setData] = useState({} as DashboardProps); - const { fetchAll, clusterList, workerList } = useClusterList(); + const { fetchAll, clusterList, workerList, clustersAtom, workersAtom } = + useClusterList(); const { noResourceResult } = useNoResourceResult({ loadend: true, @@ -47,16 +51,22 @@ const Dashboard: React.FC = () => { const initData = useMemoizedFn(async () => { try { - setLoading(true); + setLoadingStatus({ + loading: true, + loadend: false + }); const { hasClusters, hasWorkers } = await fetchAll(); if (!hasClusters || !hasWorkers) { - setLoading(false); return; } await fetchDashboardData(); - setLoading(false); } catch (error) { - setLoading(false); + // ignore + } finally { + setLoadingStatus({ + loading: false, + loadend: true + }); } }); @@ -69,11 +79,11 @@ const Dashboard: React.FC = () => { value={{ ...data, fetchData: fetchDashboardData, clusterList }} > - - {(!clusterList.length || !workerList.length) && !loading ? ( - noResourceResult - ) : loading ? null : ( + + {workersAtom.length > 0 && clustersAtom.length > 0 ? ( + ) : loadingStatus.loading || !loadingStatus.loadend ? null : ( + noResourceResult )} diff --git a/src/pages/playground/components/audio-input.tsx b/src/pages/playground/components/audio-input.tsx index b789b47c..87476983 100644 --- a/src/pages/playground/components/audio-input.tsx +++ b/src/pages/playground/components/audio-input.tsx @@ -372,4 +372,4 @@ const AudioInput: React.FC = (props) => { ); }; -export default React.memo(AudioInput); +export default AudioInput; diff --git a/src/pages/playground/components/file-list.tsx b/src/pages/playground/components/file-list.tsx index 65feaa96..49197116 100644 --- a/src/pages/playground/components/file-list.tsx +++ b/src/pages/playground/components/file-list.tsx @@ -48,4 +48,4 @@ const FileList: React.FC = (props) => { ); }; -export default React.memo(FileList); +export default FileList; diff --git a/src/pages/playground/components/model-parameters.tsx b/src/pages/playground/components/model-parameters.tsx index ebb51fbb..c3c6a831 100644 --- a/src/pages/playground/components/model-parameters.tsx +++ b/src/pages/playground/components/model-parameters.tsx @@ -4,7 +4,6 @@ import { Form } from 'antd'; import _ from 'lodash'; import React, { forwardRef, - memo, useCallback, useEffect, useId, @@ -103,4 +102,4 @@ const ParamsSettings: React.FC = forwardRef( } ); -export default memo(ParamsSettings); +export default ParamsSettings; diff --git a/src/pages/playground/components/multiple-chat/active-models.tsx b/src/pages/playground/components/multiple-chat/active-models.tsx index 9707c9f8..45b89a11 100644 --- a/src/pages/playground/components/multiple-chat/active-models.tsx +++ b/src/pages/playground/components/multiple-chat/active-models.tsx @@ -39,4 +39,4 @@ const ActiveModels: React.FC = (props) => { ); }; -export default React.memo(ActiveModels); +export default ActiveModels; diff --git a/src/pages/playground/components/multiple-chat/content-item.tsx b/src/pages/playground/components/multiple-chat/content-item.tsx index c448ef66..7eba67b3 100644 --- a/src/pages/playground/components/multiple-chat/content-item.tsx +++ b/src/pages/playground/components/multiple-chat/content-item.tsx @@ -244,4 +244,4 @@ const ContentItem: React.FC = ({ ); }; -export default React.memo(ContentItem); +export default ContentItem; diff --git a/src/pages/playground/components/multiple-chat/message-content.tsx b/src/pages/playground/components/multiple-chat/message-content.tsx index 188b5ca5..972d8b55 100644 --- a/src/pages/playground/components/multiple-chat/message-content.tsx +++ b/src/pages/playground/components/multiple-chat/message-content.tsx @@ -54,4 +54,4 @@ const MessageContent: React.FC = ({ ); }; -export default React.memo(MessageContent); +export default MessageContent; diff --git a/src/pages/playground/components/multiple-chat/model-item.tsx b/src/pages/playground/components/multiple-chat/model-item.tsx index f3280507..3f0feb33 100644 --- a/src/pages/playground/components/multiple-chat/model-item.tsx +++ b/src/pages/playground/components/multiple-chat/model-item.tsx @@ -366,4 +366,4 @@ const ModelItem: React.FC = forwardRef((props, ref) => { ); }); -export default React.memo(ModelItem); +export default ModelItem; diff --git a/src/pages/playground/components/multiple-chat/system-message.tsx b/src/pages/playground/components/multiple-chat/system-message.tsx index 6f6f5efd..da9a664a 100644 --- a/src/pages/playground/components/multiple-chat/system-message.tsx +++ b/src/pages/playground/components/multiple-chat/system-message.tsx @@ -144,4 +144,4 @@ const SystemMessage: React.FC = (props) => { ); }; -export default React.memo(SystemMessage); +export default SystemMessage; diff --git a/src/pages/playground/components/rerank-message.tsx b/src/pages/playground/components/rerank-message.tsx index 7b3cb44b..deb264d0 100644 --- a/src/pages/playground/components/rerank-message.tsx +++ b/src/pages/playground/components/rerank-message.tsx @@ -81,4 +81,4 @@ const RerankMessage: React.FC = ({ header, dataList }) => { ); }; -export default React.memo(RerankMessage); +export default RerankMessage; diff --git a/src/pages/playground/components/upload-file.tsx b/src/pages/playground/components/upload-file.tsx index a71b663e..7ff63c6d 100644 --- a/src/pages/playground/components/upload-file.tsx +++ b/src/pages/playground/components/upload-file.tsx @@ -117,4 +117,4 @@ const UploadImg: React.FC = ({ ); }; -export default React.memo(UploadImg); +export default UploadImg; diff --git a/src/pages/playground/index.tsx b/src/pages/playground/index.tsx index a275d48f..88a6b256 100644 --- a/src/pages/playground/index.tsx +++ b/src/pages/playground/index.tsx @@ -161,7 +161,7 @@ const Playground: React.FC = () => { )} ,