From af47c2457afdd5d352c496179b9832cea2be477b Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Tue, 28 Apr 2020 11:46:05 -0400 Subject: [PATCH] =?UTF-8?q?style:=20=F0=9F=92=84=20add=20button=20componen?= =?UTF-8?q?t=20with=20styles,=20tests,=20and=20story?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/rose/addon/components/rose/button.js | 13 +++ addons/rose/addon/styles/rose/_index.scss | 5 +- .../addon/styles/rose/components/_button.scss | 56 +++++++++++++ .../addon/styles/rose/components/_index.scss | 1 + .../addon/styles/rose/utilities/_button.scss | 80 +++++++++++++++++++ .../addon/styles/rose/utilities/_index.scss | 1 + .../templates/components/rose/button.hbs | 8 ++ addons/rose/app/components/rose/button.js | 1 + addons/rose/app/templates/index.hbs | 10 +++ addons/rose/stories/button.stories.js | 19 ----- addons/rose/stories/rose/button.stories.js | 36 +++++++++ .../components/rose/button-test.js | 35 ++++++++ 12 files changed, 242 insertions(+), 23 deletions(-) create mode 100644 addons/rose/addon/components/rose/button.js create mode 100644 addons/rose/addon/styles/rose/components/_button.scss create mode 100644 addons/rose/addon/styles/rose/components/_index.scss create mode 100644 addons/rose/addon/styles/rose/utilities/_button.scss create mode 100644 addons/rose/addon/styles/rose/utilities/_index.scss create mode 100644 addons/rose/addon/templates/components/rose/button.hbs create mode 100644 addons/rose/app/components/rose/button.js delete mode 100644 addons/rose/stories/button.stories.js create mode 100644 addons/rose/stories/rose/button.stories.js create mode 100644 addons/rose/tests/integration/components/rose/button-test.js diff --git a/addons/rose/addon/components/rose/button.js b/addons/rose/addon/components/rose/button.js new file mode 100644 index 000000000..3b11f0a24 --- /dev/null +++ b/addons/rose/addon/components/rose/button.js @@ -0,0 +1,13 @@ +import Component from '@ember/component'; +import layout from '../../templates/components/rose/button'; + +/** + * A simple HTML ` diff --git a/addons/rose/app/components/rose/button.js b/addons/rose/app/components/rose/button.js new file mode 100644 index 000000000..b10469216 --- /dev/null +++ b/addons/rose/app/components/rose/button.js @@ -0,0 +1 @@ +export { default } from 'rose/components/rose/button'; diff --git a/addons/rose/app/templates/index.hbs b/addons/rose/app/templates/index.hbs index 122889dbb..64fb78428 100644 --- a/addons/rose/app/templates/index.hbs +++ b/addons/rose/app/templates/index.hbs @@ -1 +1,11 @@ Dummy app index template + +Primary +
+Primary +
+ +Secondary +
+Secondary +
diff --git a/addons/rose/stories/button.stories.js b/addons/rose/stories/button.stories.js deleted file mode 100644 index b49f9c049..000000000 --- a/addons/rose/stories/button.stories.js +++ /dev/null @@ -1,19 +0,0 @@ -import { hbs } from 'ember-cli-htmlbars'; -import { action } from '@storybook/addon-actions'; -import { text /*withKnobs, boolean, select */ } from '@storybook/addon-knobs'; - -export default { - title: 'Button', -}; - -export const Normal = () => ({ - template: hbs` - - `, - context: { - text: text('text', 'Button Text'), - onClick: action('clicked'), - }, -}); diff --git a/addons/rose/stories/rose/button.stories.js b/addons/rose/stories/rose/button.stories.js new file mode 100644 index 000000000..c74e67b40 --- /dev/null +++ b/addons/rose/stories/rose/button.stories.js @@ -0,0 +1,36 @@ +import { hbs } from 'ember-cli-htmlbars'; +import { action } from '@storybook/addon-actions'; +import { text, boolean, select } from '@storybook/addon-knobs'; + +export default { + title: 'Rose::Button', +}; + +export const Normal = () => ({ + template: hbs` + + {{text}} + + `, + context: { + text: text('text', 'Button 🌈'), + submit: boolean('submit', false), + disabled: boolean('disabled', false), + style: select( + 'style', + { + primary: 'primary', + secondary: 'secondary', + warning: 'warning', + ghost: 'ghost', + }, + 'primary' + ), + onClick: action('clicked'), + }, +}); diff --git a/addons/rose/tests/integration/components/rose/button-test.js b/addons/rose/tests/integration/components/rose/button-test.js new file mode 100644 index 000000000..89ba514fb --- /dev/null +++ b/addons/rose/tests/integration/components/rose/button-test.js @@ -0,0 +1,35 @@ +import { module, test } from 'qunit'; +import { setupRenderingTest } from 'ember-qunit'; +import { render, find } from '@ember/test-helpers'; +import hbs from 'htmlbars-inline-precompile'; + +module('Integration | Component | rose/button', function (hooks) { + setupRenderingTest(hooks); + + test('it renders', async function (assert) { + await render(hbs`Button 🌈`); + assert.equal(this.element.textContent.trim(), 'Button 🌈'); + }); + + test('it is type="button" by default', async function (assert) { + await render(hbs`Button`); + assert.equal(await find('button').type, 'button'); + }); + + test('it is type="submit" when @submit={{true}}', async function (assert) { + await render(hbs``); + assert.equal(await find('button').type, 'submit'); + }); + + test('it is disabled when @disabled={{true}}', async function (assert) { + await render(hbs``); + assert.equal(await find('button').disabled, true); + }); + + test('it adds a style class', async function (assert) { + await render(hbs``); + assert.ok(await find('button.rose-button-primary')); + await render(hbs``); + assert.ok(await find('button.rose-button-secondary')); + }); +});