Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3517029
D7030.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
D7030.diff
View Options
diff --git a/lib/utils/push-alerts.js b/lib/utils/push-alerts.js
--- a/lib/utils/push-alerts.js
+++ b/lib/utils/push-alerts.js
@@ -12,7 +12,19 @@
const recordNotifPermissionAlertActionType = 'RECORD_NOTIF_PERMISSION_ALERT';
+const msInDay = 24 * 60 * 60 * 1000;
+const shouldSkipPushPermissionAlert = (
+ alertInfo: NotifPermissionAlertInfo,
+): boolean =>
+ (alertInfo.totalAlerts > 3 &&
+ alertInfo.lastAlertTime > Date.now() - msInDay) ||
+ (alertInfo.totalAlerts > 6 &&
+ alertInfo.lastAlertTime > Date.now() - msInDay * 3) ||
+ (alertInfo.totalAlerts > 9 &&
+ alertInfo.lastAlertTime > Date.now() - msInDay * 7);
+
export {
defaultNotifPermissionAlertInfo,
recordNotifPermissionAlertActionType,
+ shouldSkipPushPermissionAlert,
};
diff --git a/native/push/push-handler.react.js b/native/push/push-handler.react.js
--- a/native/push/push-handler.react.js
+++ b/native/push/push-handler.react.js
@@ -29,6 +29,7 @@
import {
type NotifPermissionAlertInfo,
recordNotifPermissionAlertActionType,
+ shouldSkipPushPermissionAlert,
} from 'lib/utils/push-alerts.js';
import {
@@ -72,8 +73,6 @@
'ForceTouchGestureHandler is not available',
]);
-const msInDay = 24 * 60 * 60 * 1000;
-
type BaseProps = {
+navigation: RootNavigationProp<'App'>,
};
@@ -390,14 +389,7 @@
showNotifAlertOnAndroid() {
const alertInfo = this.props.notifPermissionAlertInfo;
- if (
- (alertInfo.totalAlerts > 3 &&
- alertInfo.lastAlertTime > Date.now() - msInDay) ||
- (alertInfo.totalAlerts > 6 &&
- alertInfo.lastAlertTime > Date.now() - msInDay * 3) ||
- (alertInfo.totalAlerts > 9 &&
- alertInfo.lastAlertTime > Date.now() - msInDay * 7)
- ) {
+ if (shouldSkipPushPermissionAlert(alertInfo)) {
return;
}
this.props.dispatch({
diff --git a/web/push-notif/push-notifs-handler.js b/web/push-notif/push-notifs-handler.js
--- a/web/push-notif/push-notifs-handler.js
+++ b/web/push-notif/push-notifs-handler.js
@@ -13,6 +13,10 @@
useDispatchActionPromise,
useServerCall,
} from 'lib/utils/action-utils.js';
+import {
+ shouldSkipPushPermissionAlert,
+ recordNotifPermissionAlertActionType,
+} from 'lib/utils/push-alerts.js';
import electron from '../electron.js';
import PushNotifModal from '../modals/push-notif-modal.react.js';
@@ -83,6 +87,10 @@
useCreateDesktopPushSubscription();
const createPushSubscription = useCreatePushSubscription();
+ const notifPermissionAlertInfo = useSelector(
+ state => state.notifPermissionAlertInfo,
+ );
+
const modalContext = useModalContext();
const loggedIn = useSelector(isLoggedIn);
@@ -99,9 +107,17 @@
if (Notification.permission === 'granted') {
// Make sure the subscription is current if we have the permissions
await createPushSubscription();
- } else if (Notification.permission === 'default' && loggedIn) {
+ } else if (
+ Notification.permission === 'default' &&
+ loggedIn &&
+ !shouldSkipPushPermissionAlert(notifPermissionAlertInfo)
+ ) {
// Ask existing users that are already logged in for permission
modalContext.pushModal(<PushNotifModal />);
+ dispatch({
+ type: recordNotifPermissionAlertActionType,
+ payload: { time: Date.now() },
+ });
}
})();
// eslint-disable-next-line react-hooks/exhaustive-deps
@@ -117,12 +133,26 @@
if (!prevLoggedIn.current && loggedIn) {
if (Notification.permission === 'granted') {
createPushSubscription();
- } else if (Notification.permission === 'default') {
+ } else if (
+ Notification.permission === 'default' &&
+ !shouldSkipPushPermissionAlert(notifPermissionAlertInfo)
+ ) {
modalContext.pushModal(<PushNotifModal />);
+ dispatch({
+ type: recordNotifPermissionAlertActionType,
+ payload: { time: Date.now() },
+ });
}
}
prevLoggedIn.current = loggedIn;
- }, [createPushSubscription, loggedIn, modalContext, prevLoggedIn]);
+ }, [
+ createPushSubscription,
+ dispatch,
+ loggedIn,
+ modalContext,
+ notifPermissionAlertInfo,
+ prevLoggedIn,
+ ]);
// Redirect to thread on notification click
React.useEffect(() => {
diff --git a/web/root.js b/web/root.js
--- a/web/root.js
+++ b/web/root.js
@@ -41,7 +41,13 @@
const persistConfig = {
key: 'root',
storage,
- whitelist: ['enabledApps', 'deviceID', 'draftStore', 'cryptoStore'],
+ whitelist: [
+ 'enabledApps',
+ 'deviceID',
+ 'draftStore',
+ 'cryptoStore',
+ 'notifPermissionAlertInfo',
+ ],
migrate: (createMigrate(migrations, { debug: isDev }): any),
version: 1,
};
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Dec 23, 4:04 PM (15 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2695286
Default Alt Text
D7030.diff (4 KB)
Attached To
Mode
D7030: [web] Use notifPermissionAlertInfo
Attached
Detach File
Event Timeline
Log In to Comment