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:
negue
2017-08-29 02:17:45 +02:00
committed by Keith Holliday
parent 170f901d86
commit 515fd62dd8
8 changed files with 71 additions and 20 deletions

View File

@@ -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>

View File

@@ -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();

View File

@@ -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>

View File

@@ -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);
} }

View File

@@ -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,

View File

@@ -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;

View File

@@ -322,7 +322,9 @@ export default {
} }
}, },
openBuyDialog (rewardItem) { openBuyDialog (rewardItem) {
if (rewardItem.purchaseType !== 'gear' || !rewardItem.locked) {
this.$emit('openBuyDialog', rewardItem); this.$emit('openBuyDialog', rewardItem);
}
}, },
}, },
}; };

View File

@@ -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: {