diff --git a/models/user.ts b/models/user.ts new file mode 100644 index 0000000..1164d2d --- /dev/null +++ b/models/user.ts @@ -0,0 +1,12 @@ +export class User { + id: string; + nickname: string; + +} + +export enum UserStatus { + online = "online", + offline = "offline", + inCall = "in call", + busy = "busy" +} diff --git a/next-env.d.ts b/next-env.d.ts new file mode 100644 index 0000000..4f11a03 --- /dev/null +++ b/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/package-lock.json b/package-lock.json index 3f8c02c..ffd9867 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "react-icons": "^4.3.1" }, "devDependencies": { + "@types/react": "^17.0.38", "autoprefixer": "^10.4.2", "eslint": "8.4.0", "eslint-config-next": "12.0.7", @@ -1190,6 +1191,29 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "17.0.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", + "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, "node_modules/@typescript-eslint/parser": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", @@ -2133,6 +2157,12 @@ } } }, + "node_modules/csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + }, "node_modules/damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", @@ -6830,6 +6860,29 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "@types/react": { + "version": "17.0.38", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.38.tgz", + "integrity": "sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, "@typescript-eslint/parser": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", @@ -7540,6 +7593,12 @@ "cssnano-preset-simple": "^3.0.0" } }, + "csstype": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", + "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "dev": true + }, "damerau-levenshtein": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", diff --git a/package.json b/package.json index bea44a0..f70160a 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "react-icons": "^4.3.1" }, "devDependencies": { + "@types/react": "^17.0.38", "autoprefixer": "^10.4.2", "eslint": "8.4.0", "eslint-config-next": "12.0.7", diff --git a/pages/teams/demo.js b/pages/teams/demo.tsx similarity index 85% rename from pages/teams/demo.js rename to pages/teams/demo.tsx index fddae5d..dc3e62b 100644 --- a/pages/teams/demo.js +++ b/pages/teams/demo.tsx @@ -2,43 +2,44 @@ import Head from 'next/head' import Image from 'next/image'; import React from 'react'; import { FaMicrophoneAlt, FaHeadphonesAlt, FaTh } from "react-icons/fa"; +import { UserStatus, User } from '../../models/user' -let testFriends = [ +let testFriends = [ { name: "Liam", role: "engineer", systemAvatar: "1", - status: "online" + status: UserStatus.online }, { name: "Emily", role: "engineer", systemAvatar: "2", - status: "online" + status: UserStatus.online }, { name: "Paul", role: "architect", systemAvatar: "3", - status: "online" + status: UserStatus.online }, { name: "Mark", role: "engineer", systemAvatar: "4", - status: "busy" + status: UserStatus.busy }, { name: "Adriana", role: "design", systemAvatar: "5", - status: "busy" + status: UserStatus.busy }, { name: "Josh", role: "design", systemAvatar: "6", - status: "offline" + status: UserStatus.offline } ] @@ -50,8 +51,19 @@ export default class Demo extends React.Component { } } - statusBubble(status) { + statusBubble(status: UserStatus) { + console.log(status) + switch(status) { + case UserStatus.online: + return + case UserStatus.busy: + return + case UserStatus.offline: + return + default: + return + } } render() { @@ -102,12 +114,13 @@ export default class Demo extends React.Component { {/* list of team members */} { testFriends.map((friend, i) => { - console.log(friend) return ( - + + {this.statusBubble(friend.status)} + profile @@ -115,17 +128,14 @@ export default class Demo extends React.Component { {friend.name} {friend.status} {friend.role} - - + { this.state.selectedNumber == i ? {i} - : - {i} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..6db37c0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], + "allowJs": true, + "skipLibCheck": true, + "strict": false, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "incremental": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve" + }, + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx" + ], + "exclude": [ + "node_modules" + ] +}