diff --git a/components/ResultViewGrid.tsx b/components/ResultViewGrid.tsx index 4e8f9674..a5e9a769 100644 --- a/components/ResultViewGrid.tsx +++ b/components/ResultViewGrid.tsx @@ -9,6 +9,7 @@ import CardActions from "@mui/material/CardActions"; import CardContent from "@mui/material/CardContent"; import CardMedia from "@mui/material/CardMedia"; import "../styles/ResultView.css"; +import { trackClicks } from "../scripts/trackClicks"; const ResultViewGrid = ({ displayResult, @@ -31,6 +32,7 @@ const ResultViewGrid = ({ useEffect(() => { if (isModalOpen) { + trackClicks(displayName); window.onpopstate = () => { setIsModalOpen(false); }; diff --git a/package-lock.json b/package-lock.json index 9e3bdbaa..2b56cf69 100644 --- a/package-lock.json +++ b/package-lock.json @@ -155,6 +155,7 @@ "version": "1.21.5", "resolved": "https://registry.npmjs.org/@elastic/react-search-ui/-/react-search-ui-1.21.5.tgz", "integrity": "sha512-J7OpqyTavkxl0l95lB6Wlml5iLS6g/7YERZEemmyd/IgzgwLWLxV2XjSC8GMCSMzlFn5Q3Fb61HuJxu8p4+RaA==", + "license": "Apache-2.0", "dependencies": { "@elastic/react-search-ui-views": "1.21.5", "@elastic/search-ui": "1.21.5" @@ -168,6 +169,7 @@ "version": "1.21.5", "resolved": "https://registry.npmjs.org/@elastic/react-search-ui-views/-/react-search-ui-views-1.21.5.tgz", "integrity": "sha512-NzXAdbrbBIBiA+fI5VPCGTuCPubGKZhRX3Pcazk7Xn8jrFdzep1uWo1CmE1e9UMOPrVC8Es4Xovk9sqTdH6+Yw==", + "license": "Apache-2.0", "dependencies": { "@elastic/search-ui": "1.21.5", "downshift": "^3.2.10", @@ -183,6 +185,7 @@ "version": "1.21.5", "resolved": "https://registry.npmjs.org/@elastic/search-ui/-/search-ui-1.21.5.tgz", "integrity": "sha512-wzhTIhSzCio6RCaSsEbRf/yHUc9LpQSNgySWlcGbvtwdPBXnDP0Cwhsci5AUOdmRPvC3K0FID2qg4yF2c0SX+g==", + "license": "Apache-2.0", "dependencies": { "date-fns": "^1.30.1", "deep-equal": "^1.0.1", @@ -194,6 +197,7 @@ "version": "1.21.5", "resolved": "https://registry.npmjs.org/@elastic/search-ui-app-search-connector/-/search-ui-app-search-connector-1.21.5.tgz", "integrity": "sha512-8AFziRWK/cBxXlQHJ33IemUGkMDw3GNy5in14s0bA+j83noYjApMIIdmX0MA6WCUcHKgLYp4n5mY11BUy7XRPg==", + "license": "Apache-2.0", "dependencies": { "@elastic/app-search-javascript": "^8.1.2", "@elastic/search-ui": "1.21.5" @@ -284,6 +288,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -430,6 +435,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/@iconify/react/-/react-4.1.1.tgz", "integrity": "sha512-jed14EjvKjee8mc0eoscGxlg7mSQRkwQG3iX3cPBCO7UlOjz0DtlvTqxqEcHUJGh+z1VJ31Yhu5B9PxfO0zbdg==", + "license": "MIT", "dependencies": { "@iconify/types": "^2.0.0" }, @@ -443,7 +449,8 @@ "node_modules/@iconify/types": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", @@ -1013,7 +1020,8 @@ "node_modules/@types/stylis": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", - "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" }, "node_modules/abort-controller": { "version": "3.0.0", @@ -1183,6 +1191,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -1278,6 +1287,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1325,7 +1335,8 @@ "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" }, "node_modules/client-only": { "version": "0.0.1", @@ -1356,7 +1367,8 @@ "node_modules/compute-scroll-into-view": { "version": "1.0.20", "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", - "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -1390,6 +1402,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", "engines": { "node": ">=4" } @@ -1398,6 +1411,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -1574,10 +1588,23 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/downshift": { "version": "3.4.8", "resolved": "https://registry.npmjs.org/downshift/-/downshift-3.4.8.tgz", "integrity": "sha512-dZL3iNL/LbpHNzUQAaVq/eTD1ocnGKKjbAl/848Q0KEp6t81LJbS37w3f93oD6gqqAnjdgM7Use36qZSipHXBw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.4.5", "compute-scroll-into-view": "^1.0.9", @@ -1591,7 +1618,8 @@ "node_modules/downshift/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.4.607", @@ -1702,6 +1730,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1761,6 +1790,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1978,6 +2008,7 @@ "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", "dev": true, + "license": "MIT", "bin": { "husky": "bin.mjs" }, @@ -1999,6 +2030,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -2111,6 +2143,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -2191,6 +2224,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", "engines": { "node": ">=14" } @@ -2259,7 +2293,8 @@ "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", - "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" }, "node_modules/merge-stream": { "version": "2.0.0", @@ -2698,6 +2733,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", @@ -2800,6 +2836,7 @@ "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^4.1.0", "find-up": "^4.1.0", @@ -2824,6 +2861,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2831,6 +2869,13 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pretty-quick/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", @@ -2910,6 +2955,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.2.0.tgz", "integrity": "sha512-V6qeANJsT6tmOcZ4XiUmj8JXjRLbkusuufpuoBw2GiAn94fIixYjFLmbruD1Sbhn8fPLDnWawPp4CN37zQorvw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.3.2", @@ -2924,6 +2970,7 @@ "version": "5.43.0", "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^18.2.0" @@ -2965,6 +3012,7 @@ "version": "5.8.0", "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.8.0.tgz", "integrity": "sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.0", "@emotion/cache": "^11.4.0", @@ -3163,7 +3211,8 @@ "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -3217,6 +3266,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -3242,6 +3292,7 @@ "version": "6.1.11", "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.11.tgz", "integrity": "sha512-Ui0jXPzbp1phYij90h12ksljKGqF8ncGx+pjrNPsSPhbUUjWT2tD1FwGo2LF6USCnbrsIhNngDfodhxbegfEOA==", + "license": "MIT", "dependencies": { "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", @@ -3268,7 +3319,8 @@ "node_modules/styled-components/node_modules/stylis": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", - "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" }, "node_modules/styled-jsx": { "version": "5.1.1", @@ -3690,6 +3742,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -3712,13 +3765,15 @@ "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" }, "node_modules/typescript": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", - "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3728,9 +3783,9 @@ } }, "node_modules/undici": { - "version": "5.26.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.3.tgz", - "integrity": "sha512-H7n2zmKEWgOllKkIUkLvFmsJQj062lSm3uA4EYApG8gLuiOM0/go9bIoC3HVaSnfg4xunowDE2i9p8drkXuvDw==", + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", "dev": true, "dependencies": { "@fastify/busboy": "^2.0.0" @@ -3783,6 +3838,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, diff --git a/pages/mentors/[id].tsx b/pages/mentors/[id].tsx new file mode 100644 index 00000000..8348542e --- /dev/null +++ b/pages/mentors/[id].tsx @@ -0,0 +1,217 @@ +import React, { useState } from "react"; + +import AppSearchAPIConnector from "@elastic/search-ui-app-search-connector"; +import { Layout } from "@elastic/react-search-ui-views"; +import { + PagingInfo, + ResultsPerPage, + Paging, + Facet, + SearchProvider, + Results, + SearchBox, + Sorting, +} from "@elastic/react-search-ui"; +import { FilterType, SortDirection } from "@elastic/search-ui"; +import useMediaQuery from "@mui/material/useMediaQuery"; +import Tabs from "@mui/material/Tabs"; +import Tab from "@mui/material/Tab"; + +import ResultView from "../../components/ResultView"; +import Header from "../../components/Header"; +import Footer from "../../components/Footer"; + +import "@elastic/react-search-ui-views/lib/styles/styles.css"; +import "../../styles/App.css"; + +import { useEffect } from "react"; +import { Link } from "@mui/material"; + +import type { GetStaticProps, GetStaticPaths } from "next"; +import { useRouter } from "next/router"; + +import ClearFacets from "../../components/ResetButton"; + +// This also gets called at build time +export const getStaticProps: GetStaticProps = async (context) => { + // params contains the mentors page `id`. + // If the route is like /mentors/1, then params.id is 1 + const tabID = context.params?.id; + + // Pass post data to the page via props + return { props: {} }; +}; + +// This function gets called at build time +export const getStaticPaths: GetStaticPaths = async () => { + const pathWithParams = [{ params: { id: "0" } }, { params: { id: "1" } }]; + + return { + paths: pathWithParams, + fallback: true, + }; +}; + +const App = () => { + const isSmall = useMediaQuery("(max-width: 800px)"); + + const WAVES = [ + { tabId: 0, waveId: 5, waveName: "Wave 2023" }, + { tabId: 1, waveId: 4, waveName: "VJC Mentorship 2023" }, + ]; + + const [currentTabId, setCurrentTabId] = useState(0); + + const connector = new AppSearchAPIConnector({ + engineName: "mentorship-page", + endpointBase: "https://advisorysg.ent.ap-southeast-1.aws.found.io", + searchKey: "search-bv3s7kksqjinbswx7g4my9ur", + }); + + const configurationOptions = { + alwaysSearchOnInitialLoad: true, + apiConnector: connector, + autocompleteQuery: { + suggestions: { + types: { + documents: { + fields: ["name", "organisation", "role", "course_of_study"], + }, + }, + size: 5, + }, + }, + initialState: { + sort: [{ field: "", direction: "asc" as SortDirection }], + }, + searchQuery: { + result_fields: { + course_of_study: { raw: {}, snippet: { size: 100 } }, + full_bio: { raw: {}, snippet: { size: 200, fallback: true } }, + full_image_url: { raw: {} }, + industries: { raw: {} }, + name: { raw: {}, snippet: { size: 100 } }, + organisation: { raw: {}, snippet: { size: 100 } }, + role: { raw: {}, snippet: { size: 100 } }, + school: { raw: {}, snippet: { size: 100 } }, + thumbnail_image_url: { raw: {} }, + }, + filters: [ + { + type: "all" as FilterType, + field: "wave_id", + values: [WAVES[currentTabId].waveId], + }, + ], + disjunctiveFacets: ["organisation", "course_of_study"], + facets: { + industries: { type: "value", size: 100 }, + organisation: { type: "value", size: 100 }, + course_of_study: { type: "value", size: 100 }, + }, + }, + }; + + const router = useRouter(); + + useEffect(() => { + const pathname = router.asPath.slice(0, 10); // slice first 10 char to match the path + if (pathname === "/mentors/0") { + setCurrentTabId(0); + } else if (pathname === "/mentors/1") { + setCurrentTabId(1); + } + }, [currentTabId]); + + const handleTabChange = (_: React.ChangeEvent<{}>, tab: number) => { + setCurrentTabId(tab); + // FIXME: Hacky solution to identify the search button by Elastic Search UI + // and trigger a click to reset search results + const button = document.querySelector( + 'input[class="button sui-search-box__submit"]' + ) as HTMLButtonElement; + if (button) { + button.click(); + } + }; + + return ( +
+
+ +
+ + +

+ + {WAVES.map(({ waveName, tabId }) => ( + + ))} + +
+ } + bodyContent={ + } + /> + } + sideContent={ +
+ + + + + +
+ } + bodyHeader={ + + {} +
+ +
+
+ } + bodyFooter={} + /> +
+ +