diff --git a/app/imports/client/ui/creature/buildTree/BuildTreeNode.vue b/app/imports/client/ui/creature/buildTree/BuildTreeNode.vue
index 853d79cf..a61b0c3b 100644
--- a/app/imports/client/ui/creature/buildTree/BuildTreeNode.vue
+++ b/app/imports/client/ui/creature/buildTree/BuildTreeNode.vue
@@ -4,7 +4,7 @@
:class="{
'empty': !hasChildren,
}"
- :data-id="`build-tree-node-${node._id}`"
+ :data-id="`tree-node-${node._id}`"
>
folder._id);
+
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: folderIds,
+ },
type: 'action',
actionType: { $ne: 'event' },
removed: { $ne: true },
diff --git a/app/imports/client/ui/creature/character/characterSheetTabs/BuildTab.vue b/app/imports/client/ui/creature/character/characterSheetTabs/BuildTab.vue
index 1f4cd4bb..02846e91 100644
--- a/app/imports/client/ui/creature/character/characterSheetTabs/BuildTab.vue
+++ b/app/imports/client/ui/creature/character/characterSheetTabs/BuildTab.vue
@@ -86,7 +86,7 @@
propertyClicked({_id, prefix: 'build-tree-node-'})"
+ @selected="_id => propertyClicked({_id, prefix: 'tree-node-'})"
/>
diff --git a/app/imports/client/ui/creature/character/characterSheetTabs/FeaturesTab.vue b/app/imports/client/ui/creature/character/characterSheetTabs/FeaturesTab.vue
index 11144684..5e4bda72 100644
--- a/app/imports/client/ui/creature/character/characterSheetTabs/FeaturesTab.vue
+++ b/app/imports/client/ui/creature/character/characterSheetTabs/FeaturesTab.vue
@@ -56,8 +56,19 @@ export default {
},
meteor: {
features() {
- return CreatureProperties.find({
+ const folderIds = CreatureProperties.find({
'ancestors.id': this.creatureId,
+ type: 'folder',
+ hideStatsGroup: true,
+ removed: { $ne: true },
+ inactive: { $ne: true },
+ }, { fields: { _id: 1 } }).map(folder => folder._id);
+
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: folderIds,
+ },
type: 'feature',
removed: { $ne: true },
inactive: { $ne: true },
diff --git a/app/imports/client/ui/creature/character/characterSheetTabs/InventoryTab.vue b/app/imports/client/ui/creature/character/characterSheetTabs/InventoryTab.vue
index 89c4d59b..64eddd1b 100644
--- a/app/imports/client/ui/creature/character/characterSheetTabs/InventoryTab.vue
+++ b/app/imports/client/ui/creature/character/characterSheetTabs/InventoryTab.vue
@@ -141,9 +141,21 @@ export default {
};
},
meteor: {
- containers() {
+ folderIds() {
return CreatureProperties.find({
'ancestors.id': this.creatureId,
+ type: 'folder',
+ hideStatsGroup: true,
+ removed: { $ne: true },
+ inactive: { $ne: true },
+ }, { fields: { _id: 1 } }).map(folder => folder._id);
+ },
+ containers() {
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: this.folderIds,
+ },
type: 'container',
removed: { $ne: true },
inactive: { $ne: true },
@@ -166,7 +178,7 @@ export default {
return CreatureProperties.find({
'ancestors.id': {
$eq: this.creatureId,
- $nin: this.containerIds
+ $nin: [...this.containerIds, ...this.folderIds],
},
type: 'container',
removed: { $ne: true },
@@ -179,7 +191,7 @@ export default {
return CreatureProperties.find({
'ancestors.id': {
$eq: this.creatureId,
- $nin: this.containerIds
+ $nin: [...this.containerIds, ...this.folderIds],
},
type: 'item',
equipped: { $ne: true },
diff --git a/app/imports/client/ui/creature/character/characterSheetTabs/JournalTab.vue b/app/imports/client/ui/creature/character/characterSheetTabs/JournalTab.vue
index 2679265a..d4834bb5 100644
--- a/app/imports/client/ui/creature/character/characterSheetTabs/JournalTab.vue
+++ b/app/imports/client/ui/creature/character/characterSheetTabs/JournalTab.vue
@@ -60,8 +60,19 @@ export default {
},
meteor: {
notes(){
- return CreatureProperties.find({
+ const folderIds = CreatureProperties.find({
'ancestors.id': this.creatureId,
+ type: 'folder',
+ hideStatsGroup: true,
+ removed: { $ne: true },
+ inactive: { $ne: true },
+ }, { fields: { _id: 1 } }).map(folder => folder._id);
+
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: folderIds,
+ },
type: 'note',
removed: {$ne: true},
inactive: {$ne: true},
diff --git a/app/imports/client/ui/creature/character/characterSheetTabs/SpellsTab.vue b/app/imports/client/ui/creature/character/characterSheetTabs/SpellsTab.vue
index f34da451..db5d3af3 100644
--- a/app/imports/client/ui/creature/character/characterSheetTabs/SpellsTab.vue
+++ b/app/imports/client/ui/creature/character/characterSheetTabs/SpellsTab.vue
@@ -10,7 +10,7 @@
@remove="softRemove"
/>
folder._id);
+ },
+ hasSpellSlots() {
+ return !!CreatureProperties.findOne({
+ 'ancestors.id': this.creatureId,
+ inactive: { $ne: true },
+ removed: { $ne: true },
+ overridden: { $ne: true },
+ level: { $ne: 0 },
+ type: 'attribute',
+ attributeType: 'spellSlot',
+ });
+ },
+ spellSlots() {
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: this.folderIds,
+ },
inactive: { $ne: true },
removed: { $ne: true },
overridden: { $ne: true },
@@ -89,11 +112,16 @@ export default {
{ hideWhenTotalZero: true, total: 0 },
{ hideWhenValueZero: true, value: 0 },
],
+ }, {
+ sort: { order: 1 }
});
},
spellLists() {
return CreatureProperties.find({
- 'ancestors.id': this.creatureId,
+ 'ancestors.id': {
+ $eq: this.creatureId,
+ $nin: this.folderIds,
+ },
type: 'spellList',
removed: { $ne: true },
inactive: { $ne: true },
@@ -113,7 +141,7 @@ export default {
return CreatureProperties.find({
'ancestors.id': {
$eq: this.creatureId,
- $nin: this.spellListIds,
+ $nin: [...this.spellListIds, ...this.folderIds],
},
type: 'spell',
removed: { $ne: true },
@@ -130,7 +158,7 @@ export default {
return CreatureProperties.find({
'ancestors.id': {
$eq: this.creatureId,
- $nin: this.spellListIds,
+ $nin: [...this.spellListIds, ...this.folderIds],
},
type: 'spellList',
removed: { $ne: true },
diff --git a/app/imports/client/ui/creature/slots/SlotCard.vue b/app/imports/client/ui/creature/slots/SlotCard.vue
index 41140419..6721866f 100644
--- a/app/imports/client/ui/creature/slots/SlotCard.vue
+++ b/app/imports/client/ui/creature/slots/SlotCard.vue
@@ -8,7 +8,7 @@
class="slot-card d-flex flex-column"
@mouseover="hover = true"
@mouseleave="hover = false"
- @click="$emit('click')"
+ @click="fillSlot"
>
mdi-close
@@ -39,6 +39,9 @@
diff --git a/app/imports/client/ui/creature/slots/SlotCardsToFill.vue b/app/imports/client/ui/creature/slots/SlotCardsToFill.vue
index f188306b..cddbc800 100644
--- a/app/imports/client/ui/creature/slots/SlotCardsToFill.vue
+++ b/app/imports/client/ui/creature/slots/SlotCardsToFill.vue
@@ -1,5 +1,8 @@
-
+
{
- if (error){
- console.error(error);
- snackbar({text: error.reason || error.message || error.toString()});
- }
- });
- }
- });
- },
editPointBuy(_id){
this.$store.commit('pushDialogStack', {
component: 'creature-property-dialog',
@@ -101,10 +78,21 @@ export default {
},
},
meteor: {
- slots(){
- return CreatureProperties.find({
- type: 'propertySlot',
+ slots() {
+ const folderIds = CreatureProperties.find({
'ancestors.id': this.context.creatureId,
+ type: 'folder',
+ hideStatsGroup: true,
+ removed: { $ne: true },
+ inactive: { $ne: true },
+ }, { fields: { _id: 1 } }).map(folder => folder._id);
+
+ return CreatureProperties.find({
+ 'ancestors.id': {
+ $eq: this.context.creatureId,
+ $nin: folderIds,
+ },
+ type: 'propertySlot',
ignored: { $ne: true },
$and: [
{
diff --git a/app/imports/client/ui/properties/components/folders/FolderGroupCard.vue b/app/imports/client/ui/properties/components/folders/FolderGroupCard.vue
index 7729cd9c..db4a6b7e 100644
--- a/app/imports/client/ui/properties/components/folders/FolderGroupCard.vue
+++ b/app/imports/client/ui/properties/components/folders/FolderGroupCard.vue
@@ -50,6 +50,7 @@ export default {
deactivatedByAncestor: { $ne: true },
},
{
+ type: { $ne: 'toggle' },
inactive: { $ne: true }
},
],
diff --git a/app/imports/client/ui/properties/components/folders/folderGroupComponents/FolderGroupChildren.vue b/app/imports/client/ui/properties/components/folders/folderGroupComponents/FolderGroupChildren.vue
new file mode 100644
index 00000000..a69afa22
--- /dev/null
+++ b/app/imports/client/ui/properties/components/folders/folderGroupComponents/FolderGroupChildren.vue
@@ -0,0 +1,65 @@
+
+
+ $emit('sub-click', _id)"
+ @remove="$emit('remove', prop._id)"
+ />
+
+
+
+
diff --git a/app/imports/client/ui/properties/components/folders/folderGroupComponents/SlotBuildTree.vue b/app/imports/client/ui/properties/components/folders/folderGroupComponents/SlotBuildTree.vue
new file mode 100644
index 00000000..13966bcd
--- /dev/null
+++ b/app/imports/client/ui/properties/components/folders/folderGroupComponents/SlotBuildTree.vue
@@ -0,0 +1,82 @@
+
+ $emit('sub-click', _id)"
+ />
+
+
+
\ No newline at end of file
diff --git a/app/imports/client/ui/properties/components/folders/propertyComponentIndex.js b/app/imports/client/ui/properties/components/folders/propertyComponentIndex.js
index de9ce052..c6f866e8 100644
--- a/app/imports/client/ui/properties/components/folders/propertyComponentIndex.js
+++ b/app/imports/client/ui/properties/components/folders/propertyComponentIndex.js
@@ -17,16 +17,17 @@ import item from '/imports/client/ui/properties/components/inventory/ItemListTil
import note from '/imports/client/ui/properties/components/persona/NoteCard.vue';
//import pointBuy from '';
//import proficiency from '';
-//import propertySlot from '';
+import propertySlot from '/imports/client/ui/properties/components/folders/folderGroupComponents/SlotBuildTree.vue';
//import reference from '';
//import roll from '';
//import savingThrow from '';
import skill from '/imports/client/ui/properties/components/skills/SkillListTile.vue';
//import slotFiller from '';
-//import spellList from '';
-//import spell from '';
+import spellList from '/imports/client/ui/properties/components/spells/SpellListCard.vue';
+import spell from '/imports/client/ui/properties/components/spells/SpellListTile.vue';
import toggle from '/imports/client/ui/properties/components/toggles/ToggleCard.vue';
//import trigger from '';
+import FolderGroupChildren from '/imports/client/ui/properties/components/folders/folderGroupComponents/FolderGroupChildren.vue';
export default {
action,
@@ -43,19 +44,19 @@ export default {
//damageMultiplier,
//effect,
feature,
- //folder,
+ // folder // Like actions, we don't show sub-folders
item,
note,
//pointBuy,
//proficiency,
- //propertySlot,
+ propertySlot,
//reference,
//roll,
//savingThrow,
skill,
- //slotFiller,
- //spellList,
- //spell,
+ slotFiller: FolderGroupChildren,
+ spellList,
+ spell,
toggle,
//trigger,
};
diff --git a/app/imports/client/ui/properties/forms/FolderForm.vue b/app/imports/client/ui/properties/forms/FolderForm.vue
index f98d87ba..9c993d3d 100644
--- a/app/imports/client/ui/properties/forms/FolderForm.vue
+++ b/app/imports/client/ui/properties/forms/FolderForm.vue
@@ -35,7 +35,7 @@