Files
fizzy/app/javascript/controllers/badge_controller.js
T

44 lines
946 B
JavaScript

import { Controller } from "@hotwired/stimulus"
import { onNextEventLoopTick } from "helpers/timing_helpers"
export default class extends Controller {
static targets = [ "unread" ]
static classes = [ "unread" ]
connect() {
onNextEventLoopTick(() => this.update())
}
update() {
onNextEventLoopTick(() => {
if (this.#available) {
const unreadCount = this.#unreadCount
console.log(unreadCount, this.unreadTargets)
if (unreadCount > 0) {
navigator.setAppBadge(unreadCount)
} else {
navigator.clearAppBadge()
}
}
})
}
clear() {
onNextEventLoopTick(() => {
if (this.#available) {
navigator.clearAppBadge()
}
})
}
get #unreadCount() {
return this.unreadTargets.filter(unreadTarget => unreadTarget.classList.contains(this.unreadClass)).length
}
get #available() {
return "setAppBadge" in navigator
}
}