From 9b6ee7a468fa80bf59c09cb0b84256f4bf978556 Mon Sep 17 00:00:00 2001 From: Phuoc Nguyen Date: Wed, 4 Dec 2019 22:34:20 +0700 Subject: [PATCH] Add accordion --- client/constants/Pattern.ts | 1 + client/pages/ExplorePage.tsx | 1 + client/patterns/accordion/Cover.tsx | 71 +++++++++++ client/patterns/accordion/Details.tsx | 176 ++++++++++++++++++++++++++ public/sitemap.xml | 1 + 5 files changed, 250 insertions(+) create mode 100644 client/patterns/accordion/Cover.tsx create mode 100644 client/patterns/accordion/Details.tsx diff --git a/client/constants/Pattern.ts b/client/constants/Pattern.ts index 5a150d1..a8972de 100644 --- a/client/constants/Pattern.ts +++ b/client/constants/Pattern.ts @@ -1,4 +1,5 @@ enum Pattern { + Accordion = 'Accordion', Avatar = 'Avatar', AvatarList = 'Avatar list', Badge = 'Badge', diff --git a/client/pages/ExplorePage.tsx b/client/pages/ExplorePage.tsx index 15b3f69..14ec37b 100644 --- a/client/pages/ExplorePage.tsx +++ b/client/pages/ExplorePage.tsx @@ -88,6 +88,7 @@ const ExplorePage = () => {
+ diff --git a/client/patterns/accordion/Cover.tsx b/client/patterns/accordion/Cover.tsx new file mode 100644 index 0000000..0128446 --- /dev/null +++ b/client/patterns/accordion/Cover.tsx @@ -0,0 +1,71 @@ +import React from 'react'; + +import Frame from '../../placeholders/Frame'; +import Line from '../../placeholders/Line'; +import Rectangle from '../../placeholders/Rectangle'; +import Triangle from '../../placeholders/Triangle'; + +const Cover: React.FC<{}> = () => { + return ( + +
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+ + ); +}; + +export default Cover; diff --git a/client/patterns/accordion/Details.tsx b/client/patterns/accordion/Details.tsx new file mode 100644 index 0000000..09ac3b3 --- /dev/null +++ b/client/patterns/accordion/Details.tsx @@ -0,0 +1,176 @@ +import React, { useState } from 'react'; + +import RelatedPatterns from '../../components/RelatedPatterns'; +import Pattern from '../../constants/Pattern'; +import DetailsLayout from '../../layouts/DetailsLayout'; +import Block from '../../placeholders/Block'; +import BrowserFrame from '../../placeholders/BrowserFrame'; +import Rectangle from '../../placeholders/Rectangle'; +import Triangle from '../../placeholders/Triangle'; + +interface ItemProps { + index: number; + title: React.ReactNode; +} + +const Details: React.FC<{}> = () => { + const [activeItem, setActiveItem] = useState(1); + + const Item: React.FC = ({ index, title, children }) => { + const isOpened = (index === activeItem); + const click = () => setActiveItem(isOpened ? -1 : index); + return ( + <> +
+
+
+ +
+
{title}
+
+
+ {children} +
+
+ + ); + }; + + return ( + +
+ +
+
} + > +
+ +
} + > +
+ +
} + > +
+ + + + )} + source={` + +
+ +
+ +
+ +
...
+ + +
+ ... +
+
+ + +
+ ... +
+
+ + + ... +
+ + +
+ +
+ + ... + + + ... +
+ + +
+`} + /> + + + + + ); +}; + +export default Details; diff --git a/public/sitemap.xml b/public/sitemap.xml index 5adeb20..42c87b3 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -5,6 +5,7 @@ https://csslayout.io/patterns/split-screen https://csslayout.io/patterns/sticky-footer https://csslayout.io/patterns/sticky-header + https://csslayout.io/patterns/accordion https://csslayout.io/patterns/avatar https://csslayout.io/patterns/avatar-list https://csslayout.io/patterns/badge