CE-1115 Moving widget helpContent to be map of list, to support multiple roles per slot (e.g., view screen vs edit screen)

This commit is contained in:
2024-04-11 10:15:04 -05:00
parent 696887254c
commit 3c6ffbbd73
5 changed files with 78 additions and 24 deletions

View File

@ -149,8 +149,7 @@ public class QInstanceHelpContentManager
} }
else if(StringUtils.hasContent(widgetName)) else if(StringUtils.hasContent(widgetName))
{ {
processHelpContentForWidget(key, widgetName, slotName, helpContent); processHelpContentForWidget(key, widgetName, slotName, roles, helpContent);
} }
} }
catch(Exception e) catch(Exception e)
@ -252,7 +251,7 @@ public class QInstanceHelpContentManager
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
private static void processHelpContentForWidget(String key, String widgetName, String slotName, QHelpContent helpContent) private static void processHelpContentForWidget(String key, String widgetName, String slotName, Set<HelpRole> roles, QHelpContent helpContent)
{ {
QWidgetMetaDataInterface widget = QContext.getQInstance().getWidget(widgetName); QWidgetMetaDataInterface widget = QContext.getQInstance().getWidget(widgetName);
if(!StringUtils.hasContent(slotName)) if(!StringUtils.hasContent(slotName))
@ -265,22 +264,14 @@ public class QInstanceHelpContentManager
} }
else else
{ {
Map<String, QHelpContent> widgetHelpContent = widget.getHelpContent();
if(widgetHelpContent == null)
{
widgetHelpContent = new HashMap<>();
}
if(helpContent != null) if(helpContent != null)
{ {
widgetHelpContent.put(slotName, helpContent); widget.withHelpContent(slotName, helpContent);
} }
else else
{ {
widgetHelpContent.remove(slotName); widget.removeHelpContent(slotName, roles);
} }
widget.setHelpContent(widgetHelpContent);
} }
} }

View File

@ -24,11 +24,15 @@ package com.kingsrook.qqq.backend.core.model.metadata.dashboard;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import com.kingsrook.qqq.backend.core.instances.QInstanceHelpContentManager;
import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType; import com.kingsrook.qqq.backend.core.model.dashboard.widgets.WidgetType;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.help.HelpRole;
import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent;
import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon; import com.kingsrook.qqq.backend.core.model.metadata.layout.QIcon;
import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules; import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules;
@ -61,7 +65,7 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface
protected Map<String, QIcon> icons; protected Map<String, QIcon> icons;
protected Map<String, QHelpContent> helpContent; protected Map<String, List<QHelpContent>> helpContent;
protected Map<String, Serializable> defaultValues = new LinkedHashMap<>(); protected Map<String, Serializable> defaultValues = new LinkedHashMap<>();
@ -691,10 +695,11 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface
} }
/******************************************************************************* /*******************************************************************************
** Getter for helpContent ** Getter for helpContent
*******************************************************************************/ *******************************************************************************/
public Map<String, QHelpContent> getHelpContent() public Map<String, List<QHelpContent>> getHelpContent()
{ {
return (this.helpContent); return (this.helpContent);
} }
@ -704,7 +709,7 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface
/******************************************************************************* /*******************************************************************************
** Setter for helpContent ** Setter for helpContent
*******************************************************************************/ *******************************************************************************/
public void setHelpContent(Map<String, QHelpContent> helpContent) public void setHelpContent(Map<String, List<QHelpContent>> helpContent)
{ {
this.helpContent = helpContent; this.helpContent = helpContent;
} }
@ -714,11 +719,49 @@ public class QWidgetMetaData implements QWidgetMetaDataInterface
/******************************************************************************* /*******************************************************************************
** Fluent setter for helpContent ** Fluent setter for helpContent
*******************************************************************************/ *******************************************************************************/
public QWidgetMetaData withHelpContent(Map<String, QHelpContent> helpContent) public QWidgetMetaData withHelpContent(Map<String, List<QHelpContent>> helpContent)
{ {
this.helpContent = helpContent; this.helpContent = helpContent;
return (this); return (this);
} }
/*******************************************************************************
** Fluent setter for adding 1 helpContent (for a slot)
*******************************************************************************/
public QWidgetMetaData withHelpContent(String slot, QHelpContent helpContent)
{
if(this.helpContent == null)
{
this.helpContent = new HashMap<>();
}
List<QHelpContent> listForSlot = this.helpContent.computeIfAbsent(slot, (k) -> new ArrayList<>());
QInstanceHelpContentManager.putHelpContentInList(helpContent, listForSlot);
return (this);
}
/*******************************************************************************
** remove a helpContent for a slot based on its set of roles
*******************************************************************************/
public void removeHelpContent(String slot, Set<HelpRole> roles)
{
if(this.helpContent == null)
{
return;
}
List<QHelpContent> listForSlot = this.helpContent.get(slot);
if(listForSlot == null)
{
return;
}
QInstanceHelpContentManager.removeHelpContentByRoleSetFromList(roles, listForSlot);
}
} }

View File

@ -25,10 +25,12 @@ package com.kingsrook.qqq.backend.core.model.metadata.dashboard;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.logging.QLogger;
import com.kingsrook.qqq.backend.core.model.metadata.QInstance; import com.kingsrook.qqq.backend.core.model.metadata.QInstance;
import com.kingsrook.qqq.backend.core.model.metadata.TopLevelMetaDataInterface; import com.kingsrook.qqq.backend.core.model.metadata.TopLevelMetaDataInterface;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference; import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.help.HelpRole;
import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent; import com.kingsrook.qqq.backend.core.model.metadata.help.QHelpContent;
import com.kingsrook.qqq.backend.core.model.metadata.permissions.MetaDataWithPermissionRules; import com.kingsrook.qqq.backend.core.model.metadata.permissions.MetaDataWithPermissionRules;
import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules; import com.kingsrook.qqq.backend.core.model.metadata.permissions.QPermissionRules;
@ -235,7 +237,7 @@ public interface QWidgetMetaDataInterface extends MetaDataWithPermissionRules, T
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
default Map<String, QHelpContent> getHelpContent() default Map<String, List<QHelpContent>> getHelpContent()
{ {
return (null); return (null);
} }
@ -244,11 +246,29 @@ public interface QWidgetMetaDataInterface extends MetaDataWithPermissionRules, T
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
default void setHelpContent(Map<String, QHelpContent> helpContent) default void setHelpContent(Map<String, List<QHelpContent>> helpContent)
{ {
LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)"); LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)");
} }
/*******************************************************************************
**
*******************************************************************************/
default QWidgetMetaDataInterface withHelpContent(String slot, QHelpContent helpContent)
{
LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)");
return (this);
}
/*******************************************************************************
** remove a helpContent for a slot based on its set of roles
*******************************************************************************/
default void removeHelpContent(String slot, Set<HelpRole> roles)
{
LOG.debug("Setting help content in a widgetMetaData type that doesn't support it (because it didn't override the getter/setter)");
}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/

View File

@ -59,9 +59,9 @@ public class QFrontendWidgetMetaData
private boolean showReloadButton = false; private boolean showReloadButton = false;
private boolean showExportButton = false; private boolean showExportButton = false;
protected Map<String, QIcon> icons; protected Map<String, QIcon> icons;
protected Map<String, QHelpContent> helpContent; protected Map<String, List<QHelpContent>> helpContent;
protected Map<String, Serializable> defaultValues; protected Map<String, Serializable> defaultValues;
private final boolean hasPermission; private final boolean hasPermission;
@ -273,7 +273,7 @@ public class QFrontendWidgetMetaData
** Getter for helpContent ** Getter for helpContent
** **
*******************************************************************************/ *******************************************************************************/
public Map<String, QHelpContent> getHelpContent() public Map<String, List<QHelpContent>> getHelpContent()
{ {
return helpContent; return helpContent;
} }

View File

@ -216,7 +216,7 @@ class QInstanceHelpContentManagerTest extends BaseTest
// now - post-insert customizer should have automatically added help content to the instance // // now - post-insert customizer should have automatically added help content to the instance //
/////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////
assertTrue(widget.getHelpContent().containsKey("label")); assertTrue(widget.getHelpContent().containsKey("label"));
assertEquals("i need somebody", widget.getHelpContent().get("label").getContent()); assertEquals("i need somebody", widget.getHelpContent().get("label").get(0).getContent());
} }