From 46f8aea5384e3a14c96bb5194403daafbc3354c2 Mon Sep 17 00:00:00 2001
From: trisua <me@trisua.com>
Date: Tue, 10 Jun 2025 22:12:22 -0400
Subject: [PATCH] add: forge pinned tickets

---
 .../app/src/public/html/communities/list.lisp | 23 ++++++++++++++-----
 crates/app/src/public/html/components.lisp    |  7 +++++-
 crates/app/src/public/html/forge/info.lisp    |  1 -
 crates/app/src/public/html/forge/tickets.lisp | 13 +++++++++++
 crates/app/src/routes/pages/forge.rs          | 16 ++++++-------
 5 files changed, 44 insertions(+), 16 deletions(-)

diff --git a/crates/app/src/public/html/communities/list.lisp b/crates/app/src/public/html/communities/list.lisp
index 229cecb..bc4b16b 100644
--- a/crates/app/src/public/html/communities/list.lisp
+++ b/crates/app/src/public/html/communities/list.lisp
@@ -41,12 +41,23 @@
                 (text "{{ icon \"award\" }}")
                 (span
                     (text "{{ text \"communities:label.my_communities\" }}")))
-            (a
-                ("href" "/communities/search")
-                ("class" "button quaternary small")
-                (text "{{ icon \"search\" }}")
-                (span
-                    (text "{{ text \"communities:label.join_new\" }}"))))
+
+            (div
+                ("class" "flex items-center gap-2")
+                (a
+                    ("href" "/forges")
+                    ("class" "button quaternary small")
+                    (text "{{ icon \"anvil\" }}")
+                    (span
+                        ("class" "desktop")
+                        (text "{{ text \"forge:label.my_forges\" }}")))
+                (a
+                    ("href" "/communities/search")
+                    ("class" "button quaternary small")
+                    (text "{{ icon \"search\" }}")
+                    (span
+                        ("class" "desktop")
+                        (text "{{ text \"communities:label.join_new\" }}")))))
         (div
             ("class" "card flex flex-col gap-2")
             (text "{% for item in list %} {{ components::community_listing_card(community=item) }} {% endfor %}")))
diff --git a/crates/app/src/public/html/components.lisp b/crates/app/src/public/html/components.lisp
index ac1076a..d8f2256 100644
--- a/crates/app/src/public/html/components.lisp
+++ b/crates/app/src/public/html/components.lisp
@@ -1789,7 +1789,12 @@
             (text "{{ self::full_username(user=owner) }}"))
 
         ; timestamp
-        (span ("class" "date") (text "{{ post.created }}")))
+        (span ("class" "date") (text "{{ post.created }}"))
+
+        ; pinned
+        (text "{% if post.context.is_pinned -%}")
+        (icon (text "pin"))
+        (text "{%- endif %}"))
 
     ; post title
     (a
diff --git a/crates/app/src/public/html/forge/info.lisp b/crates/app/src/public/html/forge/info.lisp
index df5a29b..4019546 100644
--- a/crates/app/src/public/html/forge/info.lisp
+++ b/crates/app/src/public/html/forge/info.lisp
@@ -3,5 +3,4 @@
     ("class" "flex flex-col gap-4 w-full")
     (text "{{ macros::forge_nav(community=community, selected=\"info\") }}")
     (text "{{ components::community_info(community=community) }}"))
-    ; (text "{{ components::community_banner(id=community.id, community=community) }}")
 (text "{% endblock %}")
diff --git a/crates/app/src/public/html/forge/tickets.lisp b/crates/app/src/public/html/forge/tickets.lisp
index 99370a5..7c9a7e8 100644
--- a/crates/app/src/public/html/forge/tickets.lisp
+++ b/crates/app/src/public/html/forge/tickets.lisp
@@ -2,6 +2,19 @@
 (div
     ("class" "flex flex-col gap-4 w-full")
     (text "{{ macros::forge_nav(community=community, selected=\"tickets\") }}")
+    (div
+        ("class" "card-nest")
+        (div
+            ("class" "card small flex items-center gap-2")
+            (icon (text "pin"))
+            (str (text "communities:label.pinned")))
+
+        (div
+            ("class" "card flex flex-col gap-2")
+            (text "{% for post in pinned -%}")
+            (text "{{ components::ticket(post=post[0], owner=post[1]) }}")
+            (text "{%- endfor %}")))
+
     (div
         ("class" "card-nest")
         (div
diff --git a/crates/app/src/routes/pages/forge.rs b/crates/app/src/routes/pages/forge.rs
index 0eadee9..404455c 100644
--- a/crates/app/src/routes/pages/forge.rs
+++ b/crates/app/src/routes/pages/forge.rs
@@ -171,13 +171,13 @@ pub async fn tickets_request(
         Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
     };
 
-    // let pinned = match data.0.get_pinned_posts_by_community(community.id).await {
-    //     Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
-    //         Ok(p) => p,
-    //         Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
-    //     },
-    //     Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
-    // };
+    let pinned = match data.0.get_pinned_posts_by_community(community.id).await {
+        Ok(p) => match data.0.fill_posts(p, &ignore_users, &user).await {
+            Ok(p) => p,
+            Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
+        },
+        Err(e) => return Err(Html(render_error(e, &jar, &data, &user).await)),
+    };
 
     // init context
     let lang = get_lang!(jar, data.0);
@@ -195,7 +195,7 @@ pub async fn tickets_request(
     ) = community_context_bools!(data, user, community);
 
     context.insert("feed", &feed);
-    // context.insert("pinned", &pinned);
+    context.insert("pinned", &pinned);
     context.insert("page", &props.page);
     community_context(
         &mut context,