Skip to content

Commit 96fa9aa

Browse files
authored
Merge pull request #5 from vdanyliv/develop
0.0.4
2 parents 27b808f + 61a0463 commit 96fa9aa

File tree

9 files changed

+43
-32
lines changed

9 files changed

+43
-32
lines changed

README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
# ngx-tiny-slider
2-
Angular component that gives you possibility to use [tiny-slider](https://www.npmjs.com/package/tiny-slider) library.
2+
Angular component that gives you possibility to use tiny slider library.
33
1. Demo [page](http://ganlanyuan.github.io/tiny-slider/demo/)
44

55
# How to use
6-
76
1. Import NgxTinySliderModule into your module
87
2. Use in your component template <ngx-tiny-slider>
98

9+
# Whats new on 0.0.4?
10+
1. Added component OnDestroy hook, that will handle slider instance destroying
11+
1012
# Usage example
1113
Your component template
1214
```html
@@ -61,17 +63,16 @@ export class AppComponent implements OnInit {
6163
arrowKeys: true,
6264
autoWidth: true,
6365
gutter: 10,
64-
centerNavigation: true,
65-
customControlsStyle: true,
66-
controlsText: ['<', '>'],
66+
controlsText: ['<', '>']
6767
};
6868
}
6969
}
7070

7171
```
7272

7373
# Additional options
74-
1. waiteForDom {Boolean} - in case of using dynamic content use this property, trigger domReady subject when your content ready
75-
2. domReady {Subject} - provide possibility to initialize component manually
76-
3. customControlsStyle {Boolean} - Custom component style
77-
4. centerNavigation {Boolean} - Navigation on center of the slider container
74+
1. domReady {Subject} - provide possibility to initialize component manually
75+
76+
#### Deprecated and removed (use tiny-slider options in case if you need extra customisation)
77+
1. customControlsStyle {Boolean} - Custom component style
78+
2. centerNavigation {Boolean} - Navigation on center of the slider container

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"rxjs": "~6.3.3",
2626
"tiny-slider": "^2.9.1",
2727
"zone.js": "~0.8.26",
28-
"ngx-tiny-slider": "file:projects/ngx-tiny-slider/dist/ngx-tiny-slider"
28+
"ngx-tiny-slider": "0.0.3"
2929
},
3030
"devDependencies": {
3131
"@angular-devkit/build-angular": "~0.10.0",

projects/ngx-tiny-slider/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ngx-tiny-slider",
3-
"version": "0.0.3",
3+
"version": "0.0.4",
44
"dependencies": {
55
"tiny-slider": "^2.9.1"
66
},

projects/ngx-tiny-slider/src/lib/interfaces/ngx-tiny-slider-settings.interface.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,4 @@ import {TinySliderSettings} from 'tiny-slider';
22

33
export interface NgxTinySliderSettingsInterface extends TinySliderSettings {
44
waiteForDom?: boolean;
5-
centerNavigation?: boolean;
6-
customControlsStyle?: boolean;
75
}

projects/ngx-tiny-slider/src/lib/ngx-tiny-slider.component.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
<div class="slider-wrapper"
2-
[ngClass]="{'slider-wrapper-nav-center': config?.centerNavigation, 'slider-wrapper-custom-nav-style': config?.customControlsStyle}">
1+
<div class="slider-wrapper">
32
<div class="slide-items" #slideItems>
43
<ng-content select=".items"></ng-content>
54
</div>
Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import {Component, Input, OnInit, ViewChild, ViewEncapsulation} from '@angular/core';
1+
import {Component, Input, OnDestroy, OnInit, ViewChild, ViewEncapsulation} from '@angular/core';
22

33
import {Subject} from 'rxjs';
4-
import {first} from 'rxjs/operators';
4+
import {first, takeWhile} from 'rxjs/operators';
55

66
import {NgxTinySliderService} from './ngx-tiny-slider.service';
77
import {NgxTinySliderSettingsInterface} from './interfaces/ngx-tiny-slider-settings.interface';
@@ -12,18 +12,23 @@ import {NgxTinySliderSettingsInterface} from './interfaces/ngx-tiny-slider-setti
1212
styleUrls: ['ngx-tiny-slider.component.scss'],
1313
encapsulation: ViewEncapsulation.None
1414
})
15-
export class NgxTinySliderComponent implements OnInit {
15+
export class NgxTinySliderComponent implements OnInit, OnDestroy {
1616
@Input() config: NgxTinySliderSettingsInterface;
1717
@ViewChild('slideItems') slideItemsContainerRef;
1818

19+
private sliderInstance;
20+
private aliveObservable = true;
21+
1922
public domReady = new Subject();
2023
private defaultConfig = this.ngxTinySliderService.getDefaultConfig();
2124

2225
constructor(private ngxTinySliderService: NgxTinySliderService) {
2326
}
2427

2528
ngOnInit() {
26-
this.extendConfig();
29+
if (this.config) {
30+
this.extendConfig();
31+
}
2732

2833
if (this.config.waiteForDom) {
2934
this.listenForDomReady();
@@ -32,19 +37,30 @@ export class NgxTinySliderComponent implements OnInit {
3237
}
3338
}
3439

40+
ngOnDestroy() {
41+
if (this.config.waiteForDom) {
42+
this.aliveObservable = false;
43+
}
44+
45+
if (this.sliderInstance && this.sliderInstance.destroy) {
46+
this.sliderInstance.destroy();
47+
}
48+
}
49+
3550
private listenForDomReady() {
3651
this.domReady
37-
.pipe(first())
38-
.subscribe(() => {
39-
this.initSlider();
40-
});
52+
.pipe(
53+
first(),
54+
takeWhile(() => this.aliveObservable)
55+
)
56+
.subscribe(() => this.initSlider());
4157
}
4258

4359
private extendConfig() {
4460
Object.keys(this.config).forEach(i => this.defaultConfig[i] = this.config[i]);
4561
}
4662

4763
private initSlider() {
48-
this.ngxTinySliderService.initSlider(this.defaultConfig, this.slideItemsContainerRef);
64+
this.sliderInstance = this.ngxTinySliderService.initSlider(this.defaultConfig, this.slideItemsContainerRef);
4965
}
5066
}

projects/ngx-tiny-slider/src/lib/ngx-tiny-slider.service.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ export class NgxTinySliderService {
1010
}
1111

1212
initSlider(config, elementRef: ElementRef) {
13-
return tns(Object.assign({container: elementRef.nativeElement}, config));
13+
const extendConfig = Object.assign({container: elementRef.nativeElement}, config);
14+
return tns(extendConfig);
1415
}
1516

1617
getDefaultConfig() {
1718
return {
1819
items: 3,
1920
mode: 'carousel',
2021
controlsPosition: 'bottom',
21-
speed: 400,
22+
speed: 400
2223
};
2324
}
2425
}

src/app/app.component.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {Component, OnInit} from '@angular/core';
2-
import {NgxTinySliderSettingsInterface} from '../../projects/ngx-tiny-slider/dist/ngx-tiny-slider';
3-
import {NgxTinySliderSettingsInterface} from 'ngx-tiny-slider';
2+
import {NgxTinySliderSettingsInterface} from '../../projects/ngx-tiny-slider/src/lib/interfaces/ngx-tiny-slider-settings.interface';
43

54
@Component({
65
selector: 'app-root',
@@ -16,8 +15,6 @@ export class AppComponent implements OnInit {
1615
autoWidth: true,
1716
gutter: 10,
1817
nav: false,
19-
centerNavigation: true,
20-
customControlsStyle: true,
2118
controlsText: ['<', '>']
2219
};
2320
}

src/app/app.module.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import {NgModule} from '@angular/core';
22
import {BrowserModule} from '@angular/platform-browser';
33

4-
import {NgxTinySliderModule} from 'ngx-tiny-slider';
5-
64
import {AppComponent} from './app.component';
5+
import {NgxTinySliderModule} from '../../projects/ngx-tiny-slider/src/lib/ngx-tiny-slider.module';
76

87
@NgModule({
98
imports: [

0 commit comments

Comments
 (0)