diff --git a/build.tar.gz b/build.tar.gz new file mode 100644 index 000000000..1131b78ab Binary files /dev/null and b/build.tar.gz differ diff --git a/package-lock.json b/package-lock.json index fb4640b12..0c961a831 100644 --- a/package-lock.json +++ b/package-lock.json @@ -385,6 +385,11 @@ "resolved": "https://registry.npmjs.org/@novnc/novnc/-/novnc-1.1.0.tgz", "integrity": "sha512-W90Q79EuCYT++39aT/VKGyk7hUt2gPN3rN+ifPUvY4rdjgZlfwdCg9q7yzj04hke/zgdHsbXFfyFijBvrRuU5A==" }, + "@reach/observe-rect": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@reach/observe-rect/-/observe-rect-1.2.0.tgz", + "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" + }, "@types/anymatch": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", @@ -1237,12 +1242,18 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" + "follow-redirects": "^1.10.0" + }, + "dependencies": { + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==" + } } }, "axobject-query": { @@ -2766,9 +2777,9 @@ }, "dependencies": { "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true } } @@ -3489,9 +3500,9 @@ "integrity": "sha1-RocMyMGlDQm61TmzOpg9vUqjSx4=" }, "codemirror": { - "version": "5.53.2", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.53.2.tgz", - "integrity": "sha512-wvSQKS4E+P8Fxn/AQ+tQtJnF1qH5UOlxtugFLpubEZ5jcdH2iXTVinb+Xc/4QjshuOxRm4fUsU2QPF1JJKiyXA==" + "version": "5.61.0", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.61.0.tgz", + "integrity": "sha512-D3wYH90tYY1BsKlUe0oNj2JAhQ9TepkD51auk3N7q+4uz7A/cgJ5JsWHreT0PqieW1QhOuqxQ2reCXV1YXzecg==" }, "collection-visit": { "version": "1.0.0", @@ -4398,11 +4409,47 @@ "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, + "d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "requires": { + "internmap": "^1.0.0" + } + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, "d3-color": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" }, + "d3-contour": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", + "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", + "requires": { + "d3-array": "^1.1.1" + }, + "dependencies": { + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + } + } + }, + "d3-delaunay": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz", + "integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==", + "requires": { + "delaunator": "4" + } + }, "d3-dispatch": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", @@ -4413,6 +4460,36 @@ "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.6.tgz", "integrity": "sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ==" }, + "d3-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz", + "integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA==" + }, + "d3-geo": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", + "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", + "requires": { + "d3-array": "1" + }, + "dependencies": { + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + } + } + }, + "d3-hexbin": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", + "integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE=" + }, + "d3-hierarchy": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", + "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" + }, "d3-interpolate": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", @@ -4421,11 +4498,79 @@ "d3-color": "1" } }, + "d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + }, + "d3-sankey": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz", + "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=", + "requires": { + "d3-array": "1", + "d3-collection": "1", + "d3-shape": "^1.2.0" + }, + "dependencies": { + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + } + } + }, + "d3-scale": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", + "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", + "requires": { + "d3-array": "^2.3.0", + "d3-format": "1 - 2", + "d3-interpolate": "1.2.0 - 2", + "d3-time": "^2.1.1", + "d3-time-format": "2 - 3" + }, + "dependencies": { + "d3-interpolate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz", + "integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==", + "requires": { + "d3-color": "1 - 2" + } + } + } + }, "d3-selection": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.1.tgz", "integrity": "sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA==" }, + "d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", + "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", + "requires": { + "d3-array": "2" + } + }, + "d3-time-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz", + "integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==", + "requires": { + "d3-time": "1 - 2" + } + }, "d3-timer": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", @@ -4444,6 +4589,11 @@ "d3-timer": "1" } }, + "d3-voronoi": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", + "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -4695,6 +4845,11 @@ } } }, + "delaunator": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", + "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==" + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -5080,18 +5235,26 @@ "integrity": "sha512-vhGNxT87PdZA6Ak4E0QhArwGzNcSPUwSN7n9wCFLeBlY2NNuuiwguQuQIp7P5oB65PLJ892yKcHiqz1xLWeiug==" }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, "emoji-regex": { @@ -7922,9 +8085,9 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -7934,13 +8097,10 @@ }, "dependencies": { "uglify-js": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.1.tgz", - "integrity": "sha512-JUPoL1jHsc9fOjVFHdQIhqEEJsQvfKDjlubcCilu8U26uZ73qOg8VsN8O1jbuei44ZPlwL7kmbAdM4tzaUvqnA==", - "optional": true, - "requires": { - "commander": "~2.20.3" - } + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.6.tgz", + "integrity": "sha512-rRprLwl8RVaS+Qvx3Wh5hPfPBn9++G6xkGlUupya0s5aDmNjI7z3lnRLB3u7sN4OmbB0pWgzhM9BEJyiWAwtAA==", + "optional": true }, "wordwrap": { "version": "1.0.0", @@ -8167,6 +8327,11 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -8199,9 +8364,9 @@ "dev": true }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" }, "hpack.js": { "version": "2.1.6", @@ -8894,9 +9059,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { "version": "3.3.0", @@ -8958,6 +9123,11 @@ "ipaddr.js": "^1.9.0" } }, + "internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + }, "interpret": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", @@ -9022,11 +9192,6 @@ "binary-extensions": "^1.0.0" } }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" - }, "is-builtin-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", @@ -10274,9 +10439,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash-es": { "version": "4.17.15", @@ -14715,6 +14880,18 @@ "tiny-invariant": "^1.0.4" } }, + "react-charts": { + "version": "2.0.0-beta.7", + "resolved": "https://registry.npmjs.org/react-charts/-/react-charts-2.0.0-beta.7.tgz", + "integrity": "sha512-iUspg9rnx7kD0H/wsK67HNUioOgKgJ8WRXr/Tk3EGP2qcFb9Vo7pjDk4oz1jH12TC+mqL+HFxNYraMkhWd6CUw==", + "requires": { + "@reach/observe-rect": "^1.1.0", + "d3-delaunay": "^5.2.1", + "d3-scale": "^3.2.1", + "d3-shape": "^1.3.7", + "d3-voronoi": "^1.1.2" + } + }, "react-codemirror": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/react-codemirror/-/react-codemirror-1.0.0.tgz", @@ -15118,6 +15295,23 @@ "prop-types": "^15.7.2" } }, + "react-motion": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", + "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", + "requires": { + "performance-now": "^0.2.0", + "prop-types": "^15.5.8", + "raf": "^3.1.0" + }, + "dependencies": { + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + } + } + }, "react-onclickoutside": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/react-onclickoutside/-/react-onclickoutside-6.9.0.tgz", @@ -15311,6 +15505,70 @@ } } }, + "react-vis": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.11.7.tgz", + "integrity": "sha512-vJqS12l/6RHeSq8DVl4PzX0j8iPgbT8H8PtgTRsimKsBNcPjPseO4RICw1FUPrwj8MPrrna34LBtzyC4ATd5Ow==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "^1.0.3", + "d3-color": "^1.0.3", + "d3-contour": "^1.1.0", + "d3-format": "^1.2.0", + "d3-geo": "^1.6.4", + "d3-hexbin": "^0.2.2", + "d3-hierarchy": "^1.1.4", + "d3-interpolate": "^1.1.4", + "d3-sankey": "^0.7.1", + "d3-scale": "^1.0.5", + "d3-shape": "^1.1.0", + "d3-voronoi": "^1.1.2", + "deep-equal": "^1.0.1", + "global": "^4.3.1", + "hoek": "4.2.1", + "prop-types": "^15.5.8", + "react-motion": "^0.5.2" + }, + "dependencies": { + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "requires": { + "d3-time": "1" + } + } + } + }, "react-zmage": { "version": "0.8.5-beta.31", "resolved": "https://registry.npmjs.org/react-zmage/-/react-zmage-0.8.5-beta.31.tgz", @@ -16800,9 +17058,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yargs": { "version": "14.2.3", @@ -18399,9 +18657,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "ua-parser-js": { - "version": "0.7.21", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz", - "integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ==" + "version": "0.7.28", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz", + "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==" }, "uglify-js": { "version": "2.8.29", @@ -18602,9 +18860,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -18768,9 +19026,9 @@ } }, "urijs": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.2.tgz", - "integrity": "sha512-s/UIq9ap4JPZ7H1EB5ULo/aOUbWqfDi7FKzMC2Nz+0Si8GiT1rIEaprt8hy3Vy2Ex2aJPpOQv4P4DuOZ+K1c6w==" + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.6.tgz", + "integrity": "sha512-eSXsXZ2jLvGWeLYlQA3Gh36BcjF+0amo92+wHPyN1mdR8Nxf75fuEuYTd9c0a+m/vhCjRK0ESlE9YNLW+E1VEw==" }, "urix": { "version": "0.1.0", @@ -18835,9 +19093,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -19845,9 +20103,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yargs": { "version": "13.2.4", diff --git a/package.json b/package.json index e90368f41..a44c24755 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "antd": "^3.26.15", "array-flatten": "^2.1.2", "autoprefixer": "7.1.6", - "axios": "^0.18.1", + "axios": "^0.21.1", "babel-eslint": "7.2.3", "babel-jest": "20.0.3", "babel-loader": "7.1.2", @@ -23,7 +23,7 @@ "classnames": "^2.2.5", "clipboard": "^2.0.6", "code-prettify": "^0.1.0", - "codemirror": "^5.53.0", + "codemirror": "^5.61.0", "connected-react-router": "4.4.1", "css-loader": "^3.5.2", "dotenv": "4.0.0", @@ -46,7 +46,7 @@ "jest": "20.0.4", "js-base64": "^2.5.2", "katex": "^0.11.1", - "lodash": "^4.17.20", + "lodash": "^4.17.21", "loglevel": "^1.6.8", "marked": "^1.0.0", "material-ui": "^1.0.0-beta.40", @@ -74,6 +74,7 @@ "rc-upload": "^2.9.4", "react": "^16.13.1", "react-beautiful-dnd": "^10.0.4", + "react-charts": "^2.0.0-beta.7", "react-codemirror": "^1.0.0", "react-codemirror2": "^6.0.1", "react-color": "^2.18.0", @@ -93,6 +94,7 @@ "react-router-dom": "^4.2.2", "react-split-pane": "^0.1.91", "react-url-query": "^1.5.0", + "react-vis": "^1.11.7", "react-zmage": "^0.8.5-beta.31", "redux": "^4.0.5", "redux-thunk": "2.3.0", diff --git a/src/AppConfig.js b/src/AppConfig.js index f5907f7cd..24b0e97d2 100644 --- a/src/AppConfig.js +++ b/src/AppConfig.js @@ -57,6 +57,7 @@ export function initAxiosInterceptors(props) { initOnlineOfflineListener() // TODO 避免重复的请求 https://github.com/axios/axios#cancellation var + // proxy = "http://172.27.144.138:3000/" proxy = "http://localhost:3000" // proxy = "https://testforgeplus.trustie.net" diff --git a/src/forge/users/Infos.js b/src/forge/users/Infos.js index 1863a4127..6199c42a9 100644 --- a/src/forge/users/Infos.js +++ b/src/forge/users/Infos.js @@ -52,7 +52,12 @@ const Wallet = Loadable({ const SponsorManagement = Loadable({ loader: () => import("./sponsor/SponsorManagement"), loading: Loading, -}) +}); +const SponsorDataCharts = Loadable({ + loader: () => import("./sponsor/communityData"), + loading: Loading, +}); + class Infos extends Component { constructor(props) { super(props); @@ -63,6 +68,7 @@ class Infos extends Component { route_type: undefined, c: undefined, sponsor_management: undefined, + choose_chart: undefined, }; } @@ -100,6 +106,7 @@ class Infos extends Component { project_type: type, choose_wallet: false, sponsor_management: undefined, + choose_chart: undefined, route_type: undefined }) let url = `/users/${user && user.login}` @@ -156,6 +163,7 @@ class Infos extends Component { sponsor_management: true, project_type: undefined, choose_wallet: undefined, + choose_chart: undefined, }) this.props.history.push(`/users/${user && user.login}/sponsor_management`) } @@ -167,6 +175,7 @@ class Infos extends Component { choose_wallet: true, route_type: undefined, sponsor_management: undefined, + choose_chart: undefined, }) this.props.history.push(`/users/${user && user.login}/wallet`) } @@ -179,10 +188,21 @@ class Infos extends Component { this.props.history.push(`/users/${user && user.login}/sponsor_setting`) } + sponsor_statistic = () => { + const {user} = this.state + this.setState({ + project_type: undefined, + choose_wallet: undefined, + route_type: undefined, + sponsor_management: undefined, + choose_chart: true + }) + this.props.history.push(`/users/${user && user.login}/sponsor_community_data`) + } render() { const { current_user, mygetHelmetapi } = this.props; - const { user, isSpin, project_type, route_type, choose_wallet, sponsor_management } = this.state; + const { user, isSpin, project_type, route_type, choose_wallet, choose_chart, sponsor_management } = this.state; // console.log("current", current_user) // console.log("user", user) return ( @@ -388,6 +408,27 @@ class Infos extends Component { )} + + {current_user && user && user.login == current_user.login && ( + +
+ +
+ )}
{user && ( @@ -417,6 +458,12 @@ class Infos extends Component { return ; }} > + { + return ; + }} + > { diff --git a/src/forge/users/sponsor/SponsorManagement.js b/src/forge/users/sponsor/SponsorManagement.js index 65d4fa267..c9814b76e 100644 --- a/src/forge/users/sponsor/SponsorManagement.js +++ b/src/forge/users/sponsor/SponsorManagement.js @@ -1,30 +1,32 @@ import React, { Component } from "react"; import { Link } from "react-router-dom"; import { Menu, Input, Spin, Pagination, Popover, Button, Divider } from "antd"; +import SponsorBarCharts from "./charts/sponsorBarChart"; +import SponsorPieCharts from "./charts/sponsorPieChart"; import axios from "axios"; import CoinChangeItem from "./CoinChangeItem"; import Nodata from "../../Nodata"; import img_array from "../../Images/array.png"; import SponsorList from "./sponsor_list"; - import "../../sponsor/sponsor.css"; -// import "../new_user.css"; -const Search = Input.Search; -const tempData = [ - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: true, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: true, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, - {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, -]; +// import "../new_user.css"; +// const Search = Input.Search; + +// const tempData = [ +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: true, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: true, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "-", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: true, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// {image_url: "avatars/User/b", username: "万山川", user_id: 1369, visible: false, sponsor: false, login:"alpc104", start_time: "2020-08-01", stop_time: "2020-09-05", amount: 100}, +// ]; class SponsorManagement extends Component{ @@ -46,10 +48,18 @@ class SponsorManagement extends Component{ } changeCategory = (cate) => { + if(cate.target.value === "chart"){ + this.setState({ + category: cate.target.value, + page: 1, + }); + } + else{ this.setState({ category: cate.target.value, page: 1, }, ()=>{this.get_sponsors();}); + } }; componentDidMount = () => { @@ -125,6 +135,7 @@ class SponsorManagement extends Component{ ? [ { type: "sponsoring", name: "赞助中" }, { type: "stopped", name: "已终止" }, + { type: "chart", name: "统计图表" }, ] : []; @@ -167,6 +178,28 @@ class SponsorManagement extends Component{ const { category , is_sponsor, sponsors, displayList} = this.state; const {isSpin, total, search, limit, page }= this.state; // console.log(displayList); + const sponsorList = displayList && displayList.length > 0 ? + + : + + + const chartComponent =
+

赞助{this.state.is_sponsor?"支出":"收入"}图

+ +

七天内赞助{this.state.is_sponsor?"支出":"收入"}图

+ +
+ + const displayComponent = category==="chart"?chartComponent + : + sponsorList; return ( //
@@ -206,20 +239,11 @@ class SponsorManagement extends Component{ :"" }
- {user && current_user && user.login === current_user.login && displayList && displayList.length > 0 ? - - : - + {user && current_user && user.login === current_user.login? + displayComponent: } { - total && total > limit ? + total && total > limit && category!="chart"?
+ + + + + + + + + + +
+ ); + } +} + +export default CoinChangeCharts; diff --git a/src/forge/users/sponsor/charts/sponsorBarChart.js b/src/forge/users/sponsor/charts/sponsorBarChart.js new file mode 100644 index 000000000..b286eba92 --- /dev/null +++ b/src/forge/users/sponsor/charts/sponsorBarChart.js @@ -0,0 +1,75 @@ +import React, { Component } from 'react'; +import {XYPlot, VerticalBarSeries, VerticalGridLines, HorizontalGridLines, XAxis, YAxis, Crosshair, DiscreteColorLegend} from 'react-vis'; +// import DiscreteColorLegend from 'legends/discrete-color-legend'; +import "./style.scss"; + +const ONE_DAY = 86400000; +const d = new Date().getTime()-ONE_DAY*7; + +const data = [ + {x: new Date(d+ONE_DAY).toLocaleDateString(), y: 6}, + {x: new Date(d+ONE_DAY*2).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*3).toLocaleDateString(), y: 2}, + {x: new Date(d+ONE_DAY*4).toLocaleDateString(), y: 7}, + {x: new Date(d+ONE_DAY*5).toLocaleDateString(), y: 0}, + {x: new Date(d+ONE_DAY*6).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*7).toLocaleDateString(), y: 0}, +]; + +const data2 = [ + {x: new Date(d+ONE_DAY).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*2).toLocaleDateString(), y: 4}, + {x: new Date(d+ONE_DAY*3).toLocaleDateString(), y: 2}, + {x: new Date(d+ONE_DAY*4).toLocaleDateString(), y: 6}, + {x: new Date(d+ONE_DAY*5).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*6).toLocaleDateString(), y: 1}, + {x: new Date(d+ONE_DAY*7).toLocaleDateString(), y: 3}, +]; + +const ITEMS = [ + {title: '收入', strokeWidth: 13}, + {title: '支出', strokeWidth: 13} +]; + +class SponsorBarCharts extends Component { + constructor(props) { + super(props); + this.state = { + crosshairValues: [] + }; + } + + componentWillReceiveProps = () => { + this.setState({ + crosshairValues: [] + }) + } + + render() { + const DATA = this.props.is_sponsor?data2:data; + + return ( +
+ {/* */} + + + + + + + + +
+ ); + } +} + +export default SponsorBarCharts; \ No newline at end of file diff --git a/src/forge/users/sponsor/charts/sponsorPieChart.js b/src/forge/users/sponsor/charts/sponsorPieChart.js new file mode 100644 index 000000000..82a15f612 --- /dev/null +++ b/src/forge/users/sponsor/charts/sponsorPieChart.js @@ -0,0 +1,70 @@ +import React, { Component } from 'react'; +import {FlexibleXYPlot, RadialChart, VerticalGridLines, HorizontalGridLines, XAxis, YAxis, Crosshair, DiscreteColorLegend} from 'react-vis'; +// import DiscreteColorLegend from 'legends/discrete-color-legend'; +import "./style.scss"; + +const data = [ + {label: "张三", angle: 1}, + {label: "李四", angle: 2}, + {label: "王五", angle: 5}, + {label: "赵六", angle: 3}, +]; + +const data2 = [ + {label: "张三", angle: 2}, + {label: "林磊", angle: 1}, + {label: "赵辉", angle: 4}, +]; + +const ITEMS = [ + {title: '收入', color: 'powderblue', strokeWidth: 13}, + {title: '支出', color: 'powderblue', strokeWidth: 13} +]; + +class SponsorPieCharts extends Component { + constructor(props) { + super(props); + this.state = { + crosshairValues: [] + }; + } + + componentWillReceiveProps = () => { + this.setState({ + crosshairValues: [] + }) + } + + render() { + const DATA = this.props.is_sponsor?data2:data; + // const DATA = [{angle: 1}, {angle: 5}, {angle: 2}] + + return ( +
+ {/* */} + {/* */} + {/* + + + */} + + + {/* */} +
+ ); + } +} + +export default SponsorPieCharts; \ No newline at end of file diff --git a/src/forge/users/sponsor/charts/style.scss b/src/forge/users/sponsor/charts/style.scss new file mode 100644 index 000000000..79f09ff3c --- /dev/null +++ b/src/forge/users/sponsor/charts/style.scss @@ -0,0 +1,5 @@ +@import "react-vis/dist/styles/plot.scss"; +@import "react-vis/dist/styles/examples.scss"; +@import "react-vis/dist/styles/legends.scss"; +@import "react-vis/dist/styles/radial-chart.scss"; +@import "react-vis/dist/styles/treemap.scss"; \ No newline at end of file diff --git a/src/forge/users/sponsor/communityData.js b/src/forge/users/sponsor/communityData.js new file mode 100644 index 000000000..27fb248ae --- /dev/null +++ b/src/forge/users/sponsor/communityData.js @@ -0,0 +1,107 @@ +import React, { Component } from 'react'; +import {XYPlot, VerticalBarSeries, LineSeries, VerticalGridLines, HorizontalGridLines, XAxis, YAxis, Crosshair, DiscreteColorLegend} from 'react-vis'; +// import DiscreteColorLegend from 'legends/discrete-color-legend'; +import "./charts/style.scss"; + +const ONE_DAY = 86400000; +const d = new Date().getTime()-ONE_DAY*7; + +const data = [ + {x: new Date(d+ONE_DAY).toLocaleDateString(), y: 6}, + {x: new Date(d+ONE_DAY*2).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*3).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*4).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*5).toLocaleDateString(), y: 4}, + {x: new Date(d+ONE_DAY*6).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*7).toLocaleDateString(), y: 4}, +]; + +const data2 = [ + {x: new Date(d+ONE_DAY).toLocaleDateString(), y: 4}, + {x: new Date(d+ONE_DAY*2).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*3).toLocaleDateString(), y: 1}, + {x: new Date(d+ONE_DAY*4).toLocaleDateString(), y: 2}, + {x: new Date(d+ONE_DAY*5).toLocaleDateString(), y: 1}, + {x: new Date(d+ONE_DAY*6).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*7).toLocaleDateString(), y: 2}, +]; + +const data3 = [ + {x: new Date(d+ONE_DAY).toLocaleDateString(), y: 6}, + {x: new Date(d+ONE_DAY*2).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*3).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*4).toLocaleDateString(), y: 3}, + {x: new Date(d+ONE_DAY*5).toLocaleDateString(), y: 4}, + {x: new Date(d+ONE_DAY*6).toLocaleDateString(), y: 5}, + {x: new Date(d+ONE_DAY*7).toLocaleDateString(), y: 4}, +]; +const ITEMS = [ + {title: '受资助人数', strokeWidth: 13}, + {title: '资助者数量', strokeWidth: 13} +]; + +class SponsorDataCharts extends Component { + constructor(props) { + super(props); + this.state = { + crosshairValues: [] + }; + } + + componentWillReceiveProps = () => { + this.setState({ + crosshairValues: [] + }) + } + + render() { + // const DATA = this.props.is_sponsor?data2:data; + + return ( +
+

平台资助者/受资助人数

+ + + + + + + + + +

平台资助交易数量

+ + + + + + + +
+ ); + } +} + +export default SponsorDataCharts; \ No newline at end of file diff --git a/src/forge/users/sponsor/sponsor_list.js b/src/forge/users/sponsor/sponsor_list.js index 7257f5efa..2e6bb5b2c 100644 --- a/src/forge/users/sponsor/sponsor_list.js +++ b/src/forge/users/sponsor/sponsor_list.js @@ -17,7 +17,7 @@ class SponsorList extends Component { axios.delete(url) .then((result) => { console.log(result); - this.props.showNotification("终止成功") + // this.props.showNotification("终止成功") if(result && result.data.status == 1){ this.props.showNotification(result.data.message); this.props.rerender(); diff --git a/src/forge/users/sponsor/wallet.js b/src/forge/users/sponsor/wallet.js index 1ca3a37f1..e67ed46f7 100644 --- a/src/forge/users/sponsor/wallet.js +++ b/src/forge/users/sponsor/wallet.js @@ -6,6 +6,7 @@ import axios from "axios"; import CoinChangeItem from "./CoinChangeItem"; import Nodata from "../../Nodata"; import img_array from "../../Images/array.png"; +import CoinChangeCharts from "./charts/coinChangeCharts"; const Search = Input.Search; const tempData = [ @@ -34,6 +35,8 @@ class Wallet extends Component { category: "all", balance: 50, saerch: undefined, + chartsData1: undefined, + chartsData2: undefined, }; } @@ -49,6 +52,34 @@ class Wallet extends Component { if (this.props.current_user) this.get_coin_changes(); } + + get_chart_data = () => { + this.setState({ + isSpin: true + }) + + let url = `/wallets/balance_chart.json`; + const {current_user} = this.props; + let user_id = current_user && current_user.user_id; + if (current_user){ + axios.get(url, { + params: { + id: user_id, + }}) + .then((result) => { + this.setState({ + chartsData1: result.data, + isSpin: false, + }) + }) + .catch((error) => { + console.log(error); + this.setState({ + isSpin: false, + }); + }); + } + }; get_coin_changes = () => { this.setState({ @@ -85,19 +116,23 @@ class Wallet extends Component { }); }); } - // this.setState({ - // coinChangeList: tempData, - // displayList: tempData, - // total: tempData.count, - // isSpin: false, - // }); }; changeCategory = (cate) => { - this.setState({ + if(cate.target.value == "charts"){ + // console.log("charts"); + this.setState({ category: cate.target.value, page: 1, - }, ()=> {this.get_coin_changes();}); + }, ()=> {this.get_chart_data();}); + return ; + } + else{ + this.setState({ + category: cate.target.value, + page: 1, + }, ()=> {this.get_coin_changes();}); + } }; //切换页数 @@ -138,6 +173,7 @@ class Wallet extends Component { { type: "all", name: "所有" }, { type: "income", name: "收入" }, { type: "outcome", name: "支出" }, + { type: "charts", name: "查看统计" }, ] : []; @@ -164,11 +200,25 @@ class Wallet extends Component { }) return list; } - + render() { const { current_user, user } = this.props; - const { category , sort_by } = this.state; + const { category , sort_by, chartsData1 } = this.state; const { displayList, coinChangeList, isSpin, total, search, limit, page, balance} = this.state; + + const coinChangeItem = displayList && displayList.length > 0 ? + : + ; + + const displayComponent = + category === "charts"? + : + coinChangeItem; + return (
@@ -197,17 +247,13 @@ class Wallet extends Component {
{this.category_button(category)}
- {user && current_user && user.login === current_user.login && displayList && displayList.length > 0 ? - + {user && current_user && user.login === current_user.login? + displayComponent : } { - total && total > limit ? + total && total > limit && category != "charts"?
{ if(result){ - if(result.data.status===-2){ + if(result.data.status!=0){ if(result.data.message==="验证码不正确"){ this.setState({ Phonenumberisnotcosyzm:"验证码不正确", @@ -1181,12 +1185,12 @@ class LoginRegisterComponent extends Component { onfocus="this.removeAttribute('readonly')" style={{ width:'210px', height:'38px', - }} placeholder="请输入验证码" + }} placeholder="请输入用户名" onChange={this.codesonChange} value={codes} > - { + {/* { getverificationcodes === undefined ? @@ -1196,7 +1200,7 @@ class LoginRegisterComponent extends Component { : - } + } */}