blob: 96e41620d37cd9a688a4e9968f5697c68401157c [file] [log] [blame]
Matteo Scandolo9d7940c2017-01-19 18:28:43 -08001import * as $ from 'jquery';
Matteo Scandolo4222a432017-01-23 12:18:40 -08002import {IXosComponentInjectorService} from '../services/helpers/component-injector.helpers';
Matteo Scandolo9d7940c2017-01-19 18:28:43 -08003
4export interface IXosSidePanelService {
5 open(): void;
6 close(): void;
7 injectComponent(componentName: string, attributes?: any, transclude?: string): void;
Matteo Scandolo5053cbe2017-01-31 17:37:56 -08008 removeInjectedComponents(): void;
Matteo Scandolo9d7940c2017-01-19 18:28:43 -08009}
10
11export class XosSidePanel implements IXosSidePanelService {
Matteo Scandolo5053cbe2017-01-31 17:37:56 -080012 static $inject = ['$rootScope', '$compile', '$timeout', 'XosComponentInjector'];
Matteo Scandolo9d7940c2017-01-19 18:28:43 -080013 public sidePanelElName = 'xos-side-panel';
14 public sidePanelElClass = '.xos-side-panel';
15 public sidePanelEl: JQuery;
16
17 constructor (
18 private $rootScope: ng.IRootScopeService,
Matteo Scandolo4222a432017-01-23 12:18:40 -080019 private $compile: ng.ICompileService,
Matteo Scandolo5053cbe2017-01-31 17:37:56 -080020 private $timeout: ng.ITimeoutService,
Matteo Scandolo4222a432017-01-23 12:18:40 -080021 private XosComponentInjector: IXosComponentInjectorService
Matteo Scandolo9d7940c2017-01-19 18:28:43 -080022 ) {
23 this.sidePanelEl = $(`${this.sidePanelElName} > ${this.sidePanelElClass}`);
24 }
25
26 public open() {
27 $(`${this.sidePanelElName} > ${this.sidePanelElClass}`).addClass('open');
28 };
29
30 public close() {
31 $(`${this.sidePanelElName} > ${this.sidePanelElClass}`).removeClass('open');
32 };
33
34 public injectComponent(componentName: string, attributes?: any, transclude?: string) {
Matteo Scandolo4222a432017-01-23 12:18:40 -080035 this.XosComponentInjector.injectComponent('#side-panel-container', componentName, attributes, transclude, true);
Matteo Scandolo9d7940c2017-01-19 18:28:43 -080036 this.open();
37 }
Matteo Scandolo5053cbe2017-01-31 17:37:56 -080038
39 public removeInjectedComponents() {
40 this.close();
41 this.$timeout(() => {
42 this.XosComponentInjector.removeInjectedComponents('#side-panel-container');
43 }, 500);
44 }
Matteo Scandolo9d7940c2017-01-19 18:28:43 -080045}