add type field to repeater

This commit is contained in:
Nitwel
2020-10-07 11:10:04 +02:00
parent 0e03847778
commit 4138ac3bdb
4 changed files with 111 additions and 71 deletions

View File

@@ -1,5 +1,9 @@
<template>
<v-notice v-if="selectedType === undefined">
{{ $t('select_field_type') }}
</v-notice>
<v-select
v-else
:items="items"
@input="$listeners.input"
:value="value"
@@ -8,9 +12,10 @@
</template>
<script lang="ts">
import { defineComponent, computed } from '@vue/composition-api';
import { defineComponent, computed, PropType, inject, ref } from '@vue/composition-api';
import i18n from '@/lang';
import { getInterfaces } from '@/interfaces';
import { types } from '@/types';
export default defineComponent({
props: {
@@ -18,13 +23,24 @@ export default defineComponent({
type: String,
default: null,
},
typeField: {
type: String,
default: null
}
},
setup() {
setup(props) {
const interfaces = getInterfaces();
const selectedType = computed(() => {
const values = inject('values', ref<Record<string, any>>({}));
if (props.typeField === null || !values.value[props.typeField]) return;
return values.value[props.typeField]
});
const items = computed(() => {
return interfaces.value
.filter((inter) => inter.relationship === undefined && inter.system !== true)
.filter((inter) => selectedType.value === undefined || inter.types.includes(selectedType.value))
.map((inter) => {
return {
text: inter.name,
@@ -33,7 +49,7 @@ export default defineComponent({
});
});
return { items };
return { items, selectedType };
},
});
</script>

View File

@@ -22,6 +22,7 @@ import { defineComponent, PropType, computed } from '@vue/composition-api';
import Repeater from './repeater.vue';
import { Field, FieldMeta } from '@/types';
import i18n from '@/lang';
import { fieldTypes } from '@/modules/settings/routes/data-model/field-detail/components/schema.vue';
export default defineComponent({
components: { Repeater },
@@ -36,10 +37,11 @@ export default defineComponent({
get() {
return props.value?.fields?.map((field: Field) => field.meta);
},
set(newVal: FieldMeta[]) {
const fields = newVal.map((meta) => ({
set(newVal: FieldMeta[] | null) {
const fields = (newVal || []).map((meta: Record<string, any>) => ({
field: meta.field,
name: meta.field,
type: meta.type,
meta,
}));
@@ -89,6 +91,22 @@ export default defineComponent({
},
schema: null,
},
{
name: i18n.t('type'),
field: 'type',
type: 'string',
meta: {
interface: 'dropdown',
width: 'half',
sort: 3,
options: {
choices: fieldTypes
}
},
schema: {
default_value: 'string'
},
},
{
name: i18n.t('interface'),
field: 'interface',
@@ -96,7 +114,10 @@ export default defineComponent({
meta: {
interface: 'interface',
width: 'half',
sort: 3,
sort: 4,
options: {
typeField: 'type'
}
},
schema: null,
},
@@ -106,8 +127,8 @@ export default defineComponent({
type: 'string',
meta: {
interface: 'text-input',
width: 'half',
sort: 4,
width: 'full',
sort: 5,
options: {
placeholder: i18n.t('interfaces.repeater.field_note_placeholder'),
},
@@ -121,7 +142,7 @@ export default defineComponent({
meta: {
interface: 'interface-options',
width: 'full',
sort: 5,
sort: 6,
options: {
interfaceField: 'interface',
},

View File

@@ -1337,6 +1337,7 @@
"select_existing": "Select Existing",
"select_field": "Select a Field",
"select_from_device": "Select from device",
"select_field_type": "Select a field type",
"select_interface": "Select an interface",
"select_interface_below": "Select an interface below",
"select_statuses_copy": "Select the statuses the user can use",

View File

@@ -176,6 +176,69 @@ import { types } from '@/types';
import i18n from '@/lang';
import { state } from '../store';
export const fieldTypes = [
{
text: i18n.t('string'),
value: 'string',
},
{
text: i18n.t('text'),
value: 'text',
},
{ divider: true },
{
text: i18n.t('boolean'),
value: 'boolean',
},
{ divider: true },
{
text: i18n.t('integer'),
value: 'integer',
},
{
text: i18n.t('bigInteger'),
value: 'bigInteger',
},
{
text: i18n.t('float'),
value: 'float',
},
{
text: i18n.t('decimal'),
value: 'decimal',
},
{ divider: true },
{
text: i18n.t('timestamp'),
value: 'timestamp',
},
{
text: i18n.t('datetime'),
value: 'dateTime',
},
{
text: i18n.t('date'),
value: 'date',
},
{
text: i18n.t('time'),
value: 'time',
},
{ divider: true },
{
text: i18n.t('json'),
value: 'json',
},
{
text: i18n.t('csv'),
value: 'csv',
},
{
text: i18n.t('uuid'),
value: 'uuid',
},
];
export default defineComponent({
props: {
isExisting: {
@@ -189,68 +252,7 @@ export default defineComponent({
},
setup(props, { emit }) {
const typesWithLabels = computed(() => {
return [
{
text: i18n.t('string'),
value: 'string',
},
{
text: i18n.t('text'),
value: 'text',
},
{ divider: true },
{
text: i18n.t('boolean'),
value: 'boolean',
},
{ divider: true },
{
text: i18n.t('integer'),
value: 'integer',
},
{
text: i18n.t('bigInteger'),
value: 'bigInteger',
},
{
text: i18n.t('float'),
value: 'float',
},
{
text: i18n.t('decimal'),
value: 'decimal',
},
{ divider: true },
{
text: i18n.t('timestamp'),
value: 'timestamp',
},
{
text: i18n.t('datetime'),
value: 'dateTime',
},
{
text: i18n.t('date'),
value: 'date',
},
{
text: i18n.t('time'),
value: 'time',
},
{ divider: true },
{
text: i18n.t('json'),
value: 'json',
},
{
text: i18n.t('csv'),
value: 'csv',
},
{
text: i18n.t('uuid'),
value: 'uuid',
},
];
return fieldTypes
});
const typeDisabled = computed(() => {