From 3172870aafc9d3303d7cf9c2ead5ac0316df24b8 Mon Sep 17 00:00:00 2001 From: Katalina Okano Date: Thu, 22 Apr 2021 16:10:44 -0400 Subject: [PATCH] init remake --- .../{ => .storybook}/Intro.stories.mdx | 0 packages/design-system/.storybook/main.js | 10 +- .../EditorCategory.stories.tsx | 19 +++ .../EditorCategory.styled.ts | 13 ++ .../editor-category-new/EditorCategory.tsx | 144 ++++++++++++++++++ .../molecules/editor-category-new/index.ts | 1 + .../EditorCategory.stories.tsx | 2 +- 7 files changed, 187 insertions(+), 2 deletions(-) rename packages/design-system/{ => .storybook}/Intro.stories.mdx (100%) create mode 100644 packages/design-system/molecules/editor-category-new/EditorCategory.stories.tsx create mode 100644 packages/design-system/molecules/editor-category-new/EditorCategory.styled.ts create mode 100644 packages/design-system/molecules/editor-category-new/EditorCategory.tsx create mode 100644 packages/design-system/molecules/editor-category-new/index.ts diff --git a/packages/design-system/Intro.stories.mdx b/packages/design-system/.storybook/Intro.stories.mdx similarity index 100% rename from packages/design-system/Intro.stories.mdx rename to packages/design-system/.storybook/Intro.stories.mdx diff --git a/packages/design-system/.storybook/main.js b/packages/design-system/.storybook/main.js index f625358..e90bb07 100644 --- a/packages/design-system/.storybook/main.js +++ b/packages/design-system/.storybook/main.js @@ -1,4 +1,12 @@ module.exports = { - stories: ['../**/*.stories.mdx', '../**/*.stories.@(js|jsx|ts|tsx)'], + stories: [ + ...['atoms', 'molecules', 'organisms', 'templates'].map( + (dir) => `../${dir}/**/*.stories.@(tsx|mdx)` + ), + '*.stories.mdx', + ], addons: ['@storybook/addon-links', '@storybook/addon-essentials'], + reactOptions: { + fastRefresh: true, + }, }; diff --git a/packages/design-system/molecules/editor-category-new/EditorCategory.stories.tsx b/packages/design-system/molecules/editor-category-new/EditorCategory.stories.tsx new file mode 100644 index 0000000..332c913 --- /dev/null +++ b/packages/design-system/molecules/editor-category-new/EditorCategory.stories.tsx @@ -0,0 +1,19 @@ +import * as React from 'react'; +import { mockCategory, roleCategory, roleCategory2 } from '../../fixtures/storyData'; +import { EditorCategory } from './EditorCategory'; + +export default { + title: 'Molecules/Editor/Category', +}; + +export const CategoryEditor = () => { + const [categoryData, setCategoryData] = React.useState(mockCategory); + return ( + setCategoryData(category)} + uncategorizedRoles={roleCategory} + guildRoles={[...roleCategory, ...roleCategory2]} + /> + ); +}; diff --git a/packages/design-system/molecules/editor-category-new/EditorCategory.styled.ts b/packages/design-system/molecules/editor-category-new/EditorCategory.styled.ts new file mode 100644 index 0000000..b3cf806 --- /dev/null +++ b/packages/design-system/molecules/editor-category-new/EditorCategory.styled.ts @@ -0,0 +1,13 @@ +import styled from 'styled-components'; + +export const RoleContainer = styled.div` + display: flex; + margin: 10px; + flex-wrap: wrap; + + & > div { + /* This should be a Role element */ + border: 1px solid rgba(0, 0, 0, 0.15); + margin: 1px; + } +`; diff --git a/packages/design-system/molecules/editor-category-new/EditorCategory.tsx b/packages/design-system/molecules/editor-category-new/EditorCategory.tsx new file mode 100644 index 0000000..12daf3f --- /dev/null +++ b/packages/design-system/molecules/editor-category-new/EditorCategory.tsx @@ -0,0 +1,144 @@ +import { FaderOpacity } from '@roleypoly/design-system/atoms/fader'; +import { HorizontalSwitch } from '@roleypoly/design-system/atoms/horizontal-switch'; +import { Popover } from '@roleypoly/design-system/atoms/popover'; +import { Role } from '@roleypoly/design-system/atoms/role'; +import { Space } from '@roleypoly/design-system/atoms/space'; +import { TextInput, TextInputWithIcon } from '@roleypoly/design-system/atoms/text-input'; +import { Text } from '@roleypoly/design-system/atoms/typography'; +import { RoleSearch } from '@roleypoly/design-system/molecules/role-search'; +import { Category, CategoryType, Role as RoleType } from '@roleypoly/types'; +import * as React from 'react'; +import { GoSearch } from 'react-icons/go'; +import { RoleContainer } from './EditorCategory.styled'; + +type Props = { + category: Category; + uncategorizedRoles: RoleType[]; + guildRoles: RoleType[]; + onChange: (category: Category) => void; +}; + +const typeEnumToSwitch = (typeData: CategoryType) => { + if (typeData === CategoryType.Single) { + return 'Single'; + } else { + return 'Multiple'; + } +}; + +const switchToTypeEnum = (typeData: 'Single' | 'Multiple') => { + if (typeData === 'Single') { + return CategoryType.Single; + } else { + return CategoryType.Multi; + } +}; + +export const EditorCategory = (props: Props) => { + const [roleSearchPopoverActive, setRoleSearchPopoverActive] = React.useState(false); + const [roleSearchTerm, updateSearchTerm] = React.useState(''); + + const onUpdate = (key: keyof typeof props.category, pred?: (newValue: any) => any) => ( + newValue: any + ) => { + props.onChange({ + ...props.category, + [key]: pred ? pred(newValue) : newValue, + }); + }; + + const handleRoleSelect = (role: RoleType) => { + setRoleSearchPopoverActive(false); + updateSearchTerm(''); + props.onChange({ + ...props.category, + roles: [...props.category.roles, role.id], + }); + }; + + const handleRoleDeselect = (role: RoleType) => () => { + props.onChange({ + ...props.category, + roles: props.category.roles.filter((x) => x !== role.id), + }); + }; + + return ( +
+ Category Name + x.target.value)} + /> + + + + Selection Type +
+ +
+ + + + Visiblity +
+ a === 'Hidden')} + /> +
+ + + Roles + setRoleSearchPopoverActive(false)} + > + {() => ( + updateSearchTerm(newTerm)} + /> + )} + + + } + placeholder={'Type or drag a role...'} + onFocus={() => setRoleSearchPopoverActive(true)} + value={roleSearchTerm} + onChange={(x) => updateSearchTerm(x.target.value)} + /> + + {props.category.roles.map((id) => { + const role = props.guildRoles.find((x) => x.id === id); + if (!role) { + return <>; + } + + return ( + + ); + })} + + +
+ ); +}; diff --git a/packages/design-system/molecules/editor-category-new/index.ts b/packages/design-system/molecules/editor-category-new/index.ts new file mode 100644 index 0000000..67c2556 --- /dev/null +++ b/packages/design-system/molecules/editor-category-new/index.ts @@ -0,0 +1 @@ +export * from './EditorCategory'; diff --git a/packages/design-system/molecules/editor-category/EditorCategory.stories.tsx b/packages/design-system/molecules/editor-category/EditorCategory.stories.tsx index 332c913..76d7a9b 100644 --- a/packages/design-system/molecules/editor-category/EditorCategory.stories.tsx +++ b/packages/design-system/molecules/editor-category/EditorCategory.stories.tsx @@ -3,7 +3,7 @@ import { mockCategory, roleCategory, roleCategory2 } from '../../fixtures/storyD import { EditorCategory } from './EditorCategory'; export default { - title: 'Molecules/Editor/Category', + title: 'Molecules/Editor/Category (Old)', }; export const CategoryEditor = () => {