70 lines
2.2 KiB
JavaScript
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);
|