Allow multiple in v-upload

This commit is contained in:
rijkvanzanten
2020-08-07 15:47:35 -04:00
parent 9fb4d0e8eb
commit 6ea10375e9
22 changed files with 103 additions and 759 deletions

View File

@@ -1,6 +1,6 @@
<template>
<v-button
v-if="collection.system === null && collection.collection.startsWith('directus_') === false"
v-if="collection.meta === null && collection.collection.startsWith('directus_') === false"
x-small
outlined
class="manage"

View File

@@ -2,15 +2,15 @@
<div>
<h2 class="type-title">{{ $t('display_setup_title') }}</h2>
<v-fancy-select class="select" :items="selectItems" v-model="fieldData.system.display" />
<v-fancy-select class="select" :items="selectItems" v-model="fieldData.meta.display" />
<v-notice class="not-found" type="danger" v-if="fieldData.system.display && !selectedDisplay">
{{ $t('display_not_found', { display: fieldData.system.display }) }}
<v-notice class="not-found" type="danger" v-if="fieldData.meta.display && !selectedDisplay">
{{ $t('display_not_found', { display: fieldData.meta.display }) }}
<div class="spacer" />
<button @click="fieldData.system.display = null">{{ $t('reset_display') }}</button>
<button @click="fieldData.meta.display = null">{{ $t('reset_display') }}</button>
</v-notice>
<template v-if="fieldData.system.display && !selectedDisplay">
<template v-if="fieldData.meta.display && !selectedDisplay">
<v-form
v-if="
selectedDisplay.options &&
@@ -19,7 +19,7 @@
"
:fields="selectedDisplay.options"
primary-key="+"
v-model="fieldData.system.options"
v-model="fieldData.meta.options"
/>
<v-notice v-else>
@@ -71,7 +71,7 @@ export default defineComponent({
);
const selectedDisplay = computed(() => {
return displays.find((display) => display.id === state.fieldData.system.display);
return displays.find((display) => display.id === state.fieldData.meta.display);
});
return { fieldData: state.fieldData, selectItems, selectedDisplay };

View File

@@ -2,15 +2,15 @@
<div>
<h2 class="type-title">{{ $t('interface_setup_title') }}</h2>
<v-fancy-select class="select" :items="selectItems" v-model="fieldData.system.interface" />
<v-fancy-select class="select" :items="selectItems" v-model="fieldData.meta.interface" />
<v-notice class="not-found" type="danger" v-if="fieldData.system.interface && !selectedInterface">
{{ $t('interface_not_found', { interface: fieldData.system.interface }) }}
<v-notice class="not-found" type="danger" v-if="fieldData.meta.interface && !selectedInterface">
{{ $t('interface_not_found', { interface: fieldData.meta.interface }) }}
<div class="spacer" />
<button @click="fieldData.system.interface = null">{{ $t('reset_interface') }}</button>
<button @click="fieldData.meta.interface = null">{{ $t('reset_interface') }}</button>
</v-notice>
<template v-if="fieldData.system.interface && selectedInterface">
<template v-if="fieldData.meta.interface && selectedInterface">
<v-form
v-if="
selectedInterface.options &&
@@ -19,7 +19,7 @@
"
:fields="selectedInterface.options"
primary-key="+"
v-model="fieldData.system.options"
v-model="fieldData.meta.options"
/>
<v-notice v-else>
@@ -71,7 +71,7 @@ export default defineComponent({
);
const selectedInterface = computed(() => {
return interfaces.find((inter) => inter.id === state.fieldData.system.interface);
return interfaces.find((inter) => inter.id === state.fieldData.meta.interface);
});
return { fieldData: state.fieldData, selectItems, selectedInterface };

View File

@@ -10,7 +10,7 @@
<div class="field">
<div class="label type-label">{{ $t('type') }}</div>
<v-input v-if="!fieldData.database" :value="$t('alias')" disabled />
<v-input v-if="!fieldData.schema" :value="$t('alias')" disabled />
<v-select
v-else
:disabled="typeDisabled || isExisting"
@@ -23,32 +23,32 @@
<div class="field full">
<div class="label type-label">{{ $t('note') }}</div>
<v-input v-model="fieldData.system.comment" :placeholder="$t('add_note')" />
<v-input v-model="fieldData.meta.comment" :placeholder="$t('add_note')" />
</div>
<!-- @todo base default value field type on selected type -->
<div class="field" v-if="fieldData.database">
<div class="field" v-if="fieldData.schema">
<div class="label type-label">{{ $t('default_value') }}</div>
<v-input
class="monospace"
v-model="fieldData.database.default_value"
v-model="fieldData.schema.default_value"
:placeholder="$t('add_a_default_value')"
/>
</div>
<div class="field" v-if="fieldData.database">
<div class="field" v-if="fieldData.schema">
<div class="label type-label">{{ $t('length') }}</div>
<v-input
type="number"
:placeholder="fieldData.type !== 'string' ? $t('not_available_for_type') : '255'"
:disabled="isExisting || fieldData.type !== 'string'"
v-model="fieldData.database.max_length"
v-model="fieldData.schema.max_length"
/>
</div>
<div class="field" v-if="fieldData.database">
<div class="field" v-if="fieldData.schema">
<div class="label type-label">{{ $t('allow_null') }}</div>
<v-checkbox v-model="fieldData.database.is_nullable" :label="$t('allow_null_label')" block />
<v-checkbox v-model="fieldData.schema.is_nullable" :label="$t('allow_null_label')" block />
</div>
<!--
@@ -56,7 +56,7 @@
<div class="field">
<div class="label type-label">{{ $t('unique') }}</div>
<v-input v-model="fieldData.database.unique" />
<v-input v-model="fieldData.schema.unique" />
</div> -->
</div>
</div>
@@ -116,17 +116,17 @@ export default defineComponent({
function setType(value: typeof types[number]) {
if (value === 'uuid') {
state.fieldData.system.special = 'uuid';
state.fieldData.meta.special = 'uuid';
} else {
state.fieldData.system.special = null;
state.fieldData.meta.special = null;
}
// We'll reset the interface/display as they most likely won't work for the newly selected
// type
state.fieldData.system.interface = null;
state.fieldData.system.options = null;
state.fieldData.system.display = null;
state.fieldData.system.display_options = null;
state.fieldData.meta.interface = null;
state.fieldData.meta.options = null;
state.fieldData.meta.display = null;
state.fieldData.meta.display_options = null;
state.fieldData.type = value;
}
},

View File

@@ -25,12 +25,12 @@ function initLocalStore(
fieldData: {
field: '',
type: '',
database: {
schema: {
default_value: undefined,
max_length: undefined,
is_nullable: true,
},
system: {
meta: {
hidden: false,
interface: undefined,
options: undefined,
@@ -52,8 +52,8 @@ function initLocalStore(
state.fieldData.field = existingField.field;
state.fieldData.type = existingField.type;
state.fieldData.database = existingField.schema;
state.fieldData.system = existingField.meta;
state.fieldData.schema = existingField.schema;
state.fieldData.meta = existingField.meta;
state.relations = relationsStore.getRelationsForField(collection, field);
}
@@ -122,11 +122,11 @@ function initLocalStore(
}
if (type === 'o2m') {
delete state.fieldData.database;
delete state.fieldData.schema;
delete state.fieldData.type;
if (!isExisting) {
state.fieldData.system.special = 'o2m';
state.fieldData.meta.special = 'o2m';
state.relations = [
{
@@ -159,11 +159,11 @@ function initLocalStore(
}
if (type === 'm2m' || type === 'files') {
delete state.fieldData.database;
delete state.fieldData.schema;
delete state.fieldData.type;
if (!isExisting) {
state.fieldData.system.special = 'm2m';
state.fieldData.meta.special = 'm2m';
state.relations = [
{