mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
Client/negue multiplefixes6 (#9000)
* use store action to purchase gem by gold * only show party members in header if enough width available / use overflow hidden * fix featuredItems buyModals * fix special items listing - open modal on special spells * don't open the buymodal on locked items * fix lint
This commit is contained in:
@@ -29,6 +29,10 @@
|
|||||||
margin-top: .5em;
|
margin-top: .5em;
|
||||||
margin-bottom: .5em;
|
margin-bottom: .5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.container-fluid {
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
@@ -6,11 +6,15 @@
|
|||||||
.view-party(v-if="user.party && user.party._id && partyMembers && partyMembers.length > 1")
|
.view-party(v-if="user.party && user.party._id && partyMembers && partyMembers.length > 1")
|
||||||
// TODO button should open the party members modal
|
// TODO button should open the party members modal
|
||||||
button.btn.btn-primary(@click='openPartyModal()') {{ $t('viewParty') }}
|
button.btn.btn-primary(@click='openPartyModal()') {{ $t('viewParty') }}
|
||||||
.party-members.d-flex(v-if="partyMembers && partyMembers.length > 1")
|
.party-members.d-flex(
|
||||||
|
v-if="partyMembers && partyMembers.length > 1",
|
||||||
|
v-resize="1500",
|
||||||
|
@resized="setPartyMembersWidth($event)"
|
||||||
|
)
|
||||||
member-details(
|
member-details(
|
||||||
v-for="(member, $index) in partyMembers",
|
v-for="(member, $index) in partyMembers",
|
||||||
:key="member._id",
|
:key="member._id",
|
||||||
v-if="member._id !== user._id && $index < 10",
|
v-if="member._id !== user._id && $index < membersToShow",
|
||||||
:member="member",
|
:member="member",
|
||||||
condensed=true,
|
condensed=true,
|
||||||
@onHover="expandMember(member._id)",
|
@onHover="expandMember(member._id)",
|
||||||
@@ -88,8 +92,12 @@ import { mapGetters, mapActions } from 'client/libs/store';
|
|||||||
import MemberDetails from './memberDetails';
|
import MemberDetails from './memberDetails';
|
||||||
import createPartyModal from './groups/createPartyModal';
|
import createPartyModal from './groups/createPartyModal';
|
||||||
import membersModal from './groups/membersModal';
|
import membersModal from './groups/membersModal';
|
||||||
|
import ResizeDirective from 'client/directives/resize.directive';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
directives: {
|
||||||
|
resize: ResizeDirective,
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
MemberDetails,
|
MemberDetails,
|
||||||
createPartyModal,
|
createPartyModal,
|
||||||
@@ -98,6 +106,8 @@ export default {
|
|||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
expandedMember: null,
|
expandedMember: null,
|
||||||
|
|
||||||
|
currentWidth: 0,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -109,6 +119,9 @@ export default {
|
|||||||
if (this.$store.state.hideHeader) return false;
|
if (this.$store.state.hideHeader) return false;
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
membersToShow () {
|
||||||
|
return Math.floor(this.currentWidth / 140) + 1;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapActions({
|
...mapActions({
|
||||||
@@ -131,6 +144,11 @@ export default {
|
|||||||
}
|
}
|
||||||
this.$root.$emit('show::modal', 'create-party-modal');
|
this.$root.$emit('show::modal', 'create-party-modal');
|
||||||
},
|
},
|
||||||
|
setPartyMembersWidth ($event) {
|
||||||
|
if (this.currentWidth !== $event.width) {
|
||||||
|
this.currentWidth = $event.width;
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
if (this.user.party && this.user.party._id) this.getPartyMembers();
|
if (this.user.party && this.user.party._id) this.getPartyMembers();
|
||||||
|
|||||||
@@ -138,6 +138,13 @@
|
|||||||
div.potion-icon(:class="'Pet_HatchingPotion_'+currentDraggingPotion.key")
|
div.potion-icon(:class="'Pet_HatchingPotion_'+currentDraggingPotion.key")
|
||||||
div.popover
|
div.popover
|
||||||
div.popover-content {{ $t('clickOnEggToHatch', {potionName: currentDraggingPotion.text }) }}
|
div.popover-content {{ $t('clickOnEggToHatch', {potionName: currentDraggingPotion.text }) }}
|
||||||
|
|
||||||
|
selectMembersModal(
|
||||||
|
:item="selectedSpell",
|
||||||
|
:group="user.party",
|
||||||
|
@change="resetSpell($event)",
|
||||||
|
@memberSelected="memberSelected($event)",
|
||||||
|
)
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@@ -174,6 +181,7 @@ import Item from 'client/components/inventory/item';
|
|||||||
import ItemRows from 'client/components/ui/itemRows';
|
import ItemRows from 'client/components/ui/itemRows';
|
||||||
import CountBadge from 'client/components/ui/countBadge';
|
import CountBadge from 'client/components/ui/countBadge';
|
||||||
|
|
||||||
|
import SelectMembersModal from 'client/components/selectMembersModal';
|
||||||
import HatchedPetDialog from '../stable/hatchedPetDialog';
|
import HatchedPetDialog from '../stable/hatchedPetDialog';
|
||||||
|
|
||||||
import createAnimal from 'client/libs/createAnimal';
|
import createAnimal from 'client/libs/createAnimal';
|
||||||
@@ -212,6 +220,7 @@ export default {
|
|||||||
bDropdownItem,
|
bDropdownItem,
|
||||||
HatchedPetDialog,
|
HatchedPetDialog,
|
||||||
CountBadge,
|
CountBadge,
|
||||||
|
SelectMembersModal,
|
||||||
},
|
},
|
||||||
directives: {
|
directives: {
|
||||||
drag: DragDropDirective,
|
drag: DragDropDirective,
|
||||||
@@ -227,6 +236,7 @@ export default {
|
|||||||
currentDraggingPotion: null,
|
currentDraggingPotion: null,
|
||||||
potionClickMode: false,
|
potionClickMode: false,
|
||||||
hatchedPet: null,
|
hatchedPet: null,
|
||||||
|
selectedSpell: null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
@@ -250,7 +260,9 @@ export default {
|
|||||||
const contentItems = this.content[groupKey];
|
const contentItems = this.content[groupKey];
|
||||||
|
|
||||||
each(this.user.items[groupKey], (itemQuantity, itemKey) => {
|
each(this.user.items[groupKey], (itemQuantity, itemKey) => {
|
||||||
if (itemQuantity > 0 && (!group.allowedItems || group.allowedItems.indexOf(itemKey) !== -1)) {
|
let isAllowed = !group.allowedItems || group.allowedItems.indexOf(itemKey) !== -1;
|
||||||
|
|
||||||
|
if (itemQuantity > 0 && isAllowed) {
|
||||||
const item = contentItems[itemKey];
|
const item = contentItems[itemKey];
|
||||||
|
|
||||||
const isSearched = !searchText || item.text().toLowerCase().indexOf(searchText) !== -1;
|
const isSearched = !searchText || item.text().toLowerCase().indexOf(searchText) !== -1;
|
||||||
@@ -277,7 +289,7 @@ export default {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
let specialArray = [];
|
let specialArray = itemsByType.special;
|
||||||
|
|
||||||
if (this.user.purchased.plan.mysteryItems.length) {
|
if (this.user.purchased.plan.mysteryItems.length) {
|
||||||
specialArray.push({
|
specialArray.push({
|
||||||
@@ -297,10 +309,6 @@ export default {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (specialArray.length > 0) {
|
|
||||||
itemsByType.special = specialArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
return itemsByType;
|
return itemsByType;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -396,6 +404,8 @@ export default {
|
|||||||
let openedItem = result.data.data;
|
let openedItem = result.data.data;
|
||||||
let text = this.content.gear.flat[openedItem.key].text();
|
let text = this.content.gear.flat[openedItem.key].text();
|
||||||
this.drop(this.$t('messageDropMysteryItem', {dropText: text}), openedItem);
|
this.drop(this.$t('messageDropMysteryItem', {dropText: text}), openedItem);
|
||||||
|
} else {
|
||||||
|
this.selectedSpell = item;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -408,6 +418,17 @@ export default {
|
|||||||
lastMouseMoveEvent = $event;
|
lastMouseMoveEvent = $event;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
resetSpell ($event) {
|
||||||
|
if (!$event) {
|
||||||
|
this.selectedSpell = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
memberSelected (member) {
|
||||||
|
this.$store.dispatch('user:castSpell', {key: this.selectedSpell.key, targetId: member.id});
|
||||||
|
this.selectedSpell = null;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ b-modal#buy-gems(title="Buy Gems", :hide-footer="true", size='lg')
|
|||||||
p {{ $t('subGemPop') }}
|
p {{ $t('subGemPop') }}
|
||||||
|
|
||||||
.col-4
|
.col-4
|
||||||
button.btn.btn-primary(@click='purchase({ params: {type: "gems", key: "gem"} })')
|
button.btn.btn-primary(@click='purchase({type: "gems", key: "gem"})')
|
||||||
| Buy Gems for 20 Gold each
|
| Buy Gems for 20 Gold each
|
||||||
span.Pet_Currency_Gem.inline-gems
|
span.Pet_Currency_Gem.inline-gems
|
||||||
.badge.badge-success.stack-count {{planGemLimits.convCap + user.purchased.plan.consecutive.gemCapExtra - user.purchased.plan.gemsBought}}
|
.badge.badge-success.stack-count {{planGemLimits.convCap + user.purchased.plan.consecutive.gemCapExtra - user.purchased.plan.gemsBought}}
|
||||||
@@ -78,7 +78,6 @@ b-modal#buy-gems(title="Buy Gems", :hide-footer="true", size='lg')
|
|||||||
import bModal from 'bootstrap-vue/lib/components/modal';
|
import bModal from 'bootstrap-vue/lib/components/modal';
|
||||||
import { mapState } from 'client/libs/store';
|
import { mapState } from 'client/libs/store';
|
||||||
import planGemLimits from '../../../common/script/libs/planGemLimits';
|
import planGemLimits from '../../../common/script/libs/planGemLimits';
|
||||||
import purchase from '../../../common/script/ops/purchase';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -101,7 +100,7 @@ export default {
|
|||||||
},
|
},
|
||||||
purchase (params) {
|
purchase (params) {
|
||||||
try {
|
try {
|
||||||
purchase(this.user, params);
|
this.$store.dispatch('shops:purchase', params);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
alert(e.message);
|
alert(e.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ div
|
|||||||
b-modal#select-member-modal(
|
b-modal#select-member-modal(
|
||||||
size='lg',
|
size='lg',
|
||||||
:visible="true",
|
:visible="true",
|
||||||
v-if="card != null",
|
v-if="item != null",
|
||||||
:hideFooter="true",
|
:hideFooter="true",
|
||||||
@change="onChange($event)"
|
@change="onChange($event)"
|
||||||
)
|
)
|
||||||
@@ -92,13 +92,13 @@ import bModal from 'bootstrap-vue/lib/components/modal';
|
|||||||
import bDropdown from 'bootstrap-vue/lib/components/dropdown';
|
import bDropdown from 'bootstrap-vue/lib/components/dropdown';
|
||||||
import bDropdownItem from 'bootstrap-vue/lib/components/dropdown-item';
|
import bDropdownItem from 'bootstrap-vue/lib/components/dropdown-item';
|
||||||
|
|
||||||
import MemberDetails from '../../memberDetails';
|
import MemberDetails from './memberDetails';
|
||||||
import removeIcon from 'assets/members/remove.svg';
|
import removeIcon from 'assets/members/remove.svg';
|
||||||
import messageIcon from 'assets/members/message.svg';
|
import messageIcon from 'assets/members/message.svg';
|
||||||
import starIcon from 'assets/members/star.svg';
|
import starIcon from 'assets/members/star.svg';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: ['group', 'hideBadge', 'card'],
|
props: ['group', 'hideBadge', 'item'],
|
||||||
components: {
|
components: {
|
||||||
bModal,
|
bModal,
|
||||||
bDropdown,
|
bDropdown,
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
:itemContentClass="'shop_'+item.key",
|
:itemContentClass="'shop_'+item.key",
|
||||||
:emptyItem="false",
|
:emptyItem="false",
|
||||||
:popoverPosition="'top'",
|
:popoverPosition="'top'",
|
||||||
@click="gearSelected(item)"
|
@click="featuredItemSelected(item)"
|
||||||
)
|
)
|
||||||
template(slot="itemBadge", scope="ctx")
|
template(slot="itemBadge", scope="ctx")
|
||||||
span.badge.badge-pill.badge-item.badge-svg(
|
span.badge.badge-pill.badge-item.badge-svg(
|
||||||
@@ -265,7 +265,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
selectMembersModal(
|
selectMembersModal(
|
||||||
:card="selectedCardToBuy",
|
:item="selectedCardToBuy",
|
||||||
:group="user.party",
|
:group="user.party",
|
||||||
@change="resetCardToBuy($event)",
|
@change="resetCardToBuy($event)",
|
||||||
@memberSelected="memberSelected($event)",
|
@memberSelected="memberSelected($event)",
|
||||||
@@ -410,7 +410,7 @@
|
|||||||
import SellModal from './sellModal.vue';
|
import SellModal from './sellModal.vue';
|
||||||
import BuyModal from '../buyModal.vue';
|
import BuyModal from '../buyModal.vue';
|
||||||
import EquipmentAttributesGrid from './equipmentAttributesGrid.vue';
|
import EquipmentAttributesGrid from './equipmentAttributesGrid.vue';
|
||||||
import SelectMembersModal from './selectMembersModal.vue';
|
import SelectMembersModal from 'client/components/selectMembersModal.vue';
|
||||||
|
|
||||||
import bPopover from 'bootstrap-vue/lib/components/popover';
|
import bPopover from 'bootstrap-vue/lib/components/popover';
|
||||||
import bDropdown from 'bootstrap-vue/lib/components/dropdown';
|
import bDropdown from 'bootstrap-vue/lib/components/dropdown';
|
||||||
@@ -799,6 +799,13 @@ export default {
|
|||||||
this.selectedItemToBuy = item;
|
this.selectedItemToBuy = item;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
featuredItemSelected (item) {
|
||||||
|
if (item.purchaseType === 'gear' && !item.locked) {
|
||||||
|
this.selectedGearToBuy = item;
|
||||||
|
} else {
|
||||||
|
this.itemSelected(item);
|
||||||
|
}
|
||||||
|
},
|
||||||
gearSelected (item) {
|
gearSelected (item) {
|
||||||
if (!item.locked) {
|
if (!item.locked) {
|
||||||
this.selectedGearToBuy = item;
|
this.selectedGearToBuy = item;
|
||||||
|
|||||||
@@ -322,7 +322,9 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
openBuyDialog (rewardItem) {
|
openBuyDialog (rewardItem) {
|
||||||
this.$emit('openBuyDialog', rewardItem);
|
if (rewardItem.purchaseType !== 'gear' || !rewardItem.locked) {
|
||||||
|
this.$emit('openBuyDialog', rewardItem);
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
selectMembersModal(
|
selectMembersModal(
|
||||||
:card="selectedCardToBuy",
|
:item="selectedCardToBuy",
|
||||||
:group="user.party",
|
:group="user.party",
|
||||||
@change="resetCardToBuy($event)",
|
@change="resetCardToBuy($event)",
|
||||||
@memberSelected="memberSelectedToSendCard($event)",
|
@memberSelected="memberSelectedToSendCard($event)",
|
||||||
@@ -327,7 +327,7 @@ import BuyModal from 'client/components/shops/buyModal.vue';
|
|||||||
import Item from 'client/components/inventory/item.vue';
|
import Item from 'client/components/inventory/item.vue';
|
||||||
import Avatar from 'client/components/avatar';
|
import Avatar from 'client/components/avatar';
|
||||||
import EquipmentAttributesGrid from 'client/components/shops/market/equipmentAttributesGrid.vue';
|
import EquipmentAttributesGrid from 'client/components/shops/market/equipmentAttributesGrid.vue';
|
||||||
import SelectMembersModal from 'client/components/shops/market/selectMembersModal.vue';
|
import SelectMembersModal from 'client/components/selectMembersModal.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
|||||||
Reference in New Issue
Block a user