import Combine from "../Base/Combine" import ScrollableFullScreen from "../Base/ScrollableFullScreen" import Translations from "../i18n/Translations" import { UIEventSource } from "../../Logic/UIEventSource" import BaseUIElement from "../BaseUIElement" import Toggle from "../Input/Toggle" import { DownloadPanel } from "./DownloadPanel" import { SubtleButton } from "../Base/SubtleButton" import Svg from "../../Svg" import ExportPDF from "../ExportPDF" import FilteredLayer from "../../Models/FilteredLayer" import FeaturePipeline from "../../Logic/FeatureSource/FeaturePipeline" import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig" import { BBox } from "../../Logic/BBox" import BaseLayer from "../../Models/BaseLayer" import Loc from "../../Models/Loc" interface DownloadState { filteredLayers: UIEventSource featurePipeline: FeaturePipeline layoutToUse: LayoutConfig currentBounds: UIEventSource backgroundLayer: UIEventSource locationControl: UIEventSource featureSwitchExportAsPdf: UIEventSource featureSwitchEnableExport: UIEventSource } export default class AllDownloads extends ScrollableFullScreen { constructor( isShown: UIEventSource, state: { filteredLayers: UIEventSource featurePipeline: FeaturePipeline layoutToUse: LayoutConfig currentBounds: UIEventSource backgroundLayer: UIEventSource locationControl: UIEventSource featureSwitchExportAsPdf: UIEventSource featureSwitchEnableExport: UIEventSource } ) { super(AllDownloads.GenTitle, () => AllDownloads.GeneratePanel(state), "downloads", isShown) } private static GenTitle(): BaseUIElement { return Translations.t.general.download.title .Clone() .SetClass("text-2xl break-words font-bold p-2") } private static GeneratePanel(state: DownloadState): BaseUIElement { const isExporting = new UIEventSource(false, "Pdf-is-exporting") const generatePdf = () => { isExporting.setData(true) new ExportPDF({ freeDivId: "belowmap", background: state.backgroundLayer, location: state.locationControl, features: state.featurePipeline, layout: state.layoutToUse, }).isRunning.addCallbackAndRun((isRunning) => isExporting.setData(isRunning)) } const loading = Svg.loading_svg().SetClass("animate-rotate") const dloadTrans = Translations.t.general.download const icon = new Toggle(loading, Svg.floppy_ui(), isExporting) const text = new Toggle( dloadTrans.exporting.Clone(), new Combine([ dloadTrans.downloadAsPdf.Clone().SetClass("font-bold"), dloadTrans.downloadAsPdfHelper.Clone(), ]) .SetClass("flex flex-col") .onClick(() => { generatePdf() }), isExporting ) const pdf = new Toggle( new SubtleButton(icon, text), undefined, state.featureSwitchExportAsPdf ) const exportPanel = new Toggle( new DownloadPanel(state), undefined, state.featureSwitchEnableExport ) return new Combine([pdf, exportPanel]).SetClass("flex flex-col") } }