open-vault/ui/lib/core/addon/components/toggle-button.js

56 lines
1.7 KiB
JavaScript
Raw Normal View History

import Component from '@ember/component';
import { set, get, defineProperty, computed } from '@ember/object';
import layout from '../templates/components/toggle-button';
2018-04-03 14:16:57 +00:00
Add storybook (#6496) * add storybook * add storybook files * add ToggleButton and AlertBanner stories * add knobs addon * add notes addon * add ToggleButton and AlertsBanner notes * move panel to right * add ICon * create story blueprint * add header to blueprint * upgrade to storybook 5.0.1 * add confirm-action stories * move addon panel to bottom * update ConfirmAction * add jsdoc comments to alert banner component * add AlertInline * set showPanel to true in blueprint * include newly generated markdown for stories * adjust code example for toggle button * add json-to-markdown to package.json * update AuthForm * add Storybook readme * add AlertPopup * add story markdown custom template * make storybook dependencies optional * center all stories * use message-types helper to dynamically render alerts * hide panel * nest alert stories * move icons into table * separate homelink into multiple stories * add homelink with nav example * remove see links from alert-banner * add script to autogenerate markdown from component and add it to stories * add viewport addon and remove centered addon * update README to include markdown generation * remove @see links from jsdoc comments * update README to include jsdoc example * update alert banner md * get rid of trailing ###### * update jsdoc and regenerate notes files * update i-con md * Update ui/scripts/gen-story-md.js Co-Authored-By: noelledaley <noelledaley@users.noreply.github.com> * Update ui/scripts/gen-story-md.js Co-Authored-By: noelledaley <noelledaley@users.noreply.github.com> * add storybook docs to vault ui readme * add jsdoc comments to component blueprint, automatically import md file in story blueprint * add template template to component blueprint override * apply basic theme to storybook * remove comment * make sure all stories are using auto generated md * storybook: show optional props in brackets * storybook: 🔪 HomeLink * storybook: show AuthConfigForm stories with knobs
2019-04-03 21:06:20 +00:00
/**
* @module ToggleButton
* `ToggleButton` components are used to expand and collapse content with a toggle.
*
* @example
* ```js
* <ToggleButton @openLabel="Encrypt Output with PGP" @closedLabel="Encrypt Output with PGP" @toggleTarget={{this}} @toggleAttr="showOptions"/>
* {{#if showOptions}}
* <div>
* <p>
* I will be toggled!
* </p>
* </div>
* {{/if}}
* ```
*
* @param toggleAttr=null {String} - The attribute upon which to toggle.
* @param openLabel=Hide options {String} - The message to display when the toggle is open.
* @param closedLabel=More options {String} - The message to display when the toggle is closed.
*/
export default Component.extend({
layout,
2018-04-03 14:16:57 +00:00
tagName: 'button',
type: 'button',
toggleTarget: null,
toggleAttr: null,
classNameBindings: ['buttonClass'],
attributeBindings: ['type'],
buttonClass: 'has-text-info',
classNames: ['button', 'is-transparent'],
openLabel: 'Hide options',
closedLabel: 'More options',
init() {
this._super(...arguments);
const toggleAttr = this.get('toggleAttr');
defineProperty(
2018-04-03 14:16:57 +00:00
this,
'isOpen',
computed(`toggleTarget.${toggleAttr}`, () => {
2018-04-03 14:16:57 +00:00
const props = this.getProperties('toggleTarget', 'toggleAttr');
return get(props.toggleTarget, props.toggleAttr);
2018-04-03 14:16:57 +00:00
})
);
},
click() {
const target = this.get('toggleTarget');
const attr = this.get('toggleAttr');
const current = get(target, attr);
set(target, attr, !current);
},
});