1
0
mirror of https://github.com/beestat/app.git synced 2025-05-23 18:04:14 -04:00
beestat/js/component/card/rate_app_reminder.js
2023-10-26 21:36:59 -04:00

117 lines
3.0 KiB
JavaScript

/**
* Banner asking people to rate and review the app.
*/
beestat.component.card.rate_app_reminder = function() {
const self = this;
beestat.dispatcher.addEventListener(
'setting.ui.rate_app_reminder_hide_until',
function() {
self.rerender();
}
);
beestat.component.card.apply(this, arguments);
};
beestat.extend(beestat.component.card.rate_app_reminder, beestat.component.card);
/**
* Decorate
*
* @param {rocket.Elements} parent
*/
beestat.component.card.rate_app_reminder.prototype.decorate_contents_ = function(parent) {
const self = this;
// Don't render anything if the user dismissed this card.
if (beestat.component.card.rate_app_reminder.should_show() === false) {
window.setTimeout(function() {
self.dispose();
}, 0);
return;
}
parent.style('background', beestat.style.color.bluegray.base);
let icon;
let store_name;
let store_url;
if (beestat.platform() === 'ios') {
icon = 'apple';
store_name = 'the App Store';
store_url = 'https://apps.apple.com/us/app/beestat/id6469190206?platform=ipad';
} else if (beestat.platform() === 'android') {
icon = 'google_play';
store_name = 'Google Play';
store_url = 'https://play.google.com/store/apps/details?id=io.beestat';
} else {
throw new Error('Unsupported platform.');
}
new beestat.component.tile()
.set_icon(icon)
.set_size('large')
.set_text(
'Rate now on ' + store_name
)
.set_background_color(beestat.style.color.green.dark)
.set_background_hover_color(beestat.style.color.green.light)
.addEventListener('click', function() {
window.open(store_url);
})
.render(parent);
};
/**
* Get the title of the card.
*
* @return {string} The title.
*/
beestat.component.card.rate_app_reminder.prototype.get_title_ = function() {
return 'Like the app? Leave a rating or review!';
};
/**
* Decorate the close button.
*
* @param {rocket.Elements} parent
*/
beestat.component.card.rate_app_reminder.prototype.decorate_top_right_ = function(parent) {
new beestat.component.tile()
.set_type('pill')
.set_shadow(false)
.set_icon('close')
.set_text_color('#fff')
.set_background_hover_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.setting(
'ui.rate_app_reminder_hide_until',
moment().utc()
.add(1000, 'year')
.format('YYYY-MM-DD HH:mm:ss')
);
})
.render(parent);
};
/**
* Determine whether or not this card should be shown.
*
* @return {boolean} Whether or not to show the card.
*/
beestat.component.card.rate_app_reminder.should_show = function() {
return (
beestat.user.get().user_id === 1 &&
(
beestat.platform() === 'android' ||
beestat.platform() === 'ios'
) &&
beestat.setting('meta.opens.' + beestat.platform()) > 10 &&
(
beestat.setting('ui.rate_app_reminder_hide_until') === undefined ||
moment.utc(beestat.setting('ui.rate_app_reminder_hide_until')).isBefore(moment.utc())
)
);
};