fix(push): preserve Android status after LiveView patches
This commit is contained in:
parent
cba544ffda
commit
8e4656a725
|
|
@ -660,14 +660,18 @@ export const Hooks = {
|
||||||
this.buttonLabel = this.el.querySelector("[data-enable-push-label]")
|
this.buttonLabel = this.el.querySelector("[data-enable-push-label]")
|
||||||
this.status = this.el.querySelector("[data-push-status]")
|
this.status = this.el.querySelector("[data-push-status]")
|
||||||
this.native = typeof window.WhoNeedHelpAndroid?.postMessage === "function"
|
this.native = typeof window.WhoNeedHelpAndroid?.postMessage === "function"
|
||||||
|
this.statusMessage = null
|
||||||
|
this.buttonEnabled = null
|
||||||
|
|
||||||
if (this.native && this.button) this.button.disabled = false
|
if (this.native && this.button) this.button.disabled = false
|
||||||
|
|
||||||
this.setStatus = message => {
|
this.setStatus = message => {
|
||||||
|
this.statusMessage = message
|
||||||
if (this.status) this.status.textContent = message
|
if (this.status) this.status.textContent = message
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setButtonState = enabled => {
|
this.setButtonState = enabled => {
|
||||||
|
this.buttonEnabled = enabled
|
||||||
if (!this.buttonLabel) return
|
if (!this.buttonLabel) return
|
||||||
this.buttonLabel.textContent = enabled
|
this.buttonLabel.textContent = enabled
|
||||||
? this.buttonLabel.dataset.enabledLabel
|
? this.buttonLabel.dataset.enabledLabel
|
||||||
|
|
@ -765,9 +769,11 @@ export const Hooks = {
|
||||||
device_label: String(detail.device_label || "Android · FCM").slice(0, 120),
|
device_label: String(detail.device_label || "Android · FCM").slice(0, 120),
|
||||||
user_agent: navigator.userAgent.slice(0, 500)
|
user_agent: navigator.userAgent.slice(0, 500)
|
||||||
})
|
})
|
||||||
|
this.setButtonState(true)
|
||||||
this.setStatus("Push notifications are enabled on this Android device.")
|
this.setStatus("Push notifications are enabled on this Android device.")
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn("Android push registration failed", error)
|
console.warn("Android push registration failed", error)
|
||||||
|
this.setButtonState(false)
|
||||||
this.setStatus("The Android push token could not be saved. Please try again.")
|
this.setStatus("The Android push token could not be saved. Please try again.")
|
||||||
} finally {
|
} finally {
|
||||||
if (this.button) this.button.disabled = false
|
if (this.button) this.button.disabled = false
|
||||||
|
|
@ -776,6 +782,7 @@ export const Hooks = {
|
||||||
|
|
||||||
this.nativeError = event => {
|
this.nativeError = event => {
|
||||||
const reason = event.detail?.reason
|
const reason = event.detail?.reason
|
||||||
|
this.setButtonState(false)
|
||||||
this.setStatus(
|
this.setStatus(
|
||||||
reason === "permission_denied"
|
reason === "permission_denied"
|
||||||
? "Notification permission was not granted."
|
? "Notification permission was not granted."
|
||||||
|
|
@ -794,6 +801,8 @@ export const Hooks = {
|
||||||
window.localStorage.removeItem("wnh.push.server-device-id")
|
window.localStorage.removeItem("wnh.push.server-device-id")
|
||||||
if (this.native) {
|
if (this.native) {
|
||||||
this.postNative({action: "disable_push"})
|
this.postNative({action: "disable_push"})
|
||||||
|
this.setButtonState(false)
|
||||||
|
this.setStatus("Push notifications are disabled on this device.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -857,6 +866,23 @@ export const Hooks = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.activeServerDevice = () => {
|
||||||
|
const deviceId = window.localStorage.getItem("wnh.push.server-device-id")
|
||||||
|
|
||||||
|
return Boolean(
|
||||||
|
deviceId &&
|
||||||
|
[...this.el.querySelectorAll("[data-disable-device]")]
|
||||||
|
.some(element => element.dataset.disableDevice === deviceId)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.restoreNativeState = () => {
|
||||||
|
if (!this.native || !this.activeServerDevice()) return
|
||||||
|
|
||||||
|
this.setButtonState(true)
|
||||||
|
this.setStatus("Push notifications are enabled on this Android device.")
|
||||||
|
}
|
||||||
|
|
||||||
this.restoreWebState = async () => {
|
this.restoreWebState = async () => {
|
||||||
if (this.native) return
|
if (this.native) return
|
||||||
|
|
||||||
|
|
@ -901,6 +927,7 @@ export const Hooks = {
|
||||||
this.el.addEventListener("click", this.disableCurrentDevice)
|
this.el.addEventListener("click", this.disableCurrentDevice)
|
||||||
this.button?.addEventListener("click", this.enable)
|
this.button?.addEventListener("click", this.enable)
|
||||||
if (this.native) {
|
if (this.native) {
|
||||||
|
this.restoreNativeState()
|
||||||
this.postNative({action: "push_token_request"})
|
this.postNative({action: "push_token_request"})
|
||||||
} else {
|
} else {
|
||||||
this.restoreWebState()
|
this.restoreWebState()
|
||||||
|
|
@ -923,7 +950,11 @@ export const Hooks = {
|
||||||
this.button?.removeEventListener("click", this.enable)
|
this.button?.removeEventListener("click", this.enable)
|
||||||
this.button?.addEventListener("click", this.enable)
|
this.button?.addEventListener("click", this.enable)
|
||||||
|
|
||||||
|
if (this.buttonEnabled !== null) this.setButtonState(this.buttonEnabled)
|
||||||
|
if (this.statusMessage !== null) this.setStatus(this.statusMessage)
|
||||||
|
|
||||||
if (this.native) {
|
if (this.native) {
|
||||||
|
this.restoreNativeState()
|
||||||
this.postNative({action: "push_token_request"})
|
this.postNative({action: "push_token_request"})
|
||||||
} else {
|
} else {
|
||||||
this.restoreWebState()
|
this.restoreWebState()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user