From 499aaaa402a1ad21d7b98026f0497b743762b91e Mon Sep 17 00:00:00 2001
From: Tom Zhao <tom.zhao@dsv.su.se>
Date: Mon, 2 Dec 2024 14:40:43 +0100
Subject: [PATCH] 3470: Enhance ProjectForumStateColumn of
 SupervisorMyProjectPanel

* it contains 2 components, one with flag, one with number of messages.
* since table cell can only contain one component, Wicket Fragment is used.
---
 .../panels/SupervisorMyProjectsPanel.html     |  6 +++
 .../panels/SupervisorMyProjectsPanel.java     | 49 ++++++++++++++++---
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
index 73ab571f7f..b50ec6da63 100755
--- a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
+++ b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.html
@@ -41,6 +41,12 @@
     </div>
 
     <table class="table table-striped table-hover" wicket:id="dp"></table>
+
+    <!-- todo: reconsider name of this id, parentMarkupId, needs improvement. -->
+    <wicket:fragment wicket:id="parentMarkupId">
+        <wicket:container wicket:id="flag"></wicket:container>
+        <wicket:container wicket:id="counter"></wicket:container>
+    </wicket:fragment>
 </wicket:panel>
 </body>
 </html>
\ No newline at end of file
diff --git a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
index 823db59cde..9e1860c856 100755
--- a/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
+++ b/view/src/main/java/se/su/dsv/scipro/supervisor/panels/SupervisorMyProjectsPanel.java
@@ -1,5 +1,6 @@
 package se.su.dsv.scipro.supervisor.panels;
 
+import jakarta.inject.Inject;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
@@ -12,13 +13,18 @@ import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvid
 import org.apache.wicket.markup.html.form.EnumChoiceRenderer;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.LambdaChoiceRenderer;
+import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.LambdaModel;
 import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
-import se.su.dsv.scipro.components.*;
+import se.su.dsv.scipro.components.AjaxCheckBoxMultipleChoice;
+import se.su.dsv.scipro.components.BootstrapRadioChoice;
+import se.su.dsv.scipro.components.ExportableDataPanel;
+import se.su.dsv.scipro.components.ListAdapterModel;
+import se.su.dsv.scipro.components.TemporalColumn;
 import se.su.dsv.scipro.components.datatables.MultipleUsersColumn;
 import se.su.dsv.scipro.components.datatables.UserColumn;
 import se.su.dsv.scipro.dataproviders.FilteredDataProvider;
@@ -27,6 +33,7 @@ import se.su.dsv.scipro.datatables.project.ProjectTitleColumn;
 import se.su.dsv.scipro.forum.ProjectForumService;
 import se.su.dsv.scipro.forum.pages.threaded.SupervisorThreadedForumPage;
 import se.su.dsv.scipro.forum.panels.AbstractReadStatePanel;
+import se.su.dsv.scipro.forum.panels.NumberOfMessagesPanel;
 import se.su.dsv.scipro.project.Project;
 import se.su.dsv.scipro.project.ProjectService;
 import se.su.dsv.scipro.project.ProjectStatus;
@@ -39,7 +46,6 @@ import se.su.dsv.scipro.system.ProjectType;
 import se.su.dsv.scipro.system.ProjectTypeService;
 import se.su.dsv.scipro.system.User;
 
-import jakarta.inject.Inject;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -194,21 +200,52 @@ public class SupervisorMyProjectsPanel extends Panel {
 
         @Override
         public void populateItem(Item<ICellPopulator<Project>> item, String id, IModel<Project> projectModel) {
+            /*
             item.add(new AbstractReadStatePanel(id, AbstractReadStatePanel.ShowReadStateTooltip.ENABLED) {
                 @Override
                 protected boolean isRead() {
-                    return !projectForumService.hasUnreadThreads(
-                            projectModel.getObject(),
+                    return !projectForumService.hasUnreadThreads(projectModel.getObject(),
                             SciProSession.get().getUser());
                 }
 
                 @Override
                 protected void onFlagClick(AjaxRequestTarget target) {
-                    setResponsePage(
-                            SupervisorThreadedForumPage.class,
+                    setResponsePage(SupervisorThreadedForumPage.class,
                             SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
                 }
             });
+
+             */
+
+
+            //WebMarkupContainer container = new WebMarkupContainer(id);
+            //container.setOutputMarkupId(true);
+/*
+            container
+ */
+            //container.add(new NumberOfMessagesPanel("counter"));
+
+            //item.add(container);
+            // todo: reconsider name of this id, needs to be improved.
+
+            Fragment fragment = new Fragment(id, "parentMarkupId", SupervisorMyProjectsPanel.this);
+
+            fragment.add(new AbstractReadStatePanel("flag", AbstractReadStatePanel.ShowReadStateTooltip.ENABLED) {
+                @Override
+                protected boolean isRead() {
+                    return !projectForumService.hasUnreadThreads(projectModel.getObject(),
+                            SciProSession.get().getUser());
+                }
+
+                @Override
+                protected void onFlagClick(AjaxRequestTarget target) {
+                    setResponsePage(SupervisorThreadedForumPage.class,
+                            SupervisorThreadedForumPage.getPageParameters(projectModel.getObject()));
+                }
+            });
+            fragment.add(new NumberOfMessagesPanel("counter"));
+
+            item.add(fragment);
         }
     }
 }