From 6c1e309ce4fa0b5607dfda3b7c057dc0872de0e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Cape=C3=A1ns=20P=C3=A9rez?= Date: Wed, 6 May 2020 18:42:58 +0200 Subject: [PATCH 01/11] Color of the temperature sensor changes with the temperature value (up to 20 degrees is green, from 20 to 30 is yellow and from 30 on is red) --- .../components/dashboard/devices/Sensor.js | 359 ++++++++++-------- smart-hut/yarn.lock | 217 +---------- 2 files changed, 211 insertions(+), 365 deletions(-) diff --git a/smart-hut/src/components/dashboard/devices/Sensor.js b/smart-hut/src/components/dashboard/devices/Sensor.js index f171b6a..07cb440 100644 --- a/smart-hut/src/components/dashboard/devices/Sensor.js +++ b/smart-hut/src/components/dashboard/devices/Sensor.js @@ -22,18 +22,18 @@ import React, { Component } from "react"; import { CircularInput, CircularProgress } from "react-circular-input"; import { - container, - sensorText, - style, - valueStyle, - motionSensorInnerCircle, - motionSensorOuterCircle, - nameMotionStyle, - motionSensorIcon, - temperatureSensorColors, - lightSensorColors, - humiditySensorColors, - iconSensorStyle, + container, + sensorText, + style, + valueStyle, + motionSensorInnerCircle, + motionSensorOuterCircle, + nameMotionStyle, + motionSensorIcon, + temperatureSensorColors, + lightSensorColors, + humiditySensorColors, + iconSensorStyle, } from "./SensorStyle"; import { Image } from "semantic-ui-react"; import { RemoteService } from "../../../remote"; @@ -41,158 +41,197 @@ import { connect } from "react-redux"; import mapStateToProps from "../../../deviceProps"; class Sensor extends Component { - constructor(props) { - super(props); - this.state = { - value: 0, - motion: false, - }; - this.units = ""; - this.stateCallback = (e) => { - this.setState(Object.assign(this.state, e)); + constructor(props) { + super(props); + this.state = { + value: 0, + motion: false, + }; + this.units = ""; + this.stateCallback = (e) => { + this.setState(Object.assign(this.state, e)); + }; + + this.colors = temperatureSensorColors; + this.icon = "temperatureIcon.svg"; + this.name = "Sensor"; + } + + // setName = () => { + // if (this.props.device.name.length > 15) { + // return this.props.device.name.slice(0, 12) + "..."; + // } + // return this.props.device.name; + // }; + + componentDidUpdate(prevProps) { + if ( + this.props.stateOrDevice.kind === "sensor" && + this.props.stateOrDevice.value !== prevProps.stateOrDevice.value + ) { + this.setState({ value: this.props.stateOrDevice.value }); + } else if ( + this.props.stateOrDevice.kind === "motionSensor" && + this.props.stateOrDevice.detected !== + prevProps.stateOrDevice.detected + ) { + this.setState({ + motion: true, + detected: this.props.stateOrDevice.detected, + }); + } + } + + componentDidMount() { + if (this.props.stateOrDevice.kind === "sensor") { + switch (this.props.stateOrDevice.sensor) { + case "TEMPERATURE": + this.units = "ºC"; + this.colors = temperatureSensorColors; + this.icon = "temperatureIcon.svg"; + this.name = "Temperature Sensor"; + break; + case "HUMIDITY": + this.units = "%"; + this.colors = humiditySensorColors; + this.icon = "humidityIcon.svg"; + this.name = "Humidity Sensor"; + break; + case "LIGHT": + this.units = "lm"; + this.colors = lightSensorColors; + this.icon = "lightSensorIcon.svg"; + this.name = "Light Sensor"; + break; + default: + this.units = ""; + } + this.setState({ + value: this.props.stateOrDevice.value, + }); + } else { + this.setState({ + detected: this.props.stateOrDevice.detected, + motion: true, + }); + } + } + + getIcon = () => { + if (this.state.detected) { + return this.iconOn; + } + return this.iconOff; }; - this.colors = temperatureSensorColors; - this.icon = "temperatureIcon.svg"; - this.name = "Sensor"; - } - - // setName = () => { - // if (this.props.device.name.length > 15) { - // return this.props.device.name.slice(0, 12) + "..."; - // } - // return this.props.device.name; - // }; - - componentDidUpdate(prevProps) { - if ( - this.props.stateOrDevice.kind === "sensor" && - this.props.stateOrDevice.value !== prevProps.stateOrDevice.value - ) { - this.setState({ value: this.props.stateOrDevice.value }); - } else if ( - this.props.stateOrDevice.kind === "motionSensor" && - this.props.stateOrDevice.detected !== prevProps.stateOrDevice.detected - ) { - this.setState({ - motion: true, - detected: this.props.stateOrDevice.detected, - }); - } - } - - componentDidMount() { - if (this.props.stateOrDevice.kind === "sensor") { - switch (this.props.stateOrDevice.sensor) { - case "TEMPERATURE": - this.units = "ºC"; - this.colors = temperatureSensorColors; - this.icon = "temperatureIcon.svg"; - this.name = "Temperature Sensor"; - break; - case "HUMIDITY": - this.units = "%"; - this.colors = humiditySensorColors; - this.icon = "humidityIcon.svg"; - this.name = "Humidity Sensor"; - break; - case "LIGHT": - this.units = "lm"; - this.colors = lightSensorColors; - this.icon = "lightSensorIcon.svg"; - this.name = "Light Sensor"; - break; - default: - this.units = ""; - } - this.setState({ - value: this.props.stateOrDevice.value, - }); - } else { - this.setState({ - detected: this.props.stateOrDevice.detected, - motion: true, - }); - } - } - - getIcon = () => { - if (this.state.detected) { - return this.iconOn; - } - return this.iconOff; - }; - - render() { - const MotionSensor = (props) => { - return ( -
-
- - Motion Sensor -
-
- ); + temperatureColor = (value) => { + let hue = 100; + if (value >= 20 && value < 30) { + hue = 50; + } else if (value >= 30) { + hue = 0; + } + return `hsl(${hue}, 100%, 50%)`; }; - return ( -
- {this.state.motion ? ( - - ) : ( - - - - - {+(Math.round(this.state.value + "e+2") + "e-2")} - {this.units} - - - {this.name} - - - - - )} -
- ); - } + render() { + const MotionSensor = (props) => { + return ( +
+
+ + Motion Sensor +
+
+ ); + }; + + return ( +
+ {this.state.motion ? ( + + ) : ( + + + + + { + +( + Math.round(this.state.value + "e+2") + + "e-2" + ) + } + {this.units} + + + {this.name} + + + + + )} +
+ ); + } } const SensorContainer = connect(mapStateToProps, RemoteService)(Sensor); diff --git a/smart-hut/yarn.lock b/smart-hut/yarn.lock index 68fe632..affdd46 100644 --- a/smart-hut/yarn.lock +++ b/smart-hut/yarn.lock @@ -1940,11 +1940,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2113,19 +2108,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -3252,11 +3239,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3744,7 +3726,7 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3780,11 +3762,6 @@ deep-equal@^1.0.1, deep-equal@^1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.2.0" -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3845,11 +3822,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -3868,11 +3840,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -4967,13 +4934,6 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -5024,20 +4984,6 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -5229,11 +5175,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -5491,7 +5432,7 @@ hyphenate-style-name@^1.0.3: resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -5522,13 +5463,6 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - ignore@^3.3.5: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5632,7 +5566,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.5, ini@~1.3.0: +ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -7235,14 +7169,6 @@ minipass-pipeline@^1.2.2: dependencies: minipass "^3.0.0" -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - minipass@^3.0.0, minipass@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" @@ -7250,13 +7176,6 @@ minipass@^3.0.0, minipass@^3.1.1: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -7289,7 +7208,7 @@ mixin-object@^2.0.1: for-in "^0.1.3" is-extendable "^0.1.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7368,15 +7287,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" - integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -7468,35 +7378,11 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.52, node-releases@^1.1.53: version "1.1.53" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -7539,27 +7425,6 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7567,16 +7432,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -7786,11 +7641,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -7800,19 +7650,11 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -9127,16 +8969,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-app-polyfill@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz#890f8d7f2842ce6073f030b117de9130a5f385f0" @@ -9421,7 +9253,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9787,7 +9619,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -9945,7 +9777,7 @@ semantic-ui-react@^0.88.2: react-popper "^1.3.4" shallowequal "^1.1.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -10007,7 +9839,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -10419,7 +10251,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -10560,11 +10392,6 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - style-loader@0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -10673,19 +10500,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - terser-webpack-plugin@2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz#ac045703bd8da0936ce910d8fb6350d0e1dee5fe" @@ -11398,13 +11212,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -11631,7 +11438,7 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 74d5be79672dba5450dbeff510b05788bf298c48 Mon Sep 17 00:00:00 2001 From: omenem Date: Thu, 7 May 2020 09:29:22 +0200 Subject: [PATCH 02/11] fix --- smart-hut/src/components/RoomModal.js | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/smart-hut/src/components/RoomModal.js b/smart-hut/src/components/RoomModal.js index 653c763..b6d55d2 100644 --- a/smart-hut/src/components/RoomModal.js +++ b/smart-hut/src/components/RoomModal.js @@ -8,6 +8,7 @@ import { Icon, Responsive, Image, + Confirm, } from "semantic-ui-react"; import SelectIcons from "./SelectIcons"; import { connect } from "react-redux"; @@ -34,6 +35,7 @@ class RoomModal extends Component { name: this.type === "new" ? "New Room" : this.props.room.name, img: this.type === "new" ? null : this.props.room.image, openModal: false, + sure: false, }; } @@ -91,6 +93,14 @@ class RoomModal extends Component { .catch((err) => console.error("error in deleting room", err)); }; + setSureTrue = () => { + this.setState({sure: true}) + } + + setSureFalse= () => { + this.setState({sure: false}) + } + changeSomething = (event) => { let nam = event.target.name; let val = event.target.value; @@ -220,16 +230,22 @@ class RoomModal extends Component { {this.type === "modify" ? ( +
+ Delete Room + +
+ ) : null} From bb91bb1ee2705d5f26fdc0e094031284797169a1 Mon Sep 17 00:00:00 2001 From: Nicola Brunner Date: Thu, 7 May 2020 09:51:38 +0200 Subject: [PATCH 03/11] fixed warning message in device panel thanks to andrea --- smart-hut/src/components/dashboard/DevicePanel.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/smart-hut/src/components/dashboard/DevicePanel.js b/smart-hut/src/components/dashboard/DevicePanel.js index 23db867..f55ee11 100644 --- a/smart-hut/src/components/dashboard/DevicePanel.js +++ b/smart-hut/src/components/dashboard/DevicePanel.js @@ -25,7 +25,7 @@ class DevicePanel extends Component { render() { return ( - {this.props.devices.length !== 0 ? ( + {this.props.numbeOfRooms > 0 ? ( {this.props.devices.map((e, i) => { return ; @@ -70,6 +70,9 @@ const mapStateToProps = (state, _) => ({ return state.active.activeRoom === -1; }, activeRoom: state.active.activeRoom, + get numbeOfRooms() { + return Object.keys(state.rooms).length; + }, }); const DevicePanelContainer = connect( mapStateToProps, From 5e76bbfa2f0e1fc5d351007832d53ce0ff0e8988 Mon Sep 17 00:00:00 2001 From: Jacob Salvi Date: Thu, 7 May 2020 09:58:49 +0200 Subject: [PATCH 04/11] Added the background image for romms --- smart-hut/package-lock.json | 66 +++++++++++++++++++++++++++ smart-hut/package.json | 1 + smart-hut/src/components/RoomModal.js | 9 ++++ smart-hut/src/views/Dashboard.js | 39 +++++++++++++++- 4 files changed, 114 insertions(+), 1 deletion(-) diff --git a/smart-hut/package-lock.json b/smart-hut/package-lock.json index d39ace7..be890f1 100644 --- a/smart-hut/package-lock.json +++ b/smart-hut/package-lock.json @@ -1075,6 +1075,14 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "@giantmachines/redux-websocket": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@giantmachines/redux-websocket/-/redux-websocket-1.2.0.tgz", + "integrity": "sha512-87GXE32CnsA9/AA7jVDQupWLmycHAuoWPwNCTz2YnlRR1l8EqLlOJK6SyeMQaVRIuAvM5B7e06dylmaS9Jlgnw==", + "requires": { + "redux": "~4" + } + }, "@hapi/address": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", @@ -6356,6 +6364,14 @@ "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" }, + "immutability-helper": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/immutability-helper/-/immutability-helper-3.0.2.tgz", + "integrity": "sha512-fcrJ26wpvUcuGRpoGY4hyQ/JOeR1HAunMmE3C0XYXSe6plAGtgTlB2S4BzueBANCPrDJ7AByL1yrIRLIlVfwpA==", + "requires": { + "invariant": "^2.2.4" + } + }, "import-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", @@ -10753,6 +10769,11 @@ "resolved": "https://registry.npmjs.org/react-circular-slider-svg/-/react-circular-slider-svg-0.1.5.tgz", "integrity": "sha512-ZXSlwKHExjb950+84gydH5wxX1CnND1v4w1DywOHcOgzD48Wmjr+nME4JeOumNJ9QOXhm1HROhSEDMlTFIAGqw==" }, + "react-confirm-alert": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/react-confirm-alert/-/react-confirm-alert-2.6.1.tgz", + "integrity": "sha512-KxlpQoR4x/ET1oFPm/IGpsqnpzP17qkkQZuaO3pw7zGZ9oP5hElPtq/1vgoikoqNHQ2tMm6Iw9HQUNLoNgXkRA==" + }, "react-dev-utils": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.0.tgz", @@ -10968,6 +10989,27 @@ "warning": "^4.0.2" } }, + "react-rangeslider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/react-rangeslider/-/react-rangeslider-2.2.0.tgz", + "integrity": "sha512-5K7Woa+cyqZ5wiW5+KhqGV+3+FiFxGKQ9rUxTMh52sObXVYEeBbfxFrp1eBvS8mRIxnUbHz9ppnFP0LhwOyNeg==", + "requires": { + "classnames": "^2.2.3", + "resize-observer-polyfill": "^1.4.2" + } + }, + "react-redux": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.0.tgz", + "integrity": "sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA==", + "requires": { + "@babel/runtime": "^7.5.5", + "hoist-non-react-statics": "^3.3.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.7.2", + "react-is": "^16.9.0" + } + }, "react-round-slider": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/react-round-slider/-/react-round-slider-1.0.1.tgz", @@ -11163,6 +11205,20 @@ "strip-indent": "^3.0.0" } }, + "redux": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz", + "integrity": "sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w==", + "requires": { + "loose-envify": "^1.4.0", + "symbol-observable": "^1.2.0" + } + }, + "redux-thunk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz", + "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==" + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -11382,6 +11438,11 @@ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.0.tgz", @@ -12625,6 +12686,11 @@ "util.promisify": "~1.0.0" } }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, "symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", diff --git a/smart-hut/package.json b/smart-hut/package.json index e5ced9e..393f214 100644 --- a/smart-hut/package.json +++ b/smart-hut/package.json @@ -17,6 +17,7 @@ "react-axios": "^2.0.3", "react-circular-input": "^0.1.6", "react-circular-slider-svg": "^0.1.5", + "react-confirm-alert": "^2.6.1", "react-device-detect": "^1.11.14", "react-dom": "^16.12.0", "react-modal": "^2.2.2", diff --git a/smart-hut/src/components/RoomModal.js b/smart-hut/src/components/RoomModal.js index 13126d4..c46bda0 100644 --- a/smart-hut/src/components/RoomModal.js +++ b/smart-hut/src/components/RoomModal.js @@ -35,6 +35,7 @@ class RoomModal extends Component { name: this.type === "new" ? "New Room" : this.props.room.name, img: this.type === "new" ? null : this.props.room.image, openModal: false, + sure: false, }; } @@ -92,6 +93,14 @@ class RoomModal extends Component { .catch((err) => console.error("error in deleting room", err)); }; + setSureTrue=(e)=>{ + this.setState({ sure: true }) + }; + + setSureFalse=(e)=>{ + this.setState({ sure: false }) + } + changeSomething = (event) => { let nam = event.target.name; let val = event.target.value; diff --git a/smart-hut/src/views/Dashboard.js b/smart-hut/src/views/Dashboard.js index ab2c952..18d0ef0 100644 --- a/smart-hut/src/views/Dashboard.js +++ b/smart-hut/src/views/Dashboard.js @@ -81,6 +81,15 @@ class Dashboard extends Component { } render() { + // needed to correctly assign the background image + //in case a room has one. + let backgroundImageHelper; + if(this.activeTab==="Devices"){ + backgroundImageHelper=this.props.allRooms; + }else{ + backgroundImageHelper=null; + } + //console.log("helper is",helper) return (
@@ -126,7 +135,15 @@ class Dashboard extends Component { )} -
{this.renderTab(this.activeTab)}
+
{this.renderTab(this.activeTab)}
@@ -199,6 +216,26 @@ class Dashboard extends Component { const mapStateToProps = (state, _) => ({ activeTab: state.active.activeTab, + get currentRoom(){ + return state.active.activeRoom; + }, + //this took me way longer to figure out than it should have + get allRooms(){ + if(state.active.activeRoom==-1){ + return null; + } + for(let i in state.rooms){ + if(i==state.active.activeRoom){ + //console.log("check",state.rooms[i].image) + if(state.rooms[i].image===undefined){ + return null; + }else{ + return state.rooms[i].image; + } + } + } + }, + }); const setActiveTab = (activeTab) => { From 74bccad6364dbd45d064c285bc9dbaf9d4dca489 Mon Sep 17 00:00:00 2001 From: Fil Cesana Date: Thu, 7 May 2020 13:13:02 +0200 Subject: [PATCH 05/11] added: icons for curtains and thermostat, all links in the footer now work, centered the toggle for the videocam component - also, I do not know if it was already merged, but the modal now looks better (I hope) --- smart-hut/public/img/curtains-icon.png | Bin 0 -> 40011 bytes smart-hut/public/img/thermostat-icon.png | Bin 0 -> 24496 bytes .../components/dashboard/devices/NewDevice.js | 8 ++++++-- .../components/dashboard/devices/Videocam.js | 14 +++++++++----- smart-hut/src/views/Home.js | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 smart-hut/public/img/curtains-icon.png create mode 100644 smart-hut/public/img/thermostat-icon.png diff --git a/smart-hut/public/img/curtains-icon.png b/smart-hut/public/img/curtains-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2772356d51a3acfbc6157e7461be74d6ade04c65 GIT binary patch literal 40011 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 DL`Hb0 literal 0 HcmV?d00001 diff --git a/smart-hut/src/components/dashboard/devices/NewDevice.js b/smart-hut/src/components/dashboard/devices/NewDevice.js index 6945a20..965ccc0 100644 --- a/smart-hut/src/components/dashboard/devices/NewDevice.js +++ b/smart-hut/src/components/dashboard/devices/NewDevice.js @@ -165,8 +165,12 @@ class NewDevice extends Component { render() { const deviceOptions = [ //stuff - { key: "thermostat", text: "Thermostat", value: "thermostat", image: {} }, - { key: "curtains", text: "Curtain", value: "curtains", image: {} }, + { key: "thermostat", text: "Thermostat", value: "thermostat", + image: {avatar: true, src: "/img/thermostat-icon.png"} + }, + { key: "curtains", text: "Curtain", value: "curtains", + image: {avatar: true, src: "/img/curtains-icon.png"} + }, //stuff ends { key: "light", diff --git a/smart-hut/src/components/dashboard/devices/Videocam.js b/smart-hut/src/components/dashboard/devices/Videocam.js index cdde004..409d467 100644 --- a/smart-hut/src/components/dashboard/devices/Videocam.js +++ b/smart-hut/src/components/dashboard/devices/Videocam.js @@ -70,12 +70,16 @@ class Videocam extends Component { /> + + + this.setOnOff(val.checked)} + /> + + - this.setOnOff(val.checked)} - />
); diff --git a/smart-hut/src/views/Home.js b/smart-hut/src/views/Home.js index b5e904f..1347c0a 100644 --- a/smart-hut/src/views/Home.js +++ b/smart-hut/src/views/Home.js @@ -247,7 +247,7 @@ const Home = () => ( - + The Shell From cc60ff06eefbc0221b98a37da436330517ae7c1a Mon Sep 17 00:00:00 2001 From: Jacob Salvi Date: Thu, 7 May 2020 15:33:50 +0200 Subject: [PATCH 06/11] trying to solve a merge conflict --- smart-hut/src/components/RoomModal.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/smart-hut/src/components/RoomModal.js b/smart-hut/src/components/RoomModal.js index c46bda0..e49708b 100644 --- a/smart-hut/src/components/RoomModal.js +++ b/smart-hut/src/components/RoomModal.js @@ -93,11 +93,11 @@ class RoomModal extends Component { .catch((err) => console.error("error in deleting room", err)); }; - setSureTrue=(e)=>{ + setSureTrue=()=>{ this.setState({ sure: true }) }; - setSureFalse=(e)=>{ + setSureFalse=()=>{ this.setState({ sure: false }) } From 697ed70ea9470b3349e125acb32d0e5ca5d2bb2c Mon Sep 17 00:00:00 2001 From: Jacob Salvi Date: Thu, 7 May 2020 15:34:56 +0200 Subject: [PATCH 07/11] trying to solve a merge conflict --- smart-hut/src/components/RoomModal.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/smart-hut/src/components/RoomModal.js b/smart-hut/src/components/RoomModal.js index e49708b..28c0df2 100644 --- a/smart-hut/src/components/RoomModal.js +++ b/smart-hut/src/components/RoomModal.js @@ -93,13 +93,6 @@ class RoomModal extends Component { .catch((err) => console.error("error in deleting room", err)); }; - setSureTrue=()=>{ - this.setState({ sure: true }) - }; - - setSureFalse=()=>{ - this.setState({ sure: false }) - } changeSomething = (event) => { let nam = event.target.name; From 873a136c68562590fb92d9e268c1505d210185d4 Mon Sep 17 00:00:00 2001 From: Luca Ponzanelli Date: Thu, 7 May 2020 16:17:03 +0200 Subject: [PATCH 08/11] Issue #111: add sonarqube analysis - add sonar-scanner dev dependency - add sonar-scanner job in ci configuration --- .gitlab-ci.yml | 9 + smart-hut/package.json | 3 +- smart-hut/yarn.lock | 629 ++++++++++++++++++++++++++++++++++++++++- 3 files changed, 629 insertions(+), 12 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1af1470..daddd39 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ image: node:latest stages: - build - test + - code_quality - deploy cache: @@ -24,6 +25,14 @@ testing_testing: - cd smart-hut - yarn test +sonar-scanner: + stage: code_quality + only: + - dev + script: + - cd smart-hut + - yarn sonar-scanner -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.projectName=$CI_PROJECT_PATH_SLUG -Dsonar.projectKey=$CI_PROJECT_PATH_SLUG -Dsonar.exclusion=cypress -Dsonar.sources=src -Dsonar.javascript.file.suffixes=.js,.jsx -Dsonar.sourceEncoding=UTF-8 -Dsonar.scm.disabled=True + smartHut_deploy: stage: deploy tags: diff --git a/smart-hut/package.json b/smart-hut/package.json index e5ced9e..5927da5 100644 --- a/smart-hut/package.json +++ b/smart-hut/package.json @@ -53,6 +53,7 @@ ] }, "devDependencies": { - "prettier": "2.0.1" + "prettier": "2.0.1", + "sonarqube-scanner": "^2.6.0" } } diff --git a/smart-hut/yarn.lock b/smart-hut/yarn.lock index affdd46..1db97a4 100644 --- a/smart-hut/yarn.lock +++ b/smart-hut/yarn.lock @@ -1398,6 +1398,11 @@ resolved "https://registry.yarnpkg.com/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.3.tgz#5405ee8e444ed212db44e79351f0c70a582aae25" integrity sha512-DetpxZw1fzPD5xUBrIAoplLChO2VB8DlL5Gg+I1IR9b2wPqYIca2WSUxL5g1vLeR4MsQq1NeWriXAVffV+U1Fw== +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + "@stardust-ui/react-component-event-listener@~0.38.0": version "0.38.0" resolved "https://registry.yarnpkg.com/@stardust-ui/react-component-event-listener/-/react-component-event-listener-0.38.0.tgz#1787faded94b40ad41226e6289baf13e701c6e7f" @@ -2047,6 +2052,13 @@ ansi-escapes@^4.2.1: dependencies: type-fest "^0.11.0" +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + integrity sha1-KWLPVOyXksSFEKPetSRDaGHvclE= + dependencies: + ansi-wrap "0.1.0" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -2092,6 +2104,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2113,6 +2130,13 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= + dependencies: + file-type "^4.2.0" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2549,6 +2573,14 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bl@^1.0.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" + integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -2726,6 +2758,29 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2750,6 +2805,14 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffer@^5.2.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" + integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -2825,6 +2888,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2909,6 +2985,16 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -3078,6 +3164,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + clsx@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.0.tgz#62937c6adfea771247c34b54d320fb99624f5702" @@ -3142,6 +3235,11 @@ color-string@^1.5.2: color-name "^1.0.0" simple-swizzle "^0.2.2" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + color@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" @@ -3167,6 +3265,13 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@~2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" + integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ= + dependencies: + graceful-readlink ">= 1.0.0" + common-tags@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -3224,6 +3329,14 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + confusing-browser-globals@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" @@ -3249,7 +3362,7 @@ contains-path@^0.1.0: resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= -content-disposition@0.5.3: +content-disposition@0.5.3, content-disposition@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== @@ -3750,6 +3863,66 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1" + integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ== + dependencies: + file-type "^5.2.0" + is-stream "^1.1.0" + tar-stream "^1.5.2" + +decompress-tarbz2@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b" + integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A== + dependencies: + decompress-tar "^4.1.0" + file-type "^6.1.0" + is-stream "^1.1.0" + seek-bzip "^1.0.5" + unbzip2-stream "^1.0.9" + +decompress-targz@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee" + integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w== + dependencies: + decompress-tar "^4.1.1" + file-type "^5.2.0" + is-stream "^1.1.0" + +decompress-unzip@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69" + integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k= + dependencies: + file-type "^3.8.0" + get-stream "^2.2.0" + pify "^2.3.0" + yauzl "^2.4.2" + +decompress@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.1.tgz#007f55cc6a62c055afa37c07eb6a4ee1b773f118" + integrity sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ== + dependencies: + decompress-tar "^4.0.0" + decompress-tarbz2 "^4.0.0" + decompress-targz "^4.0.0" + decompress-unzip "^4.0.1" + graceful-fs "^4.1.10" + make-dir "^1.0.0" + pify "^2.3.0" + strip-dirs "^2.0.0" + deep-equal@^1.0.1, deep-equal@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" @@ -4020,6 +4193,29 @@ dotenv@8.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +download@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" @@ -4551,6 +4747,21 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + ext@^1.1.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" @@ -4573,7 +4784,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@3.0.2, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -4611,6 +4822,16 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fancy-log@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" + integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.0" + time-stamp "^1.0.0" + fast-deep-equal@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" @@ -4672,6 +4893,13 @@ fbjs@^0.8.16: setimmediate "^1.0.5" ua-parser-js "^0.7.18" +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -4699,11 +4927,50 @@ file-loader@4.3.0: loader-utils "^1.2.3" schema-utils "^2.5.0" +file-type@^3.8.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= + +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= + +file-type@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" + integrity sha1-LdvqfHP/42No365J3DOMBYwritY= + +file-type@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" + integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== + +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + filesize@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" @@ -4899,7 +5166,7 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -4907,6 +5174,11 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -5004,6 +5276,26 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" + integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4= + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -5107,11 +5399,39 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +"graceful-readlink@>= 1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" + integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -5170,11 +5490,23 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -5352,6 +5684,11 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -5566,7 +5903,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -5617,6 +5954,14 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -5831,6 +6176,11 @@ is-in-browser@^1.0.2, is-in-browser@^1.1.3: resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= +is-natural-number@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" + integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5853,6 +6203,11 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -5901,6 +6256,11 @@ is-resolvable@^1.0.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + is-root@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" @@ -6037,6 +6397,14 @@ istanbul-reports@^2.2.6: dependencies: html-escaper "^2.0.0" +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + jest-changed-files@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.9.0.tgz#08d8c15eb79a7fa3fc98269bc14b451ee82f8039" @@ -6521,6 +6889,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -6676,6 +7049,13 @@ keyboard-key@^1.0.4: resolved "https://registry.yarnpkg.com/keyboard-key/-/keyboard-key-1.1.0.tgz#6f2e8e37fa11475bb1f1d65d5174f1b35653f5b7" integrity sha512-qkBzPTi3rlAKvX7k0/ub44sqOfXeLc/jcnGGmj5c7BJpU8eDrEVPyhCvNYAaoubbsLm9uGWwQJO1ytQK1a9/dQ== +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -6851,6 +7231,11 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.get@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6905,6 +7290,16 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -6912,6 +7307,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +make-dir@^1.0.0, make-dir@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -7075,7 +7477,7 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.44.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== @@ -7102,6 +7504,11 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + min-indent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.0.tgz#cfc45c37e9ec0d8f0a0ec3dd4ef7f7c3abe39256" @@ -7215,6 +7622,11 @@ mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "^1.2.5" +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -7420,11 +7832,28 @@ normalize-url@1.9.1: query-string "^4.1.0" sort-keys "^1.0.0" +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + normalize-url@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -7655,6 +8084,11 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -7667,11 +8101,23 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + p-is-promise@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" @@ -7736,6 +8182,13 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -7812,6 +8265,11 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -7934,6 +8392,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7944,7 +8407,7 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.0.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -8722,6 +9185,11 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + prettier@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.1.tgz#3f00ac71263be34684b2b2c8d7e7f63737592dac" @@ -8775,7 +9243,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -progress@^2.0.0: +progress@^2.0.0, progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== @@ -8824,6 +9292,11 @@ prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, object-assign "^4.1.1" react-is "^16.8.1" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -8917,6 +9390,15 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -9235,7 +9717,7 @@ read-pkg-up@^4.0.0: find-up "^3.0.0" read-pkg "^3.0.0" -read-pkg@^2.0.0: +read-pkg@2.0.0, read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= @@ -9253,7 +9735,7 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -9571,6 +10053,13 @@ resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.3 dependencies: path-parse "^1.0.6" +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" @@ -9748,6 +10237,13 @@ schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6 ajv "^6.12.0" ajv-keywords "^3.4.1" +seek-bzip@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" + integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w= + dependencies: + commander "~2.8.1" + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -9974,6 +10470,11 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +slugify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.0.tgz#c9557c653c54b0c7f7a8e786ef3431add676d2cb" + integrity sha512-FtLNsMGBSRB/0JOE2A0fxlqjI6fJsgHGS13iTuVT28kViI4JjUiNqp/vyis0ZXYcMnpR3fzGNkv+6vRlI2GwdQ== + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -10024,6 +10525,28 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +sonarqube-scanner@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/sonarqube-scanner/-/sonarqube-scanner-2.6.0.tgz#ba593635edc96cc86212ec9a987fe24f6276ec93" + integrity sha512-H6DKMW2WBjFAZ81ubscwE803aiaTQCBeOIu+STrACRdNtrw6WmRmUvw5JY5eGxs/Q+ysyEvz4hInWn0h+7YAlQ== + dependencies: + download "^7.1.0" + extend "3.0.2" + fancy-log "^1.3.3" + lodash.get "^4.4.2" + lodash.uniq "^4.5.0" + mkdirp "^1.0.3" + progress "^2.0.3" + read-pkg "2.0.0" + slugify "^1.4.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= + dependencies: + sort-keys "^1.0.0" + sort-keys@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" @@ -10031,6 +10554,13 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -10375,6 +10905,13 @@ strip-comments@^1.0.2: babel-extract-comments "^1.0.0" babel-plugin-transform-object-rest-spread "^6.26.0" +strip-dirs@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5" + integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g== + dependencies: + is-natural-number "^4.0.1" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -10392,6 +10929,13 @@ strip-json-comments@^3.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + style-loader@0.23.1: version "0.23.1" resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" @@ -10500,6 +11044,19 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + terser-webpack-plugin@2.3.4: version "2.3.4" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.4.tgz#ac045703bd8da0936ce910d8fb6350d0e1dee5fe" @@ -10567,7 +11124,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6: +through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -10577,6 +11134,16 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM= + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + timers-browserify@^2.0.4: version "2.0.11" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" @@ -10616,6 +11183,11 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -10673,6 +11245,13 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + ts-pnp@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec" @@ -10762,6 +11341,14 @@ ua-parser-js@^0.7.18, ua-parser-js@^0.7.21: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== +unbzip2-stream@^1.0.9: + version "1.4.2" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz#84eb9e783b186d8fb397515fbb656f312f1a7dbf" + integrity sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg== + dependencies: + buffer "^5.2.1" + through "^2.3.8" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -10868,6 +11455,13 @@ url-loader@2.3.0: mime "^2.4.4" schema-utils "^2.5.0" +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + url-parse@^1.4.3: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" @@ -10876,6 +11470,11 @@ url-parse@^1.4.3: querystringify "^2.1.1" requires-port "^1.0.0" +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + url@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" @@ -11504,3 +12103,11 @@ yargs@^13.3.0: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^13.1.2" + +yauzl@^2.4.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" From d1cd93afe58f34728a4d9c3c8f4cd726836d1c2a Mon Sep 17 00:00:00 2001 From: britea Date: Fri, 8 May 2020 13:45:13 +0200 Subject: [PATCH 09/11] apply scene in host --- smart-hut/src/components/dashboard/HostsPanel.js | 9 ++++++++- smart-hut/src/remote.js | 5 ++++- smart-hut/src/store.js | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/smart-hut/src/components/dashboard/HostsPanel.js b/smart-hut/src/components/dashboard/HostsPanel.js index 5a6d380..0e8e13a 100644 --- a/smart-hut/src/components/dashboard/HostsPanel.js +++ b/smart-hut/src/components/dashboard/HostsPanel.js @@ -16,6 +16,13 @@ class HostsPanel extends Component { } } + applyHostScene(id) { + this.props + .sceneApply(id, this.props.activeHost) + .then(() => console.log("SCCUESS")) + .catch((err) => console.error("sceneApply update error", err)); + } + render() { if (this.props.isActiveDefaultHost) { return ( @@ -48,7 +55,7 @@ class HostsPanel extends Component {
- +
diff --git a/smart-hut/src/remote.js b/smart-hut/src/remote.js index f0cfcea..5164ced 100644 --- a/smart-hut/src/remote.js +++ b/smart-hut/src/remote.js @@ -549,9 +549,12 @@ export const RemoteService = { }; }, - sceneApply: (id) => { + sceneApply: (id, hostId = null) => { return (dispatch) => { let url = `/scene/${id}/apply`; + if (hostId) { + url = url + "?hostId=" + hostId; + } return Endpoint.post(url) .then((res) => dispatch(actions.deviceOperationUpdate(res.data))) diff --git a/smart-hut/src/store.js b/smart-hut/src/store.js index f256839..cbc8ba2 100644 --- a/smart-hut/src/store.js +++ b/smart-hut/src/store.js @@ -49,6 +49,7 @@ function reducer(previousState, action) { [scene.id]: { name: { $set: scene.name }, icon: { $set: scene.icon }, + guestAccessEnabled: { $set: scene.guestAccessEnabled }, }, }, }); From 4688995d12fe8799e427c87699d2f53ed70e0cea Mon Sep 17 00:00:00 2001 From: britea Date: Fri, 8 May 2020 14:55:26 +0200 Subject: [PATCH 10/11] fix apply scene --- smart-hut/src/components/dashboard/HostsPanel.js | 6 ++++-- smart-hut/src/components/dashboard/devices/Videocam.js | 3 ++- smart-hut/src/remote.js | 8 +++++++- smart-hut/src/storeActions.js | 3 ++- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/smart-hut/src/components/dashboard/HostsPanel.js b/smart-hut/src/components/dashboard/HostsPanel.js index 0e8e13a..50f2097 100644 --- a/smart-hut/src/components/dashboard/HostsPanel.js +++ b/smart-hut/src/components/dashboard/HostsPanel.js @@ -53,9 +53,11 @@ class HostsPanel extends Component { {scene.name} - +
- +
diff --git a/smart-hut/src/components/dashboard/devices/Videocam.js b/smart-hut/src/components/dashboard/devices/Videocam.js index 409d467..75dee30 100644 --- a/smart-hut/src/components/dashboard/devices/Videocam.js +++ b/smart-hut/src/components/dashboard/devices/Videocam.js @@ -70,11 +70,12 @@ class Videocam extends Component { /> - + this.setOnOff(val.checked)} /> diff --git a/smart-hut/src/remote.js b/smart-hut/src/remote.js index 5164ced..42a5841 100644 --- a/smart-hut/src/remote.js +++ b/smart-hut/src/remote.js @@ -557,7 +557,13 @@ export const RemoteService = { } return Endpoint.post(url) - .then((res) => dispatch(actions.deviceOperationUpdate(res.data))) + .then((res) => + dispatch( + hostId + ? actions.hostDevicesUpdate(hostId, res.data, true) + : actions.deviceOperationUpdate(res.data) + ) + ) .catch((err) => { console.warn("scene apply error", err); throw new RemoteError(["Network error"]); diff --git a/smart-hut/src/storeActions.js b/smart-hut/src/storeActions.js index 218f4b9..6a4e4e4 100644 --- a/smart-hut/src/storeActions.js +++ b/smart-hut/src/storeActions.js @@ -63,9 +63,10 @@ const actions = { devices, partial, }), - hostDevicesUpdate: (hostId, devices) => ({ + hostDevicesUpdate: (hostId, devices, partial = false) => ({ type: "HOST_DEVICES_UPDATE", hostId, + partial, devices, }), stateDelete: (stateId) => ({ From e5426fa790dab6cecdb35054fbbb17f774a4d1b9 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Fri, 8 May 2020 15:37:01 +0200 Subject: [PATCH 11/11] Added smooth temperature gradient --- .../components/dashboard/devices/Sensor.js | 381 +++++++++--------- smart-hut/src/views/Dashboard.js | 24 +- 2 files changed, 188 insertions(+), 217 deletions(-) diff --git a/smart-hut/src/components/dashboard/devices/Sensor.js b/smart-hut/src/components/dashboard/devices/Sensor.js index 07cb440..4206d8c 100644 --- a/smart-hut/src/components/dashboard/devices/Sensor.js +++ b/smart-hut/src/components/dashboard/devices/Sensor.js @@ -22,18 +22,18 @@ import React, { Component } from "react"; import { CircularInput, CircularProgress } from "react-circular-input"; import { - container, - sensorText, - style, - valueStyle, - motionSensorInnerCircle, - motionSensorOuterCircle, - nameMotionStyle, - motionSensorIcon, - temperatureSensorColors, - lightSensorColors, - humiditySensorColors, - iconSensorStyle, + container, + sensorText, + style, + valueStyle, + motionSensorInnerCircle, + motionSensorOuterCircle, + nameMotionStyle, + motionSensorIcon, + temperatureSensorColors, + lightSensorColors, + humiditySensorColors, + iconSensorStyle, } from "./SensorStyle"; import { Image } from "semantic-ui-react"; import { RemoteService } from "../../../remote"; @@ -41,197 +41,180 @@ import { connect } from "react-redux"; import mapStateToProps from "../../../deviceProps"; class Sensor extends Component { - constructor(props) { - super(props); - this.state = { - value: 0, - motion: false, - }; - this.units = ""; - this.stateCallback = (e) => { - this.setState(Object.assign(this.state, e)); - }; - - this.colors = temperatureSensorColors; - this.icon = "temperatureIcon.svg"; - this.name = "Sensor"; - } - - // setName = () => { - // if (this.props.device.name.length > 15) { - // return this.props.device.name.slice(0, 12) + "..."; - // } - // return this.props.device.name; - // }; - - componentDidUpdate(prevProps) { - if ( - this.props.stateOrDevice.kind === "sensor" && - this.props.stateOrDevice.value !== prevProps.stateOrDevice.value - ) { - this.setState({ value: this.props.stateOrDevice.value }); - } else if ( - this.props.stateOrDevice.kind === "motionSensor" && - this.props.stateOrDevice.detected !== - prevProps.stateOrDevice.detected - ) { - this.setState({ - motion: true, - detected: this.props.stateOrDevice.detected, - }); - } - } - - componentDidMount() { - if (this.props.stateOrDevice.kind === "sensor") { - switch (this.props.stateOrDevice.sensor) { - case "TEMPERATURE": - this.units = "ºC"; - this.colors = temperatureSensorColors; - this.icon = "temperatureIcon.svg"; - this.name = "Temperature Sensor"; - break; - case "HUMIDITY": - this.units = "%"; - this.colors = humiditySensorColors; - this.icon = "humidityIcon.svg"; - this.name = "Humidity Sensor"; - break; - case "LIGHT": - this.units = "lm"; - this.colors = lightSensorColors; - this.icon = "lightSensorIcon.svg"; - this.name = "Light Sensor"; - break; - default: - this.units = ""; - } - this.setState({ - value: this.props.stateOrDevice.value, - }); - } else { - this.setState({ - detected: this.props.stateOrDevice.detected, - motion: true, - }); - } - } - - getIcon = () => { - if (this.state.detected) { - return this.iconOn; - } - return this.iconOff; + constructor(props) { + super(props); + this.state = { + value: 0, + motion: false, + }; + this.units = ""; + this.stateCallback = (e) => { + this.setState(Object.assign(this.state, e)); }; - temperatureColor = (value) => { - let hue = 100; - if (value >= 20 && value < 30) { - hue = 50; - } else if (value >= 30) { - hue = 0; - } - return `hsl(${hue}, 100%, 50%)`; + this.colors = temperatureSensorColors; + this.icon = "temperatureIcon.svg"; + this.name = "Sensor"; + } + + // setName = () => { + // if (this.props.device.name.length > 15) { + // return this.props.device.name.slice(0, 12) + "..."; + // } + // return this.props.device.name; + // }; + + componentDidUpdate(prevProps) { + if ( + this.props.stateOrDevice.kind === "sensor" && + this.props.stateOrDevice.value !== prevProps.stateOrDevice.value + ) { + this.setState({ value: this.props.stateOrDevice.value }); + } else if ( + this.props.stateOrDevice.kind === "motionSensor" && + this.props.stateOrDevice.detected !== prevProps.stateOrDevice.detected + ) { + this.setState({ + motion: true, + detected: this.props.stateOrDevice.detected, + }); + } + } + + componentDidMount() { + if (this.props.stateOrDevice.kind === "sensor") { + switch (this.props.stateOrDevice.sensor) { + case "TEMPERATURE": + this.units = "ºC"; + this.colors = temperatureSensorColors; + this.icon = "temperatureIcon.svg"; + this.name = "Temperature Sensor"; + break; + case "HUMIDITY": + this.units = "%"; + this.colors = humiditySensorColors; + this.icon = "humidityIcon.svg"; + this.name = "Humidity Sensor"; + break; + case "LIGHT": + this.units = "lm"; + this.colors = lightSensorColors; + this.icon = "lightSensorIcon.svg"; + this.name = "Light Sensor"; + break; + default: + this.units = ""; + } + this.setState({ + value: this.props.stateOrDevice.value, + }); + } else { + this.setState({ + detected: this.props.stateOrDevice.detected, + motion: true, + }); + } + } + + getIcon = () => { + if (this.state.detected) { + return this.iconOn; + } + return this.iconOff; + }; + + temperatureColor = (value) => { + let hue = 100; + const min = 16; + const max = 20; + if (value >= min && value < max) { + hue = 100 - ((value - min) * 100) / (max - min); + } else if (value >= max) { + hue = 0; + } + return `hsl(${hue}, 100%, 50%)`; + }; + + render() { + const MotionSensor = (props) => { + return ( +
+
+ + Motion Sensor +
+
+ ); }; - render() { - const MotionSensor = (props) => { - return ( -
-
- - Motion Sensor -
-
- ); - }; - - return ( -
- {this.state.motion ? ( - - ) : ( - - - - - { - +( - Math.round(this.state.value + "e+2") + - "e-2" - ) - } - {this.units} - - - {this.name} - - - - - )} -
- ); - } + return ( +
+ {this.state.motion ? ( + + ) : ( + + + + + {+(Math.round(this.state.value + "e+2") + "e-2")} + {this.units} + + + {this.name} + + + + + )} +
+ ); + } } const SensorContainer = connect(mapStateToProps, RemoteService)(Sensor); diff --git a/smart-hut/src/views/Dashboard.js b/smart-hut/src/views/Dashboard.js index 4501a8e..cac1298 100644 --- a/smart-hut/src/views/Dashboard.js +++ b/smart-hut/src/views/Dashboard.js @@ -8,10 +8,7 @@ import ScenesNavbar from "./ScenesNavbar"; import HostsNavbar from "./HostsNavbar"; import MyHeader from "../components/HeaderController"; import { Grid, Responsive, Button, Menu } from "semantic-ui-react"; -import { - panelStyle, - mobilePanelStyle, -} from "../components/dashboard/devices/styleComponents"; +import { mobilePanelStyle } from "../components/dashboard/devices/styleComponents"; import { RemoteService } from "../remote"; import { connect } from "react-redux"; @@ -85,7 +82,7 @@ class Dashboard extends Component { //in case a room has one. let backgroundImageHelper; if (this.activeTab === "Devices") { - backgroundImageHelper = this.props.allRooms; + backgroundImageHelper = this.props.backgroundImage; } else { backgroundImageHelper = null; } @@ -223,20 +220,11 @@ const mapStateToProps = (state, _) => ({ get currentRoom() { return state.active.activeRoom; }, - //this took me way longer to figure out than it should have - get allRooms() { - if (state.active.activeRoom == -1) { + get backgroundImage() { + if (state.active.activeRoom === -1) { return null; - } - for (let i in state.rooms) { - if (i == state.active.activeRoom) { - //console.log("check",state.rooms[i].image) - if (state.rooms[i].image === undefined) { - return null; - } else { - return state.rooms[i].image; - } - } + } else { + return state.rooms[state.active.activeRoom].image; } }, });