diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f7dc8a51fc..c2a60167bbc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1632,8 +1632,8 @@ importers: specifier: workspace:^ version: link:../packages/sdk tushan: - specifier: ^0.2.2 - version: 0.2.2(ts-node@10.9.1) + specifier: ^0.2.3 + version: 0.2.3(ts-node@10.9.1) vite-express: specifier: ^0.5.4 version: 0.5.4(express@4.18.2)(vite@4.2.0) @@ -19923,6 +19923,18 @@ packages: - encoding dev: false + /flux@4.0.3(react@18.2.0): + resolution: {integrity: sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==} + peerDependencies: + react: ^15.0.2 || ^16.0.0 || ^17.0.0 + dependencies: + fbemitter: 3.0.0 + fbjs: 3.0.4 + react: 18.2.0 + transitivePeerDependencies: + - encoding + dev: false + /focus-lock@0.11.6: resolution: {integrity: sha512-KSuV3ur4gf2KqMNoZx3nXNVhqCkn42GuTYCX4tXPEwf0MjpFQmNMiN6m7dXaUXgIoivL6/65agoUMg4RLS0Vbg==} engines: {node: '>=10'} @@ -30057,6 +30069,23 @@ packages: - encoding dev: false + /react-json-view@1.21.3(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==} + peerDependencies: + react: ^17.0.0 || ^16.3.0 || ^15.5.4 + react-dom: ^17.0.0 || ^16.3.0 || ^15.5.4 + dependencies: + flux: 4.0.3(react@18.2.0) + react: 18.2.0 + react-base16-styling: 0.6.0 + react-dom: 18.2.0(react@18.2.0) + react-lifecycles-compat: 3.0.4 + react-textarea-autosize: 8.4.0(@types/react@18.0.20)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + - encoding + dev: false + /react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} dev: false @@ -30294,6 +30323,20 @@ packages: - '@types/react' dev: false + /react-textarea-autosize@8.4.0(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==} + engines: {node: '>=10'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + '@babel/runtime': 7.21.0 + react: 18.2.0 + use-composed-ref: 1.3.0(react@18.2.0) + use-latest: 1.2.1(@types/react@18.0.20)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: @@ -34308,8 +34351,8 @@ packages: domino: 2.1.6 dev: false - /tushan@0.2.2(ts-node@10.9.1): - resolution: {integrity: sha512-7Nxw5Ru9kQ8XyPZDgeS0CLRd0cbMs4INDgDt9kSUvqphnFdp7bMrG9FQGh+2RNYG65JIDZGhsR83Uv9wg2Esrg==} + /tushan@0.2.3(ts-node@10.9.1): + resolution: {integrity: sha512-ac45lQIM5jyPmu2rFpOM3QDyx6MNnL+um0NMl+u2YMOIDS86ygUYhEoH+6pLYQDRQtPkKmVsTu9EUEFHMp0/4Q==} dependencies: '@arco-design/web-react': 2.47.1(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': 4.29.3(react-dom@18.2.0)(react@18.2.0) @@ -34327,6 +34370,7 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-is: 18.2.0 + react-json-view: 1.21.3(@types/react@18.0.20)(react-dom@18.2.0)(react@18.2.0) react-router: 6.11.0(react@18.2.0) react-router-dom: 6.11.0(react-dom@18.2.0)(react@18.2.0) styled-components: 5.3.10(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) @@ -34335,6 +34379,7 @@ packages: zustand: 4.3.6(immer@9.0.21)(react@18.2.0) transitivePeerDependencies: - debug + - encoding - react-native - ts-node dev: false @@ -34960,6 +35005,14 @@ packages: react: 17.0.2 dev: false + /use-composed-ref@1.3.0(react@18.2.0): + resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /use-isomorphic-layout-effect@1.1.2(@types/react@18.0.20)(react@17.0.2): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: @@ -35000,6 +35053,20 @@ packages: use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.20)(react@17.0.2) dev: false + /use-latest@1.2.1(@types/react@18.0.20)(react@18.2.0): + resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.0.20 + react: 18.2.0 + use-isomorphic-layout-effect: 1.1.2(@types/react@18.0.20)(react@18.2.0) + dev: false + /use-previous@1.1.0(@types/react@18.0.20)(react@18.2.0): resolution: {integrity: sha512-t6ltKuYIpvcqD+VBnlUOaT+N94bN7HwUdB1u7rSpCIh9XvMJQIjsw/G8DoJlSDh029khFQ2L8q88oUWfKoWy5w==} peerDependencies: diff --git a/server/admin-next/package.json b/server/admin-next/package.json index e94bdee58a1..91932672fd4 100644 --- a/server/admin-next/package.json +++ b/server/admin-next/package.json @@ -23,7 +23,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tailchat-server-sdk": "workspace:^", - "tushan": "^0.2.2", + "tushan": "^0.2.3", "vite-express": "^0.5.4" }, "devDependencies": { diff --git a/server/admin-next/src/client/fields.ts b/server/admin-next/src/client/fields.ts index 6715fc095b1..a210e8f202c 100644 --- a/server/admin-next/src/client/fields.ts +++ b/server/admin-next/src/client/fields.ts @@ -6,6 +6,7 @@ import { createJSONField, createDateTimeField, createUrlField, + emailValidator, } from 'tushan'; import { createFileSizeField } from './components/field/filesize'; @@ -18,12 +19,32 @@ export const userFields = [ }), createEmailField('email', { label: 'Email', + edit: { + rules: [ + { + required: true, + }, + { + validator: emailValidator, + }, + ], + }, }), createTextField('nickname', { label: 'Nickname', }), createTextField('discriminator', { label: 'Discriminator', + edit: { + rules: [ + { + required: true, + }, + { + match: /\d{4}/, + }, + ], + }, }), createBooleanField('temporary', { label: 'Temporary',