From b8de5d666de80557073d4ce5ac43258cbfdd8a35 Mon Sep 17 00:00:00 2001 From: Rajesh Danabal Date: Wed, 26 Feb 2020 21:43:15 +0530 Subject: [PATCH 1/4] Issues dev --- package-lock.json | 266 ++++++++++++++++++++++++++++++++++++++ package.json | 2 + src/constants/Issues.ts | 11 ++ src/containers/Issues.tsx | 175 ++++++++++++++++++++++++- 4 files changed, 449 insertions(+), 5 deletions(-) create mode 100644 src/constants/Issues.ts diff --git a/package-lock.json b/package-lock.json index fe995f4..0bd9e94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1495,6 +1495,82 @@ "@types/node": ">= 8" } }, + "@progress/kendo-file-saver": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@progress/kendo-file-saver/-/kendo-file-saver-1.0.7.tgz", + "integrity": "sha512-8tsho/+DATzfTW4BBaHrkF3C3jqH2/bQ+XbjqA0KfmTiBRVK6ygK+tkvkYeDhFlQBbJ02MmJlEC6OmXvXRFkUg==" + }, + "@progress/kendo-ooxml": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@progress/kendo-ooxml/-/kendo-ooxml-1.4.2.tgz", + "integrity": "sha512-kdU73+7fo/nOvK9KT3jtRMXGimfCMg3eBkQJQ9NAF3MtlDTvdSO3eXoVLkTdpHiWtrKR09cuQZfNkv6PfebVCw==", + "requires": { + "jszip": "^3.1.0" + }, + "dependencies": { + "jszip": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "@progress/kendo-react-common": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@progress/kendo-react-common/-/kendo-react-common-3.11.0.tgz", + "integrity": "sha512-QCLQh8w1qaTqzGAxey8Sn94xafHfNguccsuFzVWsqteuJd71HfLjwToMuuRSQFrMTs3ksqndUszvjrLB0gp/PA==", + "requires": { + "@telerik/kendo-draggable": "2.0.0", + "prop-types": "^15.6.0" + } + }, + "@progress/kendo-react-excel-export": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@progress/kendo-react-excel-export/-/kendo-react-excel-export-3.11.0.tgz", + "integrity": "sha512-hktpd8uFmI4GZGApKEBXnH1AbY9cRb5CNhRGnLUGmD/g1ZHG/bhKujHjbAnpE7s8BJEVRoFGW8tb30BX1QQS9A==", + "requires": { + "@progress/kendo-file-saver": "^1.0.0", + "@progress/kendo-ooxml": "^1.0.0", + "prop-types": "^15.6.0" + } + }, + "@progress/kendo-react-grid": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@progress/kendo-react-grid/-/kendo-react-grid-3.11.0.tgz", + "integrity": "sha512-OcPLtak1kzWM3JLolBqjT3/ackQ8ko+afJeRU9uQJFADIHGXA88N43b9kR8yr9zWBClE1Dsy5KrsozAqJCPyQA==", + "requires": { + "@progress/kendo-react-common": "3.11.0", + "prop-types": "^15.6.0" + } + }, "@sheerun/mutationobserver-shim": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz", @@ -1609,6 +1685,11 @@ "loader-utils": "^1.2.3" } }, + "@telerik/kendo-draggable": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@telerik/kendo-draggable/-/kendo-draggable-2.0.0.tgz", + "integrity": "sha512-6fZcwVZQNh9ovWbueo2VFgpFxktWdxaABe/gVZ+dJy4h+ngkoSr0HSmfUJY5QupMQ1RvLA9hr3Eficbqx+gU0Q==" + }, "@testing-library/dom": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.12.2.tgz", @@ -1833,6 +1914,14 @@ "@types/react": "*" } }, + "@types/react-csv": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/react-csv/-/react-csv-1.1.1.tgz", + "integrity": "sha512-sP8AxGrFJ/kb7ygFpGkssdD/vKSTqdZDJbw3pJKTCa1C0UoT+0+rdUWy2fZqvhvvdpHG+OCJ4G8O7OZqVIa+BA==", + "requires": { + "@types/react": "*" + } + }, "@types/react-dom": { "version": "16.9.5", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", @@ -2187,6 +2276,15 @@ } } }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "aggregate-error": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", @@ -3251,6 +3349,17 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "cfb": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz", + "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", + "requires": { + "adler-32": "~1.2.0", + "commander": "^2.16.0", + "crc-32": "~1.2.0", + "printj": "~1.1.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3476,6 +3585,34 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "codepage": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", + "integrity": "sha1-Ty5dfAl13ij4hJgFjcta/KtqX3E=", + "requires": { + "commander": "^4.1.1", + "concat-stream": "^2.0.0", + "voc": "^1.2.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + } + } + }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -3516,6 +3653,11 @@ "simple-swizzle": "^0.2.2" } }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3745,6 +3887,15 @@ "parse-json": "^4.0.0" } }, + "crc-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", + "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -5221,6 +5372,11 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -5554,6 +5710,11 @@ "schema-utils": "^2.5.0" } }, + "file-saver": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", + "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" + }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -5759,6 +5920,11 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, + "frac": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", + "integrity": "sha1-V3Z3t/3L5vr3xGHxgB00E3zaQ1Q=" + }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -6420,6 +6586,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, "immer": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", @@ -7995,6 +8166,11 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, + "json-to-csv-export": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-to-csv-export/-/json-to-csv-export-1.0.2.tgz", + "integrity": "sha512-8yim1kx6h6KoAGDanN65KnFb2rTB60QBUbVqq1302AVSbj9bvzL7f7druqzSNEA5hMMGsqI5G5WcU0tnKWks1Q==" + }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -8142,6 +8318,21 @@ "object.assign": "^4.1.0" } }, + "jszip": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", + "integrity": "sha1-SHqTt2w7/6bLCFzWHrk06r4tKU8=", + "requires": { + "pako": "~0.2.5" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" + } + } + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -8228,6 +8419,14 @@ "type-check": "~0.3.2" } }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -10650,6 +10849,11 @@ } } }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -10884,6 +11088,11 @@ "universal-cookie": "^4.0.0" } }, + "react-csv": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/react-csv/-/react-csv-2.0.1.tgz", + "integrity": "sha512-GK2MVXvEQW1PxaDja2Ksyb487Ae8jC8Kq70vrqwl1KFQojQleK2q/nDxeExe8482jAVLOE+w1qCCZN5Gu5ekKA==" + }, "react-dev-utils": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.0.tgz", @@ -11022,11 +11231,28 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" }, + "react-export-excel": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/react-export-excel/-/react-export-excel-0.5.3.tgz", + "integrity": "sha512-J0xKLojhLYEpgptdJWU7o4NljSQxv96yFNLAfa9M0m1jNNiVXBdBSlWCW713MRFl1ECJRhV4CbrjbmvEjEFvWg==", + "requires": { + "file-saver": "1.3.8", + "xlsx": "git+https://github.com/securedeveloper/js-xlsx.git" + } + }, "react-is": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, + "react-json-to-csv": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/react-json-to-csv/-/react-json-to-csv-1.0.4.tgz", + "integrity": "sha512-WiLLNrJ3ruyLxPN6HS5kX5EOv5I1Wj3rB2/gS3uzz3gKHTvqUMaTEVIt2lLpvLoHHWRsRy0p629qiTsTN8hemw==", + "requires": { + "json-to-csv-export": "^1.0.2" + } + }, "react-router": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", @@ -11837,6 +12063,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -12235,6 +12466,16 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "ssf": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", + "integrity": "sha1-udTcahwbz3b4q/qW19dlb7Kr7NY=", + "requires": { + "colors": "0.6.2", + "frac": "0.3.1", + "voc": "^1.2.0" + } + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -13291,6 +13532,11 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, + "voc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", + "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==" + }, "w3c-hr-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", @@ -15186,6 +15432,26 @@ "async-limiter": "~1.0.0" } }, + "xlsx": { + "version": "git+https://github.com/securedeveloper/js-xlsx.git#51e2ce32e0b2dc9f9bf75cea52afeb54af8a47b3", + "from": "git+https://github.com/securedeveloper/js-xlsx.git", + "requires": { + "adler-32": "^1.2.0", + "cfb": ">=0.10.0", + "codepage": "~1.3.6", + "commander": "^4.1.1", + "crc-32": "^1.2.0", + "jszip": "2.4.0", + "ssf": "~0.8.1" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index b3a21de..457331c 100644 --- a/package.json +++ b/package.json @@ -14,11 +14,13 @@ "@types/material-ui": "^0.21.7", "@types/node": "^12.12.27", "@types/react": "^16.9.20", + "@types/react-csv": "^1.1.1", "@types/react-dom": "^16.9.5", "@types/react-router-dom": "^5.1.3", "axios": "^0.19.2", "react": "^16.12.0", "react-cookie": "^4.0.3", + "react-csv": "^2.0.1", "react-dom": "^16.12.0", "react-router-dom": "^5.1.2", "react-scripts": "3.4.0", diff --git a/src/constants/Issues.ts b/src/constants/Issues.ts new file mode 100644 index 0000000..8e6ed52 --- /dev/null +++ b/src/constants/Issues.ts @@ -0,0 +1,11 @@ +export const HEADERS = [ + { label: "Issue Number", key: "number" }, + { label: "Issue Title", key: "title" }, + { label: "Description", key: "body" }, + { label: "Reported By", key: "reporter" }, + { label: "Issue Type", key: "issueType" }, + { label: "Issue Status", key: "issueStatus" }, + { label: "Component", key: "component" } +]; +export const ISSUE_TYPES = ["bug", "requirement"]; +export const ISSUE_STATUS = ["low", "high", "medium", "critical"]; \ No newline at end of file diff --git a/src/containers/Issues.tsx b/src/containers/Issues.tsx index 8a1d11c..f8f5842 100644 --- a/src/containers/Issues.tsx +++ b/src/containers/Issues.tsx @@ -1,16 +1,181 @@ -import React from 'react'; - +import React, { useEffect, useState } from 'react' +import { withCookies } from 'react-cookie'; +import { Octokit } from "@octokit/rest"; +import { CSVDownload } from "react-csv"; +import { HEADERS, ISSUE_TYPES, ISSUE_STATUS } from "../constants/Issues" interface Props { + cookies: any; +} + +interface Repo { + name: string; + private: boolean; + full_name: string; + description: string; + url: string; } -const Issues: React.FC = () => { +interface Issue { + number: number; + title: string; + body: string; + reporter: string; + issueType: string; + issueStatus: string; + component: string; +} + +const Issues: React.FC = ({ cookies }) => { + + let cookeieToken = cookies.get("token"); + cookeieToken = cookeieToken === "undefined" ? undefined : cookeieToken; + let repos: Repo[] = [], + octokit: Octokit = new Octokit({ + auth: cookeieToken + }); + + const [issues, setIssues] = useState({ + repos: repos + }); + + const downloadIssue: any = async (repoName: string, repoFullName: string) => { + + if (octokit !== undefined) { + + let result: Issue[] = []; + + const repoFullNameArr = repoFullName.split("/"), + response = await octokit.issues.listForRepo({ + owner: repoFullNameArr[0], + repo: repoFullNameArr[1], + state: "all", + sort: "updated", + direction: "desc", + per_page: 100, + page: 1 + }); + + console.log(repoFullName, response); + + if (response && response.status === 200) { + response.data.forEach(data => { + let issueType = "", + issueStatus = "", + component = ""; + if (data.labels) { + data.labels.forEach((label) => { + if (label.name.toLowerCase().indexOf("xviz") !== -1) { + component = label.name; + } + if (ISSUE_STATUS.indexOf(label.name.toLowerCase()) !== -1) { + issueStatus = label.name; + } + if (ISSUE_TYPES.indexOf(label.name.toLowerCase()) !== -1) { + issueType = label.name; + } + }) + } + + result.push({ + number: data.number, + title: data.title, + body: data.body, + reporter: data.user.login, + issueType: issueType, + issueStatus: issueStatus, + component: component + }) + }); + } + return ( + + Download Issues + + ); + + } else { + return null; + } + + }; + + const getRepoTable = (repos: Repo[]) => { + + let table: any[] = []; + + { + repos.forEach(repo => { + table.push( + + {repo.name} + {repo.url} + {repo.description} + + + + + ) + }) + } + + return table; + } + + useEffect(() => { + const getRepoData = async () => { + if (cookeieToken && octokit) { + const reposResp = await octokit.repos.list({ per_page: 100, page: 1 }); + console.log("repos", issues); + if (reposResp && reposResp.status === 200) { + + reposResp.data.forEach((repoData: any) => { + repos.push({ + name: repoData.name, + private: repoData.private, + full_name: repoData.full_name, + description: repoData.description, + url: repoData.html_url + }) + }); + } + + setIssues({ + repos: repos + }) + } + } + + getRepoData(); + // eslint-disable-next-line + }, []); return (
- Issues + + + + + + + + + + + {getRepoTable(issues.repos)} + +
+ Name + + URL + + Description + + Export +
+
) } -export default Issues; +export default withCookies(Issues) \ No newline at end of file From f7ef530f9c9f93b27aff58e91efa41083a7b8491 Mon Sep 17 00:00:00 2001 From: Rajesh Danabal Date: Mon, 2 Mar 2020 18:43:06 +0530 Subject: [PATCH 2/4] Basic Aggrid integration & CSV Exporting --- package-lock.json | 270 +++----------------------------------- package.json | 4 + src/App.tsx | 4 + src/containers/Home.tsx | 18 ++- src/containers/Issue.tsx | 184 ++++++++++++++++++++++++++ src/containers/Issues.tsx | 13 +- 6 files changed, 233 insertions(+), 260 deletions(-) create mode 100644 src/containers/Issue.tsx diff --git a/package-lock.json b/package-lock.json index 0bd9e94..32a62ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1495,82 +1495,6 @@ "@types/node": ">= 8" } }, - "@progress/kendo-file-saver": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@progress/kendo-file-saver/-/kendo-file-saver-1.0.7.tgz", - "integrity": "sha512-8tsho/+DATzfTW4BBaHrkF3C3jqH2/bQ+XbjqA0KfmTiBRVK6ygK+tkvkYeDhFlQBbJ02MmJlEC6OmXvXRFkUg==" - }, - "@progress/kendo-ooxml": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@progress/kendo-ooxml/-/kendo-ooxml-1.4.2.tgz", - "integrity": "sha512-kdU73+7fo/nOvK9KT3jtRMXGimfCMg3eBkQJQ9NAF3MtlDTvdSO3eXoVLkTdpHiWtrKR09cuQZfNkv6PfebVCw==", - "requires": { - "jszip": "^3.1.0" - }, - "dependencies": { - "jszip": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", - "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "set-immediate-shim": "~1.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "@progress/kendo-react-common": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-common/-/kendo-react-common-3.11.0.tgz", - "integrity": "sha512-QCLQh8w1qaTqzGAxey8Sn94xafHfNguccsuFzVWsqteuJd71HfLjwToMuuRSQFrMTs3ksqndUszvjrLB0gp/PA==", - "requires": { - "@telerik/kendo-draggable": "2.0.0", - "prop-types": "^15.6.0" - } - }, - "@progress/kendo-react-excel-export": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-excel-export/-/kendo-react-excel-export-3.11.0.tgz", - "integrity": "sha512-hktpd8uFmI4GZGApKEBXnH1AbY9cRb5CNhRGnLUGmD/g1ZHG/bhKujHjbAnpE7s8BJEVRoFGW8tb30BX1QQS9A==", - "requires": { - "@progress/kendo-file-saver": "^1.0.0", - "@progress/kendo-ooxml": "^1.0.0", - "prop-types": "^15.6.0" - } - }, - "@progress/kendo-react-grid": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@progress/kendo-react-grid/-/kendo-react-grid-3.11.0.tgz", - "integrity": "sha512-OcPLtak1kzWM3JLolBqjT3/ackQ8ko+afJeRU9uQJFADIHGXA88N43b9kR8yr9zWBClE1Dsy5KrsozAqJCPyQA==", - "requires": { - "@progress/kendo-react-common": "3.11.0", - "prop-types": "^15.6.0" - } - }, "@sheerun/mutationobserver-shim": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz", @@ -1685,11 +1609,6 @@ "loader-utils": "^1.2.3" } }, - "@telerik/kendo-draggable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@telerik/kendo-draggable/-/kendo-draggable-2.0.0.tgz", - "integrity": "sha512-6fZcwVZQNh9ovWbueo2VFgpFxktWdxaABe/gVZ+dJy4h+ngkoSr0HSmfUJY5QupMQ1RvLA9hr3Eficbqx+gU0Q==" - }, "@testing-library/dom": { "version": "6.12.2", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.12.2.tgz", @@ -2276,13 +2195,22 @@ } } }, - "adler-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", - "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=", + "ag-grid-community": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-22.1.1.tgz", + "integrity": "sha512-FNyv9e9JIuuR8NNi/r3NjIjUVy2/K5GgPjwQ63g9/Z4U8EudQZLINGMVKI6OwtZfWyyNSd0hQDCNsdvx0OR1WQ==" + }, + "ag-grid-enterprise": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/ag-grid-enterprise/-/ag-grid-enterprise-22.1.1.tgz", + "integrity": "sha512-TLZi9++lrxlCQY2SI+5b4VXDP2O/P0ssUQSelifA2CvwwGzQcPkPWZQKrIHlCkIHBuBoJ9OiEw7GX3AIuoBUug==" + }, + "ag-grid-react": { + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/ag-grid-react/-/ag-grid-react-22.1.1.tgz", + "integrity": "sha512-zMz2R3pyo2hEw+GUL0YcsrcMFPxcs7ZjMyhBJpqxfMT/EdwFEGupsrRHKZQjxTaEAgawDhx8Rzt8dNFBLNk3qw==", "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" + "prop-types": "^15.6.2" } }, "aggregate-error": { @@ -3349,17 +3277,6 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "cfb": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.1.3.tgz", - "integrity": "sha512-joXBW0nMuwV9no7UTMiyVJnQL6XIU3ThXVjFUDHgl9MpILPOomyfaGqC290VELZ48bbQKZXnQ81UT5HouTxHsw==", - "requires": { - "adler-32": "~1.2.0", - "commander": "^2.16.0", - "crc-32": "~1.2.0", - "printj": "~1.1.2" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -3585,34 +3502,6 @@ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, - "codepage": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.3.8.tgz", - "integrity": "sha1-Ty5dfAl13ij4hJgFjcta/KtqX3E=", - "requires": { - "commander": "^4.1.1", - "concat-stream": "^2.0.0", - "voc": "^1.2.0" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - } - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -3653,11 +3542,6 @@ "simple-swizzle": "^0.2.2" } }, - "colors": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", - "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=" - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3887,15 +3771,6 @@ "parse-json": "^4.0.0" } }, - "crc-32": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz", - "integrity": "sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.1.0" - } - }, "create-ecdh": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", @@ -5372,11 +5247,6 @@ "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -5710,11 +5580,6 @@ "schema-utils": "^2.5.0" } }, - "file-saver": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-1.3.8.tgz", - "integrity": "sha512-spKHSBQIxxS81N/O21WmuXA2F6wppUCsutpzenOeZzOCCJ5gEfcbqJP983IrpLXzYmXnMUa6J03SubcNPdKrlg==" - }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", @@ -5920,11 +5785,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "frac": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/frac/-/frac-0.3.1.tgz", - "integrity": "sha1-V3Z3t/3L5vr3xGHxgB00E3zaQ1Q=" - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -6586,11 +6446,6 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" - }, "immer": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", @@ -8166,11 +8021,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json-to-csv-export": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-to-csv-export/-/json-to-csv-export-1.0.2.tgz", - "integrity": "sha512-8yim1kx6h6KoAGDanN65KnFb2rTB60QBUbVqq1302AVSbj9bvzL7f7druqzSNEA5hMMGsqI5G5WcU0tnKWks1Q==" - }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -8318,21 +8168,6 @@ "object.assign": "^4.1.0" } }, - "jszip": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-2.4.0.tgz", - "integrity": "sha1-SHqTt2w7/6bLCFzWHrk06r4tKU8=", - "requires": { - "pako": "~0.2.5" - }, - "dependencies": { - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" - } - } - }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -8419,14 +8254,6 @@ "type-check": "~0.3.2" } }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "requires": { - "immediate": "~3.0.5" - } - }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -10849,11 +10676,6 @@ } } }, - "printj": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", - "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -11226,33 +11048,21 @@ "scheduler": "^0.18.0" } }, + "react-dom-factories": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/react-dom-factories/-/react-dom-factories-1.0.2.tgz", + "integrity": "sha1-63cFxNs2+1AbOqOP91lhaqD/luA=" + }, "react-error-overlay": { "version": "6.0.6", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.6.tgz", "integrity": "sha512-Yzpno3enVzSrSCnnljmr4b/2KUQSMZaPuqmS26t9k4nW7uwJk6STWmH9heNjPuvqUTO3jOSPkHoKgO4+Dw7uIw==" }, - "react-export-excel": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/react-export-excel/-/react-export-excel-0.5.3.tgz", - "integrity": "sha512-J0xKLojhLYEpgptdJWU7o4NljSQxv96yFNLAfa9M0m1jNNiVXBdBSlWCW713MRFl1ECJRhV4CbrjbmvEjEFvWg==", - "requires": { - "file-saver": "1.3.8", - "xlsx": "git+https://github.com/securedeveloper/js-xlsx.git" - } - }, "react-is": { "version": "16.12.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==" }, - "react-json-to-csv": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/react-json-to-csv/-/react-json-to-csv-1.0.4.tgz", - "integrity": "sha512-WiLLNrJ3ruyLxPN6HS5kX5EOv5I1Wj3rB2/gS3uzz3gKHTvqUMaTEVIt2lLpvLoHHWRsRy0p629qiTsTN8hemw==", - "requires": { - "json-to-csv-export": "^1.0.2" - } - }, "react-router": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.1.2.tgz", @@ -12063,11 +11873,6 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -12466,16 +12271,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, - "ssf": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.8.2.tgz", - "integrity": "sha1-udTcahwbz3b4q/qW19dlb7Kr7NY=", - "requires": { - "colors": "0.6.2", - "frac": "0.3.1", - "voc": "^1.2.0" - } - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -13532,11 +13327,6 @@ "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, - "voc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/voc/-/voc-1.2.0.tgz", - "integrity": "sha512-BOuDjFFYvJdZO6e/N65AlaDItXo2TgyLjeyRYcqgAPkXpp5yTJcvkL2n+syO1r9Qc5g96tfBD2tuiMhYDmaGcA==" - }, "w3c-hr-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", @@ -15432,26 +15222,6 @@ "async-limiter": "~1.0.0" } }, - "xlsx": { - "version": "git+https://github.com/securedeveloper/js-xlsx.git#51e2ce32e0b2dc9f9bf75cea52afeb54af8a47b3", - "from": "git+https://github.com/securedeveloper/js-xlsx.git", - "requires": { - "adler-32": "^1.2.0", - "cfb": ">=0.10.0", - "codepage": "~1.3.6", - "commander": "^4.1.1", - "crc-32": "^1.2.0", - "jszip": "2.4.0", - "ssf": "~0.8.1" - }, - "dependencies": { - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" - } - } - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", diff --git a/package.json b/package.json index 457331c..e4c0f3f 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,15 @@ "@types/react-csv": "^1.1.1", "@types/react-dom": "^16.9.5", "@types/react-router-dom": "^5.1.3", + "ag-grid-community": "^22.1.1", + "ag-grid-enterprise": "^22.1.1", + "ag-grid-react": "^22.1.1", "axios": "^0.19.2", "react": "^16.12.0", "react-cookie": "^4.0.3", "react-csv": "^2.0.1", "react-dom": "^16.12.0", + "react-dom-factories": "^1.0.2", "react-router-dom": "^5.1.2", "react-scripts": "3.4.0", "typescript": "^3.7.5" diff --git a/src/App.tsx b/src/App.tsx index 12ddded..934538e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -15,6 +15,7 @@ import Typography from '@material-ui/core/Typography'; import IconButton from '@material-ui/core/IconButton'; import MenuIcon from '@material-ui/icons/Menu'; +import Issue from "./containers/Issue"; import Issues from "./containers/Issues"; import Home from './containers/Home'; @@ -60,6 +61,9 @@ const App: React.FC = () => { + + + diff --git a/src/containers/Home.tsx b/src/containers/Home.tsx index e9aeb3a..524afea 100644 --- a/src/containers/Home.tsx +++ b/src/containers/Home.tsx @@ -5,6 +5,10 @@ import GitHubIcon from '@material-ui/icons/GitHub'; import { useLocation } from "react-router-dom"; import axios from 'axios'; import { Octokit } from "@octokit/rest"; + +import { + Link + } from "react-router-dom"; interface Props { cookies: any; } @@ -93,16 +97,20 @@ const Home: React.FC = ({ cookies }) => { const renderHome = () => { return ( -

Welcom Home, {user.name}

+
+

Welcom Home, {user.name}

+ + Issues +
) } - if (!code && !cookeieToken) { - return renderLoginButton(); - } +if (!code && !cookeieToken) { + return renderLoginButton(); +} - return renderHome(); +return renderHome(); } diff --git a/src/containers/Issue.tsx b/src/containers/Issue.tsx new file mode 100644 index 0000000..0af4cba --- /dev/null +++ b/src/containers/Issue.tsx @@ -0,0 +1,184 @@ +import React, { useEffect, useState } from 'react' +import { withCookies } from 'react-cookie'; +import { Octokit } from "@octokit/rest"; +import { CSVDownload } from "react-csv"; +import { HEADERS, ISSUE_TYPES, ISSUE_STATUS } from "../constants/Issues"; +import { AgGridReact } from 'ag-grid-react'; +import 'ag-grid-community/dist/styles/ag-grid.css'; +import 'ag-grid-community/dist/styles/ag-theme-balham.css'; + +import { + BrowserRouter as Router, + Link, + useLocation +} from "react-router-dom"; + +interface Props { + cookies: any; +} + +interface Issue { + number: number; + title: string; + body: string; + reporter: string; + issueType: string; + issueStatus: string; + component: string; + createdAt: string; + updatedAt: string; + closedAt: string; +} + +const Issue: React.FC = ({ cookies }) => { + + let cookeieToken = cookies.get("token"); + cookeieToken = cookeieToken === "undefined" ? undefined : cookeieToken; + let issuesArr: Issue[] = [], + octokit: Octokit = new Octokit({ + auth: cookeieToken + }); + const columnDefs = [ + { headerName: "Issue Number", field: "number" }, + { headerName: "Issue Title", field: "title" }, + { headerName: "Description", field: "body" }, + { headerName: "Reported By", field: "reporter" }, + { headerName: "Issue Type", field: "issueType" }, + { headerName: "Issue Status", field: "issueStatus" }, + { headerName: "Component", field: "component" }, + { headerName: "Created At", field: "createdAt" }, + { headerName: "updated At", field: "updatedAt" }, + { headerName: "Closed At", field: "closedAt" }, + + ]; + + let gridOptions: any = null; + + const [issues, setIssues] = useState({ + rowData: issuesArr, + columnDefs: columnDefs, + gridOptions: gridOptions + }); + + + // A custom hook that builds on useLocation to parse + // the query string for you. + const useQuery = () => { + return new URLSearchParams(useLocation().search); + } + + let query = useQuery(); + + let rowData = [ + { make: "Toyota", model: "Celica", price: 35000 }, + { make: "Ford", model: "Mondeo", price: 32000 }, + { make: "Porsche", model: "Boxter", price: 72000 } + ]; + + useEffect(() => { + const getRepoData = async () => { + + let repoFullName = query.get('full_name'); + + if (octokit !== undefined && repoFullName !== null) { + + let result: Issue[] = []; + let hasNextPage = true; + let currPage = 1; + let pageSize = 100; + while (hasNextPage) { + + const repoFullNameArr = repoFullName.split("/"), + response = await octokit.issues.listForRepo({ + owner: repoFullNameArr[0], + repo: repoFullNameArr[1], + state: "all", + sort: "updated", + direction: "desc", + per_page: pageSize, + page: currPage + }); + console.log("Issue API Response ", response, "currPage ", currPage, " pageSize", pageSize); + if (response && response.status === 200) { + if (response.data.length < pageSize) { + + hasNextPage = false; + } { + currPage++ + } + response.data.forEach(data => { + let issueType = "", + issueStatus = "", + component = ""; + + if (data.labels) { + data.labels.forEach((label) => { + if (label.name.toLowerCase().indexOf("xviz") !== -1) { + component = label.name; + } + if (ISSUE_STATUS.indexOf(label.name.toLowerCase()) !== -1) { + issueStatus = label.name; + } + if (ISSUE_TYPES.indexOf(label.name.toLowerCase()) !== -1) { + issueType = label.name; + } + }) + } + + result.push({ + number: data.number, + title: data.title, + body: data.body, + reporter: data.user.login, + issueType: issueType, + issueStatus: issueStatus, + component: component, + createdAt: data.created_at ? new Date(data.created_at).toLocaleDateString() : "", + updatedAt: data.updated_at ? new Date(data.updated_at).toLocaleDateString() : "", + closedAt: data.closed_at ? new Date(`${data.closed_at}`).toLocaleDateString() : "" + }) + }); + } else { + hasNextPage = false; + } + + } + + setIssues({ + rowData: result, + columnDefs: columnDefs, + gridOptions: issues.gridOptions + }) + + } + } + + getRepoData(); + // eslint-disable-next-line + }, []); + return ( +
+ + { issues.gridOptions = e; }}> + + +
+ ) +} + +export default withCookies(Issue) \ No newline at end of file diff --git a/src/containers/Issues.tsx b/src/containers/Issues.tsx index f8f5842..4693c89 100644 --- a/src/containers/Issues.tsx +++ b/src/containers/Issues.tsx @@ -4,6 +4,12 @@ import { Octokit } from "@octokit/rest"; import { CSVDownload } from "react-csv"; import { HEADERS, ISSUE_TYPES, ISSUE_STATUS } from "../constants/Issues" +import { + BrowserRouter as Router, + Link, + useLocation + } from "react-router-dom"; + interface Props { cookies: any; } @@ -109,12 +115,9 @@ const Issues: React.FC = ({ cookies }) => { repos.forEach(repo => { table.push( - {repo.name} - {repo.url} + {repo.name} + {repo.full_name} {repo.description} - - - ) }) From fb8c41d54a6b7f6b5c5902e9c8874bba1836a38c Mon Sep 17 00:00:00 2001 From: Rajesh Danabal Date: Mon, 2 Mar 2020 20:37:36 +0530 Subject: [PATCH 3/4] Basic Aggrid integration & CSV Exporting --- src/containers/Issue.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/containers/Issue.tsx b/src/containers/Issue.tsx index 0af4cba..e1497d8 100644 --- a/src/containers/Issue.tsx +++ b/src/containers/Issue.tsx @@ -20,6 +20,7 @@ interface Props { interface Issue { number: number; title: string; + state:string; body: string; reporter: string; issueType: string; @@ -41,6 +42,7 @@ const Issue: React.FC = ({ cookies }) => { const columnDefs = [ { headerName: "Issue Number", field: "number" }, { headerName: "Issue Title", field: "title" }, + { headerName: "Issue Status", field: "status" }, { headerName: "Description", field: "body" }, { headerName: "Reported By", field: "reporter" }, { headerName: "Issue Type", field: "issueType" }, @@ -128,6 +130,7 @@ const Issue: React.FC = ({ cookies }) => { result.push({ number: data.number, title: data.title, + state: data.state, body: data.body, reporter: data.user.login, issueType: issueType, From 94097392dd3895e84b8112931dc466551dbfffc1 Mon Sep 17 00:00:00 2001 From: Rajesh Danabal Date: Mon, 2 Mar 2020 20:39:12 +0530 Subject: [PATCH 4/4] status updated to state --- src/containers/Issue.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/containers/Issue.tsx b/src/containers/Issue.tsx index e1497d8..5f39a80 100644 --- a/src/containers/Issue.tsx +++ b/src/containers/Issue.tsx @@ -42,7 +42,7 @@ const Issue: React.FC = ({ cookies }) => { const columnDefs = [ { headerName: "Issue Number", field: "number" }, { headerName: "Issue Title", field: "title" }, - { headerName: "Issue Status", field: "status" }, + { headerName: "Issue Status", field: "state" }, { headerName: "Description", field: "body" }, { headerName: "Reported By", field: "reporter" }, { headerName: "Issue Type", field: "issueType" },