Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Unable to hide Button on schedule View of widget

Nickell73
Tera Contributor

Hi @all,

 

I have an action Add/Remove on my "WSD Search" Widget which calls the Macro "wsd-schedule-view".

Vijay73_0-1713228557723.png

I want to show the Add/Remove Buttons to only users having "sn_wsd_rsv.selectRooms" Role. So I have added below Highlighted code(in Red) to Macro . This is OOB macro. I have added Jelly tag as well as it doesn't has earlier.

<?xml version="1.0" encoding="utf-8" ?>
<j:jelly trim="false" xmlns:j="jelly:core" xmlns:g="glide" xmlns:j2="null" xmlns:g2="null">
<div>
<div class="schedule-overlay" ng-class="{'flex-space-between': isNative}">
<div class="schedule-col col-left" ng-class="{'col-xs-3' : displayRsvCard, 'col-xs-1' : !isNative &amp;&amp; !displayRsvCard, 'text-right': !isNative, 'text-left': isNative, 'left-chevron': !isNative, 'left-chevron-native': isNative}" ng-style="disableShiftLeft &amp;&amp; isNative &amp;&amp; {'visibility': 'hidden'}">
<span>
    <i tabindex= "0" class="fa fa-chevron-left shift-left"
ng-if="!disableShiftLeft || isNative"
ng-style="disableShiftLeft &amp;&amp; isNative &amp;&amp; {'visibility': 'hidden'}"
aria-label="{{scheduleViewLabels.shiftLeft}}"
ng-attr-title="{{scheduleViewLabels.shiftLeft}}"
ng-click="shiftGridLeft()"></i>
    </span>
</div>
<div class="schedule-col col-middle time-grid" ng-class="displayRsvCard ? 'col-xs-8' : 'col-xs-10'">
<div class="slider-wrapper drawing-canvas">
<div class="slider-top invisible">
<span class="slider-pin pin-left" ng-style="{left: slider.leftPin.left}"></span>
<span class="slider-pin pin-right" ng-style="{left: slider.rightPin.left}"></span>
</div>
<div class="slider-body" ng-style="{left: slider.left, width: slider.width}"
ng-class="{'overlap-left': slider.overlap === 'left' || slider.overlap === 'both', 'overlap-right': slider.overlap === 'right' || slider.overlap === 'both', 'blockRed': (!displayRsvCard  &amp;&amp; reservables[0].is_available!==undefined &amp;&amp; !reservables[0].is_available )}">
</div>
</div>
 
<div class="time-scale drawing-canvas grid-container">
 
    <div class="drawing-canvas">
<span class="grid-header" ng-class="isNative ? 'date-text-native' : 'date-border'"
ng-repeat="gridHeader in grid.ganttHeaders track by $index" ng-if="gridHeader.date"
ng-style="{'right': ($index == grid.ganttHeaders.length - 1) ? (!isNative ? 'calc(' + gridHeader.right + ' + -30px)' : '-25px') : gridHeader.right, 'left': ($index == grid.ganttHeaders.length-1) ? (isNative ? 'auto' : gridHeader.left) : (isNative ? '-25px' : 'calc(' + gridHeader.left + ' + -30px)')}"
  >
{{gridHeader.dateVal}}
</span>
</div>
 </div>
 
<div class="time-scale drawing-canvas grid-container">
<div class="drawing-canvas">
<span class="grid-header"
ng-style="{left: gridHeader.left, right: gridHeader.right, 'white-space': 'nowrap'}"
ng-repeat="gridHeader in grid.ganttHeaders" ng-class="{'time-text-native': isNative}">
{{::gridHeader.label}}
</span>
</div>
    </div>
 
<div class="time-grid-block-wrapper drawing-canvas" ng-if="!isNative">
<div ng-repeat="gridLine in grid.gridLines">
<span class="time-grid-block"
ng-style="{left: gridLine.left, 'border-right-width': gridLine.width}"
ng-if="!gridLine.thick">
</span>
<span class="time-grid-block-thick"
ng-style="{left: gridLine.left}"
ng-if="gridLine.thick">
</span>
</div>
</div>
 
<!-- Gridlines for native mobile screen with hour and half hour lines -->
<div class="time-grid-block-wrapper-native drawing-canvas" ng-if="isNative">
<div ng-repeat="gridLine in grid.gridLines">
<span class="time-grid-block-hour"
ng-style="{left: gridLine.left}"
ng-if="gridLine.hour">
</span>
<span class="time-grid-block-half-hour"
ng-style="{left: gridLine.left}"
ng-if="!gridLine.hour">
</span>
</div>
</div>
</div>
<div class="schedule-col col-right" ng-class="{'col-xs-1': !isNative, 'text-left': !isNative, 'text-right': isNative, 'right-chevron': !isNative, 'right-chevron-native': isNative}">
<span>
<i tabindex= "0" class="fa fa-chevron-right shift-right" 
ng-if="!disableShiftRight || isNative"
ng-style="disableShiftRight &amp;&amp; isNative &amp;&amp; {'visibility': 'hidden'}"
aria-label="{{scheduleViewLabels.shiftRight}}"
ng-attr-title="{{scheduleViewLabels.shiftRight}}"
ng-click="shiftGridRight()"></i>
      </span>
</div>
</div>
 
<div class="schedule-details" role="table">
<div id="{{item.sys_id}}" class="schedule-row row--item" 
ng-class="{'is-reserved': item.is_reserved, 'is-selected': item.is_selected, 'unavailable': !item.is_available, 'flex-space-between': isNative}" 
ng-repeat="item in reservables track by item.sys_id" role="row"
ng-style="isNative &amp;&amp; {'border': 'none'}">
<div class="schedule-col col-left-pad col-xs-3" ng-if="displayRsvCard" ng-class="item.availabilityScore? 'availability-score':''">
<div class="item-info col-xs-12 col-sm-12 col-lg-12">
<div class="pull-right" ng-if="isFavoritesEnabled">
<sp-widget widget="item.favoriteWidget"></sp-widget>
</div>
<div class="reservable-title text-muted text-overflow-ellipsis" ng-attr-title="{{::item.name}}">
<span ng-if="item.require_approval" class="highlighted-label">
<i class="fa fa-lock" ng-attr-title="{{scheduleViewLabels.requireApproval}}"></i>
</span>
{{::item.name}}
</div>
<div class="subtitle text-overflow-ellipsis" ng-attr-title="{{::item.subtitle}}">{{::item.subtitle}}</div>
<div class="reservable-details">
<div class="col-xs-12 col-md-4 text-muted p-l-0" ng-repeat="item in item.body" ng-class="'reservable-details-' + item.field">
<i class="reservable-icon fa" data-toggle="tooltip" ng-class="::item.icon" title="{{::item.iconLabel}}"></i>
<span class="reservable-value" data-toggle="tooltip" data-container=".wsd-search" data-placement="top" title="{{::item.iconTooltipText}}">
{{item.iconTooltipText ? '+' + item.amount : item.displayValue}}
</span>
</div>
</div>
</div>
<div ng-if="item.availabilityScore" id="Availability" class="availabilityScore-scheduleView col-xs-12 col-sm-12 col-lg-12"> 
<span><i id="Availability-Icon" class="{{item.availabilityScore.iconClass}} availability-icon" style='color: {{item.availabilityScore.iconColor}};'></i></span>
<span id="Availability-Text" class="availabilityText-scheduleView text-overflow-ellipsis" ng-attr-title="{{item.availabilityScore.displayText}}" >{{item.availabilityScore.displayText}}</span>
</div>
</div>
        <div ng-if="!displayRsvCard" ng-class="{'col-xs-1': !isNative}"></div>
<div class="schedule-col col-middle" ng-class="displayRsvCard? 'col-xs-8' : 'col-xs-10'"
aria-label="{{::item.availability_label}}" role="gridcell" ng-style="isNative &amp;&amp; {'height': '50px'}">
<div class="drawing-canvas gantt">
<div class="reserved"
ng-style="{left: reservation.gantt.left, width: reservation.gantt.width}"
ng-repeat="reservation in item.reservations track by reservation.sys_id"
aria-label="{{::reservation.title}}"
ng-attr-title="{{::reservation.title}}">
</div>
</div>
</div>
<div ng-if="!displayRsvCard &amp;&amp; isNative"></div>
 
<div class="schedule-col col-right text-center col-xs-1" ng-if="displayRsvCard">
 
<div class="reservable-action" tabindex="0" role="gridcell">
<g:evaluate var="jvar_admin" expression="gs.hasRole('sn_wsd_rsv.selectRooms')" />
<j2:if test="${jvar_admin == true}"> 
<button id="add-{{item.sys_id}}" class="btn btn-default btn-add btn-reserve form-control text-overflow-ellipsis"
ng-class="{'btn-remove': item.is_selected, 'btn-reserved': reservable.is_reserved, 'btn-selected': reservable.is_selected}"
ng-disabled="!item.is_available || (disableReserveMulti &amp;&amp; !item.is_selected)"
tabindex="-1"
aria-label="{{item.is_selected ? item.deselect_label : item.select_label}}"
ng-attr-title="{{item.is_selected ? scheduleViewLabels.remove : scheduleViewLabels.add}}"
ng-click="toggleReservableSelection({item: item, event: $event})">
<label class="btn-label-reserve">{{item.is_selected ? scheduleViewLabels.remove : scheduleViewLabels.add}}</label>
<i ng-class="!item.is_selected? 'fa fa-shopping-cart btn-icon-reserve' : 'fa fa-trash btn-icon-reserve'"></i>
</button>
</j2:if>
</div>
 
</div>
 
</div>
</div>
</div>
</j:jelly>
 
but it is not hiding the button. Please help me.
 
Thanks,
1 REPLY 1

hardikpanch_433
ServiceNow Employee
ServiceNow Employee

Hello @Nickell73 ,

I have the exact same requirement. Did you get any solution for this ?

I've tried a lot but didn't get any solution yet.

Thanks