aboutsummaryrefslogtreecommitdiffstats
path: root/stories/angular/infinite-scroll.stories.ts
diff options
context:
space:
mode:
authorIsrael Lavi <il0695@att.com>2018-08-07 10:54:17 +0300
committerIsrael Lavi <il0695@att.com>2018-08-07 11:06:44 +0300
commitb2a3acea0d0f66028c9ce5fad02d4ecc64abf70c (patch)
tree8d70110f34cb845965c42a5915e950bca967d2c3 /stories/angular/infinite-scroll.stories.ts
parent05b37297177e8a342668c15e5d6f738b51f7aedd (diff)
Initial commit.
Adding files needed for Linux Foundation. Change-Id: I9f2b4851a5ae01f83800c7f8bab8608a2221c730 Issue-ID: SDC-1608 Signed-off-by: Israel Lavi <il0695@att.com>
Diffstat (limited to 'stories/angular/infinite-scroll.stories.ts')
-rw-r--r--stories/angular/infinite-scroll.stories.ts181
1 files changed, 181 insertions, 0 deletions
diff --git a/stories/angular/infinite-scroll.stories.ts b/stories/angular/infinite-scroll.stories.ts
new file mode 100644
index 0000000..3a53a4f
--- /dev/null
+++ b/stories/angular/infinite-scroll.stories.ts
@@ -0,0 +1,181 @@
+import { storiesOf } from '@storybook/angular';
+import { withKnobs, text, number, boolean, array, select, color, date, button } from '@storybook/addon-knobs';
+import { withNotes } from '@storybook/addon-notes';
+import { action, configureActions } from '@storybook/addon-actions';
+import { moduleMetadata } from '@storybook/angular';
+import { InfiniteScrollDirective } from '../../src/angular/components';
+
+const basicStyle = `
+ .scroll-container {
+ margin: 12px;
+ border: none;
+ padding: 5px;
+ width: 200px;
+ height: 100px;
+ overflow: auto;
+ font-size: 20px !important;
+ box-shadow: #666 1px 1px 10px;
+ }
+ .example-source {
+ background: #eeeeee;
+ padding: 10px;
+ border: 1px solid #999999;
+ }
+ .example-source pre {
+ overflow: hidden;
+ background: #dddddd;
+ margin-top: 5px;
+ padding: 5px;
+ user-select: text;
+ }
+`;
+
+const makeBasicStyleDistance = (distance: number) => `
+ .scroll-container::after {
+ display: block;
+ content: '';
+ height: ${distance}px;
+ background: red;
+ }
+`;
+
+storiesOf('Infinite-Scroll', module)
+ .addDecorator(withKnobs)
+ .addDecorator(withNotes)
+ .addDecorator(
+ moduleMetadata({
+ declarations: [
+ InfiniteScrollDirective
+ ],
+ imports: [
+ ]
+ })
+ )
+ .add('Simple', () => {
+ const _infiniteScroll = text('infiniteScroll', 'Event throws when scroll reach down');
+
+ return {
+ props: {
+ hitBottomCount: 0,
+ onScrollHitBottom: () => {
+ action('scroll hit bottom')();
+ this.hitBottomCount++;
+ },
+ numLines: Array(20).fill(null)
+ },
+ styles: [basicStyle],
+ template: `
+ <div (infiniteScroll)="onScrollHitBottom()" class="scroll-container">
+ <div *ngFor="let _i of numLines; let i=index">
+ Line {{i + 1}}
+ </div>
+ </div>
+ Hit bottom for <b>{{hitBottomCount}}</b> times!
+ `
+ }
+ },
+ { notes: `<h2>Infinite-Scroll</h2>
+ Simple infinite scroll, throws event when reach bottom (see in action logger).
+ Use the KNOBS tab to change values.`
+ }
+)
+.add('With bottom distance', () => {
+ const _infiniteScrollDistance = number('infiniteScrollDistance', 20);
+ const _infiniteScroll = text('infiniteScroll', 'Event throws when scroll reach down');
+
+ return {
+ props: {
+ hitBottomCount: 0,
+ onScrollHitBottom: () => {
+ action('scroll hit bottom')();
+ this.hitBottomCount++;
+ },
+ numLines: Array(20).fill(null),
+ _infiniteScrollDistance
+ },
+ styles: [basicStyle, makeBasicStyleDistance(50)],
+ template: `
+ <div (infiniteScroll)="onScrollHitBottom()" [infiniteScrollDistance]="_infiniteScrollDistance" class="scroll-container">
+ <div *ngFor="let _i of numLines; let i=index">
+ Line {{i + 1}}
+ </div>
+ </div>
+ Hit bottom for <b>{{hitBottomCount}}</b> times!
+ `
+ }
+ },
+ { notes: `<h2>Infinite-Scroll</h2>
+ Simple infinite scroll with distance at the bottom, throws event when reach bottom (see in action logger).
+ Use the KNOBS tab to change values.`
+ }
+)
+.add('Expanding content synchrony', () => {
+ const _infiniteScrollDistance = number('infiniteScrollDistance', 20);
+ const _infiniteScroll = text('infiniteScroll', 'Event throws when scroll reach down');
+
+ return {
+ props: {
+ hitBottomCount: 0,
+ onScrollHitBottom: () => {
+ action('scroll hit bottom')();
+ this.hitBottomCount++;
+ this.insertPageImmediately(this.pageCount + 1);
+ this.pageCount++;
+ },
+ numLines: Array(20).fill(null),
+ _infiniteScrollDistance
+ },
+ styles: [basicStyle, makeBasicStyleDistance(50)],
+ template: `
+ <div (infiniteScroll)="onScrollHitBottom()" [infiniteScrollDistance]="_infiniteScrollDistance" class="scroll-container">
+ <div *ngFor="let _i of numLines; let i=index">
+ Line {{i + 1}}
+ </div>
+ </div>
+ Hit bottom for <b>{{hitBottomCount}}</b> times!
+ `
+ }
+ },
+ { notes: `<h2>Infinite-Scroll</h2>
+ Simple infinite scroll with distance at the bottom, throws event when reach bottom (see in action logger).
+ Use the KNOBS tab to change values.`
+ }
+)
+.add('Expanding content asynchrony', () => {
+ const _infiniteScrollDistance = number('infiniteScrollDistance', 20);
+ const _infiniteScroll = text('infiniteScroll', 'Event throws when scroll reach down');
+
+ return {
+ props: {
+ hitBottomCount: 0,
+ onScrollHitBottom: () => {
+ action('scroll hit bottom')();
+ this.hitBottomCount++;
+ if (!this.isPageLoading) {
+ this.isPageLoading = true;
+ this.loadPageAsync(this.pageCount + 1, 5000).then(() => {
+ this.pageCount++;
+ this.isPageLoading = false;
+ });
+ }
+ },
+ numLines: Array(20).fill(null),
+ _infiniteScrollDistance
+ },
+ styles: [basicStyle, makeBasicStyleDistance(50)],
+ template: `
+ <div (infiniteScroll)="onScrollHitBottom()" [infiniteScrollDistance]="_infiniteScrollDistance" class="scroll-container">
+ <div *ngFor="let _i of numLines; let i=index">
+ Line {{i + 1}}
+ </div>
+ </div>
+ Hit bottom for <b>{{hitBottomCount}}</b> times!<br/>
+ Loaded {{pageCount}} pages! <span *ngIf="isPageLoading">LOADING page #{{this.pageCount + 1}} ...</span>
+ `
+ }
+ },
+ { notes: `<h2>Infinite-Scroll</h2>
+ Simple infinite scroll with distance at the bottom, throws event when reach bottom (see in action logger).
+ Use the KNOBS tab to change values.`
+ }
+)