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