🚧 You can now add more items, neat!

This commit is contained in:
Alicia Sykes 2021-10-16 21:55:28 +01:00
parent 532d5e1b22
commit b1e7ce22dd
1 changed files with 69 additions and 7 deletions

View File

@ -7,15 +7,29 @@
classes="dashy-modal edit-item" classes="dashy-modal edit-item"
@closed="modalClosed" @closed="modalClosed"
> >
<h3>Edit Item</h3> <h3 class="title">Edit Item</h3>
<p class="sub-title">Editing {{item.title}} (ID: {{itemId}})</p>
<div class="row" v-for="(row, index) in formData" :key="row.name"> <div class="row" v-for="(row, index) in formData" :key="row.name">
<Input <Input
v-model="formData[index].value" v-model="formData[index].value"
:description="row.description" :description="row.description"
:label="row.name" :label="row.name"
:type="row.type"
layout="horizontal" layout="horizontal"
/> />
</div> </div>
<div class="add-more-inputs">
<h4>More Fields</h4>
<div class="more-fields">
<span
v-for="row in additionalFormData"
:key="row.name"
@click="() => appendNewField(row.name)"
class="add-field-tag">
{{ row.name }}
</span>
</div>
</div>
<Button :click="saveItem">Save</Button> <Button :click="saveItem">Save</Button>
</modal> </modal>
</template> </template>
@ -34,6 +48,7 @@ export default {
modalName: modalNames.EDIT_ITEM, modalName: modalNames.EDIT_ITEM,
schema: DashySchema.properties.sections.items.properties.items.items.properties, schema: DashySchema.properties.sections.items.properties.items.items.properties,
formData: [], formData: [],
additionalFormData: [],
item: {}, item: {},
}; };
}, },
@ -53,13 +68,20 @@ export default {
methods: { methods: {
makeInitialFormData() { makeInitialFormData() {
const formData = []; const formData = [];
const requiredFields = ['title', 'description', 'url', 'icon', 'target', 'hotkey', 'provider', 'tags'];
const acceptedTypes = ['text', 'number'];
const getType = (origType) => (acceptedTypes.includes(origType) ? origType : 'text');
Object.keys(this.schema).forEach((property) => { Object.keys(this.schema).forEach((property) => {
if (this.item[property]) { const singleRow = {
formData.push({ name: property,
name: property, description: this.schema[property].description,
description: this.schema[property].description, value: this.item[property] || '',
value: this.item[property] || '', type: getType(this.schema[property].type),
}); };
if (this.item[property] || requiredFields.includes(property)) {
formData.push(singleRow);
} else {
this.additionalFormData.push(singleRow);
} }
}); });
return formData; return formData;
@ -72,8 +94,21 @@ export default {
this.formData.forEach((row) => { this.formData.forEach((row) => {
newItem[row.name] = row.value; newItem[row.name] = row.value;
}); });
newItem.id = this.itemId;
this.$store.commit(StoreKeys.UPDATE_ITEM, { newItem, itemId: this.itemId }); this.$store.commit(StoreKeys.UPDATE_ITEM, { newItem, itemId: this.itemId });
}, },
appendNewField(filedId) {
Object.keys(this.schema).forEach((property) => {
if (property === filedId) {
this.formData.push({
name: property,
description: this.schema[property].description,
value: this.item[property] || '',
type: 'text',
});
}
});
},
modalClosed() { modalClosed() {
this.$store.commit(StoreKeys.SET_MODAL_OPEN, false); this.$store.commit(StoreKeys.SET_MODAL_OPEN, false);
this.$emit('closeEditMenu'); this.$emit('closeEditMenu');
@ -92,6 +127,16 @@ export default {
color: var(--config-settings-color); color: var(--config-settings-color);
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
h3.title {
font-size: 1.2rem;
margin: 0.25rem 0;
}
p.sub-title {
margin: 0.25rem 0;
font-size: 0.8rem;
font-style: italic;
opacity: var(--dimming-factor);
}
.row { .row {
padding: 0.5rem 0.25rem; padding: 0.5rem 0.25rem;
&:not(:last-child) { &:not(:last-child) {
@ -102,6 +147,23 @@ export default {
padding: 0.35rem 0.5rem; padding: 0.35rem 0.5rem;
} }
} }
.more-fields {
display: flex;
flex-wrap: wrap;
.add-field-tag {
margin: 0.2rem;
padding: 0.2rem 0.5rem;;
min-width: 2rem;
cursor: pointer;
text-align: center;
border: 1px solid var(--config-settings-color);
border-radius: var(--curve-factor);
&:hover {
background: var(--config-settings-color);
color: var(--config-settings-background);
}
}
}
} }
</style> </style>