wotamann / vuetify-form-base

Schema-based Form Generator - Vue.js 2.0 Component based on Vuetify 2.0
https://wotamann.github.io/vuetify
230 stars 63 forks source link

How to create simple array of text values #49

Closed kobs30 closed 4 years ago

kobs30 commented 4 years ago

This works model: { values: [{}, {}, {}] }, schema: { name: { type: 'text', label: 'Name', }, values: { type: 'array', schema: { value: 'text' } } }

How to create array of text values instead of array of objects? Next does not work:

model: { values: ['','',''] }, schema: { name: { type: 'text', label: 'Name', }, values: [ type: 'text', ] }

I need to create in example select2 field with tag style. Autocomlete + create not existing.

wotamann commented 4 years ago

How to create array of text values instead of array of objects?

Sorry this is not possible:

v-form-base can hold any value only as key-value pair and in context with an component (ie text-field). This is also valid for items in an array. In case of using strings you can't keep - in lack of a key - reference to each object in array for being editable.

One Solution could be to map on blur event your result to an array of strings

Or if you have an static array of strings you can use type 'Select', 'Autocomplete' or 'Combobox'

kobs30 commented 4 years ago

'Select', 'Autocomplete' or 'Combobox' these widgets are well for selecting terms from vocabulary. I need widget to create|edit terms in vocabulary, I need some kind of https://github.com/gwenaelp/vfg-field-array

wotamann commented 4 years ago

Ok did you look at the example 'Add, Edit and Drag to Remove Items in dynamic nested Value-Array' this should meet your requirements.

Use the change-event in vFormBase to map your values-array into a string-array

stringValues = this.model.values.map( v => v.value)

demo.vue

<template>
  <div>
    <v-form-base 
      :model="myModel"
      :schema="mySchema" 
      @change="map"
    />
    String-Array:
    {{stringArray}}
  </div>      
</template>

<script>
import VFormBase from '@/components/vFormBase'

export default {
  components: { VFormBase },
  data () {
    return {  
      stringArray:[],    
      myModel: {
        values:[  
          { value:'my value' }        
        ]        
      },
      mySchema: {
        values: {
          type: 'array',
          schema: {
            value: 'text'
            }          
          }
        }
      }    
  },  
  methods: {
    map ( ) {  
      this.stringArray = this.myModel.values.map( v => v.value)   
    }
  }
}
</script>
husayt commented 3 years ago

I guess another option is to write a custom editor for this type.

husayt commented 3 years ago

here is a working example.

Use with this schema:

const schema = { telephones: {
    type: "array-editor",
    label: "Telephones",
  }}
mrpaulharris commented 3 years ago

@husayt great work on the custom editor. I took your example and it worked. Here is how it looks for my simple array of prices:

image