This website uses Cookies. Click Accept to agree to our website's cookie use as described in our Cookie Policy. Click Preferences to customize your cookie settings.
I am working with a dashboard that uses multiple JTD BloX widgets, where I want one of these JTD BloX Widgets to hide based on a user who is accessing it. This will be set for multiple users, but I wanted to see if there are any solutions out there.
You may leverage the Solution shared in the following Article which provide a dashboard script to hide a list of widgets per certain groups.
Dashboard Script:
Exclude list of Group ID's (it's better to maintain it by Groups)
Exclude list of Widget OID's
Notes:
If the widget to hide is one widget in a row, the widget will be completely gone
If the widget to hide is not a single widget, it will present as Blanc. for the Blanc, it's possible to add Custom text such as "No Data"
Please find examples
Before adding the dashboard script
After Applying the Dashboard Script
dashboard.on('widgetrefreshed',function(se, ev){let groupList =['6304bbc0b983e6001a5565dc'];// List of restricted groupslet widgetList =['67bc96075d519d0040285d02','67bc9a975d519d0040285d1f'];// List of widgets to hidelet isRestrictedUser = prism.user.groups.some(group => groupList.includes(group));// Hide widget if it's in widgetList and the user is in a restricted groupif(isRestrictedUser && widgetList.includes(ev.widget.oid)){let widgetElement =$(`widget[widgetid="${ev.widget.oid}"]`).closest('.dashboard-layout-subcell-host');// Remove the widget from the dashboard layout
widgetElement.remove();}});
Dashboard Script with custom Text
dashboard.on('widgetrefreshed',function(se, ev){let groupList =['6304bbc0b983e6001a5565dc'];// List of restricted groupslet widgetList =['67bc96075d519d0040285d02','67bc9a975d519d0040285d1f'];// List of widgets to hidevar text ="No Content";// Text to display when widget is hiddenlet isRestrictedUser = prism.user.groups.some(group => groupList.includes(group));// Hide widget if it's in widgetList and the user is in a restricted groupif(isRestrictedUser && widgetList.includes(ev.widget.oid)){
console.log(`Replacing widget content with: "${text}" for widget: ${ev.widget.oid}`);let widgetElement =$(`widget[widgetid="${ev.widget.oid}"]`).closest('.dashboard-layout-subcell-host');// Clear widget content and replace it with custom text
widgetElement.html(`<div class="no-content-message" style="text-align:center; padding:20px; font-size:16px; font-weight:bold; color:#888;">${text}</div>`);}});
The oid is the ID of the BloX widget I was trying to hide or even the widget you may be trying to hide, and the hideGroup is the name of the group given in your environment that you need to Block access to.
let widgetHideRules =[{"oid":"67b31d3ffd9c6500324085bb","hideGroupName":"hideGroup"},{"oid":"67b31d4cfd9c6500324085bf","hideGroupName":"hideGroup"}]functionhideWidget(widgetOid){let a, b, c, d
// remove the widget// find widget position in $$widgetsconst wPos = dashboard.widgets.$$widgets.map((w)=>{return w.oid }).indexOf(widgetOid)
dashboard.widgets.$$widgets.splice(wPos,1)// remove the subcell containing the widget from the layout
dashboard.layout.columns.forEach((column, i)=>{
column.cells.forEach((cell, j)=>{
cell.subcells.forEach((subcell, k)=>{
subcell.elements.forEach((element, l)=>{if(!defined(element.widgetid)){return}if(element.widgetid === widgetOid){
a = i
b = j
c = k
d = l
}})})})})
dashboard.layout.columns[a].cells[b].subcells.splice(c,1)}
dashboard.on('initialized',(dashboard)=>{const hideRulesLength = widgetHideRules.length
for(let i =0; i < hideRulesLength; i++){const hideRule = widgetHideRules[i]if(!prism.user.groupsName.map((gn)=>{return gn.name }).includes(hideRule.hideGroupName)){return}hideWidget(hideRule.oid)}})
You may leverage the Solution shared in the following Article which provide a dashboard script to hide a list of widgets per certain groups.
Dashboard Script:
Exclude list of Group ID's (it's better to maintain it by Groups)
Exclude list of Widget OID's
Notes:
If the widget to hide is one widget in a row, the widget will be completely gone
If the widget to hide is not a single widget, it will present as Blanc. for the Blanc, it's possible to add Custom text such as "No Data"
Please find examples
Before adding the dashboard script
After Applying the Dashboard Script
dashboard.on('widgetrefreshed',function(se, ev){let groupList =['6304bbc0b983e6001a5565dc'];// List of restricted groupslet widgetList =['67bc96075d519d0040285d02','67bc9a975d519d0040285d1f'];// List of widgets to hidelet isRestrictedUser = prism.user.groups.some(group => groupList.includes(group));// Hide widget if it's in widgetList and the user is in a restricted groupif(isRestrictedUser && widgetList.includes(ev.widget.oid)){let widgetElement =$(`widget[widgetid="${ev.widget.oid}"]`).closest('.dashboard-layout-subcell-host');// Remove the widget from the dashboard layout
widgetElement.remove();}});
Dashboard Script with custom Text
dashboard.on('widgetrefreshed',function(se, ev){let groupList =['6304bbc0b983e6001a5565dc'];// List of restricted groupslet widgetList =['67bc96075d519d0040285d02','67bc9a975d519d0040285d1f'];// List of widgets to hidevar text ="No Content";// Text to display when widget is hiddenlet isRestrictedUser = prism.user.groups.some(group => groupList.includes(group));// Hide widget if it's in widgetList and the user is in a restricted groupif(isRestrictedUser && widgetList.includes(ev.widget.oid)){
console.log(`Replacing widget content with: "${text}" for widget: ${ev.widget.oid}`);let widgetElement =$(`widget[widgetid="${ev.widget.oid}"]`).closest('.dashboard-layout-subcell-host');// Clear widget content and replace it with custom text
widgetElement.html(`<div class="no-content-message" style="text-align:center; padding:20px; font-size:16px; font-weight:bold; color:#888;">${text}</div>`);}});
I’m following up to see if the solution offered by @AssafHanina worked for you.
If so, please click the 'Accept as Solution' button on the appropriate post. That way other users with the same questions can find the answer. If not, please let us know so that we can continue to help.
The oid is the ID of the BloX widget I was trying to hide or even the widget you may be trying to hide, and the hideGroup is the name of the group given in your environment that you need to Block access to.
let widgetHideRules =[{"oid":"67b31d3ffd9c6500324085bb","hideGroupName":"hideGroup"},{"oid":"67b31d4cfd9c6500324085bf","hideGroupName":"hideGroup"}]functionhideWidget(widgetOid){let a, b, c, d
// remove the widget// find widget position in $$widgetsconst wPos = dashboard.widgets.$$widgets.map((w)=>{return w.oid }).indexOf(widgetOid)
dashboard.widgets.$$widgets.splice(wPos,1)// remove the subcell containing the widget from the layout
dashboard.layout.columns.forEach((column, i)=>{
column.cells.forEach((cell, j)=>{
cell.subcells.forEach((subcell, k)=>{
subcell.elements.forEach((element, l)=>{if(!defined(element.widgetid)){return}if(element.widgetid === widgetOid){
a = i
b = j
c = k
d = l
}})})})})
dashboard.layout.columns[a].cells[b].subcells.splice(c,1)}
dashboard.on('initialized',(dashboard)=>{const hideRulesLength = widgetHideRules.length
for(let i =0; i < hideRulesLength; i++){const hideRule = widgetHideRules[i]if(!prism.user.groupsName.map((gn)=>{return gn.name }).includes(hideRule.hideGroupName)){return}hideWidget(hideRule.oid)}})