Commit 1587f3a0 by Ali Arshad

Internal CR fixes.

parent c69ab081
<div class="dashboard-content-area second-part"> <div class="dashboard-content-area second-part">
<app-error-message></app-error-message> <app-error-message></app-error-message>
<form #form="ngForm"> <form #form="ngForm" *ngIf="!showLoader">
<div class="ui-g ui-fluid"> <div class="ui-g ui-fluid">
<div class="page-title mb-0">{{editMode ? "Edit" : "Add"}} Workflow Template</div>
</div>
<div class="ui-g form-group">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="ui-g form-group"> <div class="ui-g ui-fluid">
<p-dialog header="Message Template" [(visible)]="displayNewMessageTemplate" #messageTemplateDialog> <div class="ui-g-12">
<app-edit-message-template *ngIf="displayNewMessageTemplate" <div class="page-title mb-0">
[objectID]="selectedTemplateID" <a [routerLink]="['/admin/list-workflow-templates']" class="arrow-btn-blue ml-0">
(closeModal)="closeDialog($event)"></app-edit-message-template> <img src="/assets/images/arrow-left-prev_blue.svg">
</a>
{{editMode ? "Edit" : "Add"}} Workflow Template
</div>
</div>
</div>
<div class="ui-g ui-fluid">
<p-dialog #messageTemplateDialog [(visible)]="displayNewMessageTemplate" header="Message Template">
<app-edit-message-template (closeModal)="closeDialog($event)"
*ngIf="displayNewMessageTemplate"
[objectID]="selectedTemplateID"></app-edit-message-template>
</p-dialog> </p-dialog>
<div class="ui-g-12 ui-g-offset-4 ui-md-4 h-60"> <div class="ui-g-12 ui-g-offset-3 ui-md-6 h-60 text-center templateName">
<label for="TemplateNameId" (click)="toggleInput($event, 'TemplateName')" <label (click)="toggleInput($event, 'TemplateName', true)" *ngIf="showLabel('TemplateName')"
*ngIf="showLabel('TemplateName')">{{workflow.TemplateName}}</label> for="TemplateNameId">{{workflow.TemplateName}}</label>
<input id="TemplateNameId" *ngIf="showInput('TemplateName')" <input (blur)="toggleInput($event, 'TemplateName', false)" *ngIf="!showLabel('TemplateName')"
[(ngModel)]="workflow.TemplateName" [disabled]="showLoader" [(ngModel)]="workflow.TemplateName" [disabled]="showLoader"
(blur)="toggleInput($event, 'TemplateName')" class="form-control" class="form-control" id="TemplateNameId"
name="TemplateName" required/> name="TemplateName" required/>
</div> </div>
</div> </div>
<!-- Start Pre stages --> <!-- Start Pre stages -->
<div class="ui-g form-group"> <div class="ui-g ui-fluid">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<p-panel *ngFor="let stage of filteredStages(true, false)" toggler="header" <p-panel *ngFor="let stage of preStages" [toggleable]="true"
[toggleable]="true"> toggler="header">
<p-header> <p-header>
<span class="ui-panel-title" *ngIf="showStageLabel('StageName'+stage.ObjectID, stage)" <span class="ui-panel-title">
(click)="toggleStageInput($event, 'StageName'+stage.ObjectID, stage)">
{{getStageHeader(stage)}} {{getStageHeader(stage)}}
</span> </span>
</p-header> </p-header>
<div class="form-group"> <div class="form-group ui-g">
<div class="work-belonging"> <div class="work-belonging ui-g-12 mb-0">
<span class="calcField">Landing Page</span> <span class="calcField">Landing Page</span>
</div> </div>
<div class="form-group row"> <div class="form-group ui-g-12">
<div class="col-md-8"> <label for="LandingButtonText">Button Text</label>
<label for="LandingButtonText">Button Text</label> <input [(ngModel)]="workflow.LandingButtonText" [disabled]="showLoader" class="form-control"
<input name="LandingButtonText" type="text" class="form-control" fieldLabel="Landing Button Text"
id="LandingButtonText" id="LandingButtonText" name="LandingButtonText"
[(ngModel)]="workflow.LandingButtonText" [disabled]="showLoader" required
fieldLabel="Landing Button Text" tabindex="1" type="text">
tabindex="1" required>
</div>
</div> </div>
<div class="work-belonging"> <div class="work-belonging ui-g-12 mb-0">
<span class="calcField">Verification Page</span> <span class="calcField">Verification Page</span>
</div> </div>
<div class="form-group row"> <div class="form-group ui-g-12">
<div class="col-md-12"> <label for="VerificationHeaderText">Header Text</label>
<label for="VerificationHeaderText">Header Text</label> <input [(ngModel)]="workflow.VerificationHeaderText" [disabled]="showLoader" class="form-control"
<input name="VerificationHeaderText" type="text" class="form-control" fieldLabel="Verification Header Text" id="VerificationHeaderText"
id="VerificationHeaderText" [disabled]="showLoader" name="VerificationHeaderText"
[(ngModel)]="workflow.VerificationHeaderText" required
fieldLabel="Verification Header Text" tabindex="2" type="text">
tabindex="2" required>
</div>
</div> </div>
<div class="work-belonging"> <div class="work-belonging ui-g-12 mb-0">
<span class="calcField">Application</span> <span class="calcField">Application</span>
</div> </div>
<div class="criteria_section"> <div class="criteria_section ui-g-12">
<fieldset> <fieldset>
<legend> <legend>
<span class="calcField">Capture CV</span> <span class="calcField">Capture CV</span>
<p-inputSwitch [(ngModel)]="workflow.CaptureCV" name="CaptureCV" <p-inputSwitch [(ngModel)]="workflow.CaptureCV" [disabled]="showLoader"
[disabled]="showLoader"> name="CaptureCV">
</p-inputSwitch> </p-inputSwitch>
</legend> </legend>
<div *ngIf="workflow.CaptureCV" class="ui-g-12 ui-md-6"> <div *ngIf="workflow.CaptureCV" class="ui-g-12 ui-md-6">
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<label> Mandatory </label> <label> Mandatory</label>
</div> </div>
<div class="ui-g-12 ui-md-2"> <div class="ui-g-12 ui-md-2">
<p-inputSwitch [(ngModel)]="workflow.IsCVMandatory" <p-inputSwitch [(ngModel)]="workflow.IsCVMandatory"
...@@ -83,17 +85,17 @@ ...@@ -83,17 +85,17 @@
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div class="criteria_section"> <div class="criteria_section ui-g-12">
<fieldset> <fieldset>
<legend> <legend>
<span class="calcField">Capture Cover Letter</span> <span class="calcField">Capture Cover Letter</span>
<p-inputSwitch [(ngModel)]="workflow.CaptureCL" name="CaptureCL" <p-inputSwitch [(ngModel)]="workflow.CaptureCL" [disabled]="showLoader"
[disabled]="showLoader"> name="CaptureCL">
</p-inputSwitch> </p-inputSwitch>
</legend> </legend>
<div *ngIf="workflow.CaptureCL" class="ui-g-12 ui-md-6"> <div *ngIf="workflow.CaptureCL" class="ui-g-12 ui-md-6">
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<label> Mandatory </label> <label> Mandatory</label>
</div> </div>
<div class="ui-g-12 ui-md-2"> <div class="ui-g-12 ui-md-2">
<p-inputSwitch [(ngModel)]="workflow.IsCLMandatory" <p-inputSwitch [(ngModel)]="workflow.IsCLMandatory"
...@@ -104,57 +106,57 @@ ...@@ -104,57 +106,57 @@
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div class="form-group row"> <div class="form-group ui-g-12">
<div class="col-md-12"> <label for="VerificationHeaderText">Button Text</label>
<label for="VerificationHeaderText">Button Text</label> <input [(ngModel)]="workflow.ApplicationButtonText" [disabled]="showLoader" class="form-control"
<input name="ApplicationButtonText" type="text" class="form-control" fieldLabel="Application Button Text"
[(ngModel)]="workflow.ApplicationButtonText" name="ApplicationButtonText"
[disabled]="showLoader" required
fieldLabel="Application Button Text" tabindex="7" type="text">
tabindex="7" required>
</div>
</div> </div>
<div class="form-group row"> <div class="form-group ui-g-12">
<div class="col-md-2"> <div class="ui-g flex-center">
<label>Action</label> <div class="ui-g-2">
</div> <label class="mb-0">Action</label>
<div class="col-md-10"> </div>
<p-selectButton [options]="responseActions" <div class="ui-g-10">
[(ngModel)]="workflow.ApplicationResponseAction" <p-selectButton [(ngModel)]="workflow.ApplicationResponseAction"
optionLabel="Description" [options]="responseActions"
name="ApplicationResponseAction"> name="ApplicationResponseAction"
</p-selectButton> optionLabel="Description">
</p-selectButton>
</div>
</div> </div>
</div> </div>
<div class="form-group row" *ngIf="emailResponseSelected()"> <div *ngIf="emailResponseSelected()" class="form-group ui-g-12">
<div class="col-md-6"> <div class="ui-g">
<label for="ThankYouHeaderText">Header Text for Thank You page</label> <div class="ui-g-6">
<input name="ThankYouHeaderText" [(ngModel)]="workflow.ThankYouHeaderText" <label for="ThankYouHeaderText">Header Text for Thank You page</label>
id="ThankYouHeaderText" [disabled]="showLoader" <input [(ngModel)]="workflow.ThankYouHeaderText" [disabled]="showLoader"
type="text" class="form-control" class="form-control" fieldLabel="Header Text for Thank You page"
fieldLabel="Header Text for Thank You page" id="ThankYouHeaderText" name="ThankYouHeaderText"
tabindex="8" required> required
</div> tabindex="8" type="text">
<div class="col-md-6"> </div>
<label for="ThankYouSecondaryText">Secondary Text</label> <div class="ui-g-6">
<input name="ThankYouSecondaryText" id="ThankYouSecondaryText" <label for="ThankYouSecondaryText">Secondary Text</label>
[(ngModel)]="workflow.ThankYouSecondaryText" [disabled]="showLoader" <input [(ngModel)]="workflow.ThankYouSecondaryText" [disabled]="showLoader"
fieldLabel="Secondary Text" type="text" class="form-control" class="form-control" fieldLabel="Secondary Text"
tabindex="9"> id="ThankYouSecondaryText" name="ThankYouSecondaryText" tabindex="9"
type="text">
</div>
</div> </div>
</div> </div>
<div class="work-belonging"> <div class="work-belonging ui-g-12">
<span class="calcField">Job Outline Page</span> <span class="calcField">Job Outline Page</span>
</div> </div>
<div class="form-group row"> <div class="form-group ui-g-12">
<div class="col-md-12"> <label for="JobOutlineButtonText">Button Text</label>
<label for="JobOutlineButtonText">Button Text</label> <input [(ngModel)]="workflow.JobOutlineButtonText" [disabled]="showLoader"
<input name="JobOutlineButtonText" id="JobOutlineButtonText" class="form-control"
[(ngModel)]="workflow.JobOutlineButtonText" fieldLabel="Job Outline Button Text" id="JobOutlineButtonText" name="JobOutlineButtonText"
type="text" class="form-control" [disabled]="showLoader" required
fieldLabel="Job Outline Button Text" tabindex="10" type="text">
tabindex="10" required>
</div>
</div> </div>
</div> </div>
<div class="ui-g form-group"> <div class="ui-g form-group">
...@@ -164,24 +166,24 @@ ...@@ -164,24 +166,24 @@
<div class="col-md-6"> <div class="col-md-6">
<h3>Steps</h3> <h3>Steps</h3>
</div> </div>
<div class="col-md-offset-2 col-md-4" *ngIf="stepTypes && stepTypes.length"> <div *ngIf="stepTypes && stepTypes.length" class="col-md-offset-2 col-md-4">
<app-select-2 [data]="stepTypes" [value]="0" <app-select-2 (valChange)="addStep($event, stage)" [data]="stepTypes"
fieldLabel="Description" [value]="0"
(valChange)="addStep($event, stage)"> fieldLabel="Description">
</app-select-2> </app-select-2>
</div> </div>
</div> </div>
<p-orderList [value]="stage.Steps" header="Steps" <p-orderList (onReorder)="reAssignStepOrders(stage)" [value]="stage.Steps"
dragdrop="true" (onReorder)="reAssignStepOrders(stage)"> dragdrop="true" header="Steps">
<ng-template let-step pTemplate="item"> <ng-template let-step pTemplate="item">
<div class="drag-block"> <div class="drag-block">
<div class="col-md-4"> <div class="col-md-4">
<h4>{{step.StepType.Description}}</h4> <h4>{{step.StepType.Description}}</h4>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<button type="button" pButton label=" " icon="ui-icon-close" <button (click)="removeStep(step, stage)" [disabled]="showLoader" icon="ui-icon-close" label=" "
[disabled]="showLoader" pButton
(click)="removeStep(step, stage)"></button> type="button"></button>
</div> </div>
<div class="col-md-6"></div> <div class="col-md-6"></div>
</div> </div>
...@@ -194,7 +196,7 @@ ...@@ -194,7 +196,7 @@
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Automatically progress to next stage </label> <label> Automatically progress to next stage</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader"
...@@ -204,7 +206,7 @@ ...@@ -204,7 +206,7 @@
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Use messaging </label> <label> Use messaging</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader"
...@@ -212,71 +214,74 @@ ...@@ -212,71 +214,74 @@
</p-inputSwitch> </p-inputSwitch>
</div> </div>
</div> </div>
<p-panel header="{{stageMessagesCount(stage)}}" [toggleable]="true" <p-panel [collapsed]="!stage.UseMessaging" [toggleable]="true"
[collapsed]="!stage.UseMessaging"> header="{{stageMessagesCount(stage)}}">
<div class="form-group row"> <div class="form-group row">
<div class="col-md-offset-9 col-md-3"> <div class="col-md-offset-9 col-md-3">
<button class="btn btn-primary add-more-btn" tabindex="11" <button (click)="addMessage(stage)" *ngIf="stage.UseMessaging"
[disabled]="showLoader" [disabled]="showLoader"
(click)="addMessage(stage)" *ngIf="stage.UseMessaging">Add class="btn btn-primary add-more-btn" tabindex="11">Add
Message Message
</button> </button>
</div> </div>
</div> </div>
<!-- Display Pre Stage Messages here --> <!-- Display Pre Stage Messages here -->
<div class="form-group row" *ngFor="let message of stage.WorkFlowMessages"> <div *ngFor="let message of stage.WorkFlowMessages" class="form-group row">
<div class="col-lg-12 col-md-12" *ngIf="message.IsWithdrawalMessage"> <div *ngIf="message.IsWithdrawalMessage" class="col-lg-12 col-md-12">
<h3>Withdrawal Process</h3> <h3>Withdrawal Process</h3>
</div> </div>
<div class="col-lg-12 col-md-12" *ngIf="stage.UseMessaging"> <div *ngIf="stage.UseMessaging" class="col-lg-12 col-md-12 mb-10">
<div class="col-md-4"> <div class="col-md-4">
<p-multiSelect [options]="applicantSources" <label>&nbsp;</label>
name="applicantSources{{message.ObjectID}}" <p-multiSelect [(ngModel)]="message.ApplicantSources"
[(ngModel)]="message.ApplicantSources" [disabled]="showLoader"
[panelStyle]="{minWidth:'12em'}"
[filter]="false" [filter]="false"
optionLabel="Description" [options]="applicantSources"
[disabled]="showLoader"> [panelStyle]="{minWidth:'12em'}"
class="form-control"
name="applicantSources{{message.ObjectID}}"
optionLabel="Description">
</p-multiSelect> </p-multiSelect>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label>After</label> <label>After</label>
<p-inputMask name="Delay{{message.ObjectID}}" <p-inputMask (change)="generateDelayString(message)"
class="form-control" [disabled]="showLoader" (onBlur)="toggleInput($event, 'Delay'+message.ObjectID, false)" (onFocus)="toggleInput($event, 'Delay'+message.ObjectID, true)"
id="Delay{{message.ObjectID}}" *ngIf="!showLabel('Delay'+message.ObjectID) || !message.Delay"
[(ngModel)]="message.Delay" [(ngModel)]="message.Delay"
(onFocus)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)" [disabled]="showLoader"
(onBlur)="toggleDelayInput($event, 'Delay'+message.ObjectID, message)" [id]="'Delay'+message.ObjectID"
*ngIf="!showDelayLabel('Delay'+message.ObjectID, message)" class="form-control"
mask="9?9:99:99"> mask="9?9:99:99"
name="Delay{{message.ObjectID}}">
</p-inputMask> </p-inputMask>
<div *ngIf="showDelayLabel('Delay'+message.ObjectID, message)" <div (click)="toggleInput($event, 'Delay'+message.ObjectID, true)"
(click)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)"> *ngIf="showLabel('Delay'+message.ObjectID) && message.Delay">
<label>{{message.DelayString}}</label> <label>{{message.DelayString}}</label>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="Variance{{message.ObjectID}}">+/-</label> <label for="Variance{{message.ObjectID}}">+/-</label>
<input name="Variance{{message.ObjectID}}" <input [(ngModel)]="message.Variance"
id="Variance{{message.ObjectID}}" [disabled]="showLoader"
[(ngModel)]="message.Variance" [disabled]="showLoader" class="form-control" id="Variance{{message.ObjectID}}"
type="text" class="form-control"> name="Variance{{message.ObjectID}}" type="text">
</div> </div>
</div> </div>
<div class="col-lg-12 col-md-12"> <div class="col-lg-12 col-md-12 flex-center">
<div class="col-md-4"> <div class="col-md-4">
<label>Business Hours only</label> <label class="mb-0">Business Hours only</label>
<p-checkbox name="BusinessHoursOnly{{message.ObjectID}}" <p-checkbox [(ngModel)]="message.BusinessHoursOnly"
[(ngModel)]="message.BusinessHoursOnly" binary="true"
binary="true"> name="BusinessHoursOnly{{message.ObjectID}}">
</p-checkbox> </p-checkbox>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<label>Send</label> <label>Send</label>
<p-dropdown [options]="messageTemplates" filter="true" <p-dropdown [(ngModel)]="message.MessageTemplate" [options]="messageTemplates"
optionLabel="TemplateName" filter="true"
name="messageTemplate{{message.ObjectID}}" name="messageTemplate{{message.ObjectID}}"
[(ngModel)]="message.MessageTemplate"> optionLabel="TemplateName">
<ng-template let-message pTemplate="selectedItem"> <ng-template let-message pTemplate="selectedItem">
<i class="{{getMessageClass(message.value)}}"></i> <i class="{{getMessageClass(message.value)}}"></i>
<span class="dropdown-text">{{message.label}}</span> <span class="dropdown-text">{{message.label}}</span>
...@@ -286,19 +291,19 @@ ...@@ -286,19 +291,19 @@
style="position: relative;height: 25px;"> style="position: relative;height: 25px;">
<i class="{{getMessageClass(selectedMsg.value)}}"></i> <i class="{{getMessageClass(selectedMsg.value)}}"></i>
<div <div
class="dropdown-text">{{selectedMsg.label}}</div> class="dropdown-text">{{selectedMsg.label}}</div>
</div> </div>
</ng-template> </ng-template>
</p-dropdown> </p-dropdown>
</div> </div>
<div class="col-md-2 text-center"> <div class="col-md-2 text-center">
<button type="button" pButton label=" " [disabled]="showLoader" <button (click)="configureMessageTemplate(message)" [disabled]="showLoader" icon="ui-icon-settings"
icon="ui-icon-settings" pButton
(click)="configureMessageTemplate(message)"></button> type="button">
<button type="button" pButton label=" " [disabled]="showLoader" </button>
icon="ui-icon-close" <button (click)="removeMessage(message, stage)" *ngIf="!message.IsWithdrawalMessage" [disabled]="showLoader" icon="ui-icon-close"
*ngIf="!message.IsWithdrawalMessage" pButton type="button">
(click)="removeMessage(message, stage)"></button> </button>
</div> </div>
</div> </div>
</div> </div>
...@@ -313,54 +318,55 @@ ...@@ -313,54 +318,55 @@
</div> </div>
</div> </div>
<!-- End Pre stages --> <!-- End Pre stages -->
<div class="row"> <div class="ui-g ui-fluid">
<div class="col-md-6 text-right"> <div class="ui-g-6 text-right">
<h3>Stages</h3> <h3>Stages</h3>
</div> </div>
<div class="col-md-3 col-md-offset-3"> <div class="ui-g-3 ui-g-offset-3">
<button class="btn btn-primary add-more-btn" tabindex="11" [disabled]="showLoader" <button (click)="addStage()" [disabled]="showLoader" class="btn btn-primary add-more-btn"
(click)="addStage()">Add Stage tabindex="11">Add Stage
</button> </button>
</div> </div>
</div> </div>
<div class="ui-g form-group"> <div class="ui-g ui-fluid">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<p-panel *ngFor="let stage of filteredStages(false, false)" toggler="header" <p-panel *ngFor="let stage of genericStages" [toggleable]="true"
[toggleable]="true"> toggler="header">
<p-header> <p-header>
<span class="ui-panel-title" *ngIf="showStageLabel('StageName'+stage.SortOrder, stage)" <span (click)="toggleInput($event, 'StageName'+stage.SortOrder, true)" *ngIf="showLabel('StageName'+stage.SortOrder)"
(click)="toggleStageInput($event, 'StageName'+stage.SortOrder, stage)"> class="ui-panel-title">
{{getStageHeader(stage)}} {{getStageHeader(stage)}}
</span> </span>
<input id="StageName{{stage.SortOrder}}Id" <input (blur)="toggleInput($event, 'StageName'+stage.SortOrder, false)"
*ngIf="showStageInput('StageName'+stage.SortOrder, stage)" *ngIf="!showLabel('StageName'+stage.SortOrder)"
pInputText [disabled]="showLoader" [(ngModel)]="stage.Name" [disabled]="showLoader"
[(ngModel)]="stage.Name" class="form-control panel-header-input"
(blur)="toggleStageInput($event, 'StageName'+stage.SortOrder, stage)" id="StageName{{stage.SortOrder}}Id"
name="StageName{{stage.SortOrder}}" required/> name="StageName{{stage.SortOrder}}"
pInputText required/>
</p-header> </p-header>
<div class="ui-g form-group"> <div class="ui-g form-group">
<!-- Start steps section --> <!-- Start steps section -->
<div class="ui-g-12 ui-md-12" *ngIf="!stage.StageType.IsPostStage"> <div *ngIf="!stage.StageType.IsPostStage" class="ui-g-12 ui-md-12">
<div class="form-group row"> <div class="form-group row">
<div class="col-md-offset-8 col-md-4" *ngIf="stepTypes && stepTypes.length"> <div *ngIf="stepTypes && stepTypes.length" class="col-md-offset-8 col-md-4">
<app-select-2 [data]="stepTypes" [value]="0" <app-select-2 (valChange)="addStep($event, stage)" [data]="stepTypes"
fieldLabel="Description" [value]="0"
(valChange)="addStep($event, stage)"> fieldLabel="Description">
</app-select-2> </app-select-2>
</div> </div>
</div> </div>
<p-orderList [value]="stage.Steps" header="Steps" <p-orderList (onReorder)="reAssignStepOrders(stage)" [value]="stage.Steps"
dragdrop="true" (onReorder)="reAssignStepOrders(stage)"> dragdrop="true" header="Steps">
<ng-template let-step pTemplate="item"> <ng-template let-step pTemplate="item">
<div class="drag-block"> <div class="drag-block">
<div class="col-md-4"> <div class="col-md-4">
<h4>{{step.StepType.Description}}</h4> <h4>{{step.StepType.Description}}</h4>
</div> </div>
<div class="col-md-2"> <div class="col-md-2">
<button type="button" pButton label=" " [disabled]="showLoader" <button (click)="removeStep(step, stage)" [disabled]="showLoader" icon="ui-icon-close" label=" "
icon="ui-icon-close" pButton
(click)="removeStep(step, stage)"></button> type="button"></button>
</div> </div>
<div class="col-md-6"></div> <div class="col-md-6"></div>
</div> </div>
...@@ -373,7 +379,7 @@ ...@@ -373,7 +379,7 @@
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Automatically progress to next stage </label> <label> Automatically progress to next stage</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader"
...@@ -383,7 +389,7 @@ ...@@ -383,7 +389,7 @@
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Use messaging </label> <label> Use messaging</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader"
...@@ -391,88 +397,89 @@ ...@@ -391,88 +397,89 @@
</p-inputSwitch> </p-inputSwitch>
</div> </div>
</div> </div>
<p-panel header="{{stageMessagesCount(stage)}}" [toggleable]="true" <p-panel [collapsed]="!stage.UseMessaging" [toggleable]="true"
[collapsed]="!stage.UseMessaging"> header="{{stageMessagesCount(stage)}}">
<div class="form-group row"> <div class="form-group row">
<div class="col-md-offset-9 col-md-3"> <div class="col-md-offset-9 col-md-3">
<button class="btn btn-primary add-more-btn" tabindex="11" <button (click)="addMessage(stage)" *ngIf="stage.UseMessaging"
[disabled]="showLoader" [disabled]="showLoader"
(click)="addMessage(stage)" *ngIf="stage.UseMessaging">Add class="btn btn-primary add-more-btn" tabindex="11">Add
Message Message
</button> </button>
</div> </div>
</div> </div>
<!-- Display Messages here --> <!-- Display Messages here -->
<div class="form-group row" <div *ngFor="let message of stage.WorkFlowMessages"
*ngFor="let message of stage.WorkFlowMessages"> class="form-group row">
<div class="col-lg-12 col-md-12" <div *ngIf="message.IsWithdrawalMessage"
*ngIf="message.IsWithdrawalMessage"> class="col-lg-12 col-md-12">
<h3>Withdrawal Process</h3> <h3>Withdrawal Process</h3>
</div> </div>
<div class="col-lg-12 col-md-12" *ngIf="stage.UseMessaging"> <div *ngIf="stage.UseMessaging" class="col-lg-12 col-md-12">
<div class="col-md-4"> <div class="col-md-4">
<label>After</label> <label>After</label>
<p-inputMask name="Delay{{message.ObjectID}}" <p-inputMask (change)="generateDelayString(message)"
class="form-control" [disabled]="showLoader" (onBlur)="toggleInput($event, 'Delay'+message.ObjectID, false)" (onFocus)="toggleInput($event, 'Delay'+message.ObjectID, true)"
id="Delay{{message.ObjectID}}" *ngIf="!showLabel('Delay'+message.ObjectID) || !message.Delay"
[(ngModel)]="message.Delay" [(ngModel)]="message.Delay"
(onFocus)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)" [disabled]="showLoader"
(onBlur)="toggleDelayInput($event, 'Delay'+message.ObjectID, message)" [id]="'Delay'+message.ObjectID"
*ngIf="!showDelayLabel('Delay'+message.ObjectID, message)" class="form-control"
mask="9?9:99:99"> mask="9?9:99:99"
name="Delay{{message.ObjectID}}">
</p-inputMask> </p-inputMask>
<div *ngIf="showDelayLabel('Delay'+message.ObjectID, message)" <div (click)="toggleInput($event, 'Delay'+message.ObjectID, true)"
(click)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)"> *ngIf="showLabel('Delay'+message.ObjectID) && message.Delay">
<label>{{message.DelayString}}</label> <label>{{message.DelayString}}</label>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="Variance{{message.ObjectID}}">+/-</label> <label for="Variance{{message.ObjectID}}">+/-</label>
<input name="Variance{{message.ObjectID}}" <input [(ngModel)]="message.Variance"
id="Variance{{message.ObjectID}}" [disabled]="showLoader"
[(ngModel)]="message.Variance" [disabled]="showLoader" [id]="'Variance'+message.ObjectID" class="form-control"
type="text" class="form-control"> name="Variance{{message.ObjectID}}" type="text">
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label>Business Hours only</label> <label>Business Hours only</label>
<p-checkbox name="BusinessHoursOnly{{message.ObjectID}}" <p-checkbox [(ngModel)]="message.BusinessHoursOnly"
[(ngModel)]="message.BusinessHoursOnly" binary="true"
binary="true"> name="BusinessHoursOnly{{message.ObjectID}}">
</p-checkbox> </p-checkbox>
</div> </div>
</div> </div>
<div class="col-lg-12 col-md-12" *ngIf="stage.UseMessaging"> <div *ngIf="stage.UseMessaging" class="col-lg-12 col-md-12">
<div class="col-md-8"> <div class="col-md-8">
<label>Send</label> <label>Send</label>
<p-dropdown [options]="messageTemplates" filter="true" <p-dropdown (onChange)="showMessageTemplateDialog($event, message)" [(ngModel)]="message.MessageTemplate"
optionLabel="TemplateName" [autoDisplayFirst]="false"
[options]="messageTemplates"
filter="true"
name="messageTemplate{{message.ObjectID}}" name="messageTemplate{{message.ObjectID}}"
[(ngModel)]="message.MessageTemplate" optionLabel="TemplateName">
(onChange)="showMessageTemplateDialog($event, message)"
[autoDisplayFirst]="false">
<ng-template let-message pTemplate="selectedItem"> <ng-template let-message pTemplate="selectedItem">
<i class="{{getMessageClass(message.value)}}"></i> <i class="{{getMessageClass(message.value)}}"></i>
<span <span
class="dropdown-text">{{message.label}}</span> class="dropdown-text">{{message.label}}</span>
</ng-template> </ng-template>
<ng-template let-selectedMsg pTemplate="item"> <ng-template let-selectedMsg pTemplate="item">
<div class="ui-helper-clearfix" <div class="ui-helper-clearfix"
style="position: relative;height: 25px;"> style="position: relative;height: 25px;">
<i class="{{getMessageClass(selectedMsg.value)}}"></i> <i class="{{getMessageClass(selectedMsg.value)}}"></i>
<div <div
class="dropdown-text">{{selectedMsg.label}}</div> class="dropdown-text">{{selectedMsg.label}}</div>
</div> </div>
</ng-template> </ng-template>
</p-dropdown> </p-dropdown>
</div> </div>
<div class="col-md-4 text-center"> <div class="col-md-4 text-center">
<button type="button" pButton label=" " [disabled]="showLoader" <button (click)="configureMessageTemplate(message)" [disabled]="showLoader" icon="ui-icon-settings" label=" "
icon="ui-icon-settings" pButton
(click)="configureMessageTemplate(message)"></button> type="button"></button>
<button type="button" pButton label=" " <button (click)="removeMessage(message, stage)" *ngIf="!message.IsWithdrawalMessage" [disabled]="showLoader"
icon="ui-icon-close" [disabled]="showLoader" icon="ui-icon-close" label=" "
*ngIf="!message.IsWithdrawalMessage" pButton
(click)="removeMessage(message, stage)"></button> type="button"></button>
</div> </div>
</div> </div>
</div> </div>
...@@ -482,8 +489,8 @@ ...@@ -482,8 +489,8 @@
<hr/> <hr/>
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<button class="btn btn-primary add-more-btn" [disabled]="showLoader" <button (click)="removeStage(stage)" [disabled]="showLoader"
(click)="removeStage(stage)">Remove Stage class="btn btn-primary add-more-btn">Remove Stage
</button> </button>
</div> </div>
</div> </div>
...@@ -491,12 +498,15 @@ ...@@ -491,12 +498,15 @@
<!-- End messaging section --> <!-- End messaging section -->
</div> </div>
</p-panel> </p-panel>
</div>
<div class="ui-g-12 ui-md-12"></div>
</div>
<div class="ui-g ui-fluid">
<div class="ui-g-12">
<!-- Start Post Stages --> <!-- Start Post Stages -->
<p-panel *ngFor="let stage of filteredStages(false, true)" toggler="header" [toggleable]="true"> <p-panel *ngFor="let stage of postStages" [toggleable]="true" toggler="header">
<p-header> <p-header>
<span class="ui-panel-title" *ngIf="showStageLabel('StageName'+stage.ObjectID, stage)" <span class="ui-panel-title">
(click)="toggleStageInput($event, 'StageName'+stage.ObjectID, stage)">
{{getStageHeader(stage)}} {{getStageHeader(stage)}}
</span> </span>
</p-header> </p-header>
...@@ -505,7 +515,7 @@ ...@@ -505,7 +515,7 @@
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Automatically progress to next stage </label> <label> Automatically progress to next stage</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.AutoProgress" [disabled]="showLoader"
...@@ -515,7 +525,7 @@ ...@@ -515,7 +525,7 @@
</div> </div>
<div class="form-group row"> <div class="form-group row">
<div class="ui-g-12 ui-md-6"> <div class="ui-g-12 ui-md-6">
<label> Use messaging </label> <label> Use messaging</label>
</div> </div>
<div class="ui-g-12 ui-md-4"> <div class="ui-g-12 ui-md-4">
<p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader" <p-inputSwitch [(ngModel)]="stage.UseMessaging" [disabled]="showLoader"
...@@ -523,61 +533,62 @@ ...@@ -523,61 +533,62 @@
</p-inputSwitch> </p-inputSwitch>
</div> </div>
</div> </div>
<p-panel header="{{stageMessagesCount(stage)}}" [toggleable]="true" <p-panel [collapsed]="!stage.UseMessaging" [toggleable]="true"
[collapsed]="!stage.UseMessaging"> header="{{stageMessagesCount(stage)}}">
<div class="form-group row"> <div class="form-group row">
<div class="col-md-offset-9 col-md-3"> <div class="col-md-offset-9 col-md-3">
<button class="btn btn-primary add-more-btn" tabindex="11" <button (click)="addMessage(stage)" *ngIf="stage.UseMessaging"
[disabled]="showLoader" [disabled]="showLoader"
(click)="addMessage(stage)" *ngIf="stage.UseMessaging">Add class="btn btn-primary add-more-btn" tabindex="11">Add
Message Message
</button> </button>
</div> </div>
</div> </div>
<!-- Display Messages here --> <!-- Display Messages here -->
<div class="form-group row" *ngFor="let message of stage.WorkFlowMessages"> <div *ngFor="let message of stage.WorkFlowMessages" class="form-group row">
<div class="col-lg-12 col-md-12" *ngIf="message.IsWithdrawalMessage"> <div *ngIf="message.IsWithdrawalMessage" class="col-lg-12 col-md-12">
<h3>Withdrawal Process</h3> <h3>Withdrawal Process</h3>
</div> </div>
<div class="col-lg-12 col-md-12" *ngIf="stage.UseMessaging"> <div *ngIf="stage.UseMessaging" class="col-lg-12 col-md-12">
<div class="col-md-4"> <div class="col-md-4">
<label>After</label> <label>After</label>
<p-inputMask name="Delay{{message.ObjectID}}" <p-inputMask (change)="generateDelayString(message)"
class="form-control" [disabled]="showLoader" (onBlur)="toggleInput($event, 'Delay'+message.ObjectID, false)" (onFocus)="toggleInput($event, 'Delay'+message.ObjectID, true)"
id="Delay{{message.ObjectID}}" *ngIf="!showLabel('Delay'+message.ObjectID) || !message.Delay"
[(ngModel)]="message.Delay" [(ngModel)]="message.Delay"
(onFocus)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)" [disabled]="showLoader"
(onBlur)="toggleDelayInput($event, 'Delay'+message.ObjectID, message)" class="form-control"
*ngIf="!showDelayLabel('Delay'+message.ObjectID, message)" id="Delay{{message.ObjectID}}"
mask="9?9:99:99"> mask="9?9:99:99"
name="Delay{{message.ObjectID}}">
</p-inputMask> </p-inputMask>
<div *ngIf="showDelayLabel('Delay'+message.ObjectID, message)" <div (click)="toggleInput($event, 'Delay'+message.ObjectID, true)"
(click)="toggleDelayInput($event, 'Delay'+message.ObjectID,message)"> *ngIf="showLabel('Delay'+message.ObjectID, message) && message.Delay">
<label>{{message.DelayString}}</label> <label>{{message.DelayString}}</label>
</div> </div>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label for="Variance{{message.ObjectID}}">+/-</label> <label for="Variance{{message.ObjectID}}">+/-</label>
<input name="Variance{{message.ObjectID}}" <input [(ngModel)]="message.Variance"
id="Variance{{message.ObjectID}}" [disabled]="showLoader"
[(ngModel)]="message.Variance" [disabled]="showLoader" class="form-control" [id]="'Variance'+message.ObjectID"
type="text" class="form-control"> name="Variance{{message.ObjectID}}" type="text">
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
<label>Business Hours only</label> <label>Business Hours only</label>
<p-checkbox name="BusinessHoursOnly{{message.ObjectID}}" <p-checkbox [(ngModel)]="message.BusinessHoursOnly"
[(ngModel)]="message.BusinessHoursOnly" binary="true"
binary="true"> name="BusinessHoursOnly{{message.ObjectID}}">
</p-checkbox> </p-checkbox>
</div> </div>
</div> </div>
<div class="col-lg-12 col-md-12" *ngIf="stage.UseMessaging"> <div *ngIf="stage.UseMessaging" class="col-lg-12 col-md-12">
<div class="col-md-8"> <div class="col-md-8">
<label>Send</label> <label>Send</label>
<p-dropdown [options]="messageTemplates" filter="true" <p-dropdown [(ngModel)]="message.MessageTemplate" [options]="messageTemplates"
optionLabel="TemplateName" filter="true"
name="messageTemplate{{message.ObjectID}}" name="messageTemplate{{message.ObjectID}}"
[(ngModel)]="message.MessageTemplate"> optionLabel="TemplateName">
<ng-template let-message pTemplate="selectedItem"> <ng-template let-message pTemplate="selectedItem">
<i class="{{getMessageClass(message.value)}}"></i> <i class="{{getMessageClass(message.value)}}"></i>
<span class="dropdown-text">{{message.label}}</span> <span class="dropdown-text">{{message.label}}</span>
...@@ -587,19 +598,19 @@ ...@@ -587,19 +598,19 @@
style="position: relative;height: 25px;"> style="position: relative;height: 25px;">
<i class="{{getMessageClass(selectedMsg.value)}}"></i> <i class="{{getMessageClass(selectedMsg.value)}}"></i>
<div <div
class="dropdown-text">{{selectedMsg.label}}</div> class="dropdown-text">{{selectedMsg.label}}</div>
</div> </div>
</ng-template> </ng-template>
</p-dropdown> </p-dropdown>
</div> </div>
<div class="col-md-4 text-center"> <div class="col-md-4 text-center">
<button type="button" pButton label=" " [disabled]="showLoader" <button (click)="configureMessageTemplate(message)" [disabled]="showLoader" icon="ui-icon-settings" label=" "
icon="ui-icon-settings" pButton
(click)="configureMessageTemplate(message)"></button> type="button"></button>
<button type="button" pButton label=" " [disabled]="showLoader" <button (click)="removeMessage(message, stage)" *ngIf="!message.IsWithdrawalMessage" [disabled]="showLoader" icon="ui-icon-close"
icon="ui-icon-close" label=" "
*ngIf="!message.IsWithdrawalMessage" pButton
(click)="removeMessage(message, stage)"></button> type="button"></button>
</div> </div>
</div> </div>
</div> </div>
...@@ -613,20 +624,20 @@ ...@@ -613,20 +624,20 @@
<!-- End Post Stages --> <!-- End Post Stages -->
</div> </div>
</div> </div>
<div class="ui-g form-group"> <div class="ui-g ui-fluid">
<div class="ui-g-12 ui-md-12"> <div class="ui-g-12 ui-md-12">
<div class="text-center form-group"> <div class="text-center form-group">
<button type="button" value="Cancel" class="btn btn-primary largeBtn greyBtn" <button [disabled]="showLoader" class="btn btn-primary largeBtn greyBtn" routerLink="/admin/list-message-templates"
[disabled]="showLoader" type="button"
routerLink="/admin/list-message-templates">Cancel value="Cancel">Cancel
</button> </button>
<button *ngIf="showSaveBtn()" type="button" value="Save" class="btn btn-primary largeBtn" <button (click)="saveWorkflowTemplate()" *ngIf="showSaveBtn()" [disabled]="showLoader" class="btn btn-primary largeBtn"
(click)="saveWorkflowTemplate()" [disabled]="showLoader"> type="button" value="Save">
Save Save
</button> </button>
<button *ngIf="showSaveCopyBtn()" type="button" value="Save As a Copy" <button (click)="saveWorkflowTemplate(true)" *ngIf="showSaveCopyBtn()" [disabled]="showLoader"
class="btn btn-primary largeBtn" class="btn btn-primary largeBtn"
(click)="saveWorkflowTemplate(true)" [disabled]="showLoader"> type="button" value="Save As a Copy">
Save As a Copy Save As a Copy
</button> </button>
</div> </div>
...@@ -634,8 +645,8 @@ ...@@ -634,8 +645,8 @@
</div> </div>
</div> </div>
</div> </div>
<p-progressSpinner *ngIf="showLoader"></p-progressSpinner>
</form> </form>
<p-progressSpinner *ngIf="showLoader"></p-progressSpinner>
</div> </div>
<p-confirmDialog header="Confirmation" key="RemoveRow" autoZIndex="false" baseZIndex="12000" <p-confirmDialog header="Confirmation" key="RemoveRow" autoZIndex="false" baseZIndex="12000"
icon="pi pi-exclamation-triangle" appendTo="body"> icon="pi pi-exclamation-triangle" appendTo="body">
......
...@@ -67,3 +67,37 @@ p-inputMask { ...@@ -67,3 +67,37 @@ p-inputMask {
.drag-block { .drag-block {
cursor: pointer; cursor: pointer;
} }
.ml-0 {
margin-left: 0px;
}
.templateName {
font-size: 24px;
}
label {
font-family: "Usual-Regular";
font-weight: 300;
}
.calcField {
position: relative;
top: -5px;
}
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.panel-header-input {
width: 95%;
display: inline-block;
position: relative;
top: -8px;
background: #fff;
}
...@@ -32,9 +32,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -32,9 +32,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
subscriptions: Array<Subscription> = []; subscriptions: Array<Subscription> = [];
@ViewChild('form') form: NgForm; @ViewChild('form') form: NgForm;
@ViewChild('messageTemplateDialog') messageTemplateDialog: Dialog; @ViewChild('messageTemplateDialog') messageTemplateDialog: Dialog;
createdObjs; createdObjs = {};
updatedObjs; updatedObjs = {};
deletedObjs; deletedObjs = {};
workflow = new WorkflowTemplateModel(); workflow = new WorkflowTemplateModel();
preStages: Array<WorkflowStageModel> = []; preStages: Array<WorkflowStageModel> = [];
...@@ -54,83 +54,71 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -54,83 +54,71 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
selectedMessageTemplate = null; // object id of type WorkflowMessageModel selectedMessageTemplate = null; // object id of type WorkflowMessageModel
constructor( constructor(
private router: Router, private router: Router,
private activatedRoute: ActivatedRoute, private activatedRoute: ActivatedRoute,
private utilsService: UtilsService, private utilsService: UtilsService,
private saveService: SaveService, private saveService: SaveService,
private appService: AppService, private appService: AppService,
private editWorkflowTemplateService: EditWorkflowTemplateService, private editWorkflowTemplateService: EditWorkflowTemplateService,
private adminPortalLayoutService: AdminPortalLayoutService, private adminPortalLayoutService: AdminPortalLayoutService,
private confirmationService: ConfirmationService private confirmationService: ConfirmationService
) { ) {
super(utilsService); super(utilsService);
} }
ngOnInit(): void { ngOnInit(): void {
this.createdObjs = {};
this.updatedObjs = {};
this.deletedObjs = {};
this.showLoader = true; this.showLoader = true;
if (this.adminPortalLayoutService.userData) {
this.utilsService.resetCounter(); this.initComponent();
} else {
this.startComponent(); this.subscriptions.push(this.adminPortalLayoutService.userDataUpdated
this.subscriptions.push(this.adminPortalLayoutService.userDataUpdated .first()
.subscribe( .subscribe(() => {
() => { this.initComponent();
this.startComponent(); }));
} }
));
} }
startComponent(): void { initComponent(): void {
if (!this.adminPortalLayoutService.userData || this.alreadyExists()) {
return;
}
this.subscriptions.push(this.activatedRoute.params this.subscriptions.push(this.activatedRoute.params
.subscribe( .subscribe((params: Params) => {
(params: Params) => { if (params.id && params.id !== '0') {
this.subscriptions.push( this.editMode = true;
combineLatest( }
this.appService.getTypes('StageTypes'),
this.appService.getTypes('StepTypes', true, 'Please Select'),
this.appService.getTypes('ResponseActions'),
this.appService.getTypes('ApplicantSources')
)
.subscribe(response => {
if (this.alreadyExists()) {
return;
}
this.stageTypes = response[0];
this.stepTypeOptions = response[1];
if (!this.adminPortalLayoutService.getHiringTeamID().HasDiversity) {
this.stepTypeOptions = this.stepTypeOptions.filter(type => type.Value !== 'DIVERSITY');
}
this.responseActions = response[2];
this.applicantSources = response[3];
if (params.id && params.id !== '0') {
this.editMode = true;
this.getWorkflowTemplateByID(params.id);
} else {
this.editMode = false;
this.utilsService.createObject(this.workflow, this.createdObjs);
this.setDefaults();
this.addDefaultStages();
this.stepTypes = [...this.stepTypeOptions];
this.showLoader = false;
}
}) this.subscriptions.push(
combineLatest(
this.appService.getTypes('StageTypes'),
this.appService.getTypes('StepTypes', true, 'Please Select'),
this.appService.getTypes('ResponseActions'),
this.appService.getTypes('ApplicantSources')
)
.subscribe(response => {
this.stageTypes = response[0];
this.stepTypeOptions = response[1];
if (!this.adminPortalLayoutService.getHiringTeamID().HasDiversity) {
this.stepTypeOptions = this.stepTypeOptions.filter(type => type.Value !== 'DIVERSITY');
}
this.responseActions = response[2];
this.applicantSources = response[3];
if (params.id && params.id !== '0') {
this.getWorkflowTemplateByID(params.id);
this.stepTypes = [...this.stepTypeOptions];
} else {
this.utilsService.createObject(this.workflow, this.createdObjs);
this.setDefaults();
this.addDefaultStages();
this.stepTypes = [...this.stepTypeOptions];
this.showLoader = false;
}
})
); );
} }));
));
this.getMessageTemplates(); this.getMessageTemplates();
} }
...@@ -153,103 +141,63 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -153,103 +141,63 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
this.stageTypes.forEach(stage => { this.stageTypes.forEach(stage => {
const index = (!stage.IsPostStage && !stage.IsPreStage) ? topIndex++ : -1; const index = (!stage.IsPostStage && !stage.IsPreStage) ? topIndex++ : -1;
const stageObject = new WorkflowStageModel(`${stage.Description} Stage`, false, stage, index, const stageObject = new WorkflowStageModel(`${stage.Description} Stage`, false, stage, index,
false, this.workflow.ObjectID); false, this.workflow.ObjectID);
this.utilsService.addMultiRefObject(stageObject, this.workflow, 'WorkFlowStages', this.createdObjs); this.utilsService.addMultiRefObject(stageObject, this.workflow, 'WorkFlowStages', this.createdObjs);
}); });
this.reOrderStages(this.filterStages(true, true, true)); this.reOrderStages();
} }
reOrderStages(callback): void { reOrderStages(): void {
this.showLoader = true;
this.workflow.WorkFlowStages this.workflow.WorkFlowStages
.sort((a, b) => a.SortOrder < b.SortOrder ? -1 : a.SortOrder > b.SortOrder ? 1 : 0); .sort((a, b) => a.SortOrder < b.SortOrder ? -1 : a.SortOrder > b.SortOrder ? 1 : 0);
if (callback) { this.filterStages();
callback();
}
this.showLoader = false;
} }
isGeneric(stage: WorkflowStageModel): boolean { isGeneric(stage: WorkflowStageModel): boolean {
return !stage.StageType.IsPostStage && !stage.StageType.IsPreStage; return !stage.StageType.IsPostStage && !stage.StageType.IsPreStage;
} }
filterStages(pre = false, generic = false, post = false): void { filterStages(): void {
if (pre) { this.preStages = this.filteredStages(true, false);
this.preStages = this.filteredStages(true, false);
} this.genericStages = this.filteredStages(false, false)
if (generic) {
this.genericStages = this.filteredStages(false, false)
.sort((a, b) => a.SortOrder > b.SortOrder ? -1 : a.SortOrder < b.SortOrder ? 1 : 0); .sort((a, b) => a.SortOrder > b.SortOrder ? -1 : a.SortOrder < b.SortOrder ? 1 : 0);
}
if (post) { this.postStages = this.filteredStages(false, true);
this.postStages = this.filteredStages(false, true);
}
} }
showSaveBtn(): boolean { showSaveBtn(): boolean {
return this.workflow && this.workflow.ObjectID ? return this.workflow && this.workflow.ObjectID ?
(this.workflow.HiringTeam === this.adminPortalLayoutService.getHiringTeamID().ObjectID || (this.workflow.HiringTeam === this.adminPortalLayoutService.getHiringTeamID().ObjectID ||
!this.editMode) : false; !this.editMode) : false;
} }
showSaveCopyBtn(): boolean { showSaveCopyBtn(): boolean {
return this.workflow && this.workflow.ObjectID ? return this.workflow && this.workflow.ObjectID ?
(!!this.workflow.HiringTeam) : false; (!!this.workflow.HiringTeam) : false;
} }
getStageHeader(stage: WorkflowStageModel): string { getStageHeader(stage: WorkflowStageModel): string {
return `${stage.Name} (${stage.Steps ? stage.Steps.length : 0})`; return `${stage.Name} (${stage.WorkFlowMessages ? stage.WorkFlowMessages.length : 0})`;
} }
showLabel(id: string): boolean { showLabel(id: string): boolean {
return (this.editField[id] === undefined || this.editField[id] === false); return (this.editField[id] === undefined || this.editField[id] === false);
} }
showStageLabel(id: string, stage: WorkflowStageModel): boolean { filteredStages(isPreStage: boolean, isPostStage: boolean): Array<WorkflowStageModel> {
if (stage.StageType.IsPreStage || stage.StageType.IsPostStage) { if(isPreStage){
return true; return this.workflow.WorkFlowStages.filter(stage => stage.StageType.IsPreStage)
} else { } else if(isPostStage){
return this.showLabel(id); return this.workflow.WorkFlowStages.filter(stage => stage.StageType.IsPostStage)
}
}
showStageInput(id: string, stage: WorkflowStageModel): boolean {
if (stage.StageType.IsPreStage || stage.StageType.IsPostStage) {
return false;
} else {
return this.showInput(id);
}
}
showDelayInput(id: string, message: WorkflowMessageModel): boolean {
if (!message.Delay || message.Delay === '') {
return true;
} else {
return this.editField ? (this.editField[id] ? this.editField[id] : true) : true;
}
}
showDelayLabel(id: string, message: WorkflowMessageModel): boolean {
if (!message.Delay || message.Delay === '') {
return false;
} else { } else {
return this.editField ? !this.editField[id] : false; return this.workflow.WorkFlowStages.filter(stage => !stage.StageType.IsPreStage && !stage.StageType.IsPostStage)
} }
} }
filteredStages(isPreStage: boolean, isPostStage: boolean): Array<WorkflowStageModel> {
return this.workflow && this.workflow.WorkFlowStages ? (
(!isPreStage && !isPostStage) ?
this.workflow.WorkFlowStages.filter(stage => !stage.StageType.IsPreStage && !stage.StageType.IsPostStage)
: isPreStage ?
this.workflow.WorkFlowStages.filter(stage => stage.StageType.IsPreStage) :
isPostStage ?
this.workflow.WorkFlowStages.filter(stage => stage.StageType.IsPostStage) : []) : [];
}
emailResponseSelected(): boolean { emailResponseSelected(): boolean {
return this.workflow.ApplicationResponseAction && return this.workflow.ApplicationResponseAction &&
this.workflow.ApplicationResponseAction.Value === 'EMAIL_RESPONSE'; this.workflow.ApplicationResponseAction.Value === 'EMAIL_RESPONSE';
} }
sortWorkFlowMessage(): void { sortWorkFlowMessage(): void {
...@@ -262,72 +210,11 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -262,72 +210,11 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
} }
} }
showInput(id: string): boolean { toggleInput(event, fieldName, value): void {
return this.editField && !!this.editField[id];
}
toggleInput(event, fieldName): void {
this.utilsService.clearErrorMessages();
if (event.type === 'blur') {
if (!this.form.controls[fieldName].invalid) {
this.editField[fieldName] = false;
} else {
this.utilsService.showAllErrorMessages();
}
} else {
this.editField[fieldName] = true;
setTimeout(() => {
try {
document.getElementById(`${fieldName}Id`)
.focus();
document.getElementById(`${fieldName}Id`)
.getElementsByTagName('input')[0]
.focus();
} catch (e) {
// ignore this.
}
}, 0);
}
}
toggleStageInput(event, fieldName, stage: WorkflowStageModel): void {
this.utilsService.clearErrorMessages();
if (event.type === 'blur') {
if (!this.form.controls[fieldName].invalid) {
this.editField[fieldName] = false;
} else {
this.utilsService.showAllErrorMessages();
}
} else {
if (stage.StageType.IsPreStage || stage.StageType.IsPostStage) {
return;
}
this.editField[fieldName] = true;
setTimeout(() => {
try {
document.getElementById(`${fieldName}Id`)
.focus();
document.getElementById(`${fieldName}Id`)
.getElementsByTagName('input')[0]
.focus();
} catch (e) {
// ignore this.
}
}, 0);
}
}
toggleDelayInput(event, fieldName, message: WorkflowMessageModel): void {
this.utilsService.clearErrorMessages(); this.utilsService.clearErrorMessages();
if (event.type === 'blur') { if (value === false) {
if (!message.Delay || message.Delay === '') {
return;
}
if (!this.form.controls[fieldName].invalid) { if (!this.form.controls[fieldName].invalid) {
this.editField[fieldName] = false; this.editField[fieldName] = false;
this.generateDelayString(message);
this.sortWorkFlowMessage();
} else { } else {
this.utilsService.showAllErrorMessages(); this.utilsService.showAllErrorMessages();
} }
...@@ -336,10 +223,10 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -336,10 +223,10 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
setTimeout(() => { setTimeout(() => {
try { try {
document.getElementById(`${fieldName}Id`) document.getElementById(`${fieldName}Id`)
.focus(); .focus();
document.getElementById(`${fieldName}Id`) document.getElementById(`${fieldName}Id`)
.getElementsByTagName('input')[0] .getElementsByTagName('input')[0]
.focus(); .focus();
} catch (e) { } catch (e) {
// ignore this. // ignore this.
} }
...@@ -349,7 +236,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -349,7 +236,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
generateDelayString(message: WorkflowMessageModel): void { generateDelayString(message: WorkflowMessageModel): void {
const delay = message.Delay.replace(/_/g, '') const delay = message.Delay.replace(/_/g, '')
.split(':'); .split(':');
delay[0] = delay[0] || ''; delay[0] = delay[0] || '';
delay[1] = delay[1] || ''; delay[1] = delay[1] || '';
...@@ -365,6 +252,8 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -365,6 +252,8 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
message.DelayString = `${delay[0]}d: ${delay[1]}h: ${delay[2]}m`; message.DelayString = `${delay[0]}d: ${delay[1]}h: ${delay[2]}m`;
message.DelayMinutes = parseInt(delay[0], 10) * 24 * 60 + parseInt(delay[1], 10) * 60 + parseInt(delay[1], 10); message.DelayMinutes = parseInt(delay[0], 10) * 24 * 60 + parseInt(delay[1], 10) * 60 + parseInt(delay[1], 10);
} }
this.sortWorkFlowMessage();
} }
getMessageTemplates(callback = null): void { getMessageTemplates(callback = null): void {
...@@ -378,25 +267,25 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -378,25 +267,25 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
}; };
this.subscriptions.push( this.subscriptions.push(
combineLatest( combineLatest(
this.editWorkflowTemplateService.getMessageTemplates([], myMsgParams), this.editWorkflowTemplateService.getMessageTemplates([], myMsgParams),
this.editWorkflowTemplateService.getMessageTemplates([], sharedMsgParams) this.editWorkflowTemplateService.getMessageTemplates([], sharedMsgParams)
)
.subscribe(
(response: [Array<MessageTemplateModel>, Array<MessageTemplateModel>]) => {
const myTemplates = response[0].filter(message => message.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.messageTemplates = [...myTemplates, ...response[1]];
this.addNewOptionToMessageTemplate();
if (callback) {
// called when a new message template is created
callback();
}
},
error => {
this.utilsService.handleError(error);
}
) )
.subscribe(
(response: [Array<MessageTemplateModel>, Array<MessageTemplateModel>]) => {
const myTemplates = response[0].filter(message => message.HiringTeam ===
this.adminPortalLayoutService.getHiringTeamID().ObjectID);
this.messageTemplates = [...myTemplates, ...response[1]];
this.addNewOptionToMessageTemplate();
if (callback) {
// called when a new message template is created
callback();
}
},
error => {
this.utilsService.handleError(error);
}
)
); );
} }
...@@ -438,7 +327,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -438,7 +327,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
if (found) { if (found) {
this.workflow.WorkFlowStages.forEach(wfStage => { this.workflow.WorkFlowStages.forEach(wfStage => {
const messageTemplate = wfStage.WorkFlowMessages.find(wfMessage => wfMessage.ObjectID === const messageTemplate = wfStage.WorkFlowMessages.find(wfMessage => wfMessage.ObjectID ===
this.selectedMessageTemplate); this.selectedMessageTemplate);
if (messageTemplate) { if (messageTemplate) {
messageTemplate.MessageTemplate = found; messageTemplate.MessageTemplate = found;
} }
...@@ -452,28 +341,6 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -452,28 +341,6 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
this.displayNewMessageTemplate = false; this.displayNewMessageTemplate = false;
} }
populateMessageTemplates(template: MessageTemplateModel): void {
this.messageTemplates.splice(this.messageTemplates.length - 1, 1);
this.messageTemplates.push(template);
}
availableStepTypes(): Array<StepTypeEnum> {
const availableStepTypes = this.stepTypeOptions;
if (this.workflow.WorkFlowStages) {
this.workflow.WorkFlowStages.forEach(stage => {
if (stage.Steps) {
stage.Steps.forEach(step => {
if (availableStepTypes.indexOf(step.StepType) > -1) {
availableStepTypes.slice(availableStepTypes.indexOf(step.StepType), 0);
}
});
}
});
}
return availableStepTypes;
}
stageMessagesCount(stage: WorkflowStageModel): string { stageMessagesCount(stage: WorkflowStageModel): string {
return `Message Schedule (${(stage && stage.WorkFlowMessages) ? stage.WorkFlowMessages.length : 0})`; return `Message Schedule (${(stage && stage.WorkFlowMessages) ? stage.WorkFlowMessages.length : 0})`;
} }
...@@ -526,7 +393,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -526,7 +393,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
key: 'RemoveRow', key: 'RemoveRow',
accept: () => { accept: () => {
this.utilsService.removeMultiRefObject(message, stage, 'WorkFlowMessages', this.createdObjs, this.utilsService.removeMultiRefObject(message, stage, 'WorkFlowMessages', this.createdObjs,
this.updatedObjs, this.deletedObjs); this.updatedObjs, this.deletedObjs);
} }
}); });
} }
...@@ -534,9 +401,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -534,9 +401,9 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
addStage(): void { addStage(): void {
const stageType = this.stageTypes.find(type => !type.IsPreStage && !type.IsPostStage); const stageType = this.stageTypes.find(type => !type.IsPreStage && !type.IsPostStage);
const stage = new WorkflowStageModel(`${stageType.Description} Stage`, false, stageType, this.getStageOrder(), const stage = new WorkflowStageModel(`${stageType.Description} Stage`, false, stageType, this.getStageOrder(),
false, this.workflow.ObjectID); false, this.workflow.ObjectID);
this.utilsService.addMultiRefObject(stage, this.workflow, 'WorkFlowStages', this.createdObjs); this.utilsService.addMultiRefObject(stage, this.workflow, 'WorkFlowStages', this.createdObjs);
this.filterStages(false, true, false); this.reOrderStages();
} }
removeStage(stage: WorkflowStageModel): void { removeStage(stage: WorkflowStageModel): void {
...@@ -548,7 +415,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -548,7 +415,7 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
accept: () => { accept: () => {
if (this.isGeneric(stage)) { if (this.isGeneric(stage)) {
const decrement = this.workflow.WorkFlowStages.filter(stg => this.isGeneric(stg)) const decrement = this.workflow.WorkFlowStages.filter(stg => this.isGeneric(stg))
.length - stage.SortOrder; .length - stage.SortOrder;
if (decrement > 0) { if (decrement > 0) {
this.workflow.WorkFlowStages.map(stg => { this.workflow.WorkFlowStages.map(stg => {
if (this.isGeneric(stg) && stg.SortOrder > decrement) { if (this.isGeneric(stg) && stg.SortOrder > decrement) {
...@@ -556,18 +423,18 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -556,18 +423,18 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
} }
}); });
} }
this.reOrderStages(this.filterStages(false, true, false)); this.reOrderStages();
} }
this.utilsService.removeMultiRefObject(stage, this.workflow, 'WorkFlowStages', this.createdObjs, this.utilsService.removeMultiRefObject(stage, this.workflow, 'WorkFlowStages', this.createdObjs,
this.updatedObjs, this.deletedObjs); this.updatedObjs, this.deletedObjs);
} }
}); });
} }
getStageOrder(): number { getStageOrder(): number {
return this.workflow && this.workflow.WorkFlowStages ? ( return this.workflow && this.workflow.WorkFlowStages ? (
this.workflow.WorkFlowStages.filter(stage => this.isGeneric(stage)) this.workflow.WorkFlowStages.filter(stage => this.isGeneric(stage))
.length + 1 .length + 1
) : 0; ) : 0;
} }
...@@ -590,33 +457,38 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -590,33 +457,38 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
[ASSOCS.WORKFLOW_STAGE, ASSOCS.WORKFLOW_MESSAGE, ASSOCS.WORKFLOW_STEP].join('.')]; [ASSOCS.WORKFLOW_STAGE, ASSOCS.WORKFLOW_MESSAGE, ASSOCS.WORKFLOW_STEP].join('.')];
this.subscriptions.push(this.editWorkflowTemplateService.getWorkflowTemplateByID(id, assoc) this.subscriptions.push(this.editWorkflowTemplateService.getWorkflowTemplateByID(id, assoc)
.subscribe( .subscribe(
data => { data => {
this.workflow = data; this.workflow = data;
this.updatedObjs[this.workflow.ObjectID] = this.workflow; this.updatedObjs[this.workflow.ObjectID] = this.workflow;
this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, this.workflow.WorkFlowStages); this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, this.workflow.WorkFlowStages);
this.workflow.WorkFlowStages.forEach(stage => { this.workflow.WorkFlowStages = this.workflow.WorkFlowStages || [];
if (stage.WorkFlowMessages) { this.workflow.WorkFlowStages.forEach(stage => {
this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, stage.WorkFlowMessages); this.updatedObjs[stage.ObjectID] = stage
}
if (stage.Steps) { stage.Steps = stage.Steps || [];
this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, stage.Steps); stage.WorkFlowMessages = stage.WorkFlowMessages || [];
this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, stage.WorkFlowMessages);
this.utilsService.addObjsToJSONByObjectID(this.updatedObjs, stage.Steps);
});
this.reOrderStages();
this.showLoader = false;
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
} }
}); )
this.reOrderStages(this.filterStages(true, true, true));
this.showLoader = false;
},
error => {
this.showLoader = false;
this.utilsService.handleError(error);
}
)
); );
} }
getMessageClass(message: MessageTemplateModel): string { getMessageClass(message: MessageTemplateModel): string {
return message.TemplateType ? `ui-icon-${message.TemplateType.Value.toLowerCase()}` : return message.TemplateType ? `ui-icon-${message.TemplateType.Value.toLowerCase()}` :
'ui-icon-sms'; 'ui-icon-sms';
} }
saveWorkflowTemplate(saveCopy = false, testing = true): void { saveWorkflowTemplate(saveCopy = false, testing = true): void {
...@@ -628,23 +500,19 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn ...@@ -628,23 +500,19 @@ export class EditWorkflowTemplateComponent extends BaseComponent implements OnIn
} else { } else {
this.showLoader = true; this.showLoader = true;
this.subscriptions.push(this.saveService.saveObjects(service, this.createdObjs, this.updatedObjs, this.deletedObjs) this.subscriptions.push(this.saveService.saveObjects(service, this.createdObjs, this.updatedObjs, this.deletedObjs)
.subscribe( .subscribe(
() => { () => {
this.utilsService.handleSuccess(); this.utilsService.handleSuccess();
this.router.navigate(['/admin/list-workflow-templates']); this.router.navigate(['/admin/list-workflow-templates']);
}, },
error => { error => {
this.showLoader = false; this.showLoader = false;
this.utilsService.handleError(error); this.utilsService.handleError(error);
} }
) )
); );
} }
} }
alreadyExists(): boolean {
return Object.keys(this.createdObjs).length > 0 || Object.keys(this.updatedObjs).length > 0;
}
// tslint:disable-next-line:max-file-line-count // tslint:disable-next-line:max-file-line-count
} }
...@@ -11953,3 +11953,37 @@ label.select-all-jobs:after { ...@@ -11953,3 +11953,37 @@ label.select-all-jobs:after {
/* /*
End of Manage Customer End of Manage Customer
*/ */
body .ui-selectbutton .ui-button.ui-state-active {
background-color: #667281 !important;
}
body .ui-selectbutton .ui-button {
background-color: #fff !important;
}
.ui-selectbutton .ui-button span {
color: #000 !important;
}
.ui-selectbutton .ui-button.ui-state-active span{
color: #fff !important;
}
.mb-10 {
margin-bottom: 10px;
}
body .ui-button {
background-color: #667281;
}
body .ui-widget-header {
background-color: #667281;
border: 1px solid #667281;
}
body .ui-dropdown-panel .ui-dropdown-filter-container {
background-color: #667281;
}
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
} }
.ui-panel-content { .ui-panel-content {
background-color: #F5F7F8; background-color: white;
padding: 65px 10.5% !important; padding: 65px 10.5% !important;
} }
} }
...@@ -139,14 +139,15 @@ ...@@ -139,14 +139,15 @@
/* Overriding switch input styles */ /* Overriding switch input styles */
.ui-inputswitch-slider:before { .ui-inputswitch-slider:before {
height: 17px !important; height: 16px !important;
width: 17px !important; width: 18px !important;
left: 3px !important; left: 4px !important;
background: white; background: white;
top: 2px;
} }
.ui-inputswitch { .ui-inputswitch {
height: 22px !important; height: 20px !important;
width: 40px !important !important; width: 40px !important !important;
border-color: #667281 !important; border-color: #667281 !important;
background-color: #667281 !important; background-color: #667281 !important;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment