From d8e5ee9cac006e5190931d053f9bf3c374a675fd Mon Sep 17 00:00:00 2001 From: kchobantonov Date: Tue, 14 May 2024 09:08:17 -0400 Subject: [PATCH 01/69] fix createDefaultValue --- vue-vuetify/src/additional/ListWithDetailRenderer.vue | 2 +- vue-vuetify/src/complex/ArrayControlRenderer.vue | 2 +- vue-vuetify/src/complex/OneOfRenderer.vue | 3 ++- vue-vuetify/src/complex/OneOfTabRenderer.vue | 5 ++++- .../src/complex/components/AdditionalProperties.vue | 8 ++++++-- vue-vuetify/src/layouts/ArrayLayoutRenderer.vue | 2 +- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/vue-vuetify/src/additional/ListWithDetailRenderer.vue b/vue-vuetify/src/additional/ListWithDetailRenderer.vue index 2c17b3f2..1809408e 100644 --- a/vue-vuetify/src/additional/ListWithDetailRenderer.vue +++ b/vue-vuetify/src/additional/ListWithDetailRenderer.vue @@ -305,7 +305,7 @@ const controlRenderer = defineComponent({ addButtonClick() { this.addItem( this.control.path, - createDefaultValue(this.control.schema) + createDefaultValue(this.control.schema, this.control.rootSchema) )(); }, moveUpClick(event: Event, toMove: number): void { diff --git a/vue-vuetify/src/complex/ArrayControlRenderer.vue b/vue-vuetify/src/complex/ArrayControlRenderer.vue index c4531185..f28578c9 100644 --- a/vue-vuetify/src/complex/ArrayControlRenderer.vue +++ b/vue-vuetify/src/complex/ArrayControlRenderer.vue @@ -255,7 +255,7 @@ const controlRenderer = defineComponent({ addButtonClick() { this.addItem( this.control.path, - createDefaultValue(this.control.schema) + createDefaultValue(this.control.schema, this.control.rootSchema) )(); }, moveUpClick(event: Event, toMove: number): void { diff --git a/vue-vuetify/src/complex/OneOfRenderer.vue b/vue-vuetify/src/complex/OneOfRenderer.vue index 7c0403f1..e92e467e 100644 --- a/vue-vuetify/src/complex/OneOfRenderer.vue +++ b/vue-vuetify/src/complex/OneOfRenderer.vue @@ -185,7 +185,8 @@ const controlRenderer = defineComponent({ this.path, this.newSelectedIndex !== undefined && this.newSelectedIndex !== null ? createDefaultValue( - this.indexedOneOfRenderInfos[this.newSelectedIndex].schema + this.indexedOneOfRenderInfos[this.newSelectedIndex].schema, + this.control.rootSchema ) : {} ); diff --git a/vue-vuetify/src/complex/OneOfTabRenderer.vue b/vue-vuetify/src/complex/OneOfTabRenderer.vue index 4e8a21f4..faf12c70 100644 --- a/vue-vuetify/src/complex/OneOfTabRenderer.vue +++ b/vue-vuetify/src/complex/OneOfTabRenderer.vue @@ -171,7 +171,10 @@ const controlRenderer = defineComponent({ openNewTab(): void { this.handleChange( this.path, - createDefaultValue(this.oneOfRenderInfos[this.newSelectedIndex].schema) + createDefaultValue( + this.oneOfRenderInfos[this.newSelectedIndex].schema, + this.control.rootSchema + ) ); this.tabIndex = this.newSelectedIndex; this.selectedIndex = this.newSelectedIndex; diff --git a/vue-vuetify/src/complex/components/AdditionalProperties.vue b/vue-vuetify/src/complex/components/AdditionalProperties.vue index b12b8cee..7b6fdf02 100644 --- a/vue-vuetify/src/complex/components/AdditionalProperties.vue +++ b/vue-vuetify/src/complex/components/AdditionalProperties.vue @@ -425,7 +425,10 @@ export default defineComponent({ (newData[ap.propertyName] === null && ap.schema.type !== 'null')) // createDefaultValue will return null only when the ap.schema.type is 'null' ) { - const newValue = createDefaultValue(ap.schema); + const newValue = createDefaultValue( + ap.schema, + this.control.rootSchema + ); hasChanges = newData[ap.propertyName] !== newValue; newData[ap.propertyName] = newValue; } @@ -466,7 +469,8 @@ export default defineComponent({ additionalProperty.schema ) { this.control.data[this.newPropertyName] = createDefaultValue( - additionalProperty.schema + additionalProperty.schema, + this.control.rootSchema ); // we need always to preserve the key even when the value is "empty" this.input.handleChange(this.control.path, this.control.data); diff --git a/vue-vuetify/src/layouts/ArrayLayoutRenderer.vue b/vue-vuetify/src/layouts/ArrayLayoutRenderer.vue index b107b674..aa5729b4 100644 --- a/vue-vuetify/src/layouts/ArrayLayoutRenderer.vue +++ b/vue-vuetify/src/layouts/ArrayLayoutRenderer.vue @@ -411,7 +411,7 @@ const controlRenderer = defineComponent({ addButtonClick() { this.addItem( this.control.path, - createDefaultValue(this.control.schema) + createDefaultValue(this.control.schema, this.control.rootSchema) )(); if (!this.appliedOptions.collapseNewItems && this.control.data?.length) { this.currentlyExpanded = this.dataLength - 1; From 90f4aa97c9e645795cfd89ada40f387fc147cab0 Mon Sep 17 00:00:00 2001 From: Krasimir Chobantonov Date: Wed, 15 May 2024 02:45:34 -0400 Subject: [PATCH 02/69] initrial changes to the example project to migate to vite and latest stack --- example/babel.config.js | 3 - example/env.d.ts | 1 + example/index.html | 18 + example/package.json | 66 +- example/public/index.html | 19 - example/src/App.vue | 10 +- example/src/components/DemoForm.vue | 264 +- example/src/components/MonacoEditor.vue | 280 +- example/src/components/Settings.vue | 131 +- example/src/components/ThemeChanger.vue | 193 +- example/src/core/jsonSchemaValidation.ts | 17 +- example/src/core/jsonschema/index.ts | 4 +- example/src/core/monaco.ts | 28 + example/src/core/types.ts | 7 +- .../examples/additionalProperties/index.ts | 2 +- .../src/examples/allOf-with-props/index.ts | 2 +- example/src/examples/allOf/index.ts | 2 +- example/src/examples/anyOf-simple/index.ts | 2 +- .../src/examples/anyOf-with-props/index.ts | 2 +- example/src/examples/anyOf/index.ts | 2 +- example/src/examples/array-restrict/index.ts | 2 +- .../src/examples/array-with-reorder/index.ts | 2 +- example/src/examples/array/index.ts | 2 +- example/src/examples/basic/index.ts | 2 +- .../categorization-stepper-nav/index.ts | 2 +- .../examples/categorization-stepper/index.ts | 2 +- example/src/examples/categorization/index.ts | 2 +- example/src/examples/control-options/index.ts | 2 +- example/src/examples/control/index.ts | 2 +- .../custom-renderer/CustomArrayRenderer.vue | 4 +- example/src/examples/custom-renderer/index.ts | 2 +- example/src/examples/date/index.ts | 2 +- example/src/examples/datetime/index.ts | 2 +- example/src/examples/enum-in-array/index.ts | 2 +- example/src/examples/enum/index.ts | 2 +- example/src/examples/group-layout/index.ts | 2 +- .../src/examples/horizontal-layout/index.ts | 2 +- example/src/examples/huge/index.ts | 2 +- example/src/examples/if-then-else/index.ts | 2 +- example/src/examples/index.ts | 3 +- .../list-with-details-and-reorder/index.ts | 2 +- .../list-with-details-restrict/index.ts | 2 +- .../src/examples/list-with-details/index.ts | 2 +- example/src/examples/login/index.ts | 2 +- example/src/examples/main/index.ts | 2 +- example/src/examples/multi-enum/index.ts | 2 +- .../examples/nested-array-restrict/index.ts | 2 +- .../nested-array-with-reorder/index.ts | 2 +- example/src/examples/nested-array/index.ts | 2 +- example/src/examples/nested-layout/index.ts | 2 +- example/src/examples/no-schemas/index.ts | 2 +- example/src/examples/no-ui-schema/index.ts | 2 +- example/src/examples/object-nested/index.ts | 2 +- example/src/examples/object/index.ts | 2 +- example/src/examples/oneOf-recursive/index.ts | 2 +- example/src/examples/oneOf-tab/index.ts | 2 +- .../src/examples/oneOf-with-props/index.ts | 2 +- example/src/examples/oneOf/index.ts | 2 +- example/src/examples/radio-group/index.ts | 2 +- example/src/examples/radio/index.ts | 2 +- example/src/examples/root-object/index.ts | 2 +- example/src/examples/rule/index.ts | 2 +- example/src/examples/time/index.ts | 2 +- example/src/examples/vertical-layout/index.ts | 2 +- example/src/i18n/i18n.ts | 2 +- example/src/layouts/default/AppBar.vue | 64 +- example/src/layouts/default/Drawer.vue | 46 +- example/src/layouts/default/View.vue | 8 +- example/src/layouts/default/index.vue | 55 +- example/src/main.ts | 3 +- example/src/plugins/app.ts | 23 - example/src/plugins/index.ts | 1 - example/src/plugins/vuetify.ts | 139 +- example/src/plugins/vuex-pathify.ts | 9 - example/src/router/index.ts | 10 +- example/src/shims-tsx.d.ts | 13 - example/src/shims-vue.d.ts | 6 - example/src/store/index.ts | 33 - example/src/store/modules/app.ts | 51 - example/src/store/modules/index.ts | 1 - example/src/store/modules/types.ts | 29 - example/src/store/types.ts | 3 - example/src/stores/app.ts | 61 + example/src/stores/index.ts | 4 + .../{store => }/validate/dynamicDefaults.ts | 2 +- .../validate.ts => validate/index.ts} | 2 +- example/src/{store => }/validate/keywords.ts | 0 example/src/{store => }/validate/transform.ts | 0 example/src/views/example/Example.vue | 770 +- example/src/views/home/Home.vue | 17 +- example/tsconfig.app.json | 21 + example/tsconfig.json | 41 +- example/tsconfig.node.json | 20 + example/tsconfig.vitest.json | 13 + example/vite.config.d.ts | 2 + example/vite.config.ts | 29 + example/vitest.config.d.ts | 2 + example/vue.config.js | 38 - package-lock.json | 33404 ++++------------ package.json | 2 +- vue-vuetify/package.json | 26 +- 101 files changed, 9827 insertions(+), 26267 deletions(-) delete mode 100644 example/babel.config.js create mode 100644 example/env.d.ts create mode 100644 example/index.html delete mode 100644 example/public/index.html create mode 100644 example/src/core/monaco.ts delete mode 100644 example/src/plugins/app.ts delete mode 100644 example/src/plugins/index.ts delete mode 100644 example/src/plugins/vuex-pathify.ts delete mode 100644 example/src/shims-tsx.d.ts delete mode 100644 example/src/shims-vue.d.ts delete mode 100644 example/src/store/index.ts delete mode 100644 example/src/store/modules/app.ts delete mode 100644 example/src/store/modules/index.ts delete mode 100644 example/src/store/modules/types.ts delete mode 100644 example/src/store/types.ts create mode 100644 example/src/stores/app.ts create mode 100644 example/src/stores/index.ts rename example/src/{store => }/validate/dynamicDefaults.ts (98%) rename example/src/{store/validate/validate.ts => validate/index.ts} (90%) rename example/src/{store => }/validate/keywords.ts (100%) rename example/src/{store => }/validate/transform.ts (100%) create mode 100644 example/tsconfig.app.json create mode 100644 example/tsconfig.node.json create mode 100644 example/tsconfig.vitest.json create mode 100644 example/vite.config.d.ts create mode 100644 example/vite.config.ts create mode 100644 example/vitest.config.d.ts delete mode 100644 example/vue.config.js diff --git a/example/babel.config.js b/example/babel.config.js deleted file mode 100644 index 078c0056..00000000 --- a/example/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['@vue/cli-plugin-babel/preset'], -}; diff --git a/example/env.d.ts b/example/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/example/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/example/index.html b/example/index.html new file mode 100644 index 00000000..c43e3641 --- /dev/null +++ b/example/index.html @@ -0,0 +1,18 @@ + + + + + + + + + JSON Forms Vue 3 Vuetify example + + +
+ + + diff --git a/example/package.json b/example/package.json index b4286c5f..1f24819b 100644 --- a/example/package.json +++ b/example/package.json @@ -2,44 +2,56 @@ "name": "example", "version": "3.2.0-preview-alpha.3", "private": true, + "type": "module", "scripts": { - "build": "vue-cli-service build", - "serve": "vue-cli-service serve", + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "test:unit": "vitest", + "build-only": "vite build", + "type-check": "vue-tsc --build --force", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "format": "prettier --write src/", "clean": "rimraf dist" }, "dependencies": { "@jsonforms/core": "3.2.0-alpha.3", "@jsonforms/vue": "3.2.0-alpha.3", "@jsonforms/vue-vuetify": "^3.2.0-preview-alpha.3", + "@vueuse/core": "^10.9.0", "ajv-keywords": "^5.1.0", "core-js": "^3.9.1", "json-refs": "^3.0.15", - "monaco-editor": "^0.38.0", - "vue": "^3.2.47", - "vue-router": "^4.1.6", - "vuetify": "^3.1.12", - "vuex": "^4.1.0" + "monaco-editor": "^0.48.0", + "pinia": "^2.1.7", + "vue": "^3.4.21", + "vue-router": "^4.3.0", + "vuetify": "^3.2.2" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^5.4.0", - "@typescript-eslint/parser": "^5.4.0", - "@vue/cli-plugin-babel": "~5.0.8", - "@vue/cli-plugin-eslint": "~5.0.8", - "@vue/cli-plugin-typescript": "~5.0.8", - "@vue/cli-service": "~5.0.0", - "@vue/eslint-config-prettier": "^7.1.0", - "@vue/eslint-config-typescript": "^11.0.0", - "eslint": "^8.37.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-vue": "^9.10.0", - "monaco-editor-webpack-plugin": "^7.0.1", - "prettier": "^2.8.7", - "rimraf": "^4.4.1", - "sass": "~1.32.0", - "sass-loader": "^10.0.0", - "typescript": "~4.7.4", - "vue-cli-plugin-vuetify": "~2.5.8", - "vuex-pathify": "^3.0.0-beta", - "webpack-plugin-vuetify": "^2.0.1" + "@mdi/font": "^7.4.47", + "@rushstack/eslint-patch": "^1.8.0", + "@tsconfig/node20": "^20.1.4", + "@types/jsdom": "^21.1.6", + "@types/node": "^20.12.5", + "@types/splitpanes": "^2.2.6", + "@vitejs/plugin-vue": "^5.0.4", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vue/eslint-config-prettier": "^9.0.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/test-utils": "^2.4.5", + "@vue/tsconfig": "^0.5.1", + "eslint": "^8.57.0", + "eslint-plugin-vue": "^9.23.0", + "jsdom": "^24.0.0", + "npm-run-all2": "^6.1.2", + "prettier": "^3.2.5", + "sass": "^1.75.0", + "typescript": "~5.4.0", + "vite": "^5.2.8", + "vite-plugin-node-polyfills": "^0.21.0", + "vite-plugin-vue-devtools": "^7.0.25", + "vitest": "^1.4.0", + "vue-tsc": "^2.0.11" } } diff --git a/example/public/index.html b/example/public/index.html deleted file mode 100644 index 97a935b7..00000000 --- a/example/public/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - JSON Forms Vue 3 Vuetify example - - - - - -
- - - diff --git a/example/src/App.vue b/example/src/App.vue index e09bb70d..fded5098 100644 --- a/example/src/App.vue +++ b/example/src/App.vue @@ -1,11 +1,11 @@ + + - - diff --git a/example/src/components/DemoForm.vue b/example/src/components/DemoForm.vue index f0b6aae8..6d16d1ed 100644 --- a/example/src/components/DemoForm.vue +++ b/example/src/components/DemoForm.vue @@ -1,43 +1,120 @@ + - - diff --git a/example/src/components/MonacoEditor.vue b/example/src/components/MonacoEditor.vue index a0586830..81caa44f 100644 --- a/example/src/components/MonacoEditor.vue +++ b/example/src/components/MonacoEditor.vue @@ -1,179 +1,135 @@ - + + + diff --git a/example/src/components/Settings.vue b/example/src/components/Settings.vue index 610db120..86a70ee0 100644 --- a/example/src/components/Settings.vue +++ b/example/src/components/Settings.vue @@ -1,7 +1,48 @@ + +