| Current Path : /home/jeromecohp/www/plugins/system/yooessentials/modules/core/app/fields/ |
| Current File : /home/jeromecohp/www/plugins/system/yooessentials/modules/core/app/fields/ContentItemsField.vue |
<template>
<div>
<p v-if="isEmpty($node.children)" class="uk-text-muted">
{{ $t(field.txtEmpty || 'No items yet.') }}
</p>
<ul
v-else
v-sortable="{ group: 'content-items' }"
class="uk-nav uk-nav-default yo-sidebar-marginless yo-nav-sortable yo-nav-iconnav uk-margin"
cls-custom="yo-nav-sortable-drag"
>
<ContentItem
v-for="child in $node.children"
:key="Builder.key(child)"
ref="items"
:node="child"
:field="field"
/>
</ul>
<div class="uk-grid uk-grid-small uk-child-width-auto">
<div>
<button v-if="field.item" class="uk-button uk-button-default" type="button" @click="add(field.item)">
{{ $t(field.button || 'Add Item') }}
</button>
<button v-else class="uk-button uk-button-default" type="button" @click="addFromLibrary">
{{ $t(field.button || 'Add Item') }}
</button>
</div>
</div>
</div>
</template>
<script>
import yootheme from 'yootheme';
import ContentItem from './ContentItem.vue';
import { DropdownList } from '../components';
export default {
name: 'ContentItems',
components: {
ContentItem,
},
extends: yootheme.fields.components.FieldContentItems,
methods: {
addFromLibrary() {
const filter = this.field.filter;
let elements = Object.values(this.Builder.types);
if (filter?.group) {
elements = elements.filter((el) => el.group === filter.group);
}
if (filter?.name) {
elements = elements.filter((el) => el?.name?.match(new RegExp(filter.name)));
}
if (elements.length === 1) {
this.addItem(elements[0].name);
return;
}
this.$dropdown(DropdownList, {
entries: elements.map((type) => ({
value: type.name,
text: type.title,
meta: type.name,
icon: type.iconSmall,
})),
})
.show(this.$el, { classes: 'yo-dropdown' })
.then((item) => {
item?.value && this.addItem(item.value);
});
},
addItem(name) {
this.Builder.add(this.$node, name, this.Builder.append).then((item) => this.Builder.edit(item));
},
},
};
</script>