Move playbook details page in a dedicated page
Change-Id: I5ff30157a154fec52b6cee83d237823a7ce8c99d
This commit is contained in:
parent
fe595b35d6
commit
3cb2d5bc55
|
@ -64,9 +64,9 @@
|
|||
"integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg=="
|
||||
},
|
||||
"@patternfly/patternfly-next": {
|
||||
"version": "1.0.105",
|
||||
"resolved": "https://registry.npmjs.org/@patternfly/patternfly-next/-/patternfly-next-1.0.105.tgz",
|
||||
"integrity": "sha512-pjWEuyF+Y4zSPvH1sVl9/4rM6to+wW2EjfqFIRQpWcGnDZ6Y+E88ywVUmNLhJDEdd6sWtPNeWuUOyYW6OWARoA=="
|
||||
"version": "1.0.110",
|
||||
"resolved": "https://registry.npmjs.org/@patternfly/patternfly-next/-/patternfly-next-1.0.110.tgz",
|
||||
"integrity": "sha512-QAQfLeYmPG1woMysUaeigbZVpqKSlKdLlXP7L0NY+7aX9/GKwiSpEswzbJy4Z3wZyv5F7Hx8TADIa7u6+D9IIA=="
|
||||
},
|
||||
"abab": {
|
||||
"version": "1.0.4",
|
||||
|
@ -119,7 +119,7 @@
|
|||
},
|
||||
"acorn-jsx": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "http://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
|
||||
"integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
|
||||
"requires": {
|
||||
"acorn": "^3.0.4"
|
||||
|
@ -127,7 +127,7 @@
|
|||
"dependencies": {
|
||||
"acorn": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
|
||||
"integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
|
||||
}
|
||||
}
|
||||
|
@ -178,7 +178,7 @@
|
|||
},
|
||||
"ansi-escapes": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
|
||||
"integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
|
||||
},
|
||||
"ansi-html": {
|
||||
|
@ -253,7 +253,7 @@
|
|||
},
|
||||
"array-equal": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
|
||||
"integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
|
||||
},
|
||||
"array-filter": {
|
||||
|
@ -422,7 +422,7 @@
|
|||
},
|
||||
"axios": {
|
||||
"version": "0.18.0",
|
||||
"resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
|
||||
"integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.3.0",
|
||||
|
@ -430,9 +430,9 @@
|
|||
}
|
||||
},
|
||||
"axios-mock-adapter": {
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.15.0.tgz",
|
||||
"integrity": "sha1-+8BoJdgwLJXDM00hAju6mWJV1F0=",
|
||||
"version": "1.16.0",
|
||||
"resolved": "https://registry.npmjs.org/axios-mock-adapter/-/axios-mock-adapter-1.16.0.tgz",
|
||||
"integrity": "sha512-m2D8ngMTQ5p4zZNBsPKoENgwz5rDfd0pZmXI/spdE2eeeKIcR3jquk+NRiBVFtb9UJlciBYplNzSUmgQ6X385Q==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"deep-equal": "^1.0.1"
|
||||
|
@ -720,7 +720,7 @@
|
|||
},
|
||||
"babel-plugin-istanbul": {
|
||||
"version": "4.1.6",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz",
|
||||
"integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==",
|
||||
"requires": {
|
||||
"babel-plugin-syntax-object-rest-spread": "^6.13.0",
|
||||
|
@ -747,37 +747,37 @@
|
|||
},
|
||||
"babel-plugin-syntax-async-functions": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
|
||||
"integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU="
|
||||
},
|
||||
"babel-plugin-syntax-class-properties": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
|
||||
"integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94="
|
||||
},
|
||||
"babel-plugin-syntax-dynamic-import": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
|
||||
"integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo="
|
||||
},
|
||||
"babel-plugin-syntax-exponentiation-operator": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
|
||||
"integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4="
|
||||
},
|
||||
"babel-plugin-syntax-flow": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",
|
||||
"integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0="
|
||||
},
|
||||
"babel-plugin-syntax-jsx": {
|
||||
"version": "6.18.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
|
||||
"integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
|
||||
},
|
||||
"babel-plugin-syntax-object-rest-spread": {
|
||||
"version": "6.13.0",
|
||||
"resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
|
||||
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
|
||||
},
|
||||
"babel-plugin-syntax-trailing-function-commas": {
|
||||
|
@ -1369,9 +1369,9 @@
|
|||
}
|
||||
},
|
||||
"big.js": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
|
||||
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
|
||||
"version": "5.2.2",
|
||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
|
||||
"integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
|
||||
},
|
||||
"binary-extensions": {
|
||||
"version": "1.12.0",
|
||||
|
@ -1513,7 +1513,7 @@
|
|||
},
|
||||
"browserify-aes": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
|
||||
"integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
|
||||
"requires": {
|
||||
"buffer-xor": "^1.0.3",
|
||||
|
@ -1547,7 +1547,7 @@
|
|||
},
|
||||
"browserify-rsa": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
|
||||
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
|
||||
"requires": {
|
||||
"bn.js": "^4.1.0",
|
||||
|
@ -1595,7 +1595,7 @@
|
|||
},
|
||||
"buffer": {
|
||||
"version": "4.9.1",
|
||||
"resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
|
||||
"integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
|
||||
"requires": {
|
||||
"base64-js": "^1.0.2",
|
||||
|
@ -1673,7 +1673,7 @@
|
|||
},
|
||||
"callsites": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
|
||||
"integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo="
|
||||
},
|
||||
"camel-case": {
|
||||
|
@ -1692,7 +1692,7 @@
|
|||
},
|
||||
"camelcase-keys": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
|
||||
"integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
|
||||
"requires": {
|
||||
"camelcase": "^2.0.0",
|
||||
|
@ -1729,14 +1729,14 @@
|
|||
}
|
||||
},
|
||||
"caniuse-db": {
|
||||
"version": "1.0.30000921",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000921.tgz",
|
||||
"integrity": "sha512-sAvmRuxZ457rlTK+ydUMpmeXjVfkiXQXv0POTdpHEdKrVwEQaeZqJgQA5MH7sKAGTGxzlLcDpfoNkpVXw09X5Q=="
|
||||
"version": "1.0.30000927",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000927.tgz",
|
||||
"integrity": "sha512-CX/QvLA8oh7kQ9cHCCzFm0UZW4KwSyQSRJ5A1XtH42HaMJQ0yh+9fEVWagMqv9I1vSCtaqA5Mb8k0uKfv7jhDw=="
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30000921",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000921.tgz",
|
||||
"integrity": "sha512-Bu09ciy0lMWLgpYC77I0YGuI8eFRBPPzaSOYJK1jTI64txCphYCqnWbxJYjHABYVt/TYX/p3jNjLBR87u1Bfpw=="
|
||||
"version": "1.0.30000927",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000927.tgz",
|
||||
"integrity": "sha512-ogq4NbUWf1uG/j66k0AmiO3GjqJAlQyF8n4w8a954cbCyFKmYGvRtgz6qkq2fWuduTXHibX7GyYL5Pg58Aks2g=="
|
||||
},
|
||||
"capture-stack-trace": {
|
||||
"version": "1.0.1",
|
||||
|
@ -1764,7 +1764,7 @@
|
|||
},
|
||||
"chalk": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
||||
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
|
||||
"requires": {
|
||||
"ansi-styles": "^2.2.1",
|
||||
|
@ -1781,7 +1781,7 @@
|
|||
},
|
||||
"supports-color": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
||||
"resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
||||
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
|
||||
}
|
||||
}
|
||||
|
@ -1897,7 +1897,7 @@
|
|||
},
|
||||
"is-accessor-descriptor": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -1915,7 +1915,7 @@
|
|||
},
|
||||
"is-data-descriptor": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -2253,7 +2253,7 @@
|
|||
},
|
||||
"color": {
|
||||
"version": "0.11.4",
|
||||
"resolved": "http://registry.npmjs.org/color/-/color-0.11.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz",
|
||||
"integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=",
|
||||
"requires": {
|
||||
"clone": "^1.0.2",
|
||||
|
@ -2276,7 +2276,7 @@
|
|||
},
|
||||
"color-string": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "http://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz",
|
||||
"integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=",
|
||||
"requires": {
|
||||
"color-name": "^1.0.0"
|
||||
|
@ -2294,7 +2294,7 @@
|
|||
},
|
||||
"colors": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
|
||||
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
|
||||
},
|
||||
"combined-stream": {
|
||||
|
@ -2406,7 +2406,7 @@
|
|||
},
|
||||
"content-disposition": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
||||
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
|
||||
},
|
||||
"content-type": {
|
||||
|
@ -2492,7 +2492,7 @@
|
|||
},
|
||||
"create-hash": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
|
||||
"integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
|
||||
"requires": {
|
||||
"cipher-base": "^1.0.1",
|
||||
|
@ -2504,7 +2504,7 @@
|
|||
},
|
||||
"create-hmac": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
|
||||
"integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
|
||||
"requires": {
|
||||
"cipher-base": "^1.0.3",
|
||||
|
@ -2555,7 +2555,7 @@
|
|||
},
|
||||
"css-color-names": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
|
||||
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
|
||||
},
|
||||
"css-loader": {
|
||||
|
@ -2612,7 +2612,7 @@
|
|||
},
|
||||
"css-select": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
|
||||
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
|
||||
"requires": {
|
||||
"boolbase": "~1.0.0",
|
||||
|
@ -2665,7 +2665,7 @@
|
|||
},
|
||||
"cssnano": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz",
|
||||
"integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=",
|
||||
"requires": {
|
||||
"autoprefixer": "^6.3.1",
|
||||
|
@ -2794,7 +2794,7 @@
|
|||
},
|
||||
"d": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.npmjs.org/d/-/d-1.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
|
||||
"integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
|
||||
"requires": {
|
||||
"es5-ext": "^0.10.9"
|
||||
|
@ -2996,7 +2996,7 @@
|
|||
},
|
||||
"diffie-hellman": {
|
||||
"version": "5.0.3",
|
||||
"resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
|
||||
"integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
|
||||
"requires": {
|
||||
"bn.js": "^4.1.0",
|
||||
|
@ -3053,7 +3053,7 @@
|
|||
"dependencies": {
|
||||
"domelementtype": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
|
||||
"integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs="
|
||||
}
|
||||
}
|
||||
|
@ -3103,7 +3103,7 @@
|
|||
},
|
||||
"dotenv": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "http://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz",
|
||||
"integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0="
|
||||
},
|
||||
"dotenv-expand": {
|
||||
|
@ -3113,7 +3113,7 @@
|
|||
},
|
||||
"duplexer": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
|
||||
"integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
|
||||
},
|
||||
"duplexer3": {
|
||||
|
@ -3136,9 +3136,9 @@
|
|||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
||||
},
|
||||
"electron-to-chromium": {
|
||||
"version": "1.3.94",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.94.tgz",
|
||||
"integrity": "sha512-miQqXALb6eBD3OetCtg3UM5XTLMwHISux0l6mh14iiV5SE+qvftgOCXT9Vvp53fWaCLET4sfA/SmIMYHXkaNmw=="
|
||||
"version": "1.3.96",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz",
|
||||
"integrity": "sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q=="
|
||||
},
|
||||
"elliptic": {
|
||||
"version": "6.4.1",
|
||||
|
@ -3210,15 +3210,16 @@
|
|||
}
|
||||
},
|
||||
"es-abstract": {
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
|
||||
"integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
|
||||
"version": "1.13.0",
|
||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
|
||||
"integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
|
||||
"requires": {
|
||||
"es-to-primitive": "^1.1.1",
|
||||
"es-to-primitive": "^1.2.0",
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.1",
|
||||
"is-callable": "^1.1.3",
|
||||
"is-regex": "^1.0.4"
|
||||
"has": "^1.0.3",
|
||||
"is-callable": "^1.1.4",
|
||||
"is-regex": "^1.0.4",
|
||||
"object-keys": "^1.0.12"
|
||||
}
|
||||
},
|
||||
"es-to-primitive": {
|
||||
|
@ -3539,7 +3540,7 @@
|
|||
},
|
||||
"doctrine": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
|
||||
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
|
||||
"requires": {
|
||||
"esutils": "^2.0.2",
|
||||
|
@ -3642,7 +3643,7 @@
|
|||
},
|
||||
"espree": {
|
||||
"version": "3.5.4",
|
||||
"resolved": "http://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
|
||||
"integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
|
||||
"requires": {
|
||||
"acorn": "^5.5.0",
|
||||
|
@ -3701,7 +3702,7 @@
|
|||
},
|
||||
"events": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
|
||||
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
|
||||
},
|
||||
"eventsource": {
|
||||
|
@ -3753,7 +3754,7 @@
|
|||
},
|
||||
"expand-range": {
|
||||
"version": "1.8.2",
|
||||
"resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
|
||||
"integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
|
||||
"requires": {
|
||||
"fill-range": "^2.1.0"
|
||||
|
@ -3806,7 +3807,7 @@
|
|||
"dependencies": {
|
||||
"array-flatten": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
||||
},
|
||||
"debug": {
|
||||
|
@ -3850,7 +3851,7 @@
|
|||
},
|
||||
"external-editor": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
|
||||
"integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
|
||||
"requires": {
|
||||
"chardet": "^0.4.0",
|
||||
|
@ -3884,7 +3885,7 @@
|
|||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
|
||||
"integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ="
|
||||
},
|
||||
"fast-json-stable-stringify": {
|
||||
|
@ -3934,7 +3935,7 @@
|
|||
"dependencies": {
|
||||
"core-js": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
|
||||
"resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
|
||||
"integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
|
||||
},
|
||||
"promise": {
|
||||
|
@ -4006,7 +4007,7 @@
|
|||
},
|
||||
"finalhandler": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
|
||||
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
|
||||
"requires": {
|
||||
"debug": "2.6.9",
|
||||
|
@ -4063,9 +4064,9 @@
|
|||
"integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.5.10",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
|
||||
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz",
|
||||
"integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==",
|
||||
"requires": {
|
||||
"debug": "=3.1.0"
|
||||
}
|
||||
|
@ -4615,7 +4616,7 @@
|
|||
},
|
||||
"get-stream": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
|
||||
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
|
||||
},
|
||||
"get-value": {
|
||||
|
@ -4698,7 +4699,7 @@
|
|||
},
|
||||
"globby": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
|
||||
"integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
|
||||
"requires": {
|
||||
"array-union": "^1.0.1",
|
||||
|
@ -4711,7 +4712,7 @@
|
|||
},
|
||||
"got": {
|
||||
"version": "6.7.1",
|
||||
"resolved": "http://registry.npmjs.org/got/-/got-6.7.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
|
||||
"integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
|
||||
"requires": {
|
||||
"create-error-class": "^3.0.0",
|
||||
|
@ -4747,7 +4748,7 @@
|
|||
},
|
||||
"handle-thing": {
|
||||
"version": "1.2.5",
|
||||
"resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
|
||||
"resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz",
|
||||
"integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ="
|
||||
},
|
||||
"handlebars": {
|
||||
|
@ -5026,6 +5027,11 @@
|
|||
"toposort": "^1.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"big.js": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz",
|
||||
"integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q=="
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "0.2.17",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
|
||||
|
@ -5041,7 +5047,7 @@
|
|||
},
|
||||
"htmlparser2": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz",
|
||||
"integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=",
|
||||
"requires": {
|
||||
"domelementtype": "1",
|
||||
|
@ -5083,7 +5089,7 @@
|
|||
},
|
||||
"http-errors": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
||||
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
|
||||
"requires": {
|
||||
"depd": "~1.1.2",
|
||||
|
@ -5290,9 +5296,9 @@
|
|||
}
|
||||
},
|
||||
"interpret": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
|
||||
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
|
||||
"integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw=="
|
||||
},
|
||||
"invariant": {
|
||||
"version": "2.2.4",
|
||||
|
@ -5324,7 +5330,7 @@
|
|||
},
|
||||
"is-accessor-descriptor": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -5350,7 +5356,7 @@
|
|||
},
|
||||
"is-builtin-module": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
|
||||
"integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
|
||||
"requires": {
|
||||
"builtin-modules": "^1.0.0"
|
||||
|
@ -5371,7 +5377,7 @@
|
|||
},
|
||||
"is-data-descriptor": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -5472,7 +5478,7 @@
|
|||
},
|
||||
"is-obj": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
|
||||
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
|
||||
},
|
||||
"is-path-cwd": {
|
||||
|
@ -5747,12 +5753,12 @@
|
|||
"dependencies": {
|
||||
"ansi-escapes": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
|
||||
"integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4="
|
||||
},
|
||||
"callsites": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
|
||||
"integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
|
||||
},
|
||||
"jest-cli": {
|
||||
|
@ -6064,7 +6070,7 @@
|
|||
},
|
||||
"jsesc": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
|
||||
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
|
||||
},
|
||||
"json-loader": {
|
||||
|
@ -6102,7 +6108,7 @@
|
|||
},
|
||||
"json5": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
||||
"integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="
|
||||
},
|
||||
"jsonfile": {
|
||||
|
@ -6254,13 +6260,28 @@
|
|||
"integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw=="
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
|
||||
"integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
|
||||
"integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
|
||||
"requires": {
|
||||
"big.js": "^3.1.3",
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^2.0.0",
|
||||
"json5": "^0.5.0"
|
||||
"json5": "^1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"json5": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
|
||||
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
"locate-path": {
|
||||
|
@ -6631,13 +6652,13 @@
|
|||
},
|
||||
"mute-stream": {
|
||||
"version": "0.0.7",
|
||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
|
||||
"resolved": "http://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
|
||||
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
|
||||
},
|
||||
"nan": {
|
||||
"version": "2.12.0",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.0.tgz",
|
||||
"integrity": "sha512-zT5nC0JhbljmyEf+Z456nvm7iO7XgRV2hYxoBtPpnyp+0Q4aCoP6uWNn76v/I6k2kCYNLWqWbwBWQcjsNI/bjw==",
|
||||
"version": "2.12.1",
|
||||
"resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
|
||||
"integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
|
||||
"optional": true
|
||||
},
|
||||
"nanomatch": {
|
||||
|
@ -7236,7 +7257,7 @@
|
|||
"dependencies": {
|
||||
"async": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz",
|
||||
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
|
||||
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
|
||||
},
|
||||
"debug": {
|
||||
|
@ -8641,14 +8662,14 @@
|
|||
}
|
||||
},
|
||||
"react": {
|
||||
"version": "16.6.3",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz",
|
||||
"integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==",
|
||||
"version": "16.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-16.7.0.tgz",
|
||||
"integrity": "sha512-StCz3QY8lxTb5cl2HJxjwLFOXPIFQp+p+hxQfc8WE0QiLfCtIlKj8/+5tjjKm8uSTlAW+fCPaavGFS06V9Ar3A==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"scheduler": "^0.11.2"
|
||||
"scheduler": "^0.12.0"
|
||||
}
|
||||
},
|
||||
"react-dev-utils": {
|
||||
|
@ -8677,14 +8698,14 @@
|
|||
}
|
||||
},
|
||||
"react-dom": {
|
||||
"version": "16.6.3",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz",
|
||||
"integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==",
|
||||
"version": "16.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.7.0.tgz",
|
||||
"integrity": "sha512-D0Ufv1ExCAmF38P2Uh1lwpminZFRXEINJe53zRAbm4KPwSyd6DY/uDoS0Blj9jvPpn1+wivKpZYc8aAAN/nAkg==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"prop-types": "^15.6.2",
|
||||
"scheduler": "^0.11.2"
|
||||
"scheduler": "^0.12.0"
|
||||
}
|
||||
},
|
||||
"react-error-overlay": {
|
||||
|
@ -8693,9 +8714,9 @@
|
|||
"integrity": "sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw=="
|
||||
},
|
||||
"react-is": {
|
||||
"version": "16.6.3",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.6.3.tgz",
|
||||
"integrity": "sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA=="
|
||||
"version": "16.7.0",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz",
|
||||
"integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g=="
|
||||
},
|
||||
"react-lifecycles-compat": {
|
||||
"version": "3.0.4",
|
||||
|
@ -8942,7 +8963,7 @@
|
|||
},
|
||||
"is-accessor-descriptor": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
|
||||
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -8960,7 +8981,7 @@
|
|||
},
|
||||
"is-data-descriptor": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
|
||||
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
|
||||
"requires": {
|
||||
"kind-of": "^3.0.2"
|
||||
|
@ -9284,7 +9305,7 @@
|
|||
"dependencies": {
|
||||
"jsesc": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
|
||||
}
|
||||
}
|
||||
|
@ -9471,11 +9492,11 @@
|
|||
}
|
||||
},
|
||||
"rimraf": {
|
||||
"version": "2.6.2",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
|
||||
"integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
|
||||
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
|
||||
"requires": {
|
||||
"glob": "^7.0.5"
|
||||
"glob": "^7.1.3"
|
||||
}
|
||||
},
|
||||
"ripemd160": {
|
||||
|
@ -9569,9 +9590,9 @@
|
|||
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
|
||||
},
|
||||
"scheduler": {
|
||||
"version": "0.11.3",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.3.tgz",
|
||||
"integrity": "sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ==",
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz",
|
||||
"integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
|
@ -10004,9 +10025,9 @@
|
|||
}
|
||||
},
|
||||
"spdx-license-ids": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
|
||||
"integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg=="
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
|
||||
"integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g=="
|
||||
},
|
||||
"spdy": {
|
||||
"version": "3.4.7",
|
||||
|
@ -10069,9 +10090,9 @@
|
|||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
|
||||
"integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
|
||||
"version": "1.16.0",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.0.tgz",
|
||||
"integrity": "sha512-Zhev35/y7hRMcID/upReIvRse+I9SVhyVre/KTJSJQWMz3C3+G+HpO7m1wK/yckEtujKZ7dS4hkVxAnmHaIGVQ==",
|
||||
"requires": {
|
||||
"asn1": "~0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
|
@ -11173,7 +11194,7 @@
|
|||
},
|
||||
"globby": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
|
||||
"integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
|
||||
"requires": {
|
||||
"array-union": "^1.0.1",
|
||||
|
@ -11254,7 +11275,7 @@
|
|||
"dependencies": {
|
||||
"fs-extra": {
|
||||
"version": "0.30.0",
|
||||
"resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
|
||||
"integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
|
@ -11266,7 +11287,7 @@
|
|||
},
|
||||
"jsonfile": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
|
||||
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
|
||||
"integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.6"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
"private": true,
|
||||
"homepage": "http://localhost:3000/",
|
||||
"dependencies": {
|
||||
"@patternfly/patternfly-next": "1.0.105",
|
||||
"@patternfly/patternfly-next": "1.0.110",
|
||||
"axios": "^0.18.0",
|
||||
"react": "^16.5.1",
|
||||
"react-dom": "^16.5.1",
|
||||
|
|
33
src/App.js
33
src/App.js
|
@ -6,6 +6,7 @@ import "@patternfly/patternfly-next/patternfly.css";
|
|||
import store from "./store";
|
||||
import { getConfig } from "./config/configActions";
|
||||
import * as Containers from "./containers";
|
||||
import Header from "./layout/navigation/Header";
|
||||
|
||||
class App extends Component {
|
||||
state = {
|
||||
|
@ -22,15 +23,29 @@ class App extends Component {
|
|||
return (
|
||||
<Provider store={store}>
|
||||
<BrowserRouter basename={process.env.PUBLIC_URL}>
|
||||
<Switch>
|
||||
<Redirect from="/" exact to="/playbooks" />
|
||||
<Route
|
||||
path="/playbooks"
|
||||
exact
|
||||
component={Containers.PlaybooksContainer}
|
||||
/>
|
||||
<Route component={Containers.Container404} />
|
||||
</Switch>
|
||||
<div>
|
||||
<div className="pf-c-background-image" />
|
||||
<div className="pf-c-page" id="page-layout-horizontal-nav">
|
||||
<Header />
|
||||
<main role="main" className="pf-c-page__main">
|
||||
<section className="pf-c-page__main-section">
|
||||
<Switch>
|
||||
<Redirect from="/" exact to="/playbooks" />
|
||||
<Route
|
||||
path="/playbooks"
|
||||
exact
|
||||
component={Containers.PlaybooksContainer}
|
||||
/>
|
||||
<Route
|
||||
path="/playbooks/:id"
|
||||
component={Containers.PlaybookContainer}
|
||||
/>
|
||||
<Route component={Containers.Container404} />
|
||||
</Switch>
|
||||
</section>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</BrowserRouter>
|
||||
</Provider>
|
||||
);
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
export { default as Container404 } from "./layout/Container404";
|
||||
export { default as MainContainer } from "./layout/MainContainer";
|
||||
export { default as LoadingContainer } from "./layout/LoadingContainer";
|
||||
export { default as PlaybooksContainer } from "./playbooks/PlaybooksContainer";
|
||||
export { default as PlaybookContainer } from "./playbooks/PlaybookContainer";
|
||||
|
|
|
@ -1,20 +1,17 @@
|
|||
import React, { Component } from "react";
|
||||
import MainContainer from "./MainContainer";
|
||||
|
||||
export default class Container404 extends Component {
|
||||
render() {
|
||||
return (
|
||||
<MainContainer>
|
||||
<div className="pf-l-bullseye">
|
||||
<div className="pf-l-bullseye__item">
|
||||
<div className="pf-c-card">
|
||||
<div className="pf-c-card__body">
|
||||
<p>We are looking for your page...but we can't find it</p>
|
||||
</div>
|
||||
<div className="pf-l-bullseye">
|
||||
<div className="pf-l-bullseye__item">
|
||||
<div className="pf-c-card">
|
||||
<div className="pf-c-card__body">
|
||||
<p>We are looking for your page...but we can't find it</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</MainContainer>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
import React, { Component } from "react";
|
||||
|
||||
export default class LoadingContainer extends Component {
|
||||
render() {
|
||||
return (
|
||||
<div className="pf-l-bullseye">
|
||||
<div className="pf-l-bullseye__item">
|
||||
<div className="pf-c-card">
|
||||
<div className="pf-c-card__body">loading</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
import React, { Component } from "react";
|
||||
import Header from "./navigation/Header";
|
||||
|
||||
export default class MainContainer extends Component {
|
||||
render() {
|
||||
const { children } = this.props;
|
||||
return (
|
||||
<div>
|
||||
<div className="pf-c-background-image" />
|
||||
<div className="pf-c-page" id="page-layout-horizontal-nav">
|
||||
<Header />
|
||||
<main role="main" className="pf-c-page__main">
|
||||
<section className="pf-c-page__main-section">{children}</section>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@ export class NavLink extends Component {
|
|||
<Link
|
||||
to={to}
|
||||
className={`${className} ${
|
||||
location.pathname === to ? "pf-m-current" : ""
|
||||
location.pathname.indexOf(to) === -1 ? "" : "pf-m-current"
|
||||
}`}
|
||||
{...rest}
|
||||
>
|
||||
|
|
|
@ -1,139 +0,0 @@
|
|||
import React, { Component } from "react";
|
||||
import PlaybookArgs from "./PlaybookArgs";
|
||||
import PlaybookHosts from "./PlaybookHosts";
|
||||
import PlaybookFiles from "./PlaybookFiles";
|
||||
import styled from "styled-components";
|
||||
|
||||
function _getIconInfo(status) {
|
||||
switch (status) {
|
||||
case "running":
|
||||
return {
|
||||
title: "Playbook is in progress.",
|
||||
icon: "fa-pause",
|
||||
color: "blue"
|
||||
};
|
||||
case "completed":
|
||||
return {
|
||||
title: "Playbook has completed successfully.",
|
||||
icon: "fa-check",
|
||||
color: "green"
|
||||
};
|
||||
case "failed":
|
||||
return {
|
||||
title: "Playbook has failed with one or more errors.",
|
||||
icon: "fa-warning",
|
||||
color: "red"
|
||||
};
|
||||
default:
|
||||
return {
|
||||
title: "Playbook's status is unknown.",
|
||||
icon: "fa-warning",
|
||||
color: "red"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const IconWrapper = styled.i`
|
||||
color: ${props => props.color};
|
||||
`;
|
||||
|
||||
class StatusIcon extends Component {
|
||||
render() {
|
||||
const { status } = this.props;
|
||||
const iconInfo = _getIconInfo(status);
|
||||
return (
|
||||
<IconWrapper
|
||||
color={iconInfo.color}
|
||||
className={`fas ${iconInfo.icon}`}
|
||||
title={iconInfo.title}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
const DataListCell = styled.div`
|
||||
cursor: pointer;
|
||||
`;
|
||||
|
||||
export default class Playbook extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
expanded: false,
|
||||
selection: null
|
||||
};
|
||||
}
|
||||
|
||||
_toggleExpanded = selection => {
|
||||
this.setState(prevState => {
|
||||
if (selection === prevState.selection) {
|
||||
return { expanded: !prevState.expanded, selection: null };
|
||||
} else {
|
||||
return { expanded: true, selection };
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
const { playbook } = this.props;
|
||||
const { expanded, selection } = this.state;
|
||||
return (
|
||||
<ul className="pf-c-data-list pf-u-box-shadow-md">
|
||||
<li
|
||||
className={`pf-c-data-list__item ${expanded ? "pf-m-expanded" : ""}`}
|
||||
>
|
||||
<div className="pf-c-data-list__check">
|
||||
<StatusIcon status={playbook.status} />
|
||||
</div>
|
||||
<DataListCell className="pf-c-data-list__cell pf-m-flex-5">
|
||||
{playbook.path.split("/").slice(-1)[0]}
|
||||
</DataListCell>
|
||||
<DataListCell
|
||||
className="pf-c-data-list__cell pf-m-flex-1"
|
||||
onClick={() => this._toggleExpanded("args")}
|
||||
>
|
||||
<i
|
||||
className={`fas fa-angle-${
|
||||
selection === "args" ? "down" : "right"
|
||||
} pf-u-mr-xs`}
|
||||
/>
|
||||
<b>{Object.keys(playbook.arguments).length}</b> arguments
|
||||
</DataListCell>
|
||||
<DataListCell
|
||||
className="pf-c-data-list__cell pf-m-flex-1"
|
||||
onClick={() => this._toggleExpanded("hosts")}
|
||||
>
|
||||
<i
|
||||
className={`fas fa-angle-${
|
||||
selection === "hosts" ? "down" : "right"
|
||||
} pf-u-mr-xs`}
|
||||
/>
|
||||
<b>{playbook.hosts.length}</b> Hosts
|
||||
</DataListCell>
|
||||
<DataListCell
|
||||
className="pf-c-data-list__cell pf-m-flex-1"
|
||||
onClick={() => this._toggleExpanded("files")}
|
||||
>
|
||||
<i
|
||||
className={`fas fa-angle-${
|
||||
selection === "files" ? "down" : "right"
|
||||
} pf-u-mr-xs`}
|
||||
/>
|
||||
<b>{playbook.files.length}</b> Files
|
||||
</DataListCell>
|
||||
<DataListCell className="pf-c-data-list__cell pf-u-text-align-right">
|
||||
<i className={`fas fa-clock pf-u-mr-xs`} />
|
||||
{Math.round(playbook.duration)} sec
|
||||
</DataListCell>
|
||||
<section
|
||||
className="pf-c-data-list__expandable-content"
|
||||
aria-label="Primary Content Details"
|
||||
>
|
||||
{selection === "args" && <PlaybookArgs playbook={playbook} />}
|
||||
{selection === "hosts" && <PlaybookHosts playbook={playbook} />}
|
||||
{selection === "files" && <PlaybookFiles playbook={playbook} />}
|
||||
</section>
|
||||
</li>
|
||||
</ul>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,56 +0,0 @@
|
|||
import React, { Component } from "react";
|
||||
|
||||
export default class PlaybookArgs extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
search: ""
|
||||
};
|
||||
}
|
||||
|
||||
_renderArg = arg => {
|
||||
if (arg instanceof Array) {
|
||||
return arg.join(", ");
|
||||
} else {
|
||||
return arg;
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
const { playbook } = this.props;
|
||||
const { search } = this.state;
|
||||
const args = Object.keys(playbook.arguments);
|
||||
const filteredArgs = args.filter(
|
||||
arg => arg.toLowerCase().indexOf(search.toLowerCase()) !== -1
|
||||
);
|
||||
return (
|
||||
<div>
|
||||
<div className="pf-l-grid pf-m-gutter pf-u-display-flex pf-u-align-items-center">
|
||||
<div className="pf-l-grid__item">
|
||||
<input
|
||||
className="pf-c-form-control"
|
||||
placeholder="Search an argument"
|
||||
type="search"
|
||||
value={search}
|
||||
onChange={e => this.setState({ search: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
<div className="pf-l-grid__item">
|
||||
{`Showing ${filteredArgs.length} of ${args.length} args`}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table className="pf-c-table pf-m-compact pf-m-grid-md" role="grid">
|
||||
<tbody>
|
||||
{filteredArgs.map((arg, i) => (
|
||||
<tr key={i}>
|
||||
<td className="pf-m-width-30">{arg}</td>
|
||||
<td className="pf-m-width-70">{this._renderArg(playbook.arguments[arg])}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
import React, { Component } from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { isEmpty } from "lodash";
|
||||
import { LoadingContainer, Container404 } from "../containers";
|
||||
import { getPlaybook } from "./playbooksActions";
|
||||
import TasksContainer from "../tasks/TasksContainer";
|
||||
|
||||
export class PlaybookContainer extends Component {
|
||||
state = {
|
||||
isLoading: true,
|
||||
playbook: null
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.props
|
||||
.getPlaybook({ id: this.props.match.params.id })
|
||||
.then(response => this.setState({ playbook: response.data }))
|
||||
.catch(error => console.log(error))
|
||||
.then(() => this.setState({ isLoading: false }));
|
||||
}
|
||||
|
||||
render() {
|
||||
const { isLoading, playbook } = this.state;
|
||||
if (isLoading) {
|
||||
return <LoadingContainer />;
|
||||
}
|
||||
if (!isLoading && isEmpty(playbook)) {
|
||||
return <Container404 />;
|
||||
}
|
||||
return (
|
||||
<div>
|
||||
<div className="pf-c-card">
|
||||
<div class="pf-c-card__header">
|
||||
<h1 className="pf-c-title pf-m-lg">Tasks</h1>
|
||||
</div>
|
||||
<div className="pf-c-card__body">
|
||||
<TasksContainer playbook={playbook} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return {
|
||||
getPlaybook: playbook => dispatch(getPlaybook(playbook))
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
mapDispatchToProps
|
||||
)(PlaybookContainer);
|
|
@ -1,87 +0,0 @@
|
|||
import React, { Component } from "react";
|
||||
import styled from "styled-components";
|
||||
|
||||
const ModalBox = styled.div`
|
||||
position: absolute;
|
||||
`;
|
||||
|
||||
export default class PlaybookFiles extends Component {
|
||||
state = {
|
||||
showModal: false,
|
||||
filePath: null,
|
||||
fileContent: null
|
||||
};
|
||||
|
||||
close = () => {
|
||||
this.setState({ showModal: false });
|
||||
};
|
||||
|
||||
render() {
|
||||
const { playbook } = this.props;
|
||||
const { showModal, filePath, fileContent } = this.state;
|
||||
return (
|
||||
<div>
|
||||
{showModal && (
|
||||
<ModalBox>
|
||||
<div
|
||||
className="pf-c-modal-box pf-m-lg"
|
||||
role="dialog"
|
||||
aria-modal="true"
|
||||
aria-labelledby="modal-title"
|
||||
aria-describedby="modal-description"
|
||||
>
|
||||
<div className="pf-c-modal-box__close">
|
||||
<button
|
||||
className="pf-c-button pf-m-plain"
|
||||
aria-label="Close"
|
||||
onClick={this.close}
|
||||
>
|
||||
<i className="fas fa-times" aria-hidden="true" />
|
||||
</button>
|
||||
</div>
|
||||
<header className="pf-c-modal-box__header">
|
||||
<h1 className="pf-c-modal-box__header-title" id="modal-title">
|
||||
{filePath}
|
||||
</h1>
|
||||
</header>
|
||||
<div className="pf-c-modal-box__body" id="modal-description">
|
||||
<pre>
|
||||
<code>{fileContent}</code>
|
||||
</pre>
|
||||
</div>
|
||||
<footer className="pf-c-modal-box__footer">
|
||||
<button type="button" onClick={this.close}>
|
||||
close
|
||||
</button>
|
||||
</footer>
|
||||
</div>
|
||||
</ModalBox>
|
||||
)}
|
||||
<table className="pf-c-table pf-m-compact pf-m-grid-md" role="grid">
|
||||
<tbody>
|
||||
{playbook.files.map(file => (
|
||||
<tr key={file.id}>
|
||||
<td>{file.path}</td>
|
||||
<td>
|
||||
<button
|
||||
type="button"
|
||||
className="pf-c-button pf-m-secondary"
|
||||
onClick={() =>
|
||||
this.setState({
|
||||
showModal: true,
|
||||
filePath: file.path,
|
||||
fileContent: file.content
|
||||
})
|
||||
}
|
||||
>
|
||||
See content
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
import React, { Component } from "react";
|
||||
|
||||
export default class PlaybookHosts extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
search: ""
|
||||
};
|
||||
}
|
||||
|
||||
render() {
|
||||
const { playbook } = this.props;
|
||||
const { search } = this.state;
|
||||
const filteredHosts = playbook.hosts.filter(
|
||||
host => host.name.toLowerCase().indexOf(search.toLowerCase()) !== -1
|
||||
);
|
||||
return (
|
||||
<div>
|
||||
<div className="pf-l-grid pf-m-gutter pf-u-display-flex pf-u-align-items-center">
|
||||
<div className="pf-l-grid__item">
|
||||
<input
|
||||
className="pf-c-form-control"
|
||||
placeholder="Search a host"
|
||||
type="search"
|
||||
value={search}
|
||||
onChange={e => this.setState({ search: e.target.value })}
|
||||
/>
|
||||
</div>
|
||||
<div className="pf-l-grid__item">
|
||||
{`Showing ${filteredHosts.length} of ${
|
||||
playbook.hosts.length
|
||||
} hosts`}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table className="pf-c-table pf-m-compact pf-m-grid-md" role="grid">
|
||||
<tbody>
|
||||
{filteredHosts.map(host => (
|
||||
<tr key={host.id}>
|
||||
<td className="pf-m-width-30">{host.name}</td>
|
||||
<td className="pf-m-width-70">{host.alias}</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,139 @@
|
|||
import React, { Component } from "react";
|
||||
import styled from "styled-components";
|
||||
|
||||
function _getIconInfo(status) {
|
||||
switch (status) {
|
||||
case "running":
|
||||
return {
|
||||
title: "Playbook is in progress.",
|
||||
icon: "fa-pause",
|
||||
color: "blue"
|
||||
};
|
||||
case "completed":
|
||||
return {
|
||||
title: "Playbook has completed successfully.",
|
||||
icon: "fa-check",
|
||||
color: "green"
|
||||
};
|
||||
case "failed":
|
||||
return {
|
||||
title: "Playbook has failed with one or more errors.",
|
||||
icon: "fa-warning",
|
||||
color: "red"
|
||||
};
|
||||
default:
|
||||
return {
|
||||
title: "Playbook's status is unknown.",
|
||||
icon: "fa-warning",
|
||||
color: "red"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const IconWrapper = styled.i`
|
||||
color: ${props => props.color};
|
||||
`;
|
||||
|
||||
class StatusIcon extends Component {
|
||||
render() {
|
||||
const { status } = this.props;
|
||||
const iconInfo = _getIconInfo(status);
|
||||
return (
|
||||
<IconWrapper
|
||||
color={iconInfo.color}
|
||||
className={`fa ${iconInfo.icon}`}
|
||||
title={iconInfo.title}
|
||||
/>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const PlaybookWrapper = styled.div`
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
.pf-c-card {
|
||||
background: rgba(0, 0, 0, 0)
|
||||
linear-gradient(
|
||||
to right,
|
||||
rgb(57, 165, 220) 0px,
|
||||
rgb(57, 165, 220) 5px,
|
||||
rgb(255, 255, 255) 5px,
|
||||
rgb(255, 255, 255) 100%
|
||||
)
|
||||
no-repeat scroll 0% 0%;
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const StatusAndName = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
margin-bottom: 1em;
|
||||
@media (min-width: 587px) {
|
||||
width: 25%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
`;
|
||||
const PlaybookInfo = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
margin-bottom: 1em;
|
||||
@media (min-width: 587px) {
|
||||
width: 50%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
`;
|
||||
const Duration = styled.div`
|
||||
display: flex;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
@media (min-width: 587px) {
|
||||
width: 25%;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
`;
|
||||
|
||||
export default class Playbook extends Component {
|
||||
render() {
|
||||
const { playbook, history } = this.props;
|
||||
return (
|
||||
<PlaybookWrapper
|
||||
className="pf-u-mb-xs"
|
||||
onClick={() => history.push(`/playbooks/${playbook.id}`)}
|
||||
>
|
||||
<div className="pf-c-card">
|
||||
<div className="pf-c-card__body">
|
||||
<div className="pf-u-display-flex pf-u-flex-direction-column pf-u-flex-direction-row-on-md">
|
||||
<StatusAndName>
|
||||
<StatusIcon status={playbook.status} />
|
||||
<h1 className="pf-c-title pf-m-xl pf-u-ml-lg">
|
||||
{playbook.path.split("/").slice(-1)[0]}
|
||||
</h1>
|
||||
</StatusAndName>
|
||||
<PlaybookInfo>
|
||||
<span className="pf-u-mr-xl">
|
||||
<b>{Object.keys(playbook.arguments).length}</b> arguments
|
||||
</span>
|
||||
<span className="pf-u-mr-xl">
|
||||
<b>{playbook.hosts.length}</b> Hosts
|
||||
</span>
|
||||
<span className="pf-u-mr-xl">
|
||||
<b>{playbook.files.length}</b> Files
|
||||
</span>
|
||||
</PlaybookInfo>
|
||||
<Duration>
|
||||
<i className="fa fa-clock" />
|
||||
<span className="pf-u-ml-xs">
|
||||
{Math.round(playbook.duration)} sec
|
||||
</span>
|
||||
</Duration>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</PlaybookWrapper>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -2,34 +2,32 @@ import React, { Component } from "react";
|
|||
import { connect } from "react-redux";
|
||||
import { isEmpty } from "lodash";
|
||||
|
||||
import { MainContainer } from "../containers";
|
||||
import { LoadingContainer } from "../containers";
|
||||
import { getPlaybooks } from "./playbooksActions";
|
||||
import Playbook from "./Playbook";
|
||||
import PlaybookSummary from "./PlaybookSummary";
|
||||
|
||||
export class PlaybooksContainer extends Component {
|
||||
state = {
|
||||
isLoading: true
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.props
|
||||
.getPlaybooks()
|
||||
.catch(error => console.log(error))
|
||||
.then(() => this.setState({ isLoading: false }));
|
||||
}
|
||||
|
||||
render() {
|
||||
const { playbooks } = this.props;
|
||||
const { playbooks, history } = this.props;
|
||||
const { isLoading } = this.state;
|
||||
|
||||
if (isLoading) {
|
||||
return <LoadingContainer />;
|
||||
}
|
||||
|
||||
return (
|
||||
<MainContainer>
|
||||
{isLoading && (
|
||||
<div className="pf-l-bullseye">
|
||||
<div className="pf-l-bullseye__item">
|
||||
<div className="pf-c-card">
|
||||
<div className="pf-c-card__body">loading</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
{!isLoading && isEmpty(playbooks) && (
|
||||
<div className="pf-l-bullseye">
|
||||
<div className="pf-l-bullseye__item">
|
||||
|
@ -60,9 +58,9 @@ export class PlaybooksContainer extends Component {
|
|||
</div>
|
||||
)}
|
||||
{playbooks.map(playbook => (
|
||||
<Playbook key={playbook.id} playbook={playbook} />
|
||||
<PlaybookSummary key={playbook.id} playbook={playbook} history={history} />
|
||||
))}
|
||||
</MainContainer>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,3 +13,10 @@ export function getPlaybooks() {
|
|||
});
|
||||
};
|
||||
}
|
||||
|
||||
export function getPlaybook(playbook) {
|
||||
return (dispatch, getState) => {
|
||||
const { apiURL } = getState().config;
|
||||
return axios.get(`${apiURL}/api/v1/playbooks/${playbook.id}`);
|
||||
};
|
||||
}
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
import React, { Component } from "react";
|
||||
import { connect } from "react-redux";
|
||||
import { isEmpty } from "lodash";
|
||||
import { getTasks } from "./tasksActions";
|
||||
|
||||
export class TasksContainer extends Component {
|
||||
state = {
|
||||
isLoading: true,
|
||||
tasks: []
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
const { playbook, getTasks } = this.props;
|
||||
getTasks(playbook)
|
||||
.then(response => this.setState({ tasks: response.data.results }))
|
||||
.catch(error => console.log(error))
|
||||
.then(() => this.setState({ isLoading: false }));
|
||||
}
|
||||
|
||||
render() {
|
||||
const { isLoading, tasks } = this.state;
|
||||
if (isLoading) {
|
||||
return null;
|
||||
}
|
||||
if (!isLoading && isEmpty(tasks)) {
|
||||
return <div>no tasks for this playbook</div>;
|
||||
}
|
||||
return (
|
||||
<table class="pf-c-table pf-m-compact pf-m-grid-md" role="grid">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Action</th>
|
||||
<th>Duration</th>
|
||||
<th>Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{tasks.map(task => (
|
||||
<tr key={task.id}>
|
||||
<th data-label="Task Name">{task.name}</th>
|
||||
<th data-label="Action">{task.action}</th>
|
||||
<th data-label="Duration">{task.duration}</th>
|
||||
<th data-label="Status">{task.status}</th>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
function mapDispatchToProps(dispatch) {
|
||||
return {
|
||||
getTasks: playbook => dispatch(getTasks(playbook))
|
||||
};
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
mapDispatchToProps
|
||||
)(TasksContainer);
|
|
@ -0,0 +1,9 @@
|
|||
import axios from "axios";
|
||||
|
||||
export function getTasks(playbook) {
|
||||
return (dispatch, getState) => {
|
||||
const { apiURL } = getState().config;
|
||||
return axios
|
||||
.get(`${apiURL}/api/v1/tasks?playbook=${playbook.id}`);
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue