From 1499c0126d1a7a2377b0267b761479100c636ee9 Mon Sep 17 00:00:00 2001
From: eug-vs <eug-vs@keemail.me>
Date: Tue, 30 Jun 2020 00:41:09 +0300
Subject: feat!: create useNavigate hook

---
 src/hooks/useNavigate.tsx | 42 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 42 insertions(+)
 create mode 100644 src/hooks/useNavigate.tsx

(limited to 'src/hooks')

diff --git a/src/hooks/useNavigate.tsx b/src/hooks/useNavigate.tsx
new file mode 100644
index 0000000..0650f55
--- /dev/null
+++ b/src/hooks/useNavigate.tsx
@@ -0,0 +1,42 @@
+import React, { useState, useContext, createContext } from 'react';
+import { User } from 'which-types';
+
+export interface Page {
+  prefix: string;
+  id?: string;
+}
+
+interface ContextType {
+  page: Page;
+  setPage: (page: Page) => void;
+  navigate: (prefix: string, id?: string) => void;
+}
+
+const landingPage = { prefix: 'feed' };
+
+const context = createContext<ContextType>({
+  page: landingPage,
+  setPage: () => {},
+  navigate: () => {}
+});
+
+const useProvideNavigation = () => {
+  const [page, setPage] = useState<Page>(landingPage);
+
+  const navigate = (prefix: string, id?: string): void => {
+    setPage({ prefix, id });
+  };
+
+  return { page, setPage, navigate };
+};
+
+export const NavigationProvider: React.FC = ({ children }) => {
+  const navigation = useProvideNavigation();
+  const { Provider } = context;
+  return <Provider value={navigation}>{children}</Provider>;
+};
+
+export const useNavigate = () => {
+  return useContext(context);
+}
+
-- 
cgit v1.2.3