Skip to content

Commit 10d4669

Browse files
boubakerexo-swf
authored andcommitted
feat: Display Snackbar for PWA installation reminder - MEED-7119 - Meeds-io/MIPs#134
1 parent 1470998 commit 10d4669

File tree

6 files changed

+49
-13
lines changed

6 files changed

+49
-13
lines changed

webapp/portlet/src/main/resources/locale/portlet/Portlets_en.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,3 +915,6 @@ nodeIconPickerDrawer.cancel=cancel
915915
nodeIconPickerDrawer.showMore=Show more
916916
nodeIconPickerDrawer.searchPlaceholder=Filter by name
917917
nodeIconPickerDrawer.edit=Update
918+
919+
pwa.feature.suggest=Get the Best Experience on the App
920+
pwa.feature.suggest.install=Install

webapp/portlet/src/main/webapp/WEB-INF/gatein-resources.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2740,6 +2740,14 @@
27402740
</depends>
27412741
</module>
27422742

2743+
<module>
2744+
<name>pwa</name>
2745+
<load-group>baseGRP</load-group>
2746+
<script>
2747+
<path>/js/pwa.js</path>
2748+
</script>
2749+
</module>
2750+
27432751
<module>
27442752
<name>jquery</name>
27452753
<as>$</as>

webapp/portlet/src/main/webapp/groovy/social/webui/UISocialPortalApplicationHead.gtmpl

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,4 @@
6868
eXo.env.portal.attachmentObjectTypes = ['<%=StringUtils.join(supportedAttachmentObjectTypes, "', '")%>'];
6969
eXo.env.portal.customStylesheetEnabled = <%=featureService.isFeatureActiveForUser("customStylesheet", userName)%>;
7070
eXo.env.portal.pwaEnabled = <%=featureService.isFeatureActiveForUser("pwa", userName)%>;
71-
if (eXo.env.portal.pwaEnabled) {
72-
window.deferredPwaPrompt;
73-
window.addEventListener('beforeinstallprompt', (e) => {
74-
e.preventDefault();
75-
window.deferredPwaPrompt = e;
76-
});
77-
}
7871
</script>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
(function() {
2+
return {
3+
init: () => {
4+
if (window.eXo.env.portal.pwaEnabled
5+
&& !window?.matchMedia('(display-mode: standalone)')?.matches) {
6+
window.addEventListener('beforeinstallprompt', (e) => {
7+
e.preventDefault();
8+
window.deferredPwaPrompt = e;
9+
if (window.localStorage && !window.localStorage.getItem('pwa.suggested')) {
10+
window.deferredPwaPromptTimeout = window.setTimeout(async () => {
11+
document.dispatchEvent(new CustomEvent('alert-message', {detail:{
12+
alertMessage: window.vueI18nMessages['pwa.feature.suggest'],
13+
alertLinkText: window.vueI18nMessages['pwa.feature.suggest.install'],
14+
alertType: 'info',
15+
alertLinkCallback: async () => {
16+
document.dispatchEvent(new CustomEvent('close-alert-message'));
17+
await window.deferredPwaPrompt.prompt();
18+
const { outcome } = await window.deferredPwaPrompt.userChoice;
19+
if (outcome === 'accepted') {
20+
window.deferredPwaPrompt = null;
21+
}
22+
window.localStorage.setItem('pwa.suggested', 'true');
23+
},
24+
}}));
25+
}, 15000);
26+
}
27+
});
28+
}
29+
},
30+
};
31+
})();

webapp/portlet/src/main/webapp/js/vue-i18n-wrapper.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
fallbackLocale: 'en',
4646
messages: i18nMessages,
4747
});
48+
window.vueI18nMessages = i18n.messages?.[eXo.env.portal.language];
4849

4950
/**
5051
* Load translated strings from the given URLs and for the given language

webapp/portlet/src/main/webapp/vue-apps/user-setting-pwa/components/UserSettingPwa.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</v-list-item-content>
1717
<v-list-item-action>
1818
<v-btn
19-
:aria-label="$t(UserSettings.pwa.install)"
19+
:aria-label="$t('UserSettings.pwa.install')"
2020
:loading="loading"
2121
:disabled="disabledButton"
2222
class="btn"
@@ -56,10 +56,11 @@ export default {
5656
this.displayed = false;
5757
}
5858
});
59-
this.enabled = eXo.env.portal.pwaEnabled
60-
&& !!window.deferredPwaPrompt
61-
&& !window?.matchMedia('(display-mode: standalone)')?.matches;
59+
this.enabled = !!window.deferredPwaPrompt;
6260
if (this.enabled) {
61+
if (window.deferredPwaPromptTimeout) {
62+
window.clearTimeout(window.deferredPwaPromptTimeout);
63+
}
6364
window.addEventListener('appinstalled', this.hideApplication);
6465
}
6566
},
@@ -85,5 +86,4 @@ export default {
8586
},
8687
},
8788
};
88-
</script>
89-
89+
</script>

0 commit comments

Comments
 (0)