/*-
* ============LICENSE_START=======================================================
* SDC
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
///
module Sdc.Directives {
'use strict';
export interface IWizardStep {
name: string;
selected?: boolean;
valid?:boolean;
enabled?:boolean;
callback: Function;
}
export interface ISdcWizardStepScope extends ng.IScope {
steps:Array;
control:any;
internalControl:any;
stepClicked(stepName:string):void;
controllerStepClicked(stepName:string):void;
setStepValidity(stepName:string, valid:boolean):void;
controllerSetStepValidity(step:IWizardStep, valid:boolean):void;
}
export interface SdcWizardStepMethods {
unSelectAllSteps():void;
selectStep(step:IWizardStep):void;
}
export class SdcWizardStepDirective implements ng.IDirective {
constructor(private $templateCache:ng.ITemplateCacheService) {
}
scope = {
steps: '=',
control: '='
};
public replace = false;
public restrict = 'E';
public transclude = true;
public controller = SdcWizardStepDirectiveController;
template = ():string => {
return this.$templateCache.get('/app/scripts/directives/utils/wizard_steps/sdc-wizard-steps.html');
};
link = (scope:ISdcWizardStepScope, $elem:JQuery, attr:any, controller:SdcWizardStepDirectiveController) => {
scope.internalControl = scope.control || {};
scope.internalControl.stepClicked = (step:string):void => {
scope.controllerStepClicked(step);
};
scope.internalControl.setStepValidity = (step:IWizardStep, valid:boolean):void => {
scope.controllerSetStepValidity(step, valid);
};
}
public static factory = ($templateCache:ng.ITemplateCacheService)=> {
return new SdcWizardStepDirective($templateCache);
};
}
SdcWizardStepDirective.factory.$inject = ['$templateCache'];
export class SdcWizardStepDirectiveController {
static $inject = ['$element', '$scope'];
methods:SdcWizardStepMethods = {};
constructor(public $element: JQuery,
public $scope: ISdcWizardStepScope) {
this.initMethods();
this.initScope();
}
private initScope = ():void => {
this.$scope.controllerStepClicked = (stepName:string):void => {
let selectedStep:IWizardStep = _.find(this.$scope.steps, function (item) {
return item.name === stepName;
});
if (selectedStep && selectedStep.enabled===true){
let result:boolean = selectedStep.callback();
if (result===true){
this.methods.unSelectAllSteps();
this.methods.selectStep(selectedStep);
}
}
};
this.$scope.controllerSetStepValidity = (step:IWizardStep, valid:boolean):void => {
step.valid=valid;
};
};
private initMethods = ():void => {
this.methods.unSelectAllSteps = ():void => {
this.$scope.steps.forEach(function (step) {
step.selected = false;
});
}
this.methods.selectStep = (step:IWizardStep):void => {
if (step.enabled===true){
step.selected=true;
}
}
};
}
}