Files
Odoo-Modules/fusion_poynt/static/src/js/poynt_wizard_poll.js
gsinghpal e71bc503f9 changes
2026-02-25 09:40:41 -05:00

70 lines
2.2 KiB
JavaScript

/** @odoo-module **/
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { Component, onMounted, onWillUnmount, useState } from "@odoo/owl";
class PoyntPollAction extends Component {
static template = "fusion_poynt.PoyntPollAction";
static props = ["*"];
setup() {
this.orm = useService("orm");
this.actionService = useService("action");
this.state = useState({ seconds: 0, message: "" });
const wizardId = this.props.action?.params?.wizard_id;
this.wizardId = wizardId;
onMounted(() => {
if (!this.wizardId) return;
this._tickTimer = setInterval(() => this.state.seconds++, 1000);
this._pollTimer = setInterval(() => this._poll(), 5000);
});
onWillUnmount(() => this._stop());
}
_stop() {
if (this._tickTimer) { clearInterval(this._tickTimer); this._tickTimer = null; }
if (this._pollTimer) { clearInterval(this._pollTimer); this._pollTimer = null; }
}
async _poll() {
if (!this.wizardId) { this._stop(); return; }
try {
const result = await this.orm.call(
"poynt.payment.wizard", "action_check_status", [[this.wizardId]],
);
if (result && result.type) {
this._stop();
this.actionService.doAction(result, { clearBreadcrumbs: true });
}
} catch (e) {
this._stop();
this.state.message = "Polling stopped due to an error. Use Check Now to retry.";
}
}
async onManualCheck() {
this.state.message = "";
if (!this._pollTimer) {
this._pollTimer = setInterval(() => this._poll(), 5000);
this._tickTimer = setInterval(() => this.state.seconds++, 1000);
}
await this._poll();
}
async onCancel() {
this._stop();
try {
await this.orm.call(
"poynt.payment.wizard", "action_cancel_payment", [[this.wizardId]],
);
} catch { /* ignore */ }
this.actionService.doAction({ type: "ir.actions.act_window_close" });
}
}
registry.category("actions").add("poynt_poll_action", PoyntPollAction);