Skip to content

Commit e3d804d

Browse files
authored
vue-vuetify: filterErrorKeywordsBeforeTouch
Add config option to selectively suppress specific AJV validation error keywords before a control is touched, rather than hiding all errors. Also fix v-tooltip to use location="bottom" prop across dev app and source renderers.
1 parent befd0ae commit e3d804d

10 files changed

Lines changed: 130 additions & 43 deletions

File tree

packages/vue-vuetify/dev/components/ExampleAppBar.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const appStore = useAppStore();
2424
<v-container fill-height fluid justify-end
2525
><v-row dense>
2626
<v-col>
27-
<v-tooltip bottom>
27+
<v-tooltip location="bottom">
2828
<template v-slot:activator="{ props }">
2929
<v-btn
3030
icon
@@ -42,7 +42,7 @@ const appStore = useAppStore();
4242
</v-col>
4343
<v-col><theme-changer /> </v-col>
4444
<v-col>
45-
<v-tooltip bottom>
45+
<v-tooltip location="bottom">
4646
<template v-slot:activator="{ props }">
4747
<v-btn
4848
large

packages/vue-vuetify/dev/components/ExampleSettings.vue

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
262262
<v-container>
263263
<v-row>
264264
<v-col>
265-
<v-tooltip bottom>
265+
<v-tooltip location="bottom">
266266
<template v-slot:activator="{ props }">
267267
<v-switch
268268
v-model="appStore.overrideControlTemplate"
@@ -282,7 +282,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
282282
<v-row><v-col>Options</v-col></v-row>
283283
<v-row>
284284
<v-col>
285-
<v-tooltip bottom>
285+
<v-tooltip location="bottom">
286286
<template v-slot:activator="{ props }">
287287
<v-switch
288288
v-model="appStore.jsonforms.config.hideRequiredAsterisk"
@@ -296,7 +296,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
296296
</v-row>
297297
<v-row>
298298
<v-col>
299-
<v-tooltip bottom>
299+
<v-tooltip location="bottom">
300300
<template v-slot:activator="{ props }">
301301
<v-switch
302302
v-model="appStore.jsonforms.config.showUnfocusedDescription"
@@ -310,7 +310,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
310310
</v-row>
311311
<v-row>
312312
<v-col>
313-
<v-tooltip bottom>
313+
<v-tooltip location="bottom">
314314
<template v-slot:activator="{ props }">
315315
<v-switch
316316
v-model="appStore.jsonforms.config.restrict"
@@ -325,7 +325,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
325325
</v-row>
326326
<v-row>
327327
<v-col>
328-
<v-tooltip bottom>
328+
<v-tooltip location="bottom">
329329
<template v-slot:activator="{ props }">
330330
<v-switch
331331
v-model="appStore.jsonforms.readonly"
@@ -339,7 +339,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
339339
</v-row>
340340
<v-row>
341341
<v-col>
342-
<v-tooltip bottom>
342+
<v-tooltip location="bottom">
343343
<template v-slot:activator="{ props }">
344344
<v-switch
345345
v-model="appStore.jsonforms.config.collapseNewItems"
@@ -353,7 +353,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
353353
</v-row>
354354
<v-row>
355355
<v-col>
356-
<v-tooltip bottom>
356+
<v-tooltip location="bottom">
357357
<template v-slot:activator="{ props }">
358358
<v-switch
359359
v-model="appStore.jsonforms.config.hideArraySummaryValidation"
@@ -367,7 +367,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
367367
</v-row>
368368
<v-row>
369369
<v-col>
370-
<v-tooltip bottom>
370+
<v-tooltip location="bottom">
371371
<template v-slot:activator="{ props }">
372372
<v-switch
373373
v-model="appStore.jsonforms.config.initCollapsed"
@@ -381,7 +381,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
381381
</v-row>
382382
<v-row>
383383
<v-col>
384-
<v-tooltip bottom>
384+
<v-tooltip location="bottom">
385385
<template v-slot:activator="{ props }">
386386
<v-switch
387387
v-model="appStore.jsonforms.config.hideAvatar"
@@ -395,7 +395,7 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
395395
</v-row>
396396
<v-row>
397397
<v-col>
398-
<v-tooltip bottom>
398+
<v-tooltip location="bottom">
399399
<template v-slot:activator="{ props }">
400400
<v-switch
401401
v-model="
@@ -411,7 +411,29 @@ const layouts = appstoreLayouts.map((value: AppstoreLayouts) => ({
411411
</v-row>
412412
<v-row>
413413
<v-col>
414-
<v-tooltip bottom>
414+
<v-tooltip location="bottom">
415+
<template v-slot:activator="{ props }">
416+
<v-combobox
417+
v-model="
418+
appStore.jsonforms.config.filterErrorKeywordsBeforeTouch
419+
"
420+
label="Filter Error Keywords Before Touch"
421+
placeholder="e.g., required, minLength, pattern"
422+
chips
423+
closable-chips
424+
multiple
425+
clearable
426+
v-bind="props"
427+
></v-combobox>
428+
</template>
429+
Hide specific AJV error keywords until the control is touched.
430+
Requires "Enable Filter Errors Before Touch".
431+
</v-tooltip>
432+
</v-col>
433+
</v-row>
434+
<v-row>
435+
<v-col>
436+
<v-tooltip location="bottom">
415437
<template v-slot:activator="{ props }">
416438
<v-switch
417439
v-model="

packages/vue-vuetify/dev/components/ThemeChanger.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const setTheme = (theme: string) => {
2323
offset-y
2424
>
2525
<template v-slot:activator="{ props: propsMenu }">
26-
<v-tooltip bottom>
26+
<v-tooltip location="bottom">
2727
<template v-slot:activator="{ props: propsTooltip }">
2828
<v-btn large icon dark>
2929
<v-icon

packages/vue-vuetify/dev/store/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const appstore = reactive({
3232
hideAvatar: false,
3333
hideArraySummaryValidation: false,
3434
enableFilterErrorsBeforeTouch: false,
35+
filterErrorKeywordsBeforeTouch: ['required'],
3536
allowAdditionalPropertiesIfMissing: false,
3637
},
3738
locale: useLocalStorage('vuetify-example-locale', 'en'),

packages/vue-vuetify/dev/views/ExampleView.vue

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ const handleAction = (action: Action) => {
355355
<v-toolbar flat>
356356
<v-toolbar-title>Data</v-toolbar-title>
357357
<v-spacer></v-spacer>
358-
<v-tooltip bottom>
358+
<v-tooltip location="bottom">
359359
<template v-slot:activator="{ props }">
360360
<v-btn
361361
icon
@@ -367,7 +367,7 @@ const handleAction = (action: Action) => {
367367
</template>
368368
{{ `Reload Example Data` }}
369369
</v-tooltip>
370-
<v-tooltip bottom>
370+
<v-tooltip location="bottom">
371371
<template v-slot:activator="{ props }">
372372
<v-btn
373373
icon
@@ -402,15 +402,15 @@ const handleAction = (action: Action) => {
402402
<v-toolbar flat>
403403
<v-toolbar-title>Schema</v-toolbar-title>
404404
<v-spacer></v-spacer>
405-
<v-tooltip bottom>
405+
<v-tooltip location="bottom">
406406
<template v-slot:activator="{ props }">
407407
<v-btn icon @click="reloadMonacoSchema" v-bind="props">
408408
<v-icon>$reload</v-icon>
409409
</v-btn>
410410
</template>
411411
{{ `Reload Example Schema` }}
412412
</v-tooltip>
413-
<v-tooltip bottom>
413+
<v-tooltip location="bottom">
414414
<template v-slot:activator="{ props }">
415415
<v-btn icon @click="saveMonacoSchema" v-bind="props">
416416
<v-icon>$save</v-icon>
@@ -435,15 +435,15 @@ const handleAction = (action: Action) => {
435435
<v-toolbar flat>
436436
<v-toolbar-title>UI Schema</v-toolbar-title>
437437
<v-spacer></v-spacer>
438-
<v-tooltip bottom>
438+
<v-tooltip location="bottom">
439439
<template v-slot:activator="{ props }">
440440
<v-btn icon @click="reloadMonacoUiSchema" v-bind="props">
441441
<v-icon>$reload</v-icon>
442442
</v-btn>
443443
</template>
444444
{{ `Reload Example UI Schema` }}
445445
</v-tooltip>
446-
<v-tooltip bottom>
446+
<v-tooltip location="bottom">
447447
<template v-slot:activator="{ props }">
448448
<v-btn icon @click="saveMonacoUiSchema" v-bind="props">
449449
<v-icon>$save</v-icon>
@@ -468,15 +468,15 @@ const handleAction = (action: Action) => {
468468
<v-toolbar flat>
469469
<v-toolbar-title>Data</v-toolbar-title>
470470
<v-spacer></v-spacer>
471-
<v-tooltip bottom>
471+
<v-tooltip location="bottom">
472472
<template v-slot:activator="{ props }">
473473
<v-btn icon @click="reloadMonacoData" v-bind="props">
474474
<v-icon>$reload</v-icon>
475475
</v-btn>
476476
</template>
477477
{{ `Reload Example Data` }}
478478
</v-tooltip>
479-
<v-tooltip bottom>
479+
<v-tooltip location="bottom">
480480
<template v-slot:activator="{ props }">
481481
<v-btn icon @click="saveMonacoData" v-bind="props">
482482
<v-icon>$save</v-icon>

packages/vue-vuetify/src/additional/ListWithDetailRenderer.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
v-if="control.childErrors.length > 0"
1616
:errors="control.childErrors"
1717
/>
18-
<v-tooltip bottom>
18+
<v-tooltip location="bottom">
1919
<template v-slot:activator="{ props }">
2020
<v-btn
2121
icon
@@ -80,7 +80,7 @@
8080
</validation-badge>
8181
</template>
8282
<v-list-item-title>
83-
<v-tooltip bottom>
83+
<v-tooltip location="bottom">
8484
<template v-slot:activator="{ props }">
8585
<span
8686
v-bind="props"
@@ -135,7 +135,7 @@
135135
</template>
136136
{{ control.translations.down }}
137137
</v-tooltip>
138-
<v-tooltip bottom>
138+
<v-tooltip location="bottom">
139139
<template v-slot:activator="{ props }">
140140
<v-btn
141141
v-bind="props"

packages/vue-vuetify/src/complex/ArrayControlRenderer.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
v-if="control.childErrors.length > 0"
2323
:errors="control.childErrors"
2424
/>
25-
<v-tooltip bottom>
25+
<v-tooltip location="bottom">
2626
<template v-slot:activator="{ props }">
2727
<v-btn
2828
icon
@@ -110,7 +110,7 @@
110110
: 'fixed-cell-small'
111111
"
112112
>
113-
<v-tooltip bottom>
113+
<v-tooltip location="bottom">
114114
<template v-slot:activator="{ props }">
115115
<v-btn
116116
v-bind="props"
@@ -131,7 +131,7 @@
131131
</template>
132132
{{ control.translations.up }}
133133
</v-tooltip>
134-
<v-tooltip bottom>
134+
<v-tooltip location="bottom">
135135
<template v-slot:activator="{ props }">
136136
<v-btn
137137
v-bind="props"
@@ -152,7 +152,7 @@
152152
</template>
153153
{{ control.translations.down }}
154154
</v-tooltip>
155-
<v-tooltip bottom>
155+
<v-tooltip location="bottom">
156156
<template v-slot:activator="{ props }">
157157
<v-btn
158158
v-bind="props"

packages/vue-vuetify/src/complex/components/AdditionalProperties.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
@change="propertyNameChange"
2929
></json-forms
3030
></v-col>
31-
<v-tooltip bottom>
31+
<v-tooltip location="bottom">
3232
<template v-slot:activator="{ props }">
3333
<v-btn
3434
icon
@@ -64,7 +64,7 @@
6464
:cells="control.cells"
6565
/></v-col>
6666
<v-col v-if="control.enabled" class="flex-shrink-1 flex-grow-0">
67-
<v-tooltip bottom>
67+
<v-tooltip location="bottom">
6868
<template v-slot:activator="{ props }">
6969
<v-btn
7070
v-bind="props"

packages/vue-vuetify/src/layouts/ArrayLayoutRenderer.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
:styles="styles"
3636
:icons="icons"
3737
>
38-
<v-tooltip bottom>
38+
<v-tooltip location="bottom">
3939
<template v-slot:activator="{ props }">
4040
<v-btn
4141
icon
@@ -109,7 +109,7 @@
109109
align-self="center"
110110
v-if="appliedOptions.showSortButtons"
111111
>
112-
<v-tooltip bottom>
112+
<v-tooltip location="bottom">
113113
<template v-slot:activator="{ props }">
114114
<v-btn
115115
v-bind="props"
@@ -135,7 +135,7 @@
135135
align-self="center"
136136
v-if="appliedOptions.showSortButtons"
137137
>
138-
<v-tooltip bottom>
138+
<v-tooltip location="bottom">
139139
<template v-slot:activator="{ props }">
140140
<v-btn
141141
v-bind="props"
@@ -160,7 +160,7 @@
160160
</v-tooltip>
161161
</v-col>
162162
<v-col align-self="center">
163-
<v-tooltip bottom>
163+
<v-tooltip location="bottom">
164164
<template v-slot:activator="{ props }">
165165
<v-btn
166166
v-bind="props"

0 commit comments

Comments
 (0)