* DEV: Fix the function prototype observers deprecation
DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.observes('foo') to observer('foo', function() {}). [deprecation id: function-prototype-extensions.observes] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-observes for more details.
* DEV: Fix the function prototype event listeners deprecation
DEPRECATION: Function prototype extensions have been deprecated, please migrate from function(){}.on('foo') to on('foo', function() {}). [deprecation id: function-prototype-extensions.on] See https://deprecations.emberjs.com/v3.x/#toc_function-prototype-extensions-on for more details.
* DEV: Simplify `default as` imports
Co-authored-by: Joffrey JAFFEUX <j.jaffeux@gmail.com>
55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
import discourseComputed from "discourse-common/utils/decorators";
|
|
import { keyValueStore as pushNotificationKeyValueStore } from "discourse/lib/push-notifications";
|
|
import DesktopNotificationConfig from "discourse/components/desktop-notification-config";
|
|
|
|
const userDismissedPromptKey = "dismissed-prompt";
|
|
|
|
export default DesktopNotificationConfig.extend({
|
|
@discourseComputed
|
|
bannerDismissed: {
|
|
set(value) {
|
|
pushNotificationKeyValueStore.setItem(userDismissedPromptKey, value);
|
|
return pushNotificationKeyValueStore.getItem(userDismissedPromptKey);
|
|
},
|
|
get() {
|
|
return pushNotificationKeyValueStore.getItem(userDismissedPromptKey);
|
|
}
|
|
},
|
|
|
|
@discourseComputed(
|
|
"isNotSupported",
|
|
"isEnabled",
|
|
"bannerDismissed",
|
|
"currentUser.reply_count",
|
|
"currentUser.topic_count"
|
|
)
|
|
showNotificationPromptBanner(
|
|
isNotSupported,
|
|
isEnabled,
|
|
bannerDismissed,
|
|
replyCount,
|
|
topicCount
|
|
) {
|
|
return (
|
|
this.siteSettings.push_notifications_prompt &&
|
|
!isNotSupported &&
|
|
this.currentUser &&
|
|
replyCount + topicCount > 0 &&
|
|
Notification.permission !== "denied" &&
|
|
Notification.permission !== "granted" &&
|
|
!isEnabled &&
|
|
!bannerDismissed
|
|
);
|
|
},
|
|
|
|
actions: {
|
|
turnon() {
|
|
this._super(...arguments);
|
|
this.set("bannerDismissed", true);
|
|
},
|
|
dismiss() {
|
|
this.set("bannerDismissed", true);
|
|
}
|
|
}
|
|
});
|