252 lines
7.3 KiB
Vue
252 lines
7.3 KiB
Vue
<template>
|
||
<header
|
||
class="grid u-flex__justify--center u-mb--36 u-mb--20--tablet u-mt--36"
|
||
>
|
||
<div class="grid-cell grid-cell--col9 grid-cell--col8--tablet tilte-container">
|
||
<nav class="breadcrumbs">
|
||
<p class="text is-caption is-txtMainTextColor" v-if="!isGeography">
|
||
<span class="title is-txtMainTextColor">{{
|
||
dataset.category_name
|
||
}}</span>
|
||
/
|
||
<span class="text is-txtMainTextColor">{{
|
||
dataset.data_source_name
|
||
}}</span>
|
||
</p>
|
||
<p class="text is-caption is-txtMainTextColor" v-else>
|
||
<span class="title is-txtMainTextColor">Geography</span>
|
||
</p>
|
||
</nav>
|
||
<h1 class="title is-sectiontitle is-txtMainTextColor u-mt--4">
|
||
{{ dataset.name }}
|
||
</h1>
|
||
</div>
|
||
|
||
<div class="u-ml--auto grid-cell grid-cell--col3 grid-cell--col4--tablet buttons-actions">
|
||
<div class="u-flex u-flex__justify--end">
|
||
<Button
|
||
v-if="getSubscriptionStatus === 'interested' && !interestedInSubscription"
|
||
@click.native="interested"
|
||
>
|
||
I’m interested
|
||
</Button>
|
||
<SubscriptionRequestSuccess
|
||
v-else-if="getSubscriptionStatus === 'interested' && interestedInSubscription"
|
||
></SubscriptionRequestSuccess>
|
||
<Button
|
||
v-else-if="getSubscriptionStatus === 'free_subscription'"
|
||
@click.native="showModal('subscribe')"
|
||
>
|
||
Subscribe for free
|
||
</Button>
|
||
<Button
|
||
v-else-if="getSubscriptionStatus === 'request_subscription'"
|
||
@click.native="showModal('request')"
|
||
>
|
||
Request subscription
|
||
</Button>
|
||
<div
|
||
v-else-if="getSubscriptionStatus === 'active'"
|
||
class="u-flex u-flex__direction--column u-flex__align--center"
|
||
>
|
||
<Button class="is-outline extra-border navy-blue noCursor">
|
||
Subscribed
|
||
<img class="u-ml--12" src="../../assets/icons/catalog/check.svg" alt="check" />
|
||
</Button>
|
||
<a v-if="dataset && dataset.is_public_data && subscriptionInfo"
|
||
:title="subscriptionInfo.sync_status === 'syncing' ? 'Can not remove a subscription while connecting' : ''"
|
||
@click="subscriptionInfo.sync_status !== 'syncing' && showModal('unsubscribe')"
|
||
:class="{ 'disabled': subscriptionInfo.sync_status === 'syncing' }"
|
||
class="text is-small is-txtSoftGrey u-mt--8 underline">
|
||
Unsubscribe
|
||
</a>
|
||
</div>
|
||
<div
|
||
v-else-if="getSubscriptionStatus === 'requested'"
|
||
class="u-flex u-flex__direction--column u-flex__align--center"
|
||
>
|
||
<Button class="is-outline extra-border navy-blue noCursor">
|
||
Requested
|
||
<img class="u-ml--12" src="../../assets/icons/catalog/check.svg" alt="check" />
|
||
</Button>
|
||
<a
|
||
@click="showModal('cancelRequest')"
|
||
class="text is-small is-txtSoftGrey u-mt--8 underline">
|
||
Cancel request
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<p
|
||
v-if="subscriptionInfo && subscriptionInfo.status !== 'active'"
|
||
class="text is-small is-txtMainTextColor u-mt--16 right-align"
|
||
>
|
||
Any questions? <a href="https://carto.com/request-live-demo/" target="_blank">Contact</a>
|
||
</p>
|
||
<p
|
||
v-else-if="!subscriptionInfo && !isEnterprise"
|
||
class="text is-small is-txtMainTextColor u-mt--16 right-align"
|
||
>
|
||
Only available for <a href="https://carto.com/pricing/" target="_blank">Enterprise plans</a>
|
||
</p>
|
||
</div>
|
||
|
||
<ModalSubscription
|
||
@closeModal="hideModal()"
|
||
:isOpen="modalOpen"
|
||
:dataset="dataset"
|
||
:type="getDatasetType()"
|
||
:mode="modalMode"
|
||
></ModalSubscription>
|
||
|
||
</header>
|
||
</template>
|
||
|
||
<script>
|
||
import { mapState } from 'vuex';
|
||
import Button from '../Button';
|
||
import ModalSubscription from '../Subscriptions/ModalSubscription';
|
||
import SubscriptionRequestSuccess from '../Subscriptions/SubscriptionRequestSuccess';
|
||
import { formURL } from 'new-dashboard/utils/catalog/form-url';
|
||
|
||
export default {
|
||
name: 'DatasetHeader',
|
||
data () {
|
||
return {
|
||
modalOpen: false,
|
||
modalMode: null
|
||
};
|
||
},
|
||
components: {
|
||
Button,
|
||
ModalSubscription,
|
||
SubscriptionRequestSuccess
|
||
},
|
||
computed: {
|
||
...mapState({
|
||
dataset: state => state.catalog.dataset,
|
||
interestedSubscriptions: state => state.catalog.interestedSubscriptions
|
||
}),
|
||
subscriptionInfo () {
|
||
return this.$store.getters['catalog/getSubscriptionByDataset'](
|
||
this.dataset.id
|
||
);
|
||
},
|
||
isPublicWebsite () {
|
||
return !(this.$store.state.user && this.$store.state.user.id);
|
||
},
|
||
isGeography () {
|
||
return this.$route.params.type === 'geography';
|
||
},
|
||
getSubscriptionStatus () {
|
||
const possibleLicenceStates = ['requested', 'active', 'expired'];
|
||
if (
|
||
!this.isPublicWebsite &&
|
||
this.subscriptionInfo &&
|
||
this.subscriptionInfo.status &&
|
||
possibleLicenceStates.indexOf(this.subscriptionInfo.status) >= 0
|
||
) {
|
||
return this.subscriptionInfo.status;
|
||
}
|
||
if (this.isPublicWebsite || !this.isDOEnabled) {
|
||
return 'interested';
|
||
} else if (
|
||
this.isDOEnabled &&
|
||
this.dataset.is_public_data !== undefined
|
||
) {
|
||
return this.dataset.is_public_data
|
||
? 'free_subscription'
|
||
: 'request_subscription';
|
||
}
|
||
return null;
|
||
},
|
||
interestedInSubscription () {
|
||
return this.interestedSubscriptions.indexOf(this.dataset.id) >= 0;
|
||
},
|
||
isEnterprise () {
|
||
return this.$store.state.user.is_enterprise;
|
||
},
|
||
isDOEnabled () {
|
||
return this.$store.state.user.do_enabled;
|
||
}
|
||
},
|
||
methods: {
|
||
getFormURL () {
|
||
return formURL(this.dataset);
|
||
},
|
||
async interested () {
|
||
if (this.isPublicWebsite) {
|
||
window.location.replace(this.getFormURL());
|
||
} else {
|
||
if (
|
||
await this.$store.dispatch('catalog/requestDataset', {
|
||
user: this.$store.state.user,
|
||
dataset: this.dataset
|
||
})
|
||
) {
|
||
this.$store.commit('catalog/addInterestedSubscriptions', this.dataset.id);
|
||
}
|
||
}
|
||
},
|
||
showModal (mode) {
|
||
this.modalMode = mode;
|
||
this.modalOpen = true;
|
||
document.body.classList.add('u-overflow-hidden');
|
||
},
|
||
hideModal () {
|
||
this.modalMode = null;
|
||
this.modalOpen = false;
|
||
document.body.classList.remove('u-overflow-hidden');
|
||
},
|
||
getDatasetType () {
|
||
return this.isGeography ? 'geography' : 'dataset';
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
@import 'new-dashboard/styles/variables';
|
||
.right-align {
|
||
text-align: right;
|
||
}
|
||
|
||
.u-ml--auto {
|
||
margin-left: auto;
|
||
}
|
||
|
||
a.disabled {
|
||
cursor: default;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.underline {
|
||
cursor: pointer;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
@media (max-width: $layout-mobile) {
|
||
.tilte-container.grid-cell--col8--tablet {
|
||
max-width: 100%;
|
||
flex: 1 1 100%;
|
||
}
|
||
.buttons-actions {
|
||
position: fixed;
|
||
left: 0;
|
||
bottom: 0;
|
||
z-index: 1;
|
||
min-width: 100%;
|
||
background-color: $white;
|
||
box-shadow: 0 4px 16px 0 rgba($neutral--800, 0.4);
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
height: 68px;
|
||
}
|
||
}
|
||
|
||
.is-sectiontitle {
|
||
font-size: 24px;
|
||
line-height: 36px;
|
||
}
|
||
</style>
|