Files
Trilium/apps/client/src/widgets/dialogs/call_to_action.tsx

58 lines
1.8 KiB
TypeScript
Raw Normal View History

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";
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
function goToNext() {
if (activeIndex + 1 < activeCallToActions.length) {
setActiveIndex(activeIndex + 1);
} else {
setShown(false);
}
}
2025-08-12 15:57:29 +03:00
return (
<Modal
className="call-to-action"
size="md"
2025-08-12 15:57:29 +03:00
title="New features"
show={shown}
onHidden={() => setShown(false)}
footerAlignment="between"
footer={<>
2025-08-12 19:37:32 +03:00
<Button text="Dismiss" onClick={async () => {
await dismissCallToAction(activeItem.id);
goToNext();
}} />
{activeItem.buttons.map((button) =>
<Button text={button.text} onClick={async () => {
2025-08-12 19:37:32 +03:00
await dismissCallToAction(activeItem.id);
await button.onClick();
goToNext();
}}/>
)}
</>}
2025-08-12 15:57:29 +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() {
return <CallToActionDialogComponent activeCallToActions={getCallToActions()} />
2025-08-12 15:57:29 +03:00
}
}