diff --git a/package-lock.json b/package-lock.json index 56ec3d3..8abf343 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "react-firebase-authentication", + "name": "dashtabs", "version": "0.1.0", "lockfileVersion": 1, "requires": true, @@ -1076,6 +1076,63 @@ } } }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -1117,11 +1174,169 @@ "loader-utils": "^1.1.0" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/jest": { + "version": "26.0.22", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.22.tgz", + "integrity": "sha512-eeWwWjlqxvBxc4oQdkueW5OF/gtfSceKk4OnOAGlUSwS/liBRtZppbJuz1YkgbrbfGOoeBHun9fOvXnjNwrSOw==", + "requires": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@types/node": { + "version": "14.14.41", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.41.tgz", + "integrity": "sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==" + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/react": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz", + "integrity": "sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.3.tgz", + "integrity": "sha512-4NnJbCeWE+8YBzupn/YrJxZ8VnjcJq5iR1laqQ1vkpQgBiA7bwk0Rp24fxsdNinzJY2U+HHS4dJJDPdoMjdJ7w==", + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz", + "integrity": "sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA==" + }, "@types/tapable": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.2.tgz", "integrity": "sha512-42zEJkBpNfMEAvWR5WlwtTH22oDzcMjFsL9gDGExwF8X8WvAiw7Vwop7hPw03QT8TKfec83LwbHj6SvpqM4ELQ==" }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==" + }, "@webassemblyjs/ast": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", @@ -3650,6 +3865,11 @@ "cssom": "0.3.x" } }, + "csstype": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz", + "integrity": "sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g==" + }, "cyclist": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", @@ -3904,6 +4124,11 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + }, "diffie-hellman": { "version": "5.0.3", "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -14461,6 +14686,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==" + }, "ua-parser-js": { "version": "0.7.19", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz", diff --git a/package.json b/package.json index ce0a428..4509ce0 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,18 @@ "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/react-fontawesome": "^0.1.11", + "@types/jest": "^26.0.22", + "@types/node": "^14.14.41", + "@types/react": "^17.0.3", + "@types/react-dom": "^17.0.3", "firebase": "^5.11.1", "print-js": "^1.3.1", "react": "^16.13.1", "react-dom": "^16.13.1", "react-router-dom": "^4.3.1", "react-scripts": "2.1.1", - "recompose": "^0.30.0" + "recompose": "^0.30.0", + "typescript": "^4.2.4" }, "scripts": { "start": "react-scripts start", diff --git a/src/components/Account/index.js b/src/components/Account/index.tsx similarity index 72% rename from src/components/Account/index.js rename to src/components/Account/index.tsx index 1ddf583..3ff31e2 100644 --- a/src/components/Account/index.js +++ b/src/components/Account/index.tsx @@ -4,9 +4,18 @@ import { compose } from 'recompose'; import { withFirebase } from '../Firebase'; import { AuthUserContext, withAuthorization } from '../Session'; import AccountView from './accountView'; +import { User } from '../Firebase/firebase'; -const AccountPage = (props) => { - const [newBusinessName, setNewBusinessName] = useState(''); +interface Props { + firebase: { + getCurrentUserUid: () => string, + user: (uid: string) => User, + userBusinessName: (uid: string) => string, + } +} + +const AccountPage = (props: Props) => { + const [newBusinessName, setNewBusinessName] = useState(''); useEffect(() => { props.firebase.user(props.firebase.getCurrentUserUid()).once('value', snapshot => { @@ -14,7 +23,7 @@ const AccountPage = (props) => { }); }, []); - const updateBusinessName = (businessName) => { + const updateBusinessName = (businessName: string): void => { props.firebase.userBusinessName(props.firebase.getCurrentUserUid()).set(businessName); } diff --git a/src/components/Firebase/firebase.js b/src/components/Firebase/firebase.tsx similarity index 65% rename from src/components/Firebase/firebase.js rename to src/components/Firebase/firebase.tsx index 94b1433..772b341 100644 --- a/src/components/Firebase/firebase.js +++ b/src/components/Firebase/firebase.tsx @@ -2,7 +2,71 @@ import app from 'firebase/app'; import 'firebase/auth'; import 'firebase/database'; -const config = { +interface Table { + description: string, + number: number, + waitingOrder: boolean +} + +export interface User { + businessName: string, + email: string, + username: string, + tables: Table[], + once?: (val: string, func: any) => void +} + +interface MenuItem { + available: boolean, + description: string, + name: string, + price: number +} + +interface Menu { + dishes: MenuItem[], + drinks: MenuItem[] +} + +type Menus = Menu[] + +interface OrderItem { + name: string, + qty: number +} + +interface CurrentOrder { + comments: string, + cost: number, + items: OrderItem[], + orderNum: number, + ready: boolean, + start: number, + table: string +} + +interface PastOrder extends CurrentOrder { + end: number +} + +interface UserOrders { + current: CurrentOrder[], + past: PastOrder[], +} + +type DatabaseOrders = UserOrders[]; + +interface ConfigType { + apiKey: string, + appId: string, + authDomain: string, + databaseURL: string, + projectId: string, + messagingSenderId: string, + storageBucket: string, +} + +const config: ConfigType = { apiKey: process.env.REACT_APP_FIREBASE_KEY, appId: process.env.REACT_APP_FIREBASE_APP_ID, authDomain: process.env.REACT_APP_FIREBASE_DOMAIN, @@ -19,17 +83,17 @@ class Firebase { this.db = app.database(); } // Auth API - doCreateUserWithEmailAndPassword = (email, password) => + doCreateUserWithEmailAndPassword = (email: string, password: string): void => this.auth.createUserWithEmailAndPassword(email, password); - doSignInWithEmailAndPassword = (email, password) => + doSignInWithEmailAndPassword = (email: string, password: string): void => this.auth.signInWithEmailAndPassword(email, password); - doSignOut = () => this.auth.signOut(); + doSignOut = (): void => this.auth.signOut(); - doPasswordReset = email => this.auth.sendPasswordResetEmail(email); + doPasswordReset = (email: string): void => this.auth.sendPasswordResetEmail(email); - doPasswordUpdate = password => + doPasswordUpdate = (password: string): void => this.auth.currentUser.updatePassword(password); // Merge Auth and DB User API @@ -125,12 +189,12 @@ class Firebase { getCurrentUser = () => this.auth.currentUser; // User API - users = () => this.db.ref('users'); - user = uid => this.db.ref(`users/${uid}`); - userMenu = uid => this.db.ref(`menus/${uid}`); - userOrders = uid => this.db.ref(`orders/${uid}`); - userTables = uid => this.db.ref(`users/${uid}/tables`); - userBusinessName = uid => this.db.ref(`users/${uid}/businessName`); + users = (): User[] => this.db.ref('users'); + user = (uid: string): User => this.db.ref(`users/${uid}`); + userMenu = (uid: string): Menu => this.db.ref(`menus/${uid}`); + userOrders = (uid: string): UserOrders => this.db.ref(`orders/${uid}`); + userTables = (uid: string): Table[]=> this.db.ref(`users/${uid}/tables`); + userBusinessName = (uid: string): string=> this.db.ref(`users/${uid}/businessName`); }; export default Firebase; \ No newline at end of file diff --git a/src/components/Home/homeView.js b/src/components/Home/homeView.tsx similarity index 95% rename from src/components/Home/homeView.js rename to src/components/Home/homeView.tsx index 86b2949..333eb2d 100644 --- a/src/components/Home/homeView.js +++ b/src/components/Home/homeView.tsx @@ -13,7 +13,13 @@ import { import './style.css'; -const HomeView = ({ launchDemo, signUpRoute, signInRoute }) => ( +interface Props { + launchDemo: () => void; + signUpRoute: string; + signInRoute: string; +} + +const HomeView = ({ launchDemo, signUpRoute, signInRoute }: Props) => (
diff --git a/src/components/Home/index.js b/src/components/Home/index.tsx similarity index 69% rename from src/components/Home/index.js rename to src/components/Home/index.tsx index 51f23a3..f8513b5 100644 --- a/src/components/Home/index.js +++ b/src/components/Home/index.tsx @@ -5,8 +5,19 @@ import { withFirebase } from '../Firebase'; import * as ROUTES from '../../constants/routes'; import * as DEMODATA from '../../constants/demoData'; -const HomePage = (props) => { - const launchDemo = () => { +interface Props { + firebase: { + doSignOut: () => void, + doSignInAnonymously: () => void, + getCurrentUserUid: () => string, + userOrders: () => void, + userMenu: () => void, + user: () => void, + } +} + +const HomePage = (props: Props)=> { + const launchDemo = (): void => { props.firebase.doSignOut(); props.firebase.doSignInAnonymously() .then(() => { @@ -15,7 +26,7 @@ const HomePage = (props) => { props.firebase.userMenu(currentUid).set(DEMODATA.MENU); props.firebase.user(currentUid).set(DEMODATA.USER); props.firebase.demoCleanupDb(); - let clientMenuUrl = `${window.location.href}menu/${currentUid}/takeout`; + let clientMenuUrl : string = `${window.location.href}menu/${currentUid}/takeout`; props.history.push(ROUTES.DASHBOARD); window.open(clientMenuUrl, "_blank"); }); diff --git a/src/components/Navigation/index.js b/src/components/Navigation/index.tsx similarity index 82% rename from src/components/Navigation/index.js rename to src/components/Navigation/index.tsx index be401bf..54ff898 100644 --- a/src/components/Navigation/index.js +++ b/src/components/Navigation/index.tsx @@ -12,9 +12,16 @@ import { withFirebase } from '../Firebase'; import { AuthUserContext } from '../Session'; import * as ROUTES from '../../constants/routes'; +interface NavigationAuthProps { + authUser: { isAnonymous: boolean }, + displayingMenu: boolean, + history: any +} + +type Views = "tables" | "menu" | "orders"; const Navigation = (props) => { - const displayingMenu = props.location.pathname.slice(1,5) === "menu" ? true : false; + const displayingMenu: boolean = props.location.pathname.slice(1,5) === "menu" ? true : false; const history = props.history; return ( @@ -29,13 +36,13 @@ const Navigation = (props) => { ); }; -const NavigationAuth = ({ authUser, displayingMenu, history }) => { +const NavigationAuth = ({ authUser, displayingMenu, history }: NavigationAuthProps) => { const { state, dispatch } = useContext(Store); - const toggleView = view => dispatch({ type: 'TOGGLE_VIEW', payload: view }); - const updateSideboardState = (mode) => dispatch({ type: 'TOGGLE_SIDEBOARD', payload: mode }); - let parameter = window.location.href.split('').slice(-9).join(''); + const toggleView = (view: Views) => dispatch({ type: 'TOGGLE_VIEW', payload: view }); + const updateSideboardState = (mode: boolean) => dispatch({ type: 'TOGGLE_SIDEBOARD', payload: mode }); + let parameter: string = window.location.href.split('').slice(-9).join(''); - const toggleToOrders = () => { + const toggleToOrders = (): void => { toggleView('orders'); updateSideboardState(false); }; @@ -102,7 +109,7 @@ const NavigationAuth = ({ authUser, displayingMenu, history }) => { ); }; -const NavigationNonAuth = ({ displayingMenu }) => ( +const NavigationNonAuth = ({ displayingMenu }: { displayingMenu: boolean }) => (