2025-08-12 18:42:55 +03:00
|
|
|
import { useState } from "preact/hooks";
|
2025-08-12 15:57:29 +03:00
|
|
|
import Button from "../react/Button";
|
|
|
|
|
import Modal from "../react/Modal";
|
|
|
|
|
import ReactBasicWidget from "../react/ReactBasicWidget";
|
2025-08-12 19:37:32 +03:00
|
|
|
import { CallToAction, dismissCallToAction, getCallToActions } from "./call_to_action_definitions";
|
2025-08-12 16:35:27 +03:00
|
|
|
|
2025-08-12 17:05:52 +03:00
|
|
|
function CallToActionDialogComponent({ activeCallToActions }: { activeCallToActions: CallToAction[] }) {
|
2025-08-12 17:42:18 +03:00
|
|
|
if (!activeCallToActions.length) {
|
|
|
|
|
return <></>;
|
|
|
|
|
}
|
2025-08-12 20:12:06 +03:00
|
|
|
|
|
|
|
|
const [ activeIndex, setActiveIndex ] = useState(0);
|
|
|
|
|
const [ shown, setShown ] = useState(true);
|
|
|
|
|
const activeItem = activeCallToActions[activeIndex];
|
2025-08-12 17:42:18 +03:00
|
|
|
|
2025-08-12 16:35:27 +03:00
|
|
|
function goToNext() {
|
2025-08-12 17:05:52 +03:00
|
|
|
if (activeIndex + 1 < activeCallToActions.length) {
|
2025-08-12 16:35:27 +03:00
|
|
|
setActiveIndex(activeIndex + 1);
|
|
|
|
|
} else {
|
|
|
|
|
setShown(false);
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-08-12 15:57:29 +03:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Modal
|
2025-08-12 17:48:44 +03:00
|
|
|
className="call-to-action"
|
|
|
|
|
size="md"
|
2025-08-12 15:57:29 +03:00
|
|
|
title="New features"
|
2025-08-12 16:35:27 +03:00
|
|
|
show={shown}
|
2025-08-12 17:48:44 +03:00
|
|
|
onHidden={() => setShown(false)}
|
2025-08-12 16:35:27 +03:00
|
|
|
footerAlignment="between"
|
|
|
|
|
footer={<>
|
2025-08-12 19:37:32 +03:00
|
|
|
<Button text="Dismiss" onClick={async () => {
|
|
|
|
|
await dismissCallToAction(activeItem.id);
|
|
|
|
|
goToNext();
|
|
|
|
|
}} />
|
2025-08-12 16:35:27 +03:00
|
|
|
{activeItem.buttons.map((button) =>
|
2025-08-12 17:48:44 +03:00
|
|
|
<Button text={button.text} onClick={async () => {
|
2025-08-12 19:37:32 +03:00
|
|
|
await dismissCallToAction(activeItem.id);
|
2025-08-12 17:48:44 +03:00
|
|
|
await button.onClick();
|
2025-08-12 16:35:27 +03:00
|
|
|
goToNext();
|
|
|
|
|
}}/>
|
|
|
|
|
)}
|
|
|
|
|
</>}
|
2025-08-12 15:57:29 +03:00
|
|
|
>
|
2025-08-12 16:35:27 +03:00
|
|
|
<h4>{activeItem.title}</h4>
|
|
|
|
|
<p>{activeItem.message}</p>
|
2025-08-12 15:57:29 +03:00
|
|
|
</Modal>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export class CallToActionDialog extends ReactBasicWidget {
|
|
|
|
|
|
|
|
|
|
get component() {
|
2025-08-12 18:42:55 +03:00
|
|
|
return <CallToActionDialogComponent activeCallToActions={getCallToActions()} />
|
2025-08-12 15:57:29 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|