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)}
+
@@ -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"
+ ]
+}