diff --git a/client/App.tsx b/client/App.tsx index 31087dd..d540590 100644 --- a/client/App.tsx +++ b/client/App.tsx @@ -3,10 +3,9 @@ import { BrowserRouter as Router, Route, Switch as RouteSwitch } from 'react-rou import './index.css'; -import Pattern from './constants/Pattern'; import Explore from './Explore'; import Home from './Home'; -import DetailsLoader from './loaders/DetailsLoader'; +import PatternPage from './PatternPage'; const App = () => { return ( @@ -15,74 +14,10 @@ const App = () => { - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + } // tslint:disable-line + /> ); diff --git a/client/PatternPage.tsx b/client/PatternPage.tsx new file mode 100644 index 0000000..0ecda90 --- /dev/null +++ b/client/PatternPage.tsx @@ -0,0 +1,24 @@ +import React from 'react'; + +import Pattern from './constants/Pattern'; +import DetailsLoader from './loaders/DetailsLoader'; + +interface PatternPageProps { + pattern: string; +} + +const capitalizeFirstLetter = (s: string) => `${s.charAt(0).toUpperCase()}${s.slice(1)}`; + +const PatternPage: React.FC = ({ pattern }) => { + const name = pattern.split('-').map((s) => capitalizeFirstLetter(s)).join(''); + const patterns = Object.keys(Pattern); + + return ( + patterns.indexOf(name) === -1 + // TODO: Render 404 + ?
404
+ : + ); +}; + +export default PatternPage; diff --git a/client/constants/Pattern.ts b/client/constants/Pattern.ts index 9d18a8b..bc567e3 100644 --- a/client/constants/Pattern.ts +++ b/client/constants/Pattern.ts @@ -12,7 +12,7 @@ enum Pattern { FixedAtCorner = 'Fixed at corner', FloatingLabel = 'Floating label', HolyGrail = 'Holy grail', - InputAddOn = 'Input add-on', + InputAddOn = 'Input addon', MediaObject = 'Media object', Menu = 'Menu', Modal = 'Modal', diff --git a/client/loaders/DetailsLoader.tsx b/client/loaders/DetailsLoader.tsx index be36636..2ad34c6 100644 --- a/client/loaders/DetailsLoader.tsx +++ b/client/loaders/DetailsLoader.tsx @@ -3,10 +3,8 @@ import React from 'react'; import './spinner.css'; -import Pattern from '../constants/Pattern'; - interface DetailsLoaderProps { - pattern: Pattern; + pattern: string; } const slug = (item: string) => item.toLowerCase().split(' ').join('-'); diff --git a/client/patterns/input-add-on/Cover.tsx b/client/patterns/input-addon/Cover.tsx similarity index 100% rename from client/patterns/input-add-on/Cover.tsx rename to client/patterns/input-addon/Cover.tsx diff --git a/client/patterns/input-add-on/Details.tsx b/client/patterns/input-addon/Details.tsx similarity index 100% rename from client/patterns/input-add-on/Details.tsx rename to client/patterns/input-addon/Details.tsx