Merge branch 'develop' of https://github.com/tainacan/tainacan into develop
This commit is contained in:
commit
b8a7b1cdb3
|
@ -1,31 +1,52 @@
|
||||||
<template>
|
<template>
|
||||||
<component
|
<component
|
||||||
:is="getComponent()"
|
:is="getComponent()"
|
||||||
:options="terms"></component>
|
v-model="valueComponent"
|
||||||
|
:allowNew="allowNew"
|
||||||
|
:terms="terms"
|
||||||
|
:options="getOptions(0)"></component>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { tainacan as axios } from '../../../js/axios/axios'
|
import { tainacan as axios } from '../../../js/axios/axios'
|
||||||
import TainacanCategoryRadio from './CategoryRadio.vue'
|
import TainacanCategoryRadio from './CategoryRadio.vue'
|
||||||
|
import TainacanCategoryCheckbox from './CategoryCheckbox.vue'
|
||||||
|
import TainacanCategoryTagInput from './CategoryTaginput.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
created(){
|
created(){
|
||||||
this.component = ( this.field.field
|
let field_type_options = this.field.field.field_type_options;
|
||||||
&& this.field.field.field_type_options && this.field.field.field_type_options.input_type )
|
this.component = ( field_type_options && field_type_options.input_type )
|
||||||
? this.field.field.field_type_options.input_type : this.componentAttribute
|
? this.field.field.field_type_options.input_type : this.componentAttribute
|
||||||
|
|
||||||
this.collectionId = this.field.field.collection_id;
|
this.collectionId = this.field.field.collection_id;
|
||||||
this.taxonomy = this.field.field.field_type_options.taxonomy_id;
|
this.taxonomy = field_type_options.taxonomy_id;
|
||||||
|
|
||||||
|
if( field_type_options && field_type_options.allow_new_terms ){
|
||||||
|
this.allowNew = field_type_options.allow_new_terms === 'yes'
|
||||||
|
}
|
||||||
this.getTermsFromTaxonomy();
|
this.getTermsFromTaxonomy();
|
||||||
|
this.getTermsId();
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
TainacanCategoryRadio
|
TainacanCategoryRadio,
|
||||||
|
TainacanCategoryCheckbox,
|
||||||
|
TainacanCategoryTagInput
|
||||||
},
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
|
valueComponent: null,
|
||||||
component: '',
|
component: '',
|
||||||
collectionId: '',
|
collectionId: '',
|
||||||
taxonomy: '',
|
taxonomy: '',
|
||||||
terms:[]
|
terms:[], // object with names
|
||||||
|
allowNew: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
valueComponent( val ){
|
||||||
|
this.valueComponent = val;
|
||||||
|
this.$emit('input', val);
|
||||||
|
this.$emit('blur');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
|
@ -35,6 +56,7 @@
|
||||||
componentAttribute: {
|
componentAttribute: {
|
||||||
type: String
|
type: String
|
||||||
},
|
},
|
||||||
|
value: [ Number, String, Array,Object ],
|
||||||
id: ''
|
id: ''
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
@ -53,6 +75,40 @@
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
getOptions( parent, level = 0 ){ // retrieve only ids
|
||||||
|
let result = [];
|
||||||
|
if ( this.terms ){
|
||||||
|
for( let term of this.terms ){
|
||||||
|
if( term.parent == parent ){
|
||||||
|
term['level'] = level;
|
||||||
|
result.push( term );
|
||||||
|
const levelTerm = level + 1;
|
||||||
|
const children = this.getOptions( term.term_id, levelTerm);
|
||||||
|
result = result.concat( children );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
},
|
||||||
|
getTermsId(){
|
||||||
|
let values = [];
|
||||||
|
if( this.value && this.value.length > 0){
|
||||||
|
for( let term of this.value ){
|
||||||
|
if( term && term.term_id)
|
||||||
|
values.push(term.term_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( values.length > 0 && this.field.field){
|
||||||
|
this.valueComponent = ( this.field.field && this.field.field.multiple === 'no' ) ? values[0] : values
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
onInput($event) {
|
||||||
|
this.inputValue = $event;
|
||||||
|
this.$emit('input', this.inputValue);
|
||||||
|
this.$emit('blur');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="block" v-for="option,index in getOptions( 0 )">
|
<div class="block" v-for="option,index in options">
|
||||||
<b-checkbox
|
<b-checkbox
|
||||||
:id="id"
|
:id="id"
|
||||||
:style="{ paddingLeft: (option.level * 30) + 'px' }"
|
:style="{ paddingLeft: (option.level * 30) + 'px' }"
|
||||||
|
@ -18,6 +18,10 @@
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
created(){
|
||||||
|
if( this.value && this.value.length > 0)
|
||||||
|
this.checked = this.value;
|
||||||
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
checked: []
|
checked: []
|
||||||
|
@ -27,24 +31,9 @@
|
||||||
options: {
|
options: {
|
||||||
type: Array
|
type: Array
|
||||||
},
|
},
|
||||||
value: [ Number, String ]
|
value: [ Number, String, Array ]
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getOptions( parent, level = 0 ){
|
|
||||||
let result = [];
|
|
||||||
if ( this.options ){
|
|
||||||
for( let term of this.options ){
|
|
||||||
if( term.parent == parent ){
|
|
||||||
term['level'] = level;
|
|
||||||
result.push( term );
|
|
||||||
const levelTerm = level + 1;
|
|
||||||
const children = this.getOptions( term.term_id, levelTerm);
|
|
||||||
result = result.concat( children );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
onChecked(option) {
|
onChecked(option) {
|
||||||
this.$emit('blur');
|
this.$emit('blur');
|
||||||
this.onInput(this.checked)
|
this.onInput(this.checked)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<div class="block" v-for="option,index in getOptions( 0 )">
|
<div class="block" v-for="option,index in options">
|
||||||
<b-radio
|
<b-radio
|
||||||
:id="id"
|
:id="id"
|
||||||
:style="{ paddingLeft: (option.level * 30) + 'px' }"
|
:style="{ paddingLeft: (option.level * 30) + 'px' }"
|
||||||
|
@ -18,6 +18,10 @@
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
created(){
|
||||||
|
if( this.value )
|
||||||
|
this.checked = this.value;
|
||||||
|
},
|
||||||
data(){
|
data(){
|
||||||
return {
|
return {
|
||||||
checked:''
|
checked:''
|
||||||
|
@ -27,24 +31,9 @@
|
||||||
options: {
|
options: {
|
||||||
type: Array
|
type: Array
|
||||||
},
|
},
|
||||||
value: [ Number, String ]
|
value: [ Number, String, Array ]
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
getOptions( parent, level = 0 ){
|
|
||||||
let result = [];
|
|
||||||
if ( this.options ){
|
|
||||||
for( let term of this.options ){
|
|
||||||
if( term.parent == parent ){
|
|
||||||
term['level'] = level;
|
|
||||||
result.push( term );
|
|
||||||
const levelTerm = level + 1;
|
|
||||||
const children = this.getOptions( term.term_id, levelTerm);
|
|
||||||
result = result.concat( children );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
},
|
|
||||||
onChecked(option) {
|
onChecked(option) {
|
||||||
this.$emit('blur');
|
this.$emit('blur');
|
||||||
this.onInput(this.checked)
|
this.onInput(this.checked)
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
<template>
|
||||||
|
<div class="block">
|
||||||
|
<b-taginput
|
||||||
|
size="is-small"
|
||||||
|
rounded
|
||||||
|
icon="magnify"
|
||||||
|
:allowNew="allowNew"
|
||||||
|
v-model="selected"
|
||||||
|
:data="labels"
|
||||||
|
field="label"
|
||||||
|
autocomplete
|
||||||
|
@typing="search">
|
||||||
|
</b-taginput>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data(){
|
||||||
|
return {
|
||||||
|
selected: [],
|
||||||
|
labels: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
selected( val ){
|
||||||
|
this.selected = val;
|
||||||
|
let results = [];
|
||||||
|
for( let term of val ){
|
||||||
|
if( term.value ){
|
||||||
|
results.push( term.value );
|
||||||
|
} else {
|
||||||
|
results.push( term );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.$emit('input', results);
|
||||||
|
this.$emit('blur');
|
||||||
|
},
|
||||||
|
terms( val ){
|
||||||
|
this.selectedValues();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
terms: [ Number, String, Array ],
|
||||||
|
options: {
|
||||||
|
type: Array
|
||||||
|
},
|
||||||
|
value: [ Number, String, Array ],
|
||||||
|
allowNew: [ Boolean ]
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
search( query ){
|
||||||
|
if( this.terms && this.terms.length > 0 ){
|
||||||
|
let result = this.terms.filter( ( item ) => {
|
||||||
|
let name = item.name.toLowerCase();
|
||||||
|
let q = query.toLowerCase();
|
||||||
|
return ( name.indexOf(q) >= 0 )
|
||||||
|
});
|
||||||
|
this.labels = [];
|
||||||
|
for( let term of result){
|
||||||
|
this.labels.push({label: term.name, value: term.term_id})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
selectedValues(){
|
||||||
|
if( this.value && this.value.length > 0 && this.selected.length === 0){
|
||||||
|
let result = this.terms.filter( ( item ) => {
|
||||||
|
let id = item.term_id;
|
||||||
|
return ( this.value.indexOf( id ) >= 0 )
|
||||||
|
});
|
||||||
|
|
||||||
|
let selected = [];
|
||||||
|
for( let term of result){
|
||||||
|
selected.push({label: term.name, value: term.term_id})
|
||||||
|
}
|
||||||
|
this.selected = selected;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
|
@ -2,7 +2,7 @@
|
||||||
<b-field :label="field.field.name"
|
<b-field :label="field.field.name"
|
||||||
:message="getErrorMessage"
|
:message="getErrorMessage"
|
||||||
:type="fieldTypeMessage">
|
:type="fieldTypeMessage">
|
||||||
<div>
|
<div v-if="isTextInputComponent( field.field.field_type_object.component )">
|
||||||
<component :id="field.field.field_type_object.component + '-' + field.field.slug" :is="field.field.field_type_object.component" v-model="inputs[0]" :field="field" @blur="changeValue()"></component>
|
<component :id="field.field.field_type_object.component + '-' + field.field.slug" :is="field.field.field_type_object.component" v-model="inputs[0]" :field="field" @blur="changeValue()"></component>
|
||||||
<div v-if="field.field.multiple == 'yes'">
|
<div v-if="field.field.multiple == 'yes'">
|
||||||
<div v-if="index > 0" v-for="(input, index) in inputsList " v-bind:key="index" class="multiple-inputs">
|
<div v-if="index > 0" v-for="(input, index) in inputsList " v-bind:key="index" class="multiple-inputs">
|
||||||
|
@ -11,6 +11,12 @@
|
||||||
<a class="button" @click="addInput">+</a>
|
<a class="button" @click="addInput">+</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<component
|
||||||
|
:id="field.field.field_type_object.component + '-' + field.field.slug"
|
||||||
|
:is="field.field.field_type_object.component" v-model="inputs"
|
||||||
|
:field="field" @blur="changeValue()"></component>
|
||||||
|
</div>
|
||||||
</b-field>
|
</b-field>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -69,6 +75,10 @@
|
||||||
removeInput(index) {
|
removeInput(index) {
|
||||||
this.inputs.splice(index, 1);
|
this.inputs.splice(index, 1);
|
||||||
this.changeValue();
|
this.changeValue();
|
||||||
|
},
|
||||||
|
isTextInputComponent( component ){
|
||||||
|
let array = ['tainacan-relationship','tainacan-category'];
|
||||||
|
return !( array.indexOf( component ) >= 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue