UNPKG

@paperbits/core

Version:
62 lines (50 loc) 2.1 kB
import * as ko from "knockout"; import template from "./popupHyperlinkDetails.html"; import { Component, Param, Event, OnMounted } from "@paperbits/common/ko/decorators"; import { HyperlinkModel } from "@paperbits/common/permalinks"; import { ViewManager } from "@paperbits/common/ui"; import { EventManager, Events } from "@paperbits/common/events"; @Component({ selector: "popup-hyperlink-details", template: template }) export class PopupHyperlinkDetails { public readonly target: ko.Observable<string>; public readonly triggerEvent: ko.Observable<string>; constructor( private readonly viewManager: ViewManager, private readonly eventManager: EventManager, ) { this.target = ko.observable(); this.triggerEvent = ko.observable(); } @Param() public hyperlink: HyperlinkModel; @Event() public onHyperlinkChange: (hyperlink: HyperlinkModel) => void; @OnMounted() public async initialize(): Promise<void> { this.target(this.hyperlink.target); this.triggerEvent(this.hyperlink.triggerEvent || "click"); this.target.subscribe(this.applyChanges); this.triggerEvent.subscribe(this.applyChanges); } public applyChanges(): void { this.hyperlink.target = this.target(); this.hyperlink.triggerEvent = this.triggerEvent(); if (this.onHyperlinkChange) { this.onHyperlinkChange(this.hyperlink); } } public openPopup(): void { const hostDocument = this.viewManager.getHostDocument(); hostDocument.dispatchEvent(new CustomEvent(Events.PopupRequest, { detail: this.hyperlink.targetKey })); this.viewManager.clearContextualCommands(); this.viewManager.clearJourney(); this.viewManager.closeView(); this.eventManager.dispatchEvent(Events.HintRequest, { key: "4de8", content: `You can open a popup anytime by clicking on its trigger holding Ctrl (Windows) or ⌘ (Mac) key.` }); } }