2017-06-02 20:55:02 +00:00
|
|
|
<template lang="pug">
|
2017-08-03 20:04:03 +00:00
|
|
|
router-link.card-link(:to="{ name: 'guild', params: { groupId: guild._id } }")
|
|
|
|
|
.card
|
2017-11-09 18:37:47 +00:00
|
|
|
.card-body
|
2017-08-03 20:04:03 +00:00
|
|
|
.row
|
2017-09-14 19:53:27 +00:00
|
|
|
.col-md-2.badge-column
|
2018-01-10 00:29:59 +00:00
|
|
|
.shield-wrap(:class="{gold: guild.memberCount >= 1000, silver: guild.memberCount >= 100 && guild.memberCount < 1000}")
|
|
|
|
|
.svg-icon.shield(v-html="icons.goldGuildBadge", v-if='guild.memberCount >= 1000')
|
|
|
|
|
.svg-icon.shield(v-html="icons.silverGuildBadgeIcon", v-if='guild.memberCount >= 100 && guild.memberCount < 1000')
|
2017-09-14 19:53:27 +00:00
|
|
|
.svg-icon.shield(v-html="icons.bronzeGuildBadgeIcon", v-if='guild.memberCount < 100')
|
2017-09-25 18:02:12 +00:00
|
|
|
.member-count {{ guild.memberCount | abbrNum }}
|
2017-08-03 20:04:03 +00:00
|
|
|
.col-md-10
|
|
|
|
|
.row
|
|
|
|
|
.col-md-8
|
|
|
|
|
router-link(:to="{ name: 'guild', params: { groupId: guild._id } }")
|
|
|
|
|
h3 {{ guild.name }}
|
2017-09-14 19:53:27 +00:00
|
|
|
p.summary(v-if='guild.summary') {{guild.summary.substr(0, MAX_SUMMARY_SIZE_FOR_GUILDS)}}
|
|
|
|
|
p.summary(v-else) {{ guild.name }}
|
2017-08-03 20:04:03 +00:00
|
|
|
.col-md-2.cta-container
|
2017-11-30 14:16:00 +00:00
|
|
|
button.btn.btn-danger(v-if='isMember && displayLeave' @click.prevent='leave()', v-once) {{ $t('leave') }}
|
2017-08-03 20:04:03 +00:00
|
|
|
button.btn.btn-success(v-if='!isMember' @click='join()', v-once) {{ $t('join') }}
|
|
|
|
|
div.item-with-icon.gem-bank(v-if='displayGemBank')
|
|
|
|
|
.svg-icon.gem(v-html="icons.gem")
|
2017-08-18 20:29:49 +00:00
|
|
|
span.count {{ guild.balance * 4 }}
|
2017-08-03 20:04:03 +00:00
|
|
|
div.guild-bank(v-if='displayGemBank', v-once) {{$t('guildBank')}}
|
|
|
|
|
.row
|
2018-05-07 14:03:15 +00:00
|
|
|
category-tags.col-md-12(:categories="guild.categories", :owner="isOwner", v-once)
|
2019-05-31 10:26:15 +00:00
|
|
|
span.recommend-text(v-if='showSuggested(guild._id)') {{$t('suggestedGroup')}}
|
2017-06-02 20:55:02 +00:00
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
2019-10-01 13:38:48 +00:00
|
|
|
@import '~@/assets/scss/colors.scss';
|
2017-06-02 20:55:02 +00:00
|
|
|
|
2017-08-03 20:04:03 +00:00
|
|
|
.card-link {
|
|
|
|
|
color: #4E4A57 !important;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.card-link:hover {
|
|
|
|
|
text-decoration: none !important;
|
|
|
|
|
}
|
|
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.card {
|
2017-09-14 19:53:27 +00:00
|
|
|
min-height: 160px;
|
2017-07-26 15:05:13 +00:00
|
|
|
border-radius: 4px;
|
|
|
|
|
background-color: $white;
|
|
|
|
|
box-shadow: 0 2px 2px 0 rgba($black, 0.15), 0 1px 4px 0 rgba($black, 0.1);
|
|
|
|
|
margin-bottom: 1rem;
|
2017-06-02 20:55:02 +00:00
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.recommend-text {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
font-style: italic;
|
|
|
|
|
line-height: 2;
|
|
|
|
|
color: $gray-300;
|
|
|
|
|
}
|
2017-06-02 20:55:02 +00:00
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.cta-container {
|
|
|
|
|
margin: 0 auto;
|
2017-06-02 20:55:02 +00:00
|
|
|
|
2017-07-29 22:08:36 +00:00
|
|
|
button {
|
|
|
|
|
margin-top: 2.5em;
|
2017-07-26 15:05:13 +00:00
|
|
|
}
|
2017-07-29 22:08:36 +00:00
|
|
|
}
|
2017-07-26 15:05:13 +00:00
|
|
|
|
2017-07-29 22:08:36 +00:00
|
|
|
.item-with-icon {
|
2017-07-26 15:05:13 +00:00
|
|
|
.count {
|
|
|
|
|
font-size: 20px;
|
|
|
|
|
height: 37px;
|
|
|
|
|
width: 37px;
|
|
|
|
|
margin-left: .2em;
|
|
|
|
|
}
|
2017-06-02 20:55:02 +00:00
|
|
|
}
|
|
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.shield {
|
|
|
|
|
width: 70px;
|
2017-09-14 19:53:27 +00:00
|
|
|
}
|
|
|
|
|
|
2017-09-25 18:02:12 +00:00
|
|
|
.gold {
|
|
|
|
|
color: #fdbb5a;
|
2018-07-21 13:09:16 +00:00
|
|
|
|
|
|
|
|
.member-count {
|
|
|
|
|
color: #fdbb5a;
|
|
|
|
|
}
|
2017-09-25 18:02:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.silver {
|
|
|
|
|
color: #c2c2c2;
|
2018-07-21 13:09:16 +00:00
|
|
|
|
|
|
|
|
.member-count {
|
|
|
|
|
color: #c2c2c2;
|
|
|
|
|
}
|
2017-09-25 18:02:12 +00:00
|
|
|
}
|
|
|
|
|
|
2017-09-14 19:53:27 +00:00
|
|
|
.badge-column {
|
|
|
|
|
display: flex;
|
|
|
|
|
align-items: center;
|
|
|
|
|
justify-content: center;
|
|
|
|
|
|
|
|
|
|
.shield-wrap {
|
|
|
|
|
display: inline-block;
|
|
|
|
|
height: 70px;
|
|
|
|
|
}
|
2017-07-26 15:05:13 +00:00
|
|
|
}
|
2017-06-02 20:55:02 +00:00
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.guild-bank {
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
line-height: 1.33;
|
|
|
|
|
color: $gray-300;
|
|
|
|
|
}
|
2017-06-08 19:04:19 +00:00
|
|
|
|
2017-07-26 15:05:13 +00:00
|
|
|
.member-count {
|
|
|
|
|
position: relative;
|
2019-03-09 21:19:55 +00:00
|
|
|
top: -3.7em;
|
2018-04-28 15:43:59 +00:00
|
|
|
font-size: 18px;
|
2017-07-26 15:05:13 +00:00
|
|
|
font-weight: bold;
|
2018-04-28 15:43:59 +00:00
|
|
|
line-height: 1.1;
|
2017-07-26 15:05:13 +00:00
|
|
|
text-align: center;
|
|
|
|
|
color: #b36213;
|
2018-04-28 15:43:59 +00:00
|
|
|
margin-top: 2.0em;
|
2017-07-29 22:08:36 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.gem-bank {
|
|
|
|
|
margin-top: 2em;
|
|
|
|
|
|
|
|
|
|
.gem {
|
|
|
|
|
width: 25px;
|
|
|
|
|
display: inline-block;
|
|
|
|
|
vertical-align: bottom;
|
|
|
|
|
margin-right: .8em;
|
|
|
|
|
}
|
2017-07-26 15:05:13 +00:00
|
|
|
}
|
2017-06-02 20:55:02 +00:00
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|
|
|
|
|
<script>
|
2017-07-26 15:05:13 +00:00
|
|
|
import moment from 'moment';
|
2019-10-01 13:38:48 +00:00
|
|
|
import { mapState } from '@/libs/store';
|
2018-05-07 11:56:54 +00:00
|
|
|
import categoryTags from '../categories/categoryTags';
|
2019-10-01 13:38:48 +00:00
|
|
|
import groupUtilities from '@/mixins/groupsUtilities';
|
|
|
|
|
import markdown from '@/directives/markdown';
|
|
|
|
|
import gemIcon from '@/assets/svg/gem.svg';
|
|
|
|
|
import goldGuildBadgeIcon from '@/assets/svg/gold-guild-badge-large.svg';
|
|
|
|
|
import silverGuildBadgeIcon from '@/assets/svg/silver-guild-badge-large.svg';
|
|
|
|
|
import bronzeGuildBadgeIcon from '@/assets/svg/bronze-guild-badge-large.svg';
|
2019-10-01 14:00:06 +00:00
|
|
|
import { MAX_SUMMARY_SIZE_FOR_GUILDS } from '@/../../common/script/constants';
|
2017-06-02 20:55:02 +00:00
|
|
|
|
|
|
|
|
export default {
|
2017-09-13 18:31:23 +00:00
|
|
|
directives: {
|
|
|
|
|
markdown,
|
|
|
|
|
},
|
2018-05-07 11:56:54 +00:00
|
|
|
components: {
|
|
|
|
|
categoryTags,
|
|
|
|
|
},
|
2019-10-09 18:08:36 +00:00
|
|
|
mixins: [groupUtilities],
|
|
|
|
|
props: ['guild', 'displayLeave', 'displayGemBank'],
|
2017-06-08 19:04:19 +00:00
|
|
|
data () {
|
|
|
|
|
return {
|
2017-09-14 19:53:27 +00:00
|
|
|
MAX_SUMMARY_SIZE_FOR_GUILDS,
|
2017-06-08 19:04:19 +00:00
|
|
|
icons: Object.freeze({
|
|
|
|
|
gem: gemIcon,
|
|
|
|
|
goldGuildBadge: goldGuildBadgeIcon,
|
2017-08-07 20:26:17 +00:00
|
|
|
silverGuildBadgeIcon,
|
|
|
|
|
bronzeGuildBadgeIcon,
|
2017-06-08 19:04:19 +00:00
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
},
|
2019-10-11 18:35:49 +00:00
|
|
|
computed: {
|
|
|
|
|
...mapState({ user: 'user.data' }),
|
|
|
|
|
isOwner () {
|
|
|
|
|
return this.guild.leader && this.guild.leader === this.user._id;
|
|
|
|
|
},
|
|
|
|
|
isMember () {
|
|
|
|
|
return this.isMemberOfGroup(this.user, this.guild);
|
|
|
|
|
},
|
|
|
|
|
},
|
2017-06-02 20:55:02 +00:00
|
|
|
methods: {
|
2017-07-26 15:05:13 +00:00
|
|
|
showSuggested (guildId) {
|
2019-10-09 18:08:36 +00:00
|
|
|
const habiticaHelpingGuildId = '5481ccf3-5d2d-48a9-a871-70a7380cee5a';
|
|
|
|
|
const sixtyDaysAgoFromNow = moment().subtract(60, 'days');
|
|
|
|
|
const isUserNew = moment(this.user.auth.timestamps.created).isAfter(sixtyDaysAgoFromNow);
|
2019-05-31 10:26:15 +00:00
|
|
|
return guildId === habiticaHelpingGuildId && isUserNew;
|
2017-07-26 15:05:13 +00:00
|
|
|
},
|
2017-06-02 20:55:02 +00:00
|
|
|
async join () {
|
|
|
|
|
// @TODO: This needs to be in the notifications where users will now accept invites
|
2019-10-11 18:35:49 +00:00
|
|
|
if (this.guild.cancelledPlan && !window.confirm(window.env.t('aboutToJoinCancelledGroupPlan'))) {
|
2017-06-02 20:55:02 +00:00
|
|
|
return;
|
|
|
|
|
}
|
2019-10-09 18:08:36 +00:00
|
|
|
await this.$store.dispatch('guilds:join', { groupId: this.guild._id, type: 'guild' });
|
2017-06-02 20:55:02 +00:00
|
|
|
},
|
|
|
|
|
async leave () {
|
|
|
|
|
// @TODO: ask about challenges when we add challenges
|
2019-10-09 18:08:36 +00:00
|
|
|
await this.$store.dispatch('guilds:leave', { groupId: this.guild._id, type: 'myGuilds' });
|
2017-06-02 20:55:02 +00:00
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
</script>
|