From baa7f3d2ff7083ceaf77f9dd95b0f42cb0b0d4f9 Mon Sep 17 00:00:00 2001 From: Oleksandr Sabov Date: Thu, 7 Feb 2019 11:47:55 +0100 Subject: [PATCH 1/6] feat: add AccordionSkeleton and SkeletonText components --- .../_cv-accordion-item-skeleton.vue | 38 +++++++++++++++++++ .../cv-accordion/cv-accordion-skeleton.vue | 27 +++++++++++++ .../cv-accordion/cv-accordion-story.js | 23 ++++++++++- .../cv-skeleton-text/cv-skeleton-text.vue | 19 ++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/components/cv-accordion/_cv-accordion-item-skeleton.vue create mode 100644 src/components/cv-accordion/cv-accordion-skeleton.vue create mode 100644 src/components/cv-skeleton-text/cv-skeleton-text.vue diff --git a/src/components/cv-accordion/_cv-accordion-item-skeleton.vue b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue new file mode 100644 index 000000000..b63f3a266 --- /dev/null +++ b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/components/cv-accordion/cv-accordion-skeleton.vue b/src/components/cv-accordion/cv-accordion-skeleton.vue new file mode 100644 index 000000000..96142c5a2 --- /dev/null +++ b/src/components/cv-accordion/cv-accordion-skeleton.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/components/cv-accordion/cv-accordion-story.js b/src/components/cv-accordion/cv-accordion-story.js index f81a6a296..de40b853c 100644 --- a/src/components/cv-accordion/cv-accordion-story.js +++ b/src/components/cv-accordion/cv-accordion-story.js @@ -1,5 +1,5 @@ import { storiesOf } from '@storybook/vue'; -import { withKnobs, text, boolean } from '@storybook/addon-knobs'; +import { withKnobs, boolean } from '@storybook/addon-knobs'; import { withNotes } from '@storybook/addon-notes'; import SvTemplateView from '../../_storybook/views/sv-template-view/sv-template-view'; @@ -9,6 +9,7 @@ import knobsHelper from '../../_storybook/utils/knobs-helper'; import CvAccordionNotesMD from './cv-accordion-notes.md'; import CvAccordion from './cv-accordion'; import CvAccordionItem from './cv-accordion-item'; +import CvAccordionSkeleton from './cv-accordion-skeleton'; const stories = storiesOf('CvAccordion', module); stories.addDecorator(withKnobs).addDecorator(withNotes); @@ -117,3 +118,23 @@ for (const story of storySet) { } ); } + +const templateString = ``; +stories.add( + 'skeleton', + () => ({ + components: { SvTemplateView, CvAccordionSkeleton }, + template: ` + + + + `, + props: {}, + }), + { + notes: { markdown: CvAccordionNotesMD }, + } +); diff --git a/src/components/cv-skeleton-text/cv-skeleton-text.vue b/src/components/cv-skeleton-text/cv-skeleton-text.vue new file mode 100644 index 000000000..fc4ae20a6 --- /dev/null +++ b/src/components/cv-skeleton-text/cv-skeleton-text.vue @@ -0,0 +1,19 @@ + + + + + From 8bf2badf2afc27415e64cf0c43e15d0959fa5d2e Mon Sep 17 00:00:00 2001 From: Oleksandr Sabov Date: Mon, 11 Feb 2019 17:32:23 +0100 Subject: [PATCH 2/6] feat: update CvSkeletonText component --- .../cv-skeleton-text-notes.md | 21 +++++ .../cv-skeleton-text-story.js | 87 +++++++++++++++++++ .../cv-skeleton-text/cv-skeleton-text.vue | 56 ++++++++++-- 3 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 src/components/cv-skeleton-text/cv-skeleton-text-notes.md create mode 100644 src/components/cv-skeleton-text/cv-skeleton-text-story.js diff --git a/src/components/cv-skeleton-text/cv-skeleton-text-notes.md b/src/components/cv-skeleton-text/cv-skeleton-text-notes.md new file mode 100644 index 000000000..2d646f9d0 --- /dev/null +++ b/src/components/cv-skeleton-text/cv-skeleton-text-notes.md @@ -0,0 +1,21 @@ +# CvSkeletonText + +A utility component that used as a progressive loading state while the user waits for content to load. + +## Usage + +```html + +``` + +## Attributes + +- heading: generates skeleton text at a larger size. Optional. Default - false. +- width: width (in px or %) of single line of text or max-width of paragraph lines. Optional. Default - 100%. +- paragraph: will generate multiple lines of text. Optional. Default - false. +- lineCount: the number of lines in a paragraph. Optional. Default - 3. diff --git a/src/components/cv-skeleton-text/cv-skeleton-text-story.js b/src/components/cv-skeleton-text/cv-skeleton-text-story.js new file mode 100644 index 000000000..ca7e3f880 --- /dev/null +++ b/src/components/cv-skeleton-text/cv-skeleton-text-story.js @@ -0,0 +1,87 @@ +import { storiesOf } from '@storybook/vue'; +import { withKnobs, boolean, text, number } from '@storybook/addon-knobs'; +import { withNotes } from '@storybook/addon-notes'; + +import SvTemplateView from '../../_storybook/views/sv-template-view/sv-template-view'; +import knobsHelper from '../../_storybook/utils/knobs-helper'; + +import CvSkeletonTextNotesMD from './cv-skeleton-text-notes.md'; +import CvSkeletonText from './cv-skeleton-text'; + +const stories = storiesOf('CvSkeletonText', module); +stories.addDecorator(withKnobs); +stories.addDecorator(withNotes); + +const preKnobs = { + heading: { + group: 'attr', + type: boolean, + config: ['heading', false], // consts.CONFIG + prop: { + name: 'heading', + type: Boolean, + }, + }, + width: { + group: 'attr', + type: text, + config: ['width', '100%'], // consts.CONFIG + prop: { name: 'width', type: String }, + }, + paragraph: { + group: 'attr', + type: boolean, + config: ['paragraph', false], // consts.CONFIG + prop: { + name: 'paragraph', + type: Boolean, + }, + }, + lineCount: { + group: 'attr', + type: number, + config: ['Number of lines', 3], + prop: { name: 'line-count', type: Number }, + }, +}; + +const variants = [ + { name: 'default' }, + { name: 'minimal', excludes: ['heading', 'width', 'paragraph', 'lineCount'] }, +]; + +const storySet = knobsHelper.getStorySet(variants, preKnobs); + +for (const story of storySet) { + stories.add( + story.name, + () => { + const settings = story.knobs(); + + // ---------------------------------------------------------------- + + const templateString = ` + + `; + + // ---------------------------------------------------------------- + + const templateViewString = ` + + + + `; + + return { + components: { CvSkeletonText, SvTemplateView }, + template: templateViewString, + props: settings.props, + }; + }, + { + notes: { markdown: CvSkeletonTextNotesMD }, + } + ); +} diff --git a/src/components/cv-skeleton-text/cv-skeleton-text.vue b/src/components/cv-skeleton-text/cv-skeleton-text.vue index fc4ae20a6..30c4d9277 100644 --- a/src/components/cv-skeleton-text/cv-skeleton-text.vue +++ b/src/components/cv-skeleton-text/cv-skeleton-text.vue @@ -1,9 +1,13 @@ From 06f508477d5673e50386618ed9f63a32b9ee63c4 Mon Sep 17 00:00:00 2001 From: Oleksandr Sabov Date: Tue, 12 Feb 2019 11:02:21 +0100 Subject: [PATCH 3/6] chore: turned CvAccordionSkeleton to a functional component --- src/components/cv-accordion/cv-accordion-skeleton.vue | 1 + src/components/cv-skeleton-text/cv-skeleton-text.vue | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/cv-accordion/cv-accordion-skeleton.vue b/src/components/cv-accordion/cv-accordion-skeleton.vue index 96142c5a2..463ade180 100644 --- a/src/components/cv-accordion/cv-accordion-skeleton.vue +++ b/src/components/cv-accordion/cv-accordion-skeleton.vue @@ -17,6 +17,7 @@ import CvAccordionItemSkeleton from './_cv-accordion-item-skeleton'; export default { name: 'CvAccordionSkeleton', + functional: true, components: { CvSkeletonText, CvAccordionItemSkeleton, diff --git a/src/components/cv-skeleton-text/cv-skeleton-text.vue b/src/components/cv-skeleton-text/cv-skeleton-text.vue index 30c4d9277..1f955fdce 100644 --- a/src/components/cv-skeleton-text/cv-skeleton-text.vue +++ b/src/components/cv-skeleton-text/cv-skeleton-text.vue @@ -53,7 +53,7 @@ export default { { length: this.paragraph ? this.lineCount : 1, }, - (el, i) => ({ + () => ({ width: this.calcWidth(), }) ); From f6fa19d8d5ec0f900fa29b086df543a78fb67c74 Mon Sep 17 00:00:00 2001 From: Oleksandr Sabov Date: Tue, 12 Feb 2019 11:07:27 +0100 Subject: [PATCH 4/6] chore: turn CvAccordionItemcSkeleton to a functional component --- src/components/cv-accordion/_cv-accordion-item-skeleton.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/cv-accordion/_cv-accordion-item-skeleton.vue b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue index b63f3a266..f05d36591 100644 --- a/src/components/cv-accordion/_cv-accordion-item-skeleton.vue +++ b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue @@ -26,6 +26,7 @@ import CvSkeletonText from '../cv-skeleton-text/cv-skeleton-text'; export default { name: 'CvAccordionItemcSkeleton', + functional: true, components: { CvSkeletonText, }, From abb93634f5a0a3e5713fb100310bdf8c8a4eb820 Mon Sep 17 00:00:00 2001 From: Oleksandr Sabov Date: Tue, 12 Feb 2019 13:19:21 +0100 Subject: [PATCH 5/6] chore: use correct notation for functional components --- .../_cv-accordion-item-skeleton.vue | 7 +++---- .../cv-accordion/cv-accordion-skeleton.vue | 1 - .../cv-skeleton-text-story.js | 21 +++++++++++-------- .../cv-skeleton-text/cv-skeleton-text.vue | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/components/cv-accordion/_cv-accordion-item-skeleton.vue b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue index f05d36591..aba8e325d 100644 --- a/src/components/cv-accordion/_cv-accordion-item-skeleton.vue +++ b/src/components/cv-accordion/_cv-accordion-item-skeleton.vue @@ -1,7 +1,7 @@ -