From 6abadc33cc54397eb4723ac1a14689b49f07591e Mon Sep 17 00:00:00 2001 From: LZS911 <932177767@qq.com> Date: Wed, 4 Dec 2024 11:22:03 +0800 Subject: [PATCH 1/2] [chore]: Remove username regex validation --- .../UserCenter/Modal/User/UserForm/index.tsx | 27 +++++++------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/packages/base/src/page/UserCenter/Modal/User/UserForm/index.tsx b/packages/base/src/page/UserCenter/Modal/User/UserForm/index.tsx index 1e457aaf7..6a5d31638 100644 --- a/packages/base/src/page/UserCenter/Modal/User/UserForm/index.tsx +++ b/packages/base/src/page/UserCenter/Modal/User/UserForm/index.tsx @@ -3,8 +3,7 @@ import { Form, Switch } from 'antd'; import { BasicInput, BasicSelect } from '@actiontech/shared'; import React, { useEffect } from 'react'; import { useTranslation } from 'react-i18next'; -import { Rule } from 'antd/es/form'; -import { nameRule, phoneRule } from '@actiontech/shared/lib/utils/FormRule'; +import { phoneRule } from '@actiontech/shared/lib/utils/FormRule'; import EmptyBox from '@actiontech/shared/lib/components/EmptyBox'; import { BasicToolTips } from '@actiontech/shared'; import useOpPermission from '../../../../../hooks/useOpPermission'; @@ -19,21 +18,6 @@ const UserForm: React.FC = (props) => { updateOpPermissionList } = useOpPermission(); - const userNameRules = (): Rule[] => { - const baseRules = [ - { - required: true, - message: t('common.form.rule.require', { - name: t('dmsUserCenter.user.userForm.username') - }) - } - ]; - if (props.isUpdate) { - return baseRules; - } - return [...baseRules, ...nameRule()]; - }; - useEffect(() => { if (props.visible) { updateOpPermissionList(ListOpPermissionsFilterByTargetEnum.user); @@ -46,7 +30,14 @@ const UserForm: React.FC = (props) => { name="username" label={t('dmsUserCenter.user.userForm.username')} validateFirst={true} - rules={userNameRules()} + rules={[ + { + required: true, + message: t('common.form.rule.require', { + name: t('dmsUserCenter.user.userForm.username') + }) + } + ]} > Date: Wed, 4 Dec 2024 11:24:09 +0800 Subject: [PATCH 2/2] [chore]: improve the code --- packages/base/src/App.tsx | 31 ++++--------- .../useSyncDmsCloudBeaverChannel/index.ts | 25 ++++++++++ packages/base/src/locale/index.ts | 2 +- packages/base/src/store/index.ts | 2 +- packages/base/src/utils/findDuplicateKeys.ts | 19 -------- .../src/utils/test/findDuplicateKeys.test.tsx | 44 ------------------ packages/shared/lib/enum/index.ts | 3 +- packages/shared/lib/utils/Common.ts | 20 ++++++++ .../shared/lib/utils/__tests__/Common.test.ts | 46 ++++++++++++++++++- packages/sqle/src/locale/index.ts | 2 +- 10 files changed, 105 insertions(+), 89 deletions(-) create mode 100644 packages/base/src/hooks/useSyncDmsCloudBeaverChannel/index.ts delete mode 100644 packages/base/src/utils/findDuplicateKeys.ts delete mode 100644 packages/base/src/utils/test/findDuplicateKeys.test.tsx diff --git a/packages/base/src/App.tsx b/packages/base/src/App.tsx index 058ef4de8..d642e1d74 100644 --- a/packages/base/src/App.tsx +++ b/packages/base/src/App.tsx @@ -7,7 +7,6 @@ import { StyledEngineProvider, ThemeProvider } from '@mui/system'; import { EmptyBox, HeaderProgress, - LocalStorageWrapper, SpinIndicator, useTypedNavigate } from '@actiontech/shared'; @@ -46,10 +45,9 @@ import usePermission from '@actiontech/shared/lib/global/usePermission/usePermis import useFetchPermissionData from './hooks/useFetchPermissionData'; import { useDispatch } from 'react-redux'; import { updateModuleFeatureSupport } from './store/permission'; -import { compressToBase64 } from 'lz-string'; - -import './index.less'; import { ROUTE_PATHS } from '@actiontech/shared/lib/data/routePaths'; +import useSyncDmsCloudBeaverChannel from './hooks/useSyncDmsCloudBeaverChannel'; +import './index.less'; dayjs.extend(updateLocale); dayjs.updateLocale('zh-cn', { @@ -69,7 +67,13 @@ export const Wrapper: React.FC<{ children: ReactNode }> = ({ children }) => { return; } setInitRenderApp(false); - if (!token && !['/login', '/user/bind'].includes(location.pathname)) { + if ( + !token && + !( + location.pathname === ROUTE_PATHS.BASE.LOGIN.index.path || + location.pathname === ROUTE_PATHS.BASE.USER_BIND.index.path + ) + ) { const currentPath = location.pathname; const currentSearch = location.search; @@ -205,22 +209,7 @@ function App() { i18n.changeLanguage(currentLanguage); }, [currentLanguage]); - useEffect(() => { - let sqleEdition; - // #if [ee] - sqleEdition = 'ee'; - // #elif [ce] - sqleEdition = 'ce'; - // #endif - if (sqleEdition !== LocalStorageWrapper.get('DMS_CB_CHANNEL')) { - LocalStorageWrapper.set( - 'DMS_CB_CHANNEL', - compressToBase64( - JSON.stringify({ type: 'sqle_edition', data: sqleEdition }) - ) - ); - } - }, []); + useSyncDmsCloudBeaverChannel(); return ( diff --git a/packages/base/src/hooks/useSyncDmsCloudBeaverChannel/index.ts b/packages/base/src/hooks/useSyncDmsCloudBeaverChannel/index.ts new file mode 100644 index 000000000..aa64675fe --- /dev/null +++ b/packages/base/src/hooks/useSyncDmsCloudBeaverChannel/index.ts @@ -0,0 +1,25 @@ +import { LocalStorageWrapper } from '@actiontech/shared'; +import { StorageKey } from '@actiontech/shared/lib/enum'; +import { compressToBase64 } from 'lz-string'; +import { useEffect } from 'react'; + +const useSyncDmsCloudBeaverChannel = () => { + useEffect(() => { + let sqleEdition; + // #if [ee] + sqleEdition = 'ee'; + // #elif [ce] + sqleEdition = 'ce'; + // #endif + if (sqleEdition !== LocalStorageWrapper.get(StorageKey.DMS_CB_CHANNEL)) { + LocalStorageWrapper.set( + StorageKey.DMS_CB_CHANNEL, + compressToBase64( + JSON.stringify({ type: 'sqle_edition', data: sqleEdition }) + ) + ); + } + }, []); +}; + +export default useSyncDmsCloudBeaverChannel; diff --git a/packages/base/src/locale/index.ts b/packages/base/src/locale/index.ts index e031e92a9..00f40778e 100644 --- a/packages/base/src/locale/index.ts +++ b/packages/base/src/locale/index.ts @@ -10,8 +10,8 @@ import enUS from './en-US'; import { TOptions } from 'i18next'; import { LocalStorageWrapper } from '@actiontech/shared'; import { TemplateKeyPath } from '@actiontech/shared/lib/types/common.type'; -import { findDuplicateKeys } from '../utils/findDuplicateKeys'; import { DEFAULT_LANGUAGE } from '@actiontech/shared/lib/locale'; +import { findDuplicateKeys } from '@actiontech/shared/lib/utils/Common'; // #if [DEV] const zh_dupKeys = findDuplicateKeys([ diff --git a/packages/base/src/store/index.ts b/packages/base/src/store/index.ts index ed4d12e27..dca145736 100644 --- a/packages/base/src/store/index.ts +++ b/packages/base/src/store/index.ts @@ -1,7 +1,7 @@ import { configureStore } from '@reduxjs/toolkit'; import { baseStoreData } from './base'; import { SQLEStoreData } from 'sqle/src/store'; -import { findDuplicateKeys } from '../utils/findDuplicateKeys'; +import { findDuplicateKeys } from '@actiontech/shared/lib/utils/Common'; // #if [DEV] const dupKeys = findDuplicateKeys([baseStoreData, SQLEStoreData]); diff --git a/packages/base/src/utils/findDuplicateKeys.ts b/packages/base/src/utils/findDuplicateKeys.ts deleted file mode 100644 index 4b40227c6..000000000 --- a/packages/base/src/utils/findDuplicateKeys.ts +++ /dev/null @@ -1,19 +0,0 @@ -export const findDuplicateKeys: (objects: Record[]) => string[] = ( - objects -) => { - const keys = new Map(); - const duplicates: string[] = []; - - objects.forEach((obj) => { - Object.keys(obj).forEach((key) => { - if (!keys.has(key)) { - keys.set(key, 1); - } else if (keys.get(key) === 1) { - duplicates.push(key); - keys.set(key, keys.get(key)! + 1); - } - }); - }); - - return duplicates; -}; diff --git a/packages/base/src/utils/test/findDuplicateKeys.test.tsx b/packages/base/src/utils/test/findDuplicateKeys.test.tsx deleted file mode 100644 index 1ab35992e..000000000 --- a/packages/base/src/utils/test/findDuplicateKeys.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { findDuplicateKeys } from '../findDuplicateKeys'; - -describe('utils/findDuplicateKeys', () => { - it('render when obj has same key', () => { - const objA = { - a: '1' - }; - const objB = { - a: '2', - b: '1' - }; - const result = findDuplicateKeys([objA, objB]); - expect(result.length).toBe(1); - expect(result).toEqual(['a']); - }); - - it('render more obj when obj has same key', () => { - const objA = { - c: '1', - e: { - a: '2' - } - }; - const objB = { - a: '2', - b: '1' - }; - const result = findDuplicateKeys([objA, objB]); - expect(result.length).toBe(0); - expect(result).toEqual([]); - }); - - it('render when obj no same key', () => { - const objA = { - a: '1' - }; - const objB = { - b: '2' - }; - const result = findDuplicateKeys([objA, objB]); - expect(result.length).toBe(0); - expect(result).toEqual([]); - }); -}); diff --git a/packages/shared/lib/enum/index.ts b/packages/shared/lib/enum/index.ts index dbb37d1b0..2075d077e 100644 --- a/packages/shared/lib/enum/index.ts +++ b/packages/shared/lib/enum/index.ts @@ -60,7 +60,8 @@ export enum StorageKey { Token = 'TOKEN', DMS_Project_Catch = 'DMS_Project_Catch', USER_UID = 'DMS_USER_UID', - SHOW_COMPANY_NOTICE = 'SHOW_COMPANY_NOTICE' + SHOW_COMPANY_NOTICE = 'SHOW_COMPANY_NOTICE', + DMS_CB_CHANNEL = 'DMS_CB_CHANNEL' } /** diff --git a/packages/shared/lib/utils/Common.ts b/packages/shared/lib/utils/Common.ts index 6c69b2018..40c52838c 100644 --- a/packages/shared/lib/utils/Common.ts +++ b/packages/shared/lib/utils/Common.ts @@ -13,6 +13,26 @@ export const emailValidate = (email: string): boolean => { return reg.test(email); }; +export const findDuplicateKeys: (objects: Record[]) => string[] = ( + objects +) => { + const keys = new Map(); + const duplicates: string[] = []; + + objects.forEach((obj) => { + Object.keys(obj).forEach((key) => { + if (!keys.has(key)) { + keys.set(key, 1); + } else if (keys.get(key) === 1) { + duplicates.push(key); + keys.set(key, keys.get(key)! + 1); + } + }); + }); + + return duplicates; +}; + export const integerValidate = (value: string): boolean => { const reg = /^\d+$/; diff --git a/packages/shared/lib/utils/__tests__/Common.test.ts b/packages/shared/lib/utils/__tests__/Common.test.ts index ff58e3107..6d2ac2a37 100644 --- a/packages/shared/lib/utils/__tests__/Common.test.ts +++ b/packages/shared/lib/utils/__tests__/Common.test.ts @@ -13,7 +13,8 @@ import { isFileStreamResponse, getFileFromUploadChangeEvent, jsonParse, - translateTimeForRequest + translateTimeForRequest, + findDuplicateKeys } from '../Common'; import { act } from '@testing-library/react'; import 'blob-polyfill'; @@ -288,4 +289,47 @@ describe('utils/Common', () => { value: '' }); }); + + describe('utils/findDuplicateKeys', () => { + it('render when obj has same key', () => { + const objA = { + a: '1' + }; + const objB = { + a: '2', + b: '1' + }; + const result = findDuplicateKeys([objA, objB]); + expect(result.length).toBe(1); + expect(result).toEqual(['a']); + }); + + it('render more obj when obj has same key', () => { + const objA = { + c: '1', + e: { + a: '2' + } + }; + const objB = { + a: '2', + b: '1' + }; + const result = findDuplicateKeys([objA, objB]); + expect(result.length).toBe(0); + expect(result).toEqual([]); + }); + + it('render when obj no same key', () => { + const objA = { + a: '1' + }; + const objB = { + b: '2' + }; + const result = findDuplicateKeys([objA, objB]); + expect(result.length).toBe(0); + expect(result).toEqual([]); + }); + }); }); diff --git a/packages/sqle/src/locale/index.ts b/packages/sqle/src/locale/index.ts index 046a44e26..6250e6441 100644 --- a/packages/sqle/src/locale/index.ts +++ b/packages/sqle/src/locale/index.ts @@ -11,8 +11,8 @@ import { Dictionary, TemplateKeyPath } from '@actiontech/shared/lib/types/common.type'; -import { findDuplicateKeys } from '../../../base/src/utils/findDuplicateKeys'; import { DEFAULT_LANGUAGE } from '@actiontech/shared/lib/locale'; +import { findDuplicateKeys } from '@actiontech/shared/lib/utils/Common'; // #if [DEV] const zh_dupKeys = findDuplicateKeys([