diff --git a/config/development.js b/config/development.js index 088633d8..04d125f7 100644 --- a/config/development.js +++ b/config/development.js @@ -4,11 +4,6 @@ module.exports = { */ TC_MEMBER_SERVICE_URL: "https://api.topcoder-dev.com/v3/members", - /** - * Topcoder Teams Service base URL - */ - TC_TEAMS_SERVICE_URL: "https://api.topcoder-dev.com/taasmock", - /** * URL of Topcoder Community Website */ @@ -18,4 +13,7 @@ module.exports = { * Email to report issues to */ EMAIL_REPORT_ISSUE: "support+team-issue@topcoder-dev.com", + API: { + V5: "http://api.topcoder-dev.com/v5", + }, }; diff --git a/config/production.js b/config/production.js index f2b936ad..4e96d95a 100644 --- a/config/production.js +++ b/config/production.js @@ -4,11 +4,6 @@ module.exports = { */ TC_MEMBER_SERVICE_URL: "https://api.topcoder.com/v3/members", - /** - * Topcoder Teams Service base URL - */ - TC_TEAMS_SERVICE_URL: "http://localhost:8502/taasmock", - /** * URL of Topcoder Community Website */ @@ -18,4 +13,7 @@ module.exports = { * Email to report issues to */ EMAIL_REPORT_ISSUE: "support+team-issue@topcoder.com", + API: { + V5: "http://api.topcoder.com/v5", + }, }; diff --git a/package-lock.json b/package-lock.json index fb721d5e..9133be21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1105,7 +1105,6 @@ "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -2827,6 +2826,11 @@ "pretty-format": "^25.2.1" } }, + "@types/js-cookie": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.6.tgz", + "integrity": "sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw==" + }, "@types/json-schema": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", @@ -3229,6 +3233,11 @@ "@xtuc/long": "4.2.2" } }, + "@xobotyi/scrollbar-width": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", + "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -4252,6 +4261,11 @@ } } }, + "bowser": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.4.tgz", + "integrity": "sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5112,6 +5126,14 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, "core-js": { "version": "2.6.11", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", @@ -5353,6 +5375,15 @@ } } }, + "css-in-js-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz", + "integrity": "sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA==", + "requires": { + "hyphenate-style-name": "^1.0.2", + "isobject": "^3.0.1" + } + }, "css-loader": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", @@ -5532,6 +5563,22 @@ "fastparse": "^1.1.2" } }, + "css-tree": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", + "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -6048,6 +6095,14 @@ "is-arrayish": "^0.2.1" } }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "requires": { + "stackframe": "^1.1.1" + } + }, "es-abstract": { "version": "1.18.0-next.1", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", @@ -6810,8 +6865,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -6831,6 +6885,16 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fast-shallow-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", + "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" + }, + "fastest-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-1.0.1.tgz", + "integrity": "sha1-kSLUBtTJ2YvqZEpraFPVh0uHsCg=" + }, "fastparse": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", @@ -7880,6 +7944,11 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -7996,6 +8065,15 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "inline-style-prefixer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-4.0.2.tgz", + "integrity": "sha512-N8nVhwfYga9MiV9jWlwfdj1UDIaZlBFu4cJSJkIr7tZX7sHpHhGR5su1qdpW+7KPL8ISTvCIkcaFi/JdBknvPg==", + "requires": { + "bowser": "^1.7.3", + "css-in-js-utils": "^2.0.0" + } + }, "inquirer": { "version": "7.3.3", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", @@ -8432,8 +8510,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { "version": "0.1.2", @@ -11578,6 +11655,11 @@ "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, + "js-cookie": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", + "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -12048,6 +12130,11 @@ "safe-buffer": "^5.1.2" } }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -12472,6 +12559,28 @@ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", "dev": true }, + "nano-css": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.3.0.tgz", + "integrity": "sha512-uM/9NGK9/E9/sTpbIZ/bQ9xOLOIHZwrrb/CRlbDHBU/GFS7Gshl24v/WJhwsVViWkpOXUmiZ66XO7fSB4Wd92Q==", + "requires": { + "css-tree": "^1.0.0-alpha.28", + "csstype": "^2.5.5", + "fastest-stable-stringify": "^1.0.1", + "inline-style-prefixer": "^4.0.0", + "rtl-css-js": "^1.9.0", + "sourcemap-codec": "^1.4.1", + "stacktrace-js": "^2.0.0", + "stylis": "3.5.0" + }, + "dependencies": { + "csstype": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.14.tgz", + "integrity": "sha512-2mSc+VEpGPblzAxyeR+vZhJKgYg0Og0nnRi7pmRXFYYxSfnOnW8A5wwQb4n4cE2nIOzqKOAzLCaEX6aBmNEv8A==" + } + } + }, "nanoid": { "version": "3.1.16", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.16.tgz", @@ -14186,6 +14295,39 @@ } } }, + "react-universal-interface": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", + "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==" + }, + "react-use": { + "version": "15.3.4", + "resolved": "https://registry.npmjs.org/react-use/-/react-use-15.3.4.tgz", + "integrity": "sha512-cHq1dELW6122oi1+xX7lwNyE/ugZs5L902BuO8eFJCfn2api1KeuPVG1M/GJouVARoUf54S2dYFMKo5nQXdTag==", + "requires": { + "@types/js-cookie": "2.2.6", + "@xobotyi/scrollbar-width": "1.9.5", + "copy-to-clipboard": "^3.2.0", + "fast-deep-equal": "^3.1.3", + "fast-shallow-equal": "^1.0.0", + "js-cookie": "^2.2.1", + "nano-css": "^5.2.1", + "react-universal-interface": "^0.6.2", + "resize-observer-polyfill": "^1.5.1", + "screenfull": "^5.0.0", + "set-harmonic-interval": "^1.0.1", + "throttle-debounce": "^2.1.0", + "ts-easing": "^0.2.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -14274,8 +14416,7 @@ "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", - "dev": true + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" }, "regenerator-transform": { "version": "0.14.5", @@ -14499,6 +14640,11 @@ "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==", "dev": true }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -14734,6 +14880,14 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "rtl-css-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.14.0.tgz", + "integrity": "sha512-Dl5xDTeN3e7scU1cWX8c9b6/Nqz3u/HgR4gePc1kWXYiQWVQbKCEyK6+Hxve9LbcJ5EieHy1J9nJCN3grTtGwg==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -14884,6 +15038,11 @@ "ajv-keywords": "^3.1.0" } }, + "screenfull": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.0.2.tgz", + "integrity": "sha512-cCF2b+L/mnEiORLN5xSAz6H3t18i2oHh9BA8+CQlAh5DRw2+NFAGQJOSYbcGw8B2k04g/lVvFcfZ83b3ysH5UQ==" + }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", @@ -15050,6 +15209,11 @@ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, + "set-harmonic-interval": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", + "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -15377,6 +15541,11 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, "spawn-command": { "version": "0.0.2-1", "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", @@ -15496,12 +15665,51 @@ "figgy-pudding": "^3.5.1" } }, + "stack-generator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.5.tgz", + "integrity": "sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q==", + "requires": { + "stackframe": "^1.1.1" + } + }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==" + }, + "stacktrace-gps": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz", + "integrity": "sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg==", + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.1.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + } + } + }, + "stacktrace-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", + "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", + "requires": { + "error-stack-parser": "^2.0.6", + "stack-generator": "^2.0.5", + "stacktrace-gps": "^3.0.4" + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -15760,6 +15968,11 @@ } } }, + "stylis": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.0.tgz", + "integrity": "sha512-pP7yXN6dwMzAR29Q0mBrabPCe0/mNO1MSr93bhay+hcZondvMMTpeGyd8nbhYJdyperNT2DRxONQuUGcJr5iPw==" + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -15977,6 +16190,11 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, + "throttle-debounce": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", + "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -16077,6 +16295,11 @@ "repeat-string": "^1.6.1" } }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -16129,6 +16352,11 @@ "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", "dev": true }, + "ts-easing": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", + "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==" + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/package.json b/package.json index 64b1e967..e8a9c18e 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,8 @@ "react-avatar": "^3.9.7", "react-dom": "^16.12.0", "react-outside-click-handler": "^1.3.0", - "react-popper": "^2.2.3" + "react-popper": "^2.2.3", + "react-use": "^15.3.4" }, "browserslist": [ "last 1 version", diff --git a/src/components/SkillsList/index.jsx b/src/components/SkillsList/index.jsx index a95d1fdf..02ce61b6 100644 --- a/src/components/SkillsList/index.jsx +++ b/src/components/SkillsList/index.jsx @@ -15,13 +15,11 @@ import OutsideClickHandler from "react-outside-click-handler"; const SkillsList = ({ skills, - requiredSkills, limit = 3, showMatches = false, }) => { - const otherSkills = _.differenceBy(skills, requiredSkills, "id"); - const skillsToShow = (skills || requiredSkills).slice(0, limit); - const skillsToHide = (skills || requiredSkills).slice(limit); + const skillsToShow = skills.slice(0, limit); + const skillsToHide = skills.slice(limit); const [isOpen, setIsOpen] = useState(false); const [referenceElement, setReferenceElement] = useState(null); @@ -98,29 +96,11 @@ const SkillsList = ({ {...attributes.popper} >
- {requiredSkills && ( -
-
Required Skills
- -
- )} {skills && (
-
Other Skills
+
Skills
@@ -143,7 +123,6 @@ export const skillShape = PT.shape({ SkillsList.propTypes = { skills: PT.arrayOf(skillShape), - requiredSkills: PT.arrayOf(skillShape), limit: PT.number, showMatches: PT.bool, }; diff --git a/src/components/SkillsSummary/index.jsx b/src/components/SkillsSummary/index.jsx index c619d2d2..66ae1e56 100644 --- a/src/components/SkillsSummary/index.jsx +++ b/src/components/SkillsSummary/index.jsx @@ -10,7 +10,7 @@ import PercentageBar from "components/PercentageBar"; import SkillsList from "components/SkillsList"; import "./styles.module.scss"; -const SkillsSummary = ({ skills, requiredSkills, skillMatched, limit }) => { +const SkillsSummary = ({ skills, skillMatched, limit }) => { return (
@@ -19,7 +19,6 @@ const SkillsSummary = ({ skills, requiredSkills, skillMatched, limit }) => {
@@ -34,7 +33,6 @@ const skillShape = PT.shape({ SkillsSummary.propTypes = { skills: PT.arrayOf(skillShape), - requiredSkills: PT.arrayOf(skillShape), limit: PT.number, skillMatched: PT.number, }; diff --git a/src/routes/MyTeamsDetails/components/TeamMembers/index.jsx b/src/routes/MyTeamsDetails/components/TeamMembers/index.jsx index 56da23d1..9ae881fb 100644 --- a/src/routes/MyTeamsDetails/components/TeamMembers/index.jsx +++ b/src/routes/MyTeamsDetails/components/TeamMembers/index.jsx @@ -22,13 +22,13 @@ import Input from "components/Input"; import { skillShape } from "components/SkillsList"; const TeamMembers = ({ team }) => { - const { members } = team; - const userDetails = useUserDetails(_.map(members, "userId")); + const { resources } = team; + const userDetails = useUserDetails(_.map(resources, "id")); const [filter, setFilter] = useState(""); const filteredMembers = useMemo( () => - members.filter((member) => { + resources.filter((member) => { const filterLowerCase = filter.toLowerCase(); const lookupFields = _.compact([ member.handle, @@ -43,7 +43,7 @@ const TeamMembers = ({ team }) => { (field) => field.indexOf(filterLowerCase) > -1 ); }), - [members, filter] + [resources, filter] ); const onFilterChange = useCallback( @@ -91,20 +91,20 @@ const TeamMembers = ({ team }) => { /> } /> - {members.length === 0 &&
No members
} - {members.length > 0 && filteredMembers.length === 0 && ( + {resources.length === 0 &&
No members
} + {resources.length > 0 && filteredMembers.length === 0 && (
No members matching filter
)} {filteredMembers.length > 0 && (
{pageMembers.map((member) => ( -
+
@@ -115,14 +115,13 @@ const TeamMembers = ({ team }) => { {moment(member.endDate).format(DAY_FORMAT)}
- {formatMoney(member.weeklyCost)} + {formatMoney(member.weeklyCost || 0)}
@@ -181,19 +180,14 @@ const TeamMembers = ({ team }) => { TeamMembers.propTypes = { team: PT.shape({ name: PT.string, - members: PT.arrayOf( + resources: PT.arrayOf( PT.shape({ + id: PT.string, handle: PT.string, firstName: PT.string, lastName: PT.string, - role: PT.string, - weeklyCost: PT.number, - rating: PT.number, skills: PT.arrayOf(skillShape), skillMatched: PT.number, - startDate: PT.string, - endDate: PT.string, - requiredSkills: PT.arrayOf(skillShape), }) ), }), diff --git a/src/routes/MyTeamsDetails/components/TeamPositions/index.jsx b/src/routes/MyTeamsDetails/components/TeamPositions/index.jsx index e169e402..f838b171 100644 --- a/src/routes/MyTeamsDetails/components/TeamPositions/index.jsx +++ b/src/routes/MyTeamsDetails/components/TeamPositions/index.jsx @@ -30,7 +30,7 @@ const TeamPositions = ({ teamId, positions }) => {
{position.description} - +
@@ -38,7 +38,7 @@ const TeamPositions = ({ teamId, positions }) => { {moment(position.endDate).format(DAY_FORMAT)}
- {formatRate(position.customerRate, position.rateType)} + {formatRate(position.customerRate || 0, position.rateType)}
diff --git a/src/routes/MyTeamsDetails/components/TeamSummary/index.jsx b/src/routes/MyTeamsDetails/components/TeamSummary/index.jsx index 5ace5197..f8d7f8d5 100644 --- a/src/routes/MyTeamsDetails/components/TeamSummary/index.jsx +++ b/src/routes/MyTeamsDetails/components/TeamSummary/index.jsx @@ -27,7 +27,7 @@ const TeamSummary = ({ team }) => { }> - {formatMoney(team.weeklyCost)} + {formatMoney(team.weeklyCount || 0)} }> @@ -53,7 +53,7 @@ TeamSummary.propTypes = { team: PT.shape({ name: PT.string, endDate: PT.string, - weeklyCost: PT.number, + weeklyCount: PT.number, rating: PT.number, }), }; diff --git a/src/routes/MyTeamsDetails/index.jsx b/src/routes/MyTeamsDetails/index.jsx index c2ed0520..51f124d3 100644 --- a/src/routes/MyTeamsDetails/index.jsx +++ b/src/routes/MyTeamsDetails/index.jsx @@ -14,9 +14,15 @@ import LoadingIndicator from "components/LoadingIndicator"; import TeamSummary from "./components/TeamSummary"; import TeamMembers from "./components/TeamMembers"; import TeamPositions from "./components/TeamPositions"; +import { useAsync } from "react-use"; +import { + getAuthUserTokens, +} from "@topcoder/micro-frontends-navbar-app"; const MyTeamsDetails = ({ teamId }) => { - const [team, loadingError] = useData(getTeamById, teamId); + const authUserTokens = useAsync(getAuthUserTokens); + const tokenV3 = authUserTokens.value ? authUserTokens.value.tokenV3 : null; + const [team, loadingError] = useData(getTeamById, tokenV3, teamId); return ( @@ -27,7 +33,7 @@ const MyTeamsDetails = ({ teamId }) => { - + )} diff --git a/src/routes/MyTeamsList/components/TeamCard/index.jsx b/src/routes/MyTeamsList/components/TeamCard/index.jsx index a8828bef..67c71b9a 100644 --- a/src/routes/MyTeamsList/components/TeamCard/index.jsx +++ b/src/routes/MyTeamsList/components/TeamCard/index.jsx @@ -23,7 +23,7 @@ import { useUserDetails } from "hooks/useUserDetails"; import ThreeDotsMenu from "components/ThreeDotsMenu"; const TeamCard = ({ team }) => { - const userDetails = useUserDetails(_.map(team.members, "userId")); + const userDetails = useUserDetails(_.map(team.resources, "id")); return (
@@ -69,18 +69,18 @@ const TeamCard = ({ team }) => { }> - {formatMoney(team.weeklyCost)} + {formatMoney(team.weeklyCost || 0)} }> - {team.members.length} of {team.totalPositions} + {team.resources.length} of {team.totalPositions || 0}
({ + users={team.resources.map((member) => ({ ...member, - photoUrl: _.get(userDetails[member.userId], "photoURL"), + photoUrl: _.get(userDetails[member.id], "photo_url"), }))} />
@@ -91,7 +91,7 @@ TeamCard.propTypes = { team: PT.shape({ id: PT.number.isRequired, name: PT.string, - members: PT.array, + resources: PT.array, positions: PT.array, startDate: PT.string, endDate: PT.string, diff --git a/src/routes/MyTeamsList/index.jsx b/src/routes/MyTeamsList/index.jsx index 5abb33fa..819f97c5 100644 --- a/src/routes/MyTeamsList/index.jsx +++ b/src/routes/MyTeamsList/index.jsx @@ -11,9 +11,15 @@ import { getMyTeams } from "../../services/teams"; import TeamCard from "./components/TeamCard"; import TeamCardGrid from "./components/TeamCardGrid"; import LoadingIndicator from "../../components/LoadingIndicator"; +import { useAsync } from "react-use"; +import { + getAuthUserTokens, +} from "@topcoder/micro-frontends-navbar-app"; const MyTeamsList = () => { - const [myTeams, loadingError] = useData(getMyTeams); + const authUserTokens = useAsync(getAuthUserTokens); + const tokenV3 = authUserTokens.value ? authUserTokens.value.tokenV3 : null; + const [myTeams, loadingError] = useData(getMyTeams, tokenV3); return ( diff --git a/src/routes/PositionDetails/PositionCandidates/index.jsx b/src/routes/PositionDetails/PositionCandidates/index.jsx index 5ded3b76..d0fa8678 100644 --- a/src/routes/PositionDetails/PositionCandidates/index.jsx +++ b/src/routes/PositionDetails/PositionCandidates/index.jsx @@ -23,7 +23,6 @@ import Button from "components/Button"; import Pagination from "components/Pagination"; import IconResume from "../../../assets/images/icon-resume.svg"; import { skillShape } from "components/SkillsList"; -import { TC_TEAMS_SERVICE_URL } from "../../../../config"; /** * Generates a function to sort candidates @@ -47,7 +46,6 @@ const createSortCandidatesMethod = (sortBy) => (candidate1, candidate2) => { const PositionCandidates = ({ candidates, candidateStatus, - positionSkills, }) => { const userDetails = useUserDetails(_.map(candidates, "userId")); const [sortBy, setSortBy] = useState(CANDIDATES_SORT_BY.SKILL_MATCHED); @@ -124,14 +122,13 @@ const PositionCandidates = ({
{candidate.resumeLink && ( @@ -184,7 +181,6 @@ const PositionCandidates = ({ PositionCandidates.propType = { candidates: PT.array, candidateStatus: PT.oneOf(Object.values(CANDIDATE_STATUS)), - positionSkills: PT.arrayOf(skillShape), }; export default PositionCandidates; diff --git a/src/routes/PositionDetails/index.jsx b/src/routes/PositionDetails/index.jsx index 545d9283..09d48fa9 100644 --- a/src/routes/PositionDetails/index.jsx +++ b/src/routes/PositionDetails/index.jsx @@ -14,11 +14,18 @@ import { getPositionDetails } from "services/teams"; import PositionCandidates from "./PositionCandidates"; import "./styles.module.scss"; import CandidatesStatusFilter from "./CandidatesStatusFilter"; +import { useAsync } from "react-use"; +import { + getAuthUserTokens, +} from "@topcoder/micro-frontends-navbar-app"; const PositionDetails = ({ teamId, positionId }) => { + const authUserTokens = useAsync(getAuthUserTokens); + const tokenV3 = authUserTokens.value ? authUserTokens.value.tokenV3 : null; const [candidateStatus, setCandidateStatus] = useState(CANDIDATE_STATUS.OPEN); const [position, loadingError] = useData( getPositionDetails, + tokenV3, teamId, positionId ); @@ -50,7 +57,6 @@ const PositionDetails = ({ teamId, positionId }) => { )} diff --git a/src/services/teams.js b/src/services/teams.js index abc5f34c..95ffcf7b 100644 --- a/src/services/teams.js +++ b/src/services/teams.js @@ -9,31 +9,56 @@ import config from "../../config"; /** * Get my teams. * + * @param {string} tokenV3 login token + * * @returns {Promise} list of teams */ -export const getMyTeams = () => { - return axios.get(`${config.TC_TEAMS_SERVICE_URL}/taas-teams`); +export const getMyTeams = (tokenV3) => { + if (!tokenV3) { + return Promise.resolve({ + data: null, + }); + } + return axios.get(`${config.API.V5}/taas-teams`, { + headers: { Authorization: `Bearer ${tokenV3}` }, + }); }; /** * Get team by id. * + * @param {string} tokenV3 login token * @param {string|number} teamId team id * * @returns {Promise<{}>} team object */ -export const getTeamById = (teamId) => { - return axios.get(`${config.TC_TEAMS_SERVICE_URL}/taas-teams/${teamId}`); +export const getTeamById = (tokenV3, teamId) => { + if (!tokenV3) { + return Promise.resolve({ + data: null, + }); + } + return axios.get(`${config.API.V5}/taas-teams/${teamId}`, { + headers: { Authorization: `Bearer ${tokenV3}` }, + }); }; /** * Get team position details. * + * @param {string} tokenV3 login token * @param {string|number} teamId team id * @param {string|number} positionId position id * * @returns {Promise} job object */ -export const getPositionDetails = (teamId, positionId) => { - return axios.get(`${config.TC_TEAMS_SERVICE_URL}/jobs/${positionId}`); +export const getPositionDetails = (tokenV3, teamId, positionId) => { + if (!tokenV3) { + return Promise.resolve({ + data: null, + }); + } + return axios.get(`${config.API.V5}/taas-teams/${teamId}/jobs/${positionId}`, { + headers: { Authorization: `Bearer ${tokenV3}` }, + }); };