Move playbook details page in a dedicated page

Change-Id: I5ff30157a154fec52b6cee83d237823a7ce8c99d
This commit is contained in:
Guillaume Vincent 2019-01-04 16:04:11 +01:00
parent fe595b35d6
commit 3cb2d5bc55
18 changed files with 484 additions and 516 deletions

281
package-lock.json generated
View File

@ -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"

View File

@ -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",

View File

@ -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>
);

View File

@ -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";

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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}
>

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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);

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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>
);
}
}

View File

@ -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}`);
};
}

View File

@ -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);

View File

@ -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}`);
};
}