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