From 03ceb2aac5a47d7127562f2855d41da5c58b81bf Mon Sep 17 00:00:00 2001 From: Netfan Date: Fri, 21 Mar 2025 16:06:14 +0800 Subject: [PATCH] fix: default value for nested fields (#5763) --- packages/@core/base/shared/package.json | 2 + packages/@core/base/shared/src/utils/index.ts | 1 + .../ui-kit/form-ui/src/use-form-context.ts | 10 ++-- pnpm-lock.yaml | 52 ++++++++++++++----- pnpm-workspace.yaml | 2 + 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/packages/@core/base/shared/package.json b/packages/@core/base/shared/package.json index ebf481bf..70ad17c3 100644 --- a/packages/@core/base/shared/package.json +++ b/packages/@core/base/shared/package.json @@ -88,6 +88,7 @@ "lodash.clonedeep": "catalog:", "lodash.get": "catalog:", "lodash.isequal": "catalog:", + "lodash.set": "catalog:", "nprogress": "catalog:", "tailwind-merge": "catalog:", "theme-colors": "catalog:" @@ -96,6 +97,7 @@ "@types/lodash.clonedeep": "catalog:", "@types/lodash.get": "catalog:", "@types/lodash.isequal": "catalog:", + "@types/lodash.set": "catalog:", "@types/nprogress": "catalog:" } } diff --git a/packages/@core/base/shared/src/utils/index.ts b/packages/@core/base/shared/src/utils/index.ts index 1bf09c71..925af1c1 100644 --- a/packages/@core/base/shared/src/utils/index.ts +++ b/packages/@core/base/shared/src/utils/index.ts @@ -17,3 +17,4 @@ export * from './window'; export { default as cloneDeep } from 'lodash.clonedeep'; export { default as get } from 'lodash.get'; export { default as isEqual } from 'lodash.isequal'; +export { default as set } from 'lodash.set'; diff --git a/packages/@core/ui-kit/form-ui/src/use-form-context.ts b/packages/@core/ui-kit/form-ui/src/use-form-context.ts index 0374cf32..60148bfb 100644 --- a/packages/@core/ui-kit/form-ui/src/use-form-context.ts +++ b/packages/@core/ui-kit/form-ui/src/use-form-context.ts @@ -7,7 +7,7 @@ import type { ExtendedFormApi, FormActions, VbenFormProps } from './types'; import { computed, unref, useSlots } from 'vue'; import { createContext } from '@vben-core/shadcn-ui'; -import { isString } from '@vben-core/shared/utils'; +import { isString, mergeWithArrayOverride, set } from '@vben-core/shared/utils'; import { useForm } from 'vee-validate'; import { object } from 'zod'; @@ -50,7 +50,7 @@ export function useFormInitial( const zodObject: ZodRawShape = {}; (unref(props).schema || []).forEach((item) => { if (Reflect.has(item, 'defaultValue')) { - initialValues[item.fieldName] = item.defaultValue; + set(initialValues, item.fieldName, item.defaultValue); } else if (item.rules && !isString(item.rules)) { zodObject[item.fieldName] = item.rules; } @@ -58,7 +58,11 @@ export function useFormInitial( const schemaInitialValues = getDefaultsForSchema(object(zodObject)); - return { ...initialValues, ...schemaInitialValues }; + const zodDefaults: Record = {}; + for (const key in schemaInitialValues) { + set(zodDefaults, key, schemaInitialValues[key]); + } + return mergeWithArrayOverride(initialValues, zodDefaults); } return { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 35e1b4a2..ec1fb451 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -96,6 +96,9 @@ catalogs: '@types/lodash.isequal': specifier: ^4.5.8 version: 4.5.8 + '@types/lodash.set': + specifier: ^4.3.2 + version: 4.3.9 '@types/node': specifier: ^22.13.10 version: 22.13.10 @@ -306,6 +309,9 @@ catalogs: lodash.isequal: specifier: ^4.5.0 version: 4.5.0 + lodash.set: + specifier: ^4.3.2 + version: 4.3.2 lucide-vue-next: specifier: ^0.469.0 version: 0.469.0 @@ -1240,6 +1246,9 @@ importers: lodash.isequal: specifier: 'catalog:' version: 4.5.0 + lodash.set: + specifier: 'catalog:' + version: 4.3.2 nprogress: specifier: 'catalog:' version: 0.2.0 @@ -1259,6 +1268,9 @@ importers: '@types/lodash.isequal': specifier: 'catalog:' version: 4.5.8 + '@types/lodash.set': + specifier: 'catalog:' + version: 4.3.9 '@types/nprogress': specifier: 'catalog:' version: 0.2.3 @@ -3534,22 +3546,22 @@ packages: resolution: {integrity: sha512-nmG512G8QOABsserleechwHGZxzKSAlggGf9hQX0nltvSwyKNVuB/4o6iFeG2OnjXK253r8p8eSDOZf8PgFdWw==} engines: {node: '>= 16'} - '@intlify/message-compiler@11.0.0-rc.1': - resolution: {integrity: sha512-TGw2uBfuTFTegZf/BHtUQBEKxl7Q/dVGLoqRIdw8lFsp9g/53sYn5iD+0HxIzdYjbWL6BTJMXCPUHp9PxDTRPw==} - engines: {node: '>= 16'} - '@intlify/message-compiler@11.1.2': resolution: {integrity: sha512-T/xbNDzi+Yv0Qn2Dfz2CWCAJiwNgU5d95EhhAEf4YmOgjCKktpfpiUSmLcBvK1CtLpPQ85AMMQk/2NCcXnNj1g==} engines: {node: '>= 16'} - '@intlify/shared@11.0.0-rc.1': - resolution: {integrity: sha512-8tR1xe7ZEbkabTuE/tNhzpolygUn9OaYp9yuYAF4MgDNZg06C3Qny80bes2/e9/Wm3aVkPUlCw6WgU7mQd0yEg==} + '@intlify/message-compiler@12.0.0-alpha.2': + resolution: {integrity: sha512-PD9C+oQbb7BF52hec0+vLnScaFkvnfX+R7zSbODYuRo/E2niAtGmHd0wPvEMsDhf9Z9b8f/qyDsVeZnD/ya9Ug==} engines: {node: '>= 16'} '@intlify/shared@11.1.2': resolution: {integrity: sha512-dF2iMMy8P9uKVHV/20LA1ulFLL+MKSbfMiixSmn6fpwqzvix38OIc7ebgnFbBqElvghZCW9ACtzKTGKsTGTWGA==} engines: {node: '>= 16'} + '@intlify/shared@12.0.0-alpha.2': + resolution: {integrity: sha512-P2DULVX9nz3y8zKNqLw9Es1aAgQ1JGC+kgpx5q7yLmrnAKkPR5MybQWoEhxanefNJgUY5ehsgo+GKif59SrncA==} + engines: {node: '>= 16'} + '@intlify/unplugin-vue-i18n@6.0.3': resolution: {integrity: sha512-9ZDjBlhUHtgjRl23TVcgfJttgu8cNepwVhWvOv3mUMRDAhjW0pur1mWKEUKr1I8PNwE4Gvv2IQ1xcl4RL0nG0g==} engines: {node: '>= 18'} @@ -4277,6 +4289,9 @@ packages: '@types/lodash.isequal@4.5.8': resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==} + '@types/lodash.set@4.3.9': + resolution: {integrity: sha512-KOxyNkZpbaggVmqbpr82N2tDVTx05/3/j0f50Es1prxrWB0XYf9p3QNxqcbWb7P1Q9wlvsUSlCFnwlPCIJ46PQ==} + '@types/lodash@4.17.16': resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} @@ -7318,6 +7333,9 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.set@4.3.2: + resolution: {integrity: sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==} + lodash.snakecase@4.1.1: resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} @@ -12279,8 +12297,8 @@ snapshots: '@intlify/bundle-utils@10.0.0(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))': dependencies: - '@intlify/message-compiler': 11.0.0-rc.1 - '@intlify/shared': 11.0.0-rc.1 + '@intlify/message-compiler': 12.0.0-alpha.2 + '@intlify/shared': 12.0.0-alpha.2 acorn: 8.14.1 escodegen: 2.1.0 estree-walker: 2.0.2 @@ -12296,20 +12314,20 @@ snapshots: '@intlify/message-compiler': 11.1.2 '@intlify/shared': 11.1.2 - '@intlify/message-compiler@11.0.0-rc.1': - dependencies: - '@intlify/shared': 11.0.0-rc.1 - source-map-js: 1.2.1 - '@intlify/message-compiler@11.1.2': dependencies: '@intlify/shared': 11.1.2 source-map-js: 1.2.1 - '@intlify/shared@11.0.0-rc.1': {} + '@intlify/message-compiler@12.0.0-alpha.2': + dependencies: + '@intlify/shared': 12.0.0-alpha.2 + source-map-js: 1.2.1 '@intlify/shared@11.1.2': {} + '@intlify/shared@12.0.0-alpha.2': {} + '@intlify/unplugin-vue-i18n@6.0.3(@vue/compiler-dom@3.5.13)(eslint@9.22.0(jiti@2.4.2))(rollup@4.35.0)(typescript@5.8.2)(vue-i18n@11.1.2(vue@3.5.13(typescript@5.8.2)))(vue@3.5.13(typescript@5.8.2))': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) @@ -13103,6 +13121,10 @@ snapshots: dependencies: '@types/lodash': 4.17.16 + '@types/lodash.set@4.3.9': + dependencies: + '@types/lodash': 4.17.16 + '@types/lodash@4.17.16': {} '@types/markdown-it@14.1.2': @@ -16558,6 +16580,8 @@ snapshots: lodash.once@4.1.1: {} + lodash.set@4.3.2: {} + lodash.snakecase@4.1.1: {} lodash.sortby@4.7.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 438335b5..06081dac 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -45,6 +45,7 @@ catalog: '@types/lodash.clonedeep': ^4.5.9 '@types/lodash.get': ^4.4.9 '@types/lodash.isequal': ^4.5.8 + '@types/lodash.set': ^4.3.2 '@types/node': ^22.13.10 '@types/nprogress': ^0.2.3 '@types/postcss-import': ^14.0.3 @@ -116,6 +117,7 @@ catalog: lint-staged: ^15.4.3 lodash.clonedeep: ^4.5.0 lodash.get: ^4.4.2 + lodash.set: ^4.3.2 lodash.isequal: ^4.5.0 lucide-vue-next: ^0.469.0 medium-zoom: ^1.1.0