From 6d5805e66204caa599a8a2996238adf7931cb95b Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 16 Jan 2025 23:20:39 +1100 Subject: refactor: move popdowns to own folder And group them like osds --- src/modules/popdowns/updates.tsx | 88 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/modules/popdowns/updates.tsx (limited to 'src/modules/popdowns/updates.tsx') diff --git a/src/modules/popdowns/updates.tsx b/src/modules/popdowns/updates.tsx new file mode 100644 index 0000000..359fe81 --- /dev/null +++ b/src/modules/popdowns/updates.tsx @@ -0,0 +1,88 @@ +import { bind, execAsync, Variable } from "astal"; +import { App, Astal, Gtk } from "astal/gtk3"; +import Updates, { Repo as IRepo, Update as IUpdate } from "../../services/updates"; +import { MenuItem } from "../../utils/widgets"; +import PopdownWindow from "../../widgets/popdownwindow"; + +const constructItem = (label: string, exec: string, quiet = true) => + new MenuItem({ + label, + onActivate() { + App.get_window("updates")?.hide(); + 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(constructItem("Reinstall", `uwsm app -T -- yay -S ${update.name}`)); + menu.append(constructItem("Remove with dependencies", `uwsm app -T -- yay -Rns ${update.name}`)); + + return ( + + ); +}; + +const Repo = (repo: IRepo) => { + const expanded = Variable(false); + + return ( + + + + + {repo.updates.map(Update)} + + + + ); +}; + +const List = () => ( + + {bind(Updates.get_default(), "updateData").as(d => d.repos.map(Repo))} + +); + +export default () => ( + + execAsync("uwsm app -T -- yay") + .then(() => Updates.get_default().getUpdates()) + // Ignore errors + .catch(() => {}), + }, + { label: "Reload", onClicked: () => Updates.get_default().getUpdates() }, + ]} + emptyIcon="deployed_code_history" + emptyLabel="All packages up to date!" + list={} + /> +); -- cgit v1.2.3-freya