Made slot fill dialog a list of cards to leverage pretty slotFillers
This commit is contained in:
@@ -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'(){
|
||||||
|
|||||||
Reference in New Issue
Block a user