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
---
scss/sidebar.scss | 38 +++++++++++
src/modules/sidebar/modules/news.tsx | 2 +-
src/modules/sidebar/modules/updates.tsx | 109 ++++++++++++++++++++++++++++++++
src/modules/sidebar/packages.tsx | 1 +
4 files changed, 149 insertions(+), 1 deletion(-)
create mode 100644 src/modules/sidebar/modules/updates.tsx
diff --git a/scss/sidebar.scss b/scss/sidebar.scss
index 2457bfc..e4dcf13 100644
--- a/scss/sidebar.scss
+++ b/scss/sidebar.scss
@@ -705,9 +705,47 @@
}
}
+ .updates {
+ .list {
+ @include lib.spacing(10, true);
+ }
+
+ .repo {
+ @include lib.rounded(20);
+ @include lib.element-decel;
+
+ background-color: color.change(scheme.$surface1, $alpha: 0.4);
+ padding: lib.s(10) lib.s(15);
+
+ @include lib.spacing(5);
+
+ .icon {
+ font-size: lib.s(28);
+
+ &:not(:last-child) {
+ margin-right: lib.s(12);
+ }
+ }
+
+ .sublabel {
+ font-size: lib.s(14);
+ color: scheme.$subtext0;
+ }
+
+ .body {
+ margin-top: lib.s(10);
+ font-size: lib.s(14);
+ }
+ }
+ }
+
.news {
min-height: lib.s(200);
+ .expanded {
+ min-height: lib.s(400);
+ }
+
.empty {
margin-top: lib.s(40);
}
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 () => (
+
+
+
+ (n > 0 ? "list" : "empty"))}
+ >
+
+
+
+
+
+
+);
diff --git a/src/modules/sidebar/packages.tsx b/src/modules/sidebar/packages.tsx
index 97381b1..c073850 100644
--- a/src/modules/sidebar/packages.tsx
+++ b/src/modules/sidebar/packages.tsx
@@ -3,6 +3,7 @@ import Updates from "./modules/updates";
export default () => (
+
--
cgit v1.2.3-freya