90 lines
2.6 KiB
JavaScript
90 lines
2.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { Component, useState, onMounted } from "@odoo/owl";
|
|
import { registry } from "@web/core/registry";
|
|
|
|
class RcSystrayItem extends Component {
|
|
static template = "fusion_ringcentral.SystrayItem";
|
|
static props = {};
|
|
|
|
setup() {
|
|
this.state = useState({
|
|
status: "offline",
|
|
visible: false,
|
|
});
|
|
|
|
onMounted(() => {
|
|
this._checkWidgetReady();
|
|
window.addEventListener("rc-presence-changed", (ev) => {
|
|
this._updatePresence(ev.detail);
|
|
});
|
|
});
|
|
}
|
|
|
|
_checkWidgetReady() {
|
|
const interval = setInterval(() => {
|
|
if (window.RCAdapter) {
|
|
this.state.visible = true;
|
|
clearInterval(interval);
|
|
}
|
|
}, 2000);
|
|
setTimeout(() => clearInterval(interval), 30000);
|
|
}
|
|
|
|
_updatePresence(presence) {
|
|
if (!presence) return;
|
|
this.state.visible = true;
|
|
const userStatus = (presence.userStatus || "").toLowerCase();
|
|
const dndStatus = (presence.dndStatus || "").toLowerCase();
|
|
|
|
if (dndStatus === "donotacceptanycalls") {
|
|
this.state.status = "dnd";
|
|
} else if (userStatus === "busy" || presence.telephonyStatus === "Ringing") {
|
|
this.state.status = "busy";
|
|
} else if (userStatus === "available") {
|
|
this.state.status = "available";
|
|
} else {
|
|
this.state.status = "offline";
|
|
}
|
|
}
|
|
|
|
get statusColor() {
|
|
const colors = {
|
|
available: "text-success",
|
|
busy: "text-danger",
|
|
dnd: "text-warning",
|
|
offline: "text-muted",
|
|
};
|
|
return colors[this.state.status] || "text-muted";
|
|
}
|
|
|
|
get statusTitle() {
|
|
const titles = {
|
|
available: "Available",
|
|
busy: "Busy",
|
|
dnd: "Do Not Disturb",
|
|
offline: "Offline",
|
|
};
|
|
return titles[this.state.status] || "RingCentral";
|
|
}
|
|
|
|
onClick() {
|
|
if (window.RCAdapter) {
|
|
const frame = document.querySelector("#rc-widget-adapter-frame");
|
|
if (frame) {
|
|
const isMinimized = frame.style.display === "none" ||
|
|
frame.closest("[style*='display: none']");
|
|
if (isMinimized) {
|
|
window.RCAdapter.setMinimized(false);
|
|
} else {
|
|
window.RCAdapter.setMinimized(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
registry.category("systray").add("fusion_ringcentral.SystrayItem", {
|
|
Component: RcSystrayItem,
|
|
}, { sequence: 5 });
|