#pragma once #include #include #include #include "katja/repository.hpp" namespace katja { class PageBase : public ftxui::ComponentBase { public: virtual void Load() = 0; }; using Page = std::shared_ptr; using Pages = std::vector; class ScreenContainer final : public ftxui::ComponentBase { int menu_selected{ 0 }; ftxui::Component menu; ftxui::Component content; std::vector menu_entries; Pages menu_pages; std::function on_enter; public: ScreenContainer(std::vector> pages, std::function on_enter); ftxui::Element OnRender() override; bool OnEvent(ftxui::Event event) override; }; ftxui::Component Screen(std::vector> pages, std::function on_enter); class WelcomePage final : public PageBase { public: void Load() override; ftxui::Element OnRender() override; }; class UpdatesPage final : public PageBase { std::vector updatable; public: explicit UpdatesPage(std::vector&& updatable); void Load() override; ftxui::Element OnRender() override; }; class SearchPage final : public PageBase { public: void Load() override; }; }