From 4352ca5f0da4f3f17365274f62d46672c34da19b Mon Sep 17 00:00:00 2001 From: Thaum Rystra Date: Mon, 18 May 2020 23:03:34 +0200 Subject: [PATCH] Inventory items can now be equipped --- app/imports/ui/components/tree/TreeNode.vue | 42 ++++++++---------- .../characterSheetTabs/InventoryTab.vue | 44 +++++++++---------- .../components/inventory/ContainerCard.vue | 3 +- app/imports/ui/properties/forms/ItemForm.vue | 9 ++++ .../treeNodeViews/DefaultTreeNode.vue | 20 +++++++++ .../properties/treeNodeViews/ItemTreeNode.vue | 27 ++++++++++++ .../treeNodeViews/treeNodeViewIndex.js | 6 +++ .../treeNodeViews/treeNodeViewMixin.js | 24 ++++++++++ 8 files changed, 127 insertions(+), 48 deletions(-) create mode 100644 app/imports/ui/properties/treeNodeViews/DefaultTreeNode.vue create mode 100644 app/imports/ui/properties/treeNodeViews/ItemTreeNode.vue create mode 100644 app/imports/ui/properties/treeNodeViews/treeNodeViewIndex.js create mode 100644 app/imports/ui/properties/treeNodeViews/treeNodeViewMixin.js diff --git a/app/imports/ui/components/tree/TreeNode.vue b/app/imports/ui/components/tree/TreeNode.vue index 96790090..62f41ac1 100644 --- a/app/imports/ui/components/tree/TreeNode.vue +++ b/app/imports/ui/components/tree/TreeNode.vue @@ -33,16 +33,12 @@ > drag_handle - + -
- - {{ getTitle }} -
@@ -72,14 +68,14 @@ * the tree view shows off the full character structure, and where each part of * character comes from. **/ - import PropertyIcon from '/imports/ui/properties/shared/PropertyIcon.vue'; import { canBeParent } from '/imports/api/parenting/parenting.js'; - import PROPERTIES from '/imports/constants/PROPERTIES.js' + import { getPropertyIcon } from '/imports/constants/PROPERTIES.js'; + import treeNodeViewIndex from '/imports/ui/properties/treeNodeViews/treeNodeViewIndex.js'; export default { name: 'TreeNode', components: { - PropertyIcon, + ...treeNodeViewIndex }, props: { node: Object, @@ -94,6 +90,10 @@ expanded: false, }}, computed: { + treeNodeView(){ + let type = this.node.type; + return treeNodeViewIndex[type] || treeNodeViewIndex.default; + }, hasChildren(){ return this.children && this.children.length || this.lazy && !this.expanded; }, @@ -113,20 +113,13 @@ canExpand(){ return canBeParent(this.node.type); }, - getTitle(){ - let node = this.node; - if (!node) return; - if (node.name) return node.name; - let prop = PROPERTIES[this.node.type] - return prop && prop.name; - } }, beforeCreate() { - this.$options.components.TreeNodeList = require('./TreeNodeList.vue').default + this.$options.components.TreeNodeList = require('./TreeNodeList.vue').default }, methods: { icon(type){ - return PROPERTY_ICONS[type]; + return getPropertyIcon(type); }, } }; @@ -151,12 +144,15 @@ opacity: 0.4; } .ghost { - opacity: 0.5; - background: #c8ebfb; + opacity: 0.5; + background: #fbc8c8; } .v-icon.v-icon--disabled { opacity: 0; } + .v-icon { + transition: none !important; + } .theme--light .tree-node-title:hover { background: rgba(0,0,0,.04); } diff --git a/app/imports/ui/creature/character/characterSheetTabs/InventoryTab.vue b/app/imports/ui/creature/character/characterSheetTabs/InventoryTab.vue index 8a37079e..63c0a2ca 100644 --- a/app/imports/ui/creature/character/characterSheetTabs/InventoryTab.vue +++ b/app/imports/ui/creature/character/characterSheetTabs/InventoryTab.vue @@ -2,40 +2,28 @@
- - - - + + + + - +
diff --git a/app/imports/ui/properties/components/inventory/ContainerCard.vue b/app/imports/ui/properties/components/inventory/ContainerCard.vue index d4831bc5..17c312e1 100644 --- a/app/imports/ui/properties/components/inventory/ContainerCard.vue +++ b/app/imports/ui/properties/components/inventory/ContainerCard.vue @@ -10,7 +10,7 @@ - + diff --git a/app/imports/ui/properties/treeNodeViews/ItemTreeNode.vue b/app/imports/ui/properties/treeNodeViews/ItemTreeNode.vue new file mode 100644 index 00000000..82ab2244 --- /dev/null +++ b/app/imports/ui/properties/treeNodeViews/ItemTreeNode.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/app/imports/ui/properties/treeNodeViews/treeNodeViewIndex.js b/app/imports/ui/properties/treeNodeViews/treeNodeViewIndex.js new file mode 100644 index 00000000..827c513d --- /dev/null +++ b/app/imports/ui/properties/treeNodeViews/treeNodeViewIndex.js @@ -0,0 +1,6 @@ +import DefaultTreeNode from '/imports/ui/properties/treeNodeViews/DefaultTreeNode.vue'; +import ItemTreeNode from '/imports/ui/properties/treeNodeViews/ItemTreeNode.vue'; +export default { + default: DefaultTreeNode, + item: ItemTreeNode, +} diff --git a/app/imports/ui/properties/treeNodeViews/treeNodeViewMixin.js b/app/imports/ui/properties/treeNodeViews/treeNodeViewMixin.js new file mode 100644 index 00000000..ca9e64bf --- /dev/null +++ b/app/imports/ui/properties/treeNodeViews/treeNodeViewMixin.js @@ -0,0 +1,24 @@ +import PROPERTIES from '/imports/constants/PROPERTIES.js'; +import PropertyIcon from '/imports/ui/properties/shared/PropertyIcon.vue'; + +export default { + components: { + PropertyIcon, + }, + props: { + model: { + type: Object, + default: () => ({}), + }, + selected: Boolean, + }, + computed: { + title(){ + let model = this.model; + if (!model) return; + if (model.name) return model.name; + let prop = PROPERTIES[model.type] + return prop && prop.name; + } + } +}