diff --git a/packages/web/.eslintrc.json b/packages/web/.eslintrc.json index bffb357..0f38229 100644 --- a/packages/web/.eslintrc.json +++ b/packages/web/.eslintrc.json @@ -1,3 +1,16 @@ { - "extends": "next/core-web-vitals" + "plugins": ["@typescript-eslint"], + "extends": [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended", + "prettier", + "eslint:recommended" + ], + "rules": { + // I suggest you add those two rules: + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-explicit-any": "error", + "prefer-const": "error" + }, + "parser": "@typescript-eslint/parser" } diff --git a/packages/web/.prettierrc.json b/packages/web/.prettierrc.json new file mode 100644 index 0000000..ea3f0d6 --- /dev/null +++ b/packages/web/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "semi": true, + "trailingComma": "es5", + "singleQuote": false, + "tabWidth": 2, + "useTabs": false +} \ No newline at end of file diff --git a/packages/web/.vscode.settings.json b/packages/web/.vscode.settings.json new file mode 100644 index 0000000..63ec24d --- /dev/null +++ b/packages/web/.vscode.settings.json @@ -0,0 +1,5 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } +} \ No newline at end of file diff --git a/packages/web/components/UserStatusBubble.tsx b/packages/web/components/UserStatusBubble.tsx index b7ee249..c34e0cf 100644 --- a/packages/web/components/UserStatusBubble.tsx +++ b/packages/web/components/UserStatusBubble.tsx @@ -9,19 +9,19 @@ export default function UserStatusBubble(props: UserStatusPropsInterface) { switch (props.status) { case UserStatus.online: return ( - + ); case UserStatus.busy: return ( - + ); case UserStatus.offline: return ( - + ); default: return ( - + ); } } diff --git a/packages/web/package.json b/packages/web/package.json index d8a908e..cb3a77f 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -31,10 +31,13 @@ }, "devDependencies": { "@types/react": "^17.0.38", + "@typescript-eslint/eslint-plugin": "^5.10.1", "autoprefixer": "^10.4.2", "eslint": "8.4.0", "eslint-config-next": "12.0.7", + "eslint-config-prettier": "^8.3.0", "postcss": "^8.4.5", + "prettier": "^2.5.1", "tailwindcss": "^3.0.12", "typescript": "^4.5.5" } diff --git a/packages/web/pages/me.tsx b/packages/web/pages/me.tsx new file mode 100644 index 0000000..065f7f5 --- /dev/null +++ b/packages/web/pages/me.tsx @@ -0,0 +1,96 @@ +import { Avatar, Dropdown, Menu } from "antd"; +import { useRouter } from "next/router"; +import { useRef } from "react"; +import { GlobalHotKeys, KeyMap } from "react-hotkeys"; +import { FaLayerGroup, FaSearch, FaUser } from "react-icons/fa"; +import MainLogo from "../components/MainLogo"; +import UserStatusBubble from "../components/UserStatusBubble"; +import { UserStatus } from "../models/user"; + +export default function Me() { + return ( +
+
+
+ ); +} + +function Header() { + const router = useRouter(); + + const UserMenu = ( + + router.push("/teams/profile")} + icon={} + > + + + + window.open("/teams", "_self")} + key={"team hub"} + icon={} + > + + + + + + console.log("sign out")}> + + + + ); + + const inputRef = useRef(); + const selectSearch = () => { + inputRef.current.focus(); + }; + + const keyMap: KeyMap = { + SELECT_SEARCH: { + name: "select search to start searching", + sequence: "/", + action: "keyup", + }, + }; + const handlers = { + SELECT_SEARCH: selectSearch, + }; + + return ( +
+ + + + + {/* search bar */} +
+ + +
+ + {/* controls & profile section */} + + + + + + + +
+ ); +} diff --git a/yarn.lock b/yarn.lock index f79a083..38ab72f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1002,7 +1002,7 @@ "@types/express-serve-static-core" "*" "@types/serve-static" "*" -"@types/json-schema@^7.0.3": +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== @@ -1086,6 +1086,21 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/eslint-plugin@^5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.1.tgz#870195d0f2146b36d11fc71131b75aba52354c69" + integrity sha512-xN3CYqFlyE/qOcy978/L0xLR2HlcAGIyIK5sMOasxaaAPfQRj/MmMV6OC3I7NZO84oEUdWCOju34Z9W8E0pFDQ== + dependencies: + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/type-utils" "5.10.1" + "@typescript-eslint/utils" "5.10.1" + debug "^4.3.2" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.2.0" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/experimental-utils@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.10.1.tgz#e179ffc81a80ebcae2ea04e0332f8b251345a686" @@ -1126,6 +1141,15 @@ "@typescript-eslint/types" "5.10.1" "@typescript-eslint/visitor-keys" "5.10.1" +"@typescript-eslint/type-utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.10.1.tgz#5e526c00142585e40ab1503e83f1ff608c367405" + integrity sha512-AfVJkV8uck/UIoDqhu+ptEdBoQATON9GXnhOpPLzkQRJcSChkvD//qsz9JVffl2goxX+ybs5klvacE9vmrQyCw== + dependencies: + "@typescript-eslint/utils" "5.10.1" + debug "^4.3.2" + tsutils "^3.21.0" + "@typescript-eslint/types@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.10.1.tgz#1d7463fa7c32d8a23ab508a803ca2fe26e758727" @@ -1163,6 +1187,18 @@ semver "^7.3.5" tsutils "^3.21.0" +"@typescript-eslint/utils@5.10.1": + version "5.10.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.10.1.tgz#fa682a33af47080ba2c4368ee0ad2128213a1196" + integrity sha512-RRmlITiUbLuTRtn/gcPRi4202niF+q7ylFLCKu4c+O/PcpRvZ/nAUwQ2G00bZgpWkhrNLNnvhZLbDn8Ml0qsQw== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.10.1" + "@typescript-eslint/types" "5.10.1" + "@typescript-eslint/typescript-estree" "5.10.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@3.10.1": version "3.10.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.10.1.tgz#cd4274773e3eb63b2e870ac602274487ecd1e931" @@ -2391,6 +2427,11 @@ eslint-config-next@12.0.9: eslint-plugin-react "^7.27.0" eslint-plugin-react-hooks "^4.3.0" +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + eslint-import-resolver-node@^0.3.4, eslint-import-resolver-node@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" @@ -3337,7 +3378,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.2.0: +ignore@^5.1.8, ignore@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== @@ -4524,6 +4565,11 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== + printj@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"