Made slot fill dialog a list of cards to leverage pretty slotFillers

This commit is contained in:
Stefan Zermatten
2020-10-15 15:24:14 +02:00
parent ed17d9e2d2
commit 2a729a4eca

View File

@@ -7,19 +7,45 @@
</template> </template>
<div class="library-nodes"> <div class="library-nodes">
<v-fade-transition mode="out-in"> <v-fade-transition mode="out-in">
<v-list v-if="$subReady.slotFillers && libraryNodes.length"> <column-layout
<v-list-tile v-if="$subReady.slotFillers && libraryNodes.length"
wide-columns
>
<div
v-for="node in libraryNodes" v-for="node in libraryNodes"
:key="node._id" :key="node._id"
:class="node._id === (selectedNode && selectedNode._id) && 'primary--text'"
@click="selectedNode = node"
> >
<tree-node-view <v-card
:model="node" style="max-width: 500px;"
:selected="node._id === (selectedNode && selectedNode._id)" hover
/> ripple
</v-list-tile> :class="{'primary theme--dark': node._id === (selectedNode && selectedNode._id)}"
</v-list> @click="selectedNode = node"
>
<v-img
v-if="node.picture"
:src="node.picture"
:max-height="200"
position="top center"
/>
<v-card-title primary-title>
<div>
<h3 class="title mb-0">
<property-icon
class="mr-2"
:model="node"
:color="node.color"
/>
{{ getTitle(node) }}
</h3>
<div v-if="node.description">
{{ node.description }}
</div>
</div>
</v-card-title>
</v-card>
</div>
</column-layout>
<div <div
v-else-if="$subReady.slotFillers" v-else-if="$subReady.slotFillers"
class="ma-4" class="ma-4"
@@ -77,14 +103,17 @@ import Creatures from '/imports/api/creature/Creatures.js';
import CreatureProperties from '/imports/api/creature/CreatureProperties.js'; import CreatureProperties from '/imports/api/creature/CreatureProperties.js';
import LibraryNodes from '/imports/api/library/LibraryNodes.js'; import LibraryNodes from '/imports/api/library/LibraryNodes.js';
import DialogBase from '/imports/ui/dialogStack/DialogBase.vue'; import DialogBase from '/imports/ui/dialogStack/DialogBase.vue';
import TreeNodeView from '/imports/ui/properties/treeNodeViews/TreeNodeView.vue';
import { getPropertyName } from '/imports/constants/PROPERTIES.js'; import { getPropertyName } from '/imports/constants/PROPERTIES.js';
import { parse, CompilationContext } from '/imports/parser/parser.js'; import { parse, CompilationContext } from '/imports/parser/parser.js';
import PROPERTIES from '/imports/constants/PROPERTIES.js';
import PropertyIcon from '/imports/ui/properties/shared/PropertyIcon.vue';
import ColumnLayout from '/imports/ui/components/ColumnLayout.vue';
export default { export default {
components: { components: {
DialogBase, DialogBase,
TreeNodeView, ColumnLayout,
PropertyIcon,
}, },
props:{ props:{
slotId: { slotId: {
@@ -111,6 +140,14 @@ export default {
return propName && propName.toLowerCase(); return propName && propName.toLowerCase();
}, },
}, },
methods:{
getTitle(model){
if (!model) return;
if (model.name) return model.name;
let prop = PROPERTIES[model.type]
return prop && prop.name;
},
},
meteor: { meteor: {
$subscribe: { $subscribe: {
'slotFillers'(){ 'slotFillers'(){