import React, { useState } from 'react'; import createClass from 'create-react-class'; import _ from 'lodash'; import { Meta, Story } from '@storybook/react'; import Tag, { ITagProps } from '../Tag/Tag'; export default { title: 'Communication/Tag', component: Tag, args: Tag.defaultProps, parameters: { docs: { description: { component: Tag.peek.description, }, }, }, } as Meta; export const Basic: Story = (args) => { return (
Amet nam quibusdam nobis autem sapiente
Fruits Apples Oranges Bananas Vegetables Carrots Spinach Celery
); }; export const Nested: Story = (args) => { const words = [ 'Fashion', 'The', 'Vexillologist', 'Cold Brew', 'This is a longer sentence that should be handled okay', ]; return (
Grouped items {_.times(8, (n) => ( {words[n % words.length]} ))} Grouped items {_.times(10, (n) => ( {words[n % words.length]} ))}
); }; Nested.parameters = { docs: { description: { story: `Use a parent \`tag\` to group child \`tags\` into categories. This example also shows you how to dynamically generate a list of \`tags\`.`, }, }, }; export const DoubleNested: Story = (args) => { const words = [ 'Fashion', 'The', 'Vexillologist', 'Cold Brew', 'This is a longer sentence that should be handled okay but what if it is even longer than you could ever think imaginable', ]; return (
Global: Group 1 {_.times(4, (n) => ( {words[n % words.length]} ))} Group 2 {_.times(4, (n) => ( {words[n % words.length]} ))} In-Progess: Group 1 {_.times(4, (n) => ( {words[n % words.length]} ))} Group 2 {_.times(4, (n) => ( {words[n % words.length]} ))}
); }; DoubleNested.parameters = { docs: { description: { story: `Double nesting allows you to add a third level of hierarchy to your \`tag\` categorization.`, }, }, }; export const Interactive: Story = (args) => { const groups = [ ['Last Man on Earth', ['Phil']], ['Last Woman on Earth', ['Carol']], [ 'Star Wars', [ 'Ask Aak', 'Admiral Gial Ackbar', 'Acros-Krik', 'Ak-Rev', 'Stass Allie', 'Almec', 'Mas Amedda', 'Amee', 'Padmé Amidala', 'Cassian Andor', 'Bail Antilles', 'Raymus Antilles', 'Wedge Antilles', 'Queen Apailana', 'Commander Appo', 'Passel Argente', 'Faro Argyus', 'Seti Ashgad', 'AZI-3', ], ], [ 'Lord of the Rings', [ 'Adrahil', 'Adrahil II', 'Aegnor', 'Aerandir', 'Aghan', 'Aglahad', 'Ailinel', 'Alatar', 'Aldamir', 'Aldor', 'Almarian', 'Almiel', 'Amandil', 'Amdír', 'Amlaith', 'Amrod', 'Amroth', 'Anardil', 'Anborn', 'Ancalagon The Black', 'Andróg', 'Angbor', 'Angelimar', 'Angelimir', 'Angrod', 'Anárion', 'Ar-Adûnakhôr', 'Ar-Gimilzôr', 'Ar-Pharazôn', 'Ar-Sakalthôr', 'Ar-Zimrathôn', 'Arador', 'Araglas', 'Aragorn I', 'Aragorn II Elessar', ], ], [ 'Star Trek', [ 'Jonathan Archer', 'Ayala', 'Azan', 'Reginald Barclay', 'Lieutenant, JG (TNG,FCT)', 'Engineering Officer (TNG,Movies)', 'Bareil Antos', 'Julian Bashir', 'Season 6 (TNG)', 'Lieutenant, JG (S1-3)', ], ], ]; const [removedItems, setRemovedItems] = useState({}); const handleRemove = ({ props: { callbackId } }: any) => { const newRemovedItems = _.set(removedItems, callbackId, true); setRemovedItems({ ...newRemovedItems }); }; return (
{_.map(groups, ([group, names], groupIndex) => { const groupCallbackId = `${groupIndex}`; if (_.get(removedItems, groupCallbackId) === true) { return null; } return ( {group} {_.map(names, (name, nameIndex) => { const nameCallbackId = `${groupIndex}.${nameIndex}`; if (_.get(removedItems, nameCallbackId) === true) { return null; } return ( {name} ); })} ); })}
); }; Interactive.parameters = { docs: { description: { story: `Use interactive \`tags\` to allow users to remove a selection.`, }, }, }; export const Colors: Story = (args) => { return (
notitia periculum deficio notitia periculum
); }; Colors.parameters = { docs: { description: { story: `\`Tag\` is available in two additional colors: \`kind='danger'\` for settings that can not be saved (for example, custom dates outside of the flight range), and \`kind='default'\` for disabled items (for example, past flights). The \`'default'\` color cannot be used for the \`isRemovable\` \`tag\`.`, }, }, };