Skip to content

Commit c8625a1

Browse files
authored
Merge pull request #224 from ansibleguy76/release/v5.0.6
v5.0.6 into main
2 parents b7c1cb4 + 92ade9c commit c8625a1

23 files changed

+733
-271
lines changed

CHANGELOG.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [5.0.6] - 2024-09-20
11+
12+
### Fixed
13+
14+
- Removed ip lib parts CVE related
15+
- Updated to vuelidate 2+ (CVE related)
16+
1017
## [5.0.5] - 2024-09-18
1118

19+
### Fixed
20+
21+
- Fixed regex for ssh key
22+
- New version highlight for CVE
23+
- Bumped several versions
24+
1225
## [5.0.4] - 2024-08-18
1326

1427
### Added
@@ -726,7 +739,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
726739
- Allow change password for current local user
727740
- Start tracking versions
728741

729-
[Unreleased]: https://github.com/ansibleguy76/ansibleforms/compare/5.0.5...HEAD
742+
[Unreleased]: https://github.com/ansibleguy76/ansibleforms/compare/5.0.6...HEAD
743+
744+
[5.0.6]: https://github.com/ansibleguy76/ansibleforms/compare/5.0.5...5.0.6
730745

731746
[5.0.5]: https://github.com/ansibleguy76/ansibleforms/compare/5.0.4...5.0.5
732747

app_versions.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
ext.version_code = 50005
2-
ext.version_name = "5.0.5"
1+
ext.version_code = 50006
2+
ext.version_name = "5.0.6"

client/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ansible_forms_vue",
3-
"version": "5.0.5",
3+
"version": "5.0.6",
44
"private": true,
55
"scripts": {
66
"serve": "vue-cli-service serve",
@@ -43,7 +43,8 @@
4343
"vue-showdown": "2.4.1",
4444
"vue-toastification": "1.7.14",
4545
"vue2-datepicker": "~3.11.1",
46-
"vuelidate": "~0.7.7",
46+
"@vuelidate/core": "^2.0.3",
47+
"@vuelidate/validators": "^2.0.4",
4748
"yaml": "1.10.2"
4849
},
4950
"devDependencies": {

client/src/components/BulmaEditTable.vue

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66
<!-- add field label -->
77
<label class="label has-text-dark">{{ field.label }} <span v-if="field.required" class="has-text-danger">*</span></label>
88
<!-- type = checkbox -->
9-
<BulmaCheckRadio v-if="field.type=='checkbox'" checktype="checkbox" :disabled="action=='Edit' && readonlyColumns.includes(field.name)" v-model="editedItem[field.name]" :name="field.name" :label="field.placeholder"/>
9+
<BulmaCheckRadio v-if="field.type=='checkbox'" checktype="checkbox" :disabled="action=='Edit' && readonlyColumns.includes(field.name)" :type="{'is-danger is-block':v$.editedItem[field.name].$invalid}" v-model="editedItem[field.name]" :name="field.name" :label="field.placeholder"/>
1010
<!-- <label v-if="field.type=='checkbox'" class="checkbox">
1111
<input v-if="field.type=='checkbox'" :disabled="readonlyColumns.includes(field.name)" :autofocus="index==0" :checked="editedItem[field.name]" v-model="editedItem[field.name]" :name="field.name" type="checkbox">
1212
{{ field.placeholder }}
1313
</label> -->
1414
<date-picker v-if="field.type=='datetime'"
1515
:type="field.dateType"
1616
value-type="format"
17-
v-model="$v.editedItem[field.name].$model"
17+
v-model="v$.editedItem[field.name].$model"
1818
>
1919
<template #input>
2020
<div :class="{'has-icons-left':!!field.icon}" class="control">
2121
<input
22-
:class="{'is-danger':$v.editedItem[field.name].$invalid}"
22+
:class="{'is-danger':v$.editedItem[field.name].$invalid}"
2323
class="input"
2424
:name="field.name"
25-
v-model="$v.editedItem[field.name].$model"
25+
v-model="v$.editedItem[field.name].$model"
2626
@change="evaluateDynamicFields(field.name)"
2727
:required="field.required"
2828
type="text"
@@ -36,15 +36,15 @@
3636

3737
<BulmaAdvancedSelect
3838
v-if="field.type=='query' || field.type=='enum'"
39-
:defaultValue="stringify($v.editedItem[field.name].$model,field)||field.default||''"
39+
:defaultValue="stringify(v$.editedItem[field.name].$model,field)||field.default||''"
4040
:required="field.required||false"
4141
:multiple="false"
4242
:name="field.name"
4343
:placeholder="field.placeholder||'Select...'"
4444
:values="field.values||form[field.from]||[]"
45-
:hasError="$v.editedItem[field.name].$invalid"
45+
:hasError="v$.editedItem[field.name].$invalid"
4646
:isLoading="!field.values && !['fixed','variable'].includes(dynamicFieldStatus[field.from])"
47-
v-model="$v.editedItem[field.name].$model"
47+
v-model="v$.editedItem[field.name].$model"
4848
:icon="field.icon"
4949
:columns="field.columns||[]"
5050
:pctColumns="field.pctColumns||[]"
@@ -58,7 +58,7 @@
5858
</BulmaAdvancedSelect>
5959

6060
<div v-if="!['datetime','checkbox','query','enum'].includes(field.type)" :class="{'has-icons-left':!!field.icon}" class="control">
61-
<input v-if="field.type=='text' || field.type=='password'" :disabled="action=='Edit' && readonlyColumns.includes(field.name)" :autofocus="index==0" :class="{'is-danger':$v.editedItem[field.name].$invalid}" class="input" :type="field.type" v-model="$v.editedItem[field.name].$model" :placeholder="field.placeholder" :name="field.name">
61+
<input v-if="field.type=='text' || field.type=='password'" :disabled="action=='Edit' && readonlyColumns.includes(field.name)" :autofocus="index==0" :class="{'is-danger':v$.editedItem[field.name].$invalid}" class="input" :type="field.type" v-model="v$.editedItem[field.name].$model" :placeholder="field.placeholder" :name="field.name">
6262
<input v-if="field.type=='number'" :disabled="action=='Edit' && readonlyColumns.includes(field.name)" :autofocus="index==0" class="input" type="number" v-model="editedItem[field.name]" :placeholder="field.placeholder" :name="field.name">
6363

6464
<!-- add left icon, but not for query, because that's a component with icon builtin -->
@@ -67,14 +67,14 @@
6767
</span>
6868
</div>
6969

70-
<p class="has-text-danger" v-if="!$v.editedItem[field.name].required">This field is required</p>
71-
<p class="has-text-danger" v-if="'minLength' in $v.editedItem[field.name] && !$v.editedItem[field.name].minLength">Must be at least {{$v.editedItem[field.name].$params.minLength.min}} characters long</p>
72-
<p class="has-text-danger" v-if="'maxLength' in $v.editedItem[field.name] && !$v.editedItem[field.name].maxLength">Can not be more than {{$v.editedItem[field.name].$params.maxLength.max}} characters long</p>
73-
<p class="has-text-danger" v-if="'minValue' in $v.editedItem[field.name] && !$v.editedItem[field.name].minValue">Value cannot be lower than {{$v.editedItem[field.name].$params.minValue.min}}</p>
74-
<p class="has-text-danger" v-if="'maxValue' in $v.editedItem[field.name] && !$v.editedItem[field.name].maxValue">Value cannot be higher than {{$v.editedItem[field.name].$params.maxValue.max}}</p>
75-
<p class="has-text-danger" v-if="'regex' in $v.editedItem[field.name] && !$v.editedItem[field.name].regex">{{$v.editedItem[field.name].$params.regex.description}}</p>
76-
<p class="has-text-danger" v-if="'notIn' in $v.editedItem[field.name] && !$v.editedItem[field.name].notIn">{{$v.editedItem[field.name].$params.notIn.description}}</p>
77-
<p class="has-text-danger" v-if="'in' in $v.editedItem[field.name] && !$v.editedItem[field.name].in">{{$v.editedItem[field.name].$params.in.description}}</p>
70+
<p class="has-text-danger" v-if="field.required && v$.editedItem[field.name].required.$invalid && v$.editedItem[field.name].$errors.length>0">This field is required</p>
71+
<p class="has-text-danger" v-if="'minLength' in v$.editedItem[field.name] && v$.editedItem[field.name].minLength.$invalid">Must be at least {{v$.editedItem[field.name].minLength.$params.min}} characters long</p>
72+
<p class="has-text-danger" v-if="'maxLength' in v$.editedItem[field.name] && v$.editedItem[field.name].maxLength.$invalid">Can not be more than {{v$.editedItem[field.name].maxLength.$params.max}} characters long</p>
73+
<p class="has-text-danger" v-if="'minValue' in v$.editedItem[field.name] && v$.editedItem[field.name].minValue.$invalid">Value cannot be lower than {{v$.editedItem[field.name].minValue.$params.min}}</p>
74+
<p class="has-text-danger" v-if="'maxValue' in v$.editedItem[field.name] && v$.editedItem[field.name].maxValue.$invalid">Value cannot be higher than {{v$.editedItem[field.name].maxValue.$params.max}}</p>
75+
<p class="has-text-danger" v-if="'regex' in v$.editedItem[field.name] && v$.editedItem[field.name].regex.$invalid">{{v$.editedItem[field.name].regex.$params.description}}</p>
76+
<p class="has-text-danger" v-if="'notIn' in v$.editedItem[field.name] && v$.editedItem[field.name].notIn.$invalid">{{v$.editedItem[field.name].notIn.$params.description}}</p>
77+
<p class="has-text-danger" v-if="'in' in v$.editedItem[field.name] && v$.editedItem[field.name].in.$invalid">{{v$.editedItem[field.name].in.$params.description}}</p>
7878

7979
</div>
8080
</BulmaModal>
@@ -168,15 +168,14 @@
168168
<script>
169169
import Vue from 'vue'
170170
import BulmaModal from './BulmaModal.vue'
171-
import Vuelidate from 'vuelidate'
172171
import BulmaAdvancedSelect from './BulmaAdvancedSelect'
173172
import Helpers from './../lib/Helpers.js'
174173
import BulmaCheckRadio from './BulmaCheckRadio'
175174
import DatePicker from 'vue2-datepicker';
176-
import 'vue2-datepicker/index.css';
177-
import { required,minValue,maxValue,minLength,maxLength, helpers,requiredIf } from 'vuelidate/lib/validators'
175+
import 'vue2-datepicker/index.css';
176+
import { useVuelidate } from '@vuelidate/core'
177+
import { minValue,maxValue,minLength,maxLength, helpers,requiredIf } from '@vuelidate/validators'
178178
179-
Vue.use(Vuelidate)
180179
export default{
181180
name:'BulmaEditTable',
182181
components:{BulmaModal,BulmaAdvancedSelect,BulmaCheckRadio,DatePicker},
@@ -213,6 +212,9 @@
213212
insertColumns:{type: Array},
214213
hasError:{type: Boolean}
215214
},
215+
setup(){
216+
return { v$: useVuelidate() }
217+
},
216218
data: function(){
217219
return {
218220
sort: {
@@ -238,9 +240,26 @@
238240
var attrs = {}
239241
var regexObj
240242
var description
241-
attrs.required=requiredIf(function(){
242-
return !!ff.required
243-
})
243+
// required validation for simple fields
244+
if(ff.type!='checkbox' && ff.type!='enum'){
245+
attrs.required=requiredIf(function(){
246+
return !!ff.required
247+
})
248+
}
249+
// required validation for expression field
250+
if((ff.type=="enum") && ff.required){
251+
attrs.required=helpers.withParams(
252+
{description: "This field is required"},
253+
(value) => (value!=undefined && value!=null && value!='__auto__' && value!='__none__' && value!='__all__')
254+
)
255+
}
256+
// required validation for checkbox (MUST be true)
257+
if(ff.type=='checkbox' && ff.required){
258+
attrs.required=helpers.withParams(
259+
{description: "This field is required"},
260+
(value) => (value==true)
261+
)
262+
}
244263
if("minValue" in ff){ attrs.minValue=minValue(ff.minValue)}
245264
if("maxValue" in ff){ attrs.maxValue=maxValue(ff.maxValue)}
246265
if("minLength" in ff){ attrs.minLength=minLength(ff.minLength)}
@@ -395,6 +414,7 @@
395414
},
396415
saveItem:function(){
397416
var ref=this
417+
this.v$.editedItem.$touch()
398418
this.tableFields.forEach((item)=>{
399419
if(item.type=="query" || item.type=="enum"){
400420
if(!item.outputObject){
@@ -407,7 +427,7 @@
407427
}
408428
}
409429
})
410-
if(!this.$v.editedItem.$invalid){
430+
if(!this.v$.editedItem.$invalid){
411431
if(this.action=="Add"){
412432
if(this.insert_marker){
413433
Vue.set(this.editedItem,this.insert_marker,true)

0 commit comments

Comments
 (0)