From 3b2130f286b9d2a15b73d55e48c532a43cf9fe08 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 27 Mar 2025 21:02:05 +1100 Subject: sidebar: updates module --- src/modules/sidebar/modules/news.tsx | 2 +- src/modules/sidebar/modules/updates.tsx | 109 ++++++++++++++++++++++++++++++++ src/modules/sidebar/packages.tsx | 1 + 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 src/modules/sidebar/modules/updates.tsx (limited to 'src/modules') diff --git a/src/modules/sidebar/modules/news.tsx b/src/modules/sidebar/modules/news.tsx index f3be53e..aba37c7 100644 --- a/src/modules/sidebar/modules/news.tsx +++ b/src/modules/sidebar/modules/news.tsx @@ -99,7 +99,7 @@ export default () => ( > !!n)} + className={bind(Updates.get_default(), "news").as(n => (n ? "expanded" : ""))} hscroll={Gtk.PolicyType.NEVER} name="list" > diff --git a/src/modules/sidebar/modules/updates.tsx b/src/modules/sidebar/modules/updates.tsx new file mode 100644 index 0000000..3b159c6 --- /dev/null +++ b/src/modules/sidebar/modules/updates.tsx @@ -0,0 +1,109 @@ +import Palette from "@/services/palette"; +import Updates, { Repo as IRepo, Update as IUpdate } from "@/services/updates"; +import { MenuItem, setupCustomTooltip } from "@/utils/widgets"; +import { bind, execAsync, GLib, Variable } from "astal"; +import { Astal, Gtk } from "astal/gtk3"; + +const constructItem = (label: string, exec: string, quiet = true) => + new MenuItem({ label, onActivate: () => execAsync(exec).catch(e => !quiet && console.error(e)) }); + +const Update = (update: IUpdate) => { + const menu = new Gtk.Menu(); + menu.append(constructItem("Open info in browser", `xdg-open '${update.url}'`, false)); + menu.append(constructItem("Open info in terminal", `uwsm app -- foot -H -- pacman -Qi ${update.name}`)); + menu.append(new Gtk.SeparatorMenuItem({ visible: true })); + menu.append(constructItem("Reinstall", `uwsm app -- foot -H -- yay -S ${update.name}`)); + menu.append(constructItem("Remove with dependencies", `uwsm app -- foot -H -- yay -Rns ${update.name}`)); + + return ( + + ); +}; + +const Repo = ({ repo }: { repo: IRepo }) => { + const expanded = Variable(false); + + return ( + + + + + {repo.updates.map(Update)} + + + + ); +}; + +const List = () => ( + + {bind(Updates.get_default(), "updateData").as(d => d.repos.map(r => ))} + +); + +const NoUpdates = () => ( + + + + +); + +export default () => ( + + +