mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
WIP(shops): start wiring up buy modals
This commit is contained in:
@@ -218,13 +218,12 @@
|
|||||||
.btn-show-more {
|
.btn-show-more {
|
||||||
display: block;
|
display: block;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 12px;
|
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 1.43;
|
line-height: 1.43;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background: $gray-600;
|
background: $gray-500;
|
||||||
color: $gray-200 !important; // Otherwise it gets ignored when used on an A element
|
color: $gray-200 !important; // Otherwise it gets ignored when used on an A element
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
import appearance from '@/../../common/script/content/appearance';
|
import appearance from '@/../../common/script/content/appearance';
|
||||||
import { subPageMixin } from '../../mixins/subPage';
|
import { subPageMixin } from '../../mixins/subPage';
|
||||||
import { userStateMixin } from '../../mixins/userState';
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
import { avatarEditorUtilies } from '../../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../../mixins/avatarEditUtilities';
|
||||||
import subMenu from './sub-menu';
|
import subMenu from './sub-menu';
|
||||||
import customizeOptions from './customize-options';
|
import customizeOptions from './customize-options';
|
||||||
import gem from '@/assets/svg/gem.svg';
|
import gem from '@/assets/svg/gem.svg';
|
||||||
@@ -51,7 +51,7 @@ export default {
|
|||||||
mixins: [
|
mixins: [
|
||||||
subPageMixin,
|
subPageMixin,
|
||||||
userStateMixin,
|
userStateMixin,
|
||||||
avatarEditorUtilies,
|
avatarEditorUtilities,
|
||||||
],
|
],
|
||||||
props: [
|
props: [
|
||||||
'editing',
|
'editing',
|
||||||
|
|||||||
@@ -67,11 +67,11 @@
|
|||||||
<script>
|
<script>
|
||||||
import gem from '@/assets/svg/gem.svg';
|
import gem from '@/assets/svg/gem.svg';
|
||||||
import gold from '@/assets/svg/gold.svg';
|
import gold from '@/assets/svg/gold.svg';
|
||||||
import { avatarEditorUtilies } from '../../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../../mixins/avatarEditUtilities';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
mixins: [
|
mixins: [
|
||||||
avatarEditorUtilies,
|
avatarEditorUtilities,
|
||||||
],
|
],
|
||||||
props: ['items', 'currentValue', 'fullSet'],
|
props: ['items', 'currentValue', 'fullSet'],
|
||||||
data () {
|
data () {
|
||||||
|
|||||||
@@ -60,7 +60,7 @@
|
|||||||
import appearance from '@/../../common/script/content/appearance';
|
import appearance from '@/../../common/script/content/appearance';
|
||||||
import { subPageMixin } from '../../mixins/subPage';
|
import { subPageMixin } from '../../mixins/subPage';
|
||||||
import { userStateMixin } from '../../mixins/userState';
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
import { avatarEditorUtilies } from '../../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../../mixins/avatarEditUtilities';
|
||||||
import subMenu from './sub-menu';
|
import subMenu from './sub-menu';
|
||||||
import customizeOptions from './customize-options';
|
import customizeOptions from './customize-options';
|
||||||
import gem from '@/assets/svg/gem.svg';
|
import gem from '@/assets/svg/gem.svg';
|
||||||
@@ -76,7 +76,7 @@ export default {
|
|||||||
mixins: [
|
mixins: [
|
||||||
subPageMixin,
|
subPageMixin,
|
||||||
userStateMixin,
|
userStateMixin,
|
||||||
avatarEditorUtilies,
|
avatarEditorUtilities,
|
||||||
],
|
],
|
||||||
props: [
|
props: [
|
||||||
'editing',
|
'editing',
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ import appearance from '@/../../common/script/content/appearance';
|
|||||||
import appearanceSets from '@/../../common/script/content/appearance/sets';
|
import appearanceSets from '@/../../common/script/content/appearance/sets';
|
||||||
import { subPageMixin } from '../../mixins/subPage';
|
import { subPageMixin } from '../../mixins/subPage';
|
||||||
import { userStateMixin } from '../../mixins/userState';
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
import { avatarEditorUtilies } from '../../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../../mixins/avatarEditUtilities';
|
||||||
import subMenu from './sub-menu';
|
import subMenu from './sub-menu';
|
||||||
import customizeOptions from './customize-options';
|
import customizeOptions from './customize-options';
|
||||||
import gem from '@/assets/svg/gem.svg';
|
import gem from '@/assets/svg/gem.svg';
|
||||||
@@ -97,7 +97,7 @@ export default {
|
|||||||
mixins: [
|
mixins: [
|
||||||
subPageMixin,
|
subPageMixin,
|
||||||
userStateMixin,
|
userStateMixin,
|
||||||
avatarEditorUtilies,
|
avatarEditorUtilities,
|
||||||
],
|
],
|
||||||
props: [
|
props: [
|
||||||
'editing',
|
'editing',
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ import appearance from '@/../../common/script/content/appearance';
|
|||||||
import appearanceSets from '@/../../common/script/content/appearance/sets';
|
import appearanceSets from '@/../../common/script/content/appearance/sets';
|
||||||
import { subPageMixin } from '../../mixins/subPage';
|
import { subPageMixin } from '../../mixins/subPage';
|
||||||
import { userStateMixin } from '../../mixins/userState';
|
import { userStateMixin } from '../../mixins/userState';
|
||||||
import { avatarEditorUtilies } from '../../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../../mixins/avatarEditUtilities';
|
||||||
import subMenu from './sub-menu';
|
import subMenu from './sub-menu';
|
||||||
import customizeOptions from './customize-options';
|
import customizeOptions from './customize-options';
|
||||||
import gem from '@/assets/svg/gem.svg';
|
import gem from '@/assets/svg/gem.svg';
|
||||||
@@ -56,7 +56,7 @@ export default {
|
|||||||
mixins: [
|
mixins: [
|
||||||
subPageMixin,
|
subPageMixin,
|
||||||
userStateMixin,
|
userStateMixin,
|
||||||
avatarEditorUtilies,
|
avatarEditorUtilities,
|
||||||
],
|
],
|
||||||
props: [
|
props: [
|
||||||
'editing',
|
'editing',
|
||||||
|
|||||||
@@ -1187,7 +1187,7 @@ import gold from '@/assets/svg/gold.svg';
|
|||||||
import arrowRight from '@/assets/svg/arrow_right.svg';
|
import arrowRight from '@/assets/svg/arrow_right.svg';
|
||||||
import arrowLeft from '@/assets/svg/arrow_left.svg';
|
import arrowLeft from '@/assets/svg/arrow_left.svg';
|
||||||
import svgClose from '@/assets/svg/close.svg';
|
import svgClose from '@/assets/svg/close.svg';
|
||||||
import { avatarEditorUtilies } from '../mixins/avatarEditUtilities';
|
import { avatarEditorUtilities } from '../mixins/avatarEditUtilities';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@@ -1201,7 +1201,7 @@ export default {
|
|||||||
toggleSwitch,
|
toggleSwitch,
|
||||||
usernameForm,
|
usernameForm,
|
||||||
},
|
},
|
||||||
mixins: [guide, notifications, avatarEditorUtilies],
|
mixins: [guide, notifications, avatarEditorUtilities],
|
||||||
data () {
|
data () {
|
||||||
const backgroundShopSets = shops.getBackgroundShopSets();
|
const backgroundShopSets = shops.getBackgroundShopSets();
|
||||||
|
|
||||||
|
|||||||
@@ -89,19 +89,19 @@
|
|||||||
v-if="item.value > 0 && !(item.key === 'gem' && gemsLeft < 1)"
|
v-if="item.value > 0 && !(item.key === 'gem' && gemsLeft < 1)"
|
||||||
class="purchase-amount"
|
class="purchase-amount"
|
||||||
>
|
>
|
||||||
<!-- this is where the pretty item cost element lives -->
|
<div class="item-cost justify-content-center my-3">
|
||||||
<div class="item-cost">
|
|
||||||
<span
|
<span
|
||||||
class="cost"
|
class="cost d-flex mx-auto"
|
||||||
:class="getPriceClass()"
|
:class="getPriceClass()"
|
||||||
>
|
>
|
||||||
<span
|
<span
|
||||||
class="svg-icon inline icon-24"
|
class="svg-icon icon-24 my-auto mr-1"
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
v-html="icons[getPriceClass()]"
|
v-html="icons[getPriceClass()]"
|
||||||
>
|
>
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
|
class="my-auto"
|
||||||
:class="getPriceClass()"
|
:class="getPriceClass()"
|
||||||
>{{ item.value }}</span>
|
>{{ item.value }}</span>
|
||||||
</span>
|
</span>
|
||||||
@@ -452,14 +452,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.item-cost {
|
.item-cost {
|
||||||
display: inline-flex;
|
|
||||||
margin: 16px 0;
|
|
||||||
align-items: center;
|
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cost {
|
.cost {
|
||||||
display: inline-block;
|
width: fit-content;
|
||||||
font-family: sans-serif;
|
font-family: sans-serif;
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
@@ -470,19 +467,16 @@
|
|||||||
&.gems {
|
&.gems {
|
||||||
color: $green-10;
|
color: $green-10;
|
||||||
background-color: rgba(36, 204, 143, 0.15);
|
background-color: rgba(36, 204, 143, 0.15);
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.gold {
|
&.gold {
|
||||||
color: $yellow-5;
|
color: $yellow-5;
|
||||||
background-color: rgba(255, 190, 93, 0.15);
|
background-color: rgba(255, 190, 93, 0.15);
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
&.hourglasses {
|
&.hourglasses {
|
||||||
color: $hourglass-color;
|
color: $hourglass-color;
|
||||||
background-color: rgba(41, 149, 205, 0.15);
|
background-color: rgba(41, 149, 205, 0.15);
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,6 @@
|
|||||||
<div class="p-4">
|
<div class="p-4">
|
||||||
<h1
|
<h1
|
||||||
v-once
|
v-once
|
||||||
class="mb-4"
|
|
||||||
>
|
>
|
||||||
{{ $t('customizations') }}
|
{{ $t('customizations') }}
|
||||||
</h1>
|
</h1>
|
||||||
@@ -46,7 +45,7 @@
|
|||||||
v-for="category in categories"
|
v-for="category in categories"
|
||||||
:key="category.identifier"
|
:key="category.identifier"
|
||||||
>
|
>
|
||||||
<h2 class="mb-3">
|
<h2 class="mb-3 mt-4">
|
||||||
{{ category.text }}
|
{{ category.text }}
|
||||||
</h2>
|
</h2>
|
||||||
<item-rows
|
<item-rows
|
||||||
@@ -67,6 +66,7 @@
|
|||||||
:price-type="ctx.item.currency"
|
:price-type="ctx.item.currency"
|
||||||
:empty-item="false"
|
:empty-item="false"
|
||||||
:show-popover="Boolean(ctx.item.text)"
|
:show-popover="Boolean(ctx.item.text)"
|
||||||
|
@click="selectItem(ctx.item)"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</item-rows>
|
</item-rows>
|
||||||
@@ -190,6 +190,9 @@ export default {
|
|||||||
return category.items.filter(item => !searchBy
|
return category.items.filter(item => !searchBy
|
||||||
|| item.text.toLowerCase().includes(searchBy));
|
|| item.text.toLowerCase().includes(searchBy));
|
||||||
},
|
},
|
||||||
|
selectItem (item) {
|
||||||
|
this.$root.$emit('buyModal::showItem', item);
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -193,6 +193,7 @@
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
line-height: 1.33;
|
line-height: 1.33;
|
||||||
|
margin-bottom: 1px;
|
||||||
|
|
||||||
&.gems {
|
&.gems {
|
||||||
color: $green-1;
|
color: $green-1;
|
||||||
@@ -367,6 +368,7 @@ export default {
|
|||||||
this.$emit('click', {});
|
this.$emit('click', {});
|
||||||
},
|
},
|
||||||
blur () {
|
blur () {
|
||||||
|
if (!this.$refs?.popover) return;
|
||||||
this.$refs.popover.$emit('enable');
|
this.$refs.popover.$emit('enable');
|
||||||
},
|
},
|
||||||
getPrice () {
|
getPrice () {
|
||||||
|
|||||||
@@ -22,20 +22,12 @@
|
|||||||
:show-all="showAll"
|
:show-all="showAll"
|
||||||
@click="toggleItemsToShow()"
|
@click="toggleItemsToShow()"
|
||||||
/>
|
/>
|
||||||
<div
|
|
||||||
v-else
|
|
||||||
class="fill-height"
|
|
||||||
></div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import '~@/assets/scss/colors.scss';
|
@import '~@/assets/scss/colors.scss';
|
||||||
|
|
||||||
.fill-height {
|
|
||||||
height: 38px; // button + margin + padding
|
|
||||||
}
|
|
||||||
|
|
||||||
.item-rows {
|
.item-rows {
|
||||||
margin-right: -1.5rem;
|
margin-right: -1.5rem;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<button
|
<button
|
||||||
class="btn btn-flat btn-show-more mb-4"
|
class="btn btn-flat btn-show-more mt-2"
|
||||||
@click="$emit('click')"
|
@click="$emit('click')"
|
||||||
>
|
>
|
||||||
<span class="button-text">
|
<span class="button-text">
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import appearanceSets from '@/../../common/script/content/appearance/sets';
|
|||||||
|
|
||||||
import { userStateMixin } from './userState';
|
import { userStateMixin } from './userState';
|
||||||
|
|
||||||
export const avatarEditorUtilies = { // eslint-disable-line import/prefer-default-export
|
export const avatarEditorUtilities = { // eslint-disable-line import/prefer-default-export
|
||||||
mixins: [userStateMixin],
|
mixins: [userStateMixin],
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -549,7 +549,7 @@ shops.getCustomizationsShopCategories = function getCustomizationsShopCategories
|
|||||||
const officialPinnedItems = getOfficialPinnedItems();
|
const officialPinnedItems = getOfficialPinnedItems();
|
||||||
|
|
||||||
const backgroundsCategory = {
|
const backgroundsCategory = {
|
||||||
identifier: 'backgrounds',
|
identifier: 'background',
|
||||||
text: i18n.t('backgrounds', language),
|
text: i18n.t('backgrounds', language),
|
||||||
};
|
};
|
||||||
backgroundsCategory.items = values(content.backgroundsFlat)
|
backgroundsCategory.items = values(content.backgroundsFlat)
|
||||||
|
|||||||
Reference in New Issue
Block a user