From 66fb4ae4dcc8b74e463615e8afaf6a099aa099ef Mon Sep 17 00:00:00 2001
From: manisha <manisha_kanyal.scsebtech@galgotiasuniversity.edu.in>
Date: Jun 03 2021 10:33:43 +0000
Subject: improve UI


removed bootstrap

---

diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..7a9dfa0
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "type": "pwa-chrome",
+            "request": "launch",
+            "name": "Launch Chrome against localhost",
+            "url": "http://localhost:8080",
+            "webRoot": "${workspaceFolder}"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index c10986e..b9809f4 100644
--- a/package.json
+++ b/package.json
@@ -5,11 +5,10 @@
   "homepage": ".",
   "dependencies": {
     "@babel/runtime": "^7.14.0",
-    "bootstrap": "^4.4.1",
     "dateformat": "^3.0.3",
     "nanoid": "^3.1.22",
-    "ramda": "^0.27.1",
     "query-string": "^7.0.0",
+    "ramda": "^0.27.1",
     "react": "^16.5.2",
     "react-dom": "^16.5.2",
     "react-redux": "^7.2.1",
diff --git a/public/index.html b/public/index.html
index db44964..016a790 100644
--- a/public/index.html
+++ b/public/index.html
@@ -23,12 +23,10 @@
     <title>Fedora QA Landingpage</title>
 
 
-    <link href="https://apps.fedoraproject.org/global/fedora-bootstrap-1.2.0/fedora-bootstrap.css" type="text/css" rel="stylesheet" />
+    <link href="https://apps.fedoraproject.org/global/fedora-bootstrap-1.5.0/fedora-bootstrap.css" type="text/css" rel="stylesheet" />
     <!-- <script type="text/javascript" src="https://apps.fedoraproject.org/global/fedora-bootstrap-1.0.3/fedora-bootstrap.js"></script>-->
     <script defer src="https://use.fontawesome.com/releases/v5.7.1/js/all.js" integrity="sha384-eVEQC9zshBn0rFj4+TU78eNA19HMNigMviK/PU/FFjLXqa/GKPgX58rvt5Z8PLs7" crossorigin="anonymous"></script>
 
-
-
   </head>
   <body>
     <noscript>
diff --git a/src/index.css b/src/index.css
index 27f6835..42b981d 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,7 +1,7 @@
 html {
   height: 100%;
   box-sizing: border-box;
-  font-family: 'Open Sans' !important;
+  font-family: "Open Sans" !important;
 }
 
 *,
@@ -17,6 +17,7 @@ body {
   padding: 0;
   background-color: #fff;
   padding-bottom: 10rem;
+  background-color: #fff;
 }
 
 code {
@@ -38,15 +39,15 @@ h1 {
 .navbar {
   padding-top: 0 !important;
   padding-bottom: 0 !important;
-  box-shadow:rgb(221, 221, 221) 0px 0px 10px 2px;
-  border-bottom-color:rgb(204, 204, 204);
+  box-shadow: rgb(221, 221, 221) 0px 0px 10px 2px;
+  border-bottom-color: rgb(204, 204, 204);
   border-bottom-style: solid;
   border-bottom-width: 1px;
 }
 
 .bluebox {
-  padding-top: 0.5em!important;
-  background-color: #f8f9fa!important;
+  padding-top: 0.5em !important;
+  background-color: #f8f9fa !important;
   padding-bottom: 0.8em;
   border-bottom-color: rgb(222, 226, 230);
   border-bottom-style: solid;
@@ -56,10 +57,9 @@ h1 {
 
 .padded {
   padding-top: 0.5em;
-  
 }
 
-.timeline { 
+.timeline {
   border-spacing: 0;
   border-collapse: collapse;
   margin: 0 auto;
@@ -67,7 +67,7 @@ h1 {
 
 .timeline td {
   padding: 0;
-  font-size: 0.8em !important;
+  font-size: 0.8em;
   width: 150;
   text-align: center;
   vertical-align: top;
@@ -78,11 +78,13 @@ h1 {
 }
 
 .events {
-  font-size: 0.8em !important;
+  font-size: 0.8rem;
+  font-weight: normal;
 }
 
 .bugscount {
   padding-left: 2em;
+  font-size: 0.8rem;
 }
 
 .smallsuper {
@@ -96,24 +98,22 @@ h1 {
 }
 
 .btn-tag {
-    margin-right: 0.5em;
-    margin-bottom: 0.5em;
+  margin-right: 0.5em;
+  margin-bottom: 0.5em;
 }
 
 .btn-selected {
-    color: #000;
-    background-color: #aec4e3;
-    border-color: #aec4e3;
+  color: #000;
+  background-color: #aec4e3;
+  border-color: #aec4e3;
 }
-
-
 ol.steps > li {
   padding-bottom: 0.4em;
 }
 
 .card {
-  margin-bottom: 0.5em;
   font-size: 0.9rem !important;
+  height: 100%;
 }
 
 .card-body {
@@ -133,8 +133,50 @@ ol.steps > li {
   color: #777;
   font-size: 0.8em;
   background-color: #eee;
-  box-shadow:inset rgb(211, 211, 211) 0px 6px 10px -4px;
-  border-top-color:rgb(204, 204, 204);
+  box-shadow: inset rgb(211, 211, 211) 0px 6px 10px -4px;
+  border-top-color: rgb(204, 204, 204);
   border-top-style: solid;
   border-top-width: 1px;
 }
+
+.card-columns {
+  columns: 2;
+}
+
+.card-title {
+  font-weight: bold;
+  margin-bottom: 1.5em;
+}
+
+.event {
+  margin-bottom: 1.5em;
+}
+
+.date {
+  width: 3.7em;
+  margin-right: 1.5em;
+}
+
+.month {
+  width: 100%;
+  text-align: center;
+  border: 1px solid #ccc;
+  font-size: 0.8em;
+  font-weight: bold;
+  background-color: #ccc;
+  border-radius: 8px 8px 0 0;
+}
+
+.day {
+  font-size: 1.5em;
+  text-align: center;
+  width: 100%;
+  border-left: 1px solid #ccc;
+  border-bottom: 1px solid #ccc;
+  border-right: 1px solid #ccc;
+  border-radius: 0 0 8px 8px;
+}
+
+.title {
+  font-size: 1.2em;
+}
diff --git a/src/index.js b/src/index.js
index 9c2349b..ca0b333 100644
--- a/src/index.js
+++ b/src/index.js
@@ -2,8 +2,6 @@ import React from "react"
 import ReactDOM from "react-dom"
 
 import "./index.css"
-//import 'bootstrap/dist/css/bootstrap.min.css';
-
 import "typeface-open-sans"
 
 import App from "./App"
diff --git a/src/landingpage/Blockers.js b/src/landingpage/Blockers.js
index ef30f1b..89efa98 100644
--- a/src/landingpage/Blockers.js
+++ b/src/landingpage/Blockers.js
@@ -1,5 +1,5 @@
 import React, { Component } from "react"
-import { Row } from "reactstrap"
+import { Row, Card, CardBody } from "reactstrap"
 import SourceLink from "./SourceLink"
 import BugStats from "./common/BugStats"
 
@@ -12,16 +12,19 @@ class Blockers extends Component {
   render() {
     if (this.props.data)
       return (
-        <div>
-          <h1 className="padded">
-            Fedora {this.props.release} blockers and FEs{" "}
-            <SourceLink href="https://qa.fedoraproject.org/blockerbugs/" />
-          </h1>
-          <Row>
-            <BugStats milestone = {"Beta"} stats = {this.props.data.beta} />
-            <BugStats milestone = {"Final"} stats = {this.props.data.final} />
-          </Row>
-        </div>
+        <Card>
+          <CardBody>
+            <h1 className="text-center padded">
+              Fedora {this.props.release} blockers and FEs{" "}
+              <SourceLink href="https://qa.fedoraproject.org/blockerbugs/" />
+            </h1>
+            <Row>
+              <BugStats milestone={"Beta"} stats={this.props.data.beta} />
+
+              <BugStats milestone={"Final"} stats={this.props.data.final} />
+            </Row>
+          </CardBody>
+        </Card>
       )
   }
 }
diff --git a/src/landingpage/Events.js b/src/landingpage/Events.js
index 54eb80b..3151841 100644
--- a/src/landingpage/Events.js
+++ b/src/landingpage/Events.js
@@ -1,6 +1,7 @@
 import React, { Component } from "react"
 import dateFormat from "dateformat"
-import SourceLink from './SourceLink'
+import SourceLink from "./SourceLink"
+import { Card, CardBody, Row, Col } from "reactstrap"
 
 class Events extends Component {
   constructor(props) {
@@ -11,17 +12,17 @@ class Events extends Component {
   render() {
     const meetings = this.props.data.map((meeting) => {
       const old = new Date(meeting.start)
-      var meeting_start = dateFormat(
-        new Date(old.getTime() - old.getTimezoneOffset() * 60000),
-        "d mmm yyyy - HH:MM"
-      )
-      if (meeting.fullday) {
-        meeting_start = meeting_start.slice(0, -5) + "All day"
+      var date = old.getDate()
+      var month = old.toLocaleString("default", { month: "short" })
+      var time = dateFormat(new Date(old.getTime() - old.getTimezoneOffset() * 60000), "HH:MM")
+      if (time.fullday) {
+        time = date.slice(0, -5) + "All day"
       }
       return (
         <Event
-          key={meeting_start + meeting.summary}
-          start={meeting_start}
+          date={date}
+          month={month}
+          time={time}
           summary={meeting.summary}
           link={meeting.link}
           info={meeting.info}
@@ -29,13 +30,15 @@ class Events extends Component {
       )
     })
     return (
-      <div>
-        <h1 className="padded">
-          Meetings and testdays in the next 7 days{" "}
-          <SourceLink href="https://apps.fedoraproject.org/calendar/QA/" />
-        </h1>
-        <ul className="events">{meetings}</ul>
-      </div>
+      <Card>
+        <CardBody>
+          <h1 className="text-center padded">
+            Meetings and testdays in the next 7 days{" "}
+            <SourceLink href="https://apps.fedoraproject.org/calendar/QA/" />
+          </h1>
+          <div className="col-md-12 padded">{meetings}</div>
+        </CardBody>
+      </Card>
     )
   }
 }
@@ -43,14 +46,29 @@ class Events extends Component {
 class Event extends Component {
   render() {
     return (
-      <li key={this.props.start + this.props.summary}>
-        <b>{this.props.start}</b>
-        <br />
-        <a target="_blank" rel="noopener noreferrer" href={this.props.link}>
-          {this.props.summary}
-        </a>
-        <br />
-      </li>
+      <Row>
+        <Col md={6}>
+          <div class="d-flex flex-row align-items-center event">
+            <div class="d-flex flex-column align-items-center date">
+              <span class="month"> {this.props.month}</span>
+              <span class="day">{this.props.date}</span>
+            </div>
+
+            <div class="d-flex flex-column align-items-left">
+              <span class="title">
+                <a
+                  className="events"
+                  target="_blank"
+                  rel="noopener noreferrer"
+                  href={this.props.link}>
+                  {this.props.summary}
+                </a>
+              </span>
+              <span class="time">{this.props.time}</span>
+            </div>
+          </div>
+        </Col>
+      </Row>
     )
   }
 }
diff --git a/src/landingpage/Hideable.js b/src/landingpage/Hideable.js
deleted file mode 100644
index 9295373..0000000
--- a/src/landingpage/Hideable.js
+++ /dev/null
@@ -1,37 +0,0 @@
-import React, { Component } from "react"
-import uniqueID from "../helpers/uniqueID"
-
-class Hideable extends Component {
-  constructor(props) {
-    super(props)
-    this.id = uniqueID("hideable-id-")
-  }
-
-  render() {
-    if (this.props.component_name === undefined) {
-      return <div key={this.id} />
-    }
-    return (
-      <div
-        key={this.id}
-        className={
-          this.props.config_mode
-            ? this.props.is_enabled
-              ? "border border-dark"
-              : "bgcl border border-dark"
-            : ""
-        }>
-        {this.props.children}
-        <a
-          href="#"
-          className={this.props.config_mode ? "d-block text-center badge badge-primary" : "d-none"}
-          onClick={(e) => this.props.toggle_handler(e, this.props.component_name)}
-          role="button">
-          {this.props.is_enabled ? "Disable" : "Enable"}
-        </a>
-      </div>
-    )
-  }
-}
-
-export default Hideable
diff --git a/src/landingpage/LandingPage.js b/src/landingpage/LandingPage.js
index ace8b3a..d02b00c 100644
--- a/src/landingpage/LandingPage.js
+++ b/src/landingpage/LandingPage.js
@@ -1,13 +1,21 @@
 import React, { Component } from "react"
-import { Container, Row } from "reactstrap"
+import {
+  Container,
+  Row,
+  Modal,
+  ModalHeader,
+  ModalBody,
+  ModalFooter,
+  Button,
+  Col,
+} from "reactstrap"
 import { Link } from "react-router-dom"
 import Layout from "../layout/Layout"
 import Timeline from "./Timeline"
 import Events from "./Events"
 import Blockers from "./Blockers"
 import Minutes from "./Minutes"
-import Hideable from "./Hideable"
-import * as R from 'ramda'
+import * as R from "ramda"
 import { connect } from "react-redux"
 import { loadData } from "../actions/reduxActions"
 
@@ -20,7 +28,7 @@ class LandingPage extends Component {
     this.available_components = ["events", "blockers", "minutes"]
     let enabled_components = this.cookies.get("landingpage_enabled_components")
     if (enabled_components === undefined) {
-      enabled_components = this.available_components.slice()
+      enabled_components = [...this.available_components]
       this.cookies.set("landingpage_enabled_components", enabled_components, {
         path: "/",
       })
@@ -34,38 +42,41 @@ class LandingPage extends Component {
       stable: 0,
       config_mode: false,
       enabled_components: enabled_components,
+      showModal: false,
     }
+    this.toggleModal = this.toggleModal.bind(this)
+    this.handleVisibilityChange = this.handleVisibilityChange.bind(this)
   }
-
   componentDidMount() {
     this.props.dispatch(loadData())
   }
 
-  toggle_config_mode(e) {
-    let config_mode = !this.state.config_mode
-    this.setState({ config_mode: config_mode })
-    e.preventDefault()
-  }
-
-  toggle_component_visibility(e, name) {
-    if (name === undefined) {
-      e.preventDefault()
-      return
-    }
-    let enabled_components = this.state.enabled_components
-    if (enabled_components.includes(name)) {
-      enabled_components.splice(enabled_components.indexOf(name), 1)
+  handleVisibilityChange(e, item) {
+    let enabled_components = [...this.state.enabled_components]
+    if (enabled_components.includes(item)) {
+      enabled_components.splice(enabled_components.indexOf(item), 1)
     } else {
-      enabled_components.push(name)
+      enabled_components.push(item)
       enabled_components = this.available_components.filter((c) => enabled_components.includes(c))
     }
     this.cookies.set("landingpage_enabled_components", enabled_components, {
       path: "/",
     })
     this.setState({ enabled_components: enabled_components })
+  }
+
+  toggle_config_mode(e) {
+    let config_mode = !this.state.config_mode
+    this.setState({ config_mode: config_mode })
     e.preventDefault()
   }
 
+  toggleModal() {
+    let modalState = !this.state.showModal
+    this.setState({
+      showModal: modalState,
+    })
+  }
   render() {
     const available_components = {
       events: <Events data={this.props.meetings} />,
@@ -77,60 +88,83 @@ class LandingPage extends Component {
       this.state.config_mode ? this.available_components : this.state.enabled_components
     )
     components = components.map((row) => (
-      <Row>
+      <>
         {row.map((item) => (
-          <div className="col-md-6">
-            <Hideable
-              config_mode={this.state.config_mode}
-              toggle_handler={this.toggle_component_visibility.bind(this)}
-              component_name={item}
-              is_enabled={this.state.enabled_components.includes(item)}>
-              {available_components[item]}
-            </Hideable>
-          </div>
-          
+          <div className="padded col-md-6">{available_components[item]}</div>
         ))}
-      </Row>
+      </>
     ))
 
     return (
       <Layout apiCallStatus={this.props.api_call_status}>
-        <div className="bluebox">
+        <div>
+          <div className="bluebox">
+            <Container>
+              <Row>
+                <div className="col-md-12">
+                  <Timeline data={this.props.schedule} />
+                </div>
+              </Row>
+            </Container>
+          </div>
           <Container>
             <Row>
+              {components}
+              <div className="padded col-md-12 text-right col-md-offset-2">
+                <Button className="mt" color="primary" onClick={this.toggleModal}>
+                  <i class="fas fa-cog"></i>
+                </Button>
+                <Modal isOpen={this.state.showModal} toggle={this.toggleModal}>
+                  <ModalHeader>Visibility Configuration</ModalHeader>
+                  <ModalBody>
+                    {this.available_components.map((item) => (
+                      <React.Fragment key={item}>
+                        <Col sm="12">
+                          <div class="custom-control custom-switch">
+                            <input
+                              type="checkbox"
+                              class="custom-control-input"
+                              id={item}
+                              checked={this.state.enabled_components.includes(item)}
+                              onChange={(e) => this.handleVisibilityChange(e, item)}
+                            />{" "}
+                            <label class="custom-control-label" for={item}>
+                              {item === "events"
+                                ? "Meetings and testdays in the next 7 days"
+                                : item === "minutes"
+                                ? "Fedora QA Meeting Minutes"
+                                : "Fedora 35 blockers and FEs"}
+                            </label>
+                          </div>
+                        </Col>
+                      </React.Fragment>
+                    ))}
+                  </ModalBody>
+                  <ModalFooter>
+                    <Button color="primary" onClick={this.toggleModal}>
+                      Close
+                    </Button>
+                  </ModalFooter>
+                </Modal>
+              </div>
+            </Row>
+            <Row className="d-flex justify-content-center padded">
               <div className="col-md-12">
-                <Timeline data={this.props.schedule} />
+                <h1 className="text-center">
+                  Have some spare time? Click on below button to contibute
+                </h1>
+              </div>
+              <div className="col-md-2 padded">
+                <Link
+                  className="btn btn-primary btn-block btn-wrap-text btn-lg active"
+                  to="/wizard"
+                  role="button">
+                  Explore <i class="fas fa-search"></i>
+                </Link>
               </div>
             </Row>
           </Container>
         </div>
-        <Container>
-          {components}
-          <Row className="padded">
-            <div className="col-md-12 text-right">
-              <a
-                href="#"
-                onClick={(e) => this.toggle_config_mode(e)}
-                className="badge badge-secondary events"
-                role="button">
-                {this.state.config_mode
-                  ? "Save changes"
-                  : "Configure visibility of the info-cards"}
-              </a>
-            </div>
-          </Row>
-          <Row className="padded">
-            <div className="col-md-12 padded">
-              <Link
-                className="btn btn-primary btn-block btn-wrap-text btn-lg active"
-                to="/wizard"
-                role="button">
-                Do you have some spare time? Feeling like helping others? Wanna improve Fedora?
-                Click here!
-              </Link>
-            </div>
-          </Row>
-        </Container>
       </Layout>
     )
   }
diff --git a/src/landingpage/Minutes.js b/src/landingpage/Minutes.js
index 4f88f2b..e2646db 100644
--- a/src/landingpage/Minutes.js
+++ b/src/landingpage/Minutes.js
@@ -1,26 +1,29 @@
 import React, { Component } from "react"
+import { Card, CardBody } from "reactstrap"
 
 class Events extends Component {
   render() {
     return (
-      <div>
-        <h1 className="padded">Fedora QA Meeting Minutes</h1>
-        <div className="events">
-          <a target="_blank" href={this.props.data.link} rel="noopener noreferrer">
-            Latest minutes from {this.props.data.date}
-          </a>
-          <br />
-          Visit{" "}
-          <a
-            target="_blank"
-            href="https://meetbot.fedoraproject.org/sresults/?group_id=fedora-qa&type=team"
-            rel="noopener noreferrer">
-            meetbot
-          </a>{" "}
-          to see older.
-          <br />
-        </div>
-      </div>
+      <Card className="mt-20">
+        <CardBody>
+          <h1 className="text-center padded">Fedora QA Meeting Minutes</h1>
+          <div className="events">
+            <a target="_blank" href={this.props.data.link} rel="noopener noreferrer">
+              Latest minutes from {this.props.data.date}
+            </a>
+            <br />
+            Visit{" "}
+            <a
+              target="_blank"
+              href="https://meetbot.fedoraproject.org/sresults/?group_id=fedora-qa&type=team"
+              rel="noopener noreferrer">
+              meetbot
+            </a>{" "}
+            to see older.
+            <br />
+          </div>
+        </CardBody>
+      </Card>
     )
   }
 }
diff --git a/src/landingpage/Timeline.js b/src/landingpage/Timeline.js
index 1de10c5..c49caff 100644
--- a/src/landingpage/Timeline.js
+++ b/src/landingpage/Timeline.js
@@ -1,5 +1,6 @@
 import React, { Component } from "react"
-import SourceLink from './SourceLink'
+import { Card, CardBody } from "reactstrap"
+import SourceLink from "./SourceLink"
 
 class Timeline extends Component {
   constructor(props) {
@@ -48,19 +49,24 @@ class Timeline extends Component {
     })
     return (
       <div>
-        <h1 className="padded">
-          Current development schedule{" "}
-          <SourceLink href="https://fedorapeople.org/groups/schedule/" />
-        </h1>
-        <div className="table-responsive">
-          <table className="timeline">
-            <tbody>
-              <tr>{line}</tr>
-              <tr>{dates}</tr>
-              <tr>{schedule}</tr>
-            </tbody>
-          </table>
-        </div>
+        <Card>
+          <CardBody>
+            <h1 className="text-center padded">
+              Current development schedule{" "}
+              <SourceLink href="https://fedorapeople.org/groups/schedule/" />
+            </h1>
+            <div className="table-responsive">
+              <table className="timeline">
+                <tbody>
+                  <tr>{line}</tr>
+                  <tr>{dates}</tr>
+                  <tr>{schedule}</tr>
+                </tbody>
+              </table>
+            </div>
+            <h6 className="text-center padded">This is about the development schedule</h6>
+          </CardBody>
+        </Card>
       </div>
     )
   }
diff --git a/src/landingpage/common/BugStats.js b/src/landingpage/common/BugStats.js
index 938dadd..b3be054 100644
--- a/src/landingpage/common/BugStats.js
+++ b/src/landingpage/common/BugStats.js
@@ -1,39 +1,40 @@
-import React from 'react'
+import React from "react"
+import { Table } from "reactstrap"
 
 const BugStats = (props) => {
-    const { milestone, stats } = props;
-    
-    return (
-            <div className="col-md-6">
-              <table className="events">
-                <thead>
-                  <tr>
-                    <td colSpan="2">
-                      <b>{milestone}</b>
-                    </td>
-                  </tr>
-                </thead>
-                <tbody>
-                  <tr>
-                    <td>Proposed Blockers</td>
-                    <td className="bugscount">{stats.blockers_proposed}</td>
-                  </tr>
-                  <tr>
-                    <td>Accepted Blockers</td>
-                    <td className="bugscount">{stats.blockers}</td>
-                  </tr>
-                  <tr>
-                    <td>Proposed FEs</td>
-                    <td className="bugscount">{stats.fe_proposed}</td>
-                  </tr>
-                  <tr>
-                    <td>Accepted FEs</td>
-                    <td className="bugscount">{stats.fe}</td>
-                  </tr>
-                </tbody>
-              </table>
-            </div>
-    )
+  const { milestone, stats } = props
+
+  return (
+    <div className="col-md-6">
+      <Table className="events" striped bordered>
+        <thead>
+          <tr>
+            <td colSpan="2">
+              <b className="bugscount">{milestone}</b>
+            </td>
+          </tr>
+        </thead>
+        <tbody>
+          <tr>
+            <td>Proposed Blockers</td>
+            <td className="bugscount">{stats.blockers_proposed}</td>
+          </tr>
+          <tr>
+            <td>Accepted Blockers</td>
+            <td className="bugscount">{stats.blockers}</td>
+          </tr>
+          <tr>
+            <td>Proposed FEs</td>
+            <td className="bugscount">{stats.fe_proposed}</td>
+          </tr>
+          <tr>
+            <td>Accepted FEs</td>
+            <td className="bugscount">{stats.fe}</td>
+          </tr>
+        </tbody>
+      </Table>
+    </div>
+  )
 }
 
 export default BugStats
diff --git a/src/wizard/WizardForm.js b/src/wizard/WizardForm.js
index b705fea..ec35641 100644
--- a/src/wizard/WizardForm.js
+++ b/src/wizard/WizardForm.js
@@ -1,6 +1,6 @@
 import React, { Component } from "react"
 import { Row, Button } from "reactstrap"
-import * as R from 'ramda'
+import * as R from "ramda"
 
 const durationString = {
   3: "Few hours",
@@ -21,10 +21,10 @@ class WizardForm extends Component {
       R.map((action) => action.tags),
       R.flatten,
       R.uniq
-    );
+    )
 
     const tags = getUniqueTags(this.props.actions[provider.provider])
-    
+
     this.props.show_actions([])
     this.setState(
       {
@@ -38,7 +38,10 @@ class WizardForm extends Component {
   }
 
   tag_selected(tag) {
-    const actions = R.filter((a) => a.tags.includes(tag), this.props.actions[this.state.selected_provider.provider])
+    const actions = R.filter(
+      (a) => a.tags.includes(tag),
+      this.props.actions[this.state.selected_provider.provider]
+    )
     this.props.show_actions(actions)
   }
 
@@ -48,7 +51,7 @@ class WizardForm extends Component {
         .filter((p) => p.duration === duration)
         .map((p) => {
           const btncolor =
-            this.state.selected_provider.provider === p.provider ? "selected" : "primary"
+            this.state.selected_provider.provider === p.provider ? "secondary" : "primary"
           return (
             <div className="card" key={"provider_card" + p.provider}>
               <div className="card-body">
diff --git a/yarn.lock b/yarn.lock
index 783b184..8c2d60b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -118,10 +118,10 @@
     "@babel/helper-annotate-as-pure" "^7.12.13"
     regexpu-core "^4.7.1"
 
-"@babel/helper-define-polyfill-provider@^0.2.1":
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.1.tgz#e6f5f4a6edc3722152c21359190de67fc6cf664d"
-  integrity sha512-x3AUTVZNPunaw1opRTa5OwVA5N0YxGlIad9xQ5QflK1uIS7PnAGGU5O2Dj/G183fR//N8AzTq+Q8+oiu9m0VFg==
+"@babel/helper-define-polyfill-provider@^0.2.2":
+  version "0.2.3"
+  resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6"
+  integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==
   dependencies:
     "@babel/helper-compilation-targets" "^7.13.0"
     "@babel/helper-module-imports" "^7.12.13"
@@ -1378,6 +1378,16 @@
   resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
   integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
 
+"@reduxjs/toolkit@^1.5.1":
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.5.1.tgz#05daa2f6eebc70dc18cd98a90421fab7fa565dc5"
+  integrity sha512-PngZKuwVZsd+mimnmhiOQzoD0FiMjqVks6ituO1//Ft5UEX5Ca9of13NEjo//pU22Jk7z/mdXVsmDfgsig1osA==
+  dependencies:
+    immer "^8.0.1"
+    redux "^4.0.0"
+    redux-thunk "^2.3.0"
+    reselect "^4.0.0"
+
 "@svgr/babel-plugin-add-jsx-attribute@^4.2.0":
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1"
@@ -1606,9 +1616,9 @@
     redux "^4.0.0"
 
 "@types/react@*":
-  version "17.0.7"
-  resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.7.tgz#5f2ca73d8baee8c286e96c95df557799ac0d1996"
-  integrity sha512-lBc3fY20hRFQ/pXQT2XdtmpJeXZnRH8N+WPnEzEfPTzuKmaJTA7k/xGWHBaPvKceKpbf0ZnMlLWY/0sFZ5rfkw==
+  version "17.0.8"
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.8.tgz#fe76e3ba0fbb5602704110fd1e3035cf394778e3"
+  integrity sha512-3sx4c0PbXujrYAKwXxNONXUtRp9C+hE2di0IuxFyf5BELD+B+AXL8G7QrmSKhVwKZDbv0igiAjQAMhXj8Yg3aw==
   dependencies:
     "@types/prop-types" "*"
     "@types/scheduler" "*"
@@ -2297,28 +2307,28 @@ babel-plugin-named-asset-import@^0.3.6:
   integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw==
 
 babel-plugin-polyfill-corejs2@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.1.tgz#ae2cf6d6f1aa7c0edcf04a25180e8856a6d1184f"
-  integrity sha512-hXGSPbr6IbjeMyGew+3uGIAkRjBFSOJ9FLDZNOfHuyJZCcoia4nd/72J0bSgvfytcVfUcP/dxEVcUhVJuQRtSw==
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327"
+  integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==
   dependencies:
     "@babel/compat-data" "^7.13.11"
-    "@babel/helper-define-polyfill-provider" "^0.2.1"
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
     semver "^6.1.1"
 
 babel-plugin-polyfill-corejs3@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.1.tgz#786f40218040030f0edecfd48e6e59f1ee9bef53"
-  integrity sha512-WZCqF3DLUhdTD/P381MDJfuP18hdCZ+iqJ+wHtzhWENpsiof284JJ1tMQg1CE+hfCWyG48F7e5gDMk2c3Laz7w==
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5"
+  integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.2.1"
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
     core-js-compat "^3.9.1"
 
 babel-plugin-polyfill-regenerator@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.1.tgz#ca9595d7d5f3afefec2d83126148b90db751a091"
-  integrity sha512-T3bYyL3Sll2EtC94v3f+fA8M28q7YPTOZdB++SRHjvYZTvtd+WorMUq3tDTD4Q7Kjk1LG0gGromslKjcO5p2TA==
+  version "0.2.2"
+  resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077"
+  integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==
   dependencies:
-    "@babel/helper-define-polyfill-provider" "^0.2.1"
+    "@babel/helper-define-polyfill-provider" "^0.2.2"
 
 babel-plugin-syntax-object-rest-spread@^6.8.0:
   version "6.13.0"
@@ -2787,9 +2797,9 @@ caniuse-api@^3.0.0:
     lodash.uniq "^4.5.0"
 
 caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219:
-  version "1.0.30001228"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz#bfdc5942cd3326fa51ee0b42fbef4da9d492a7fa"
-  integrity sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==
+  version "1.0.30001230"
+  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71"
+  integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==
 
 capture-exit@^2.0.0:
   version "2.0.0"
@@ -3194,17 +3204,17 @@ copy-descriptor@^0.1.0:
   integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
 
 core-js-compat@^3.6.2, core-js-compat@^3.9.0, core-js-compat@^3.9.1:
-  version "3.12.1"
-  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.12.1.tgz#2c302c4708505fa7072b0adb5156d26f7801a18b"
-  integrity sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==
+  version "3.13.0"
+  resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.13.0.tgz#a88f5fa81d8e9b15d7f98abc4447a4dfca2a358f"
+  integrity sha512-jhbI2zpVskgfDC9mGRaDo1gagd0E0i/kYW0+WvibL/rafEHKAHO653hEXIxJHqRlRLITluXtRH3AGTL5qJmifQ==
   dependencies:
     browserslist "^4.16.6"
     semver "7.0.0"
 
 core-js-pure@^3.0.0:
-  version "3.12.1"
-  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.12.1.tgz#934da8b9b7221e2a2443dc71dfa5bd77a7ea00b8"
-  integrity sha512-1cch+qads4JnDSWsvc7d6nzlKAippwjUlf6vykkTLW53VSV+NkE6muGBToAjEA8pG90cSfcud3JgVmW2ds5TaQ==
+  version "3.13.0"
+  resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.13.0.tgz#9d267fb47d1d7046cfbc05e7b67bb235b6735355"
+  integrity sha512-7VTvXbsMxROvzPAVczLgfizR8CyYnvWPrb1eGrtlZAJfjQWEHLofVfCKljLHdpazTfpaziRORwUH/kfGDKvpdA==
 
 core-js@^2.4.0:
   version "2.6.12"
@@ -3212,9 +3222,9 @@ core-js@^2.4.0:
   integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
 
 core-js@^3.5.0:
-  version "3.12.1"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.12.1.tgz#6b5af4ff55616c08a44d386f1f510917ff204112"
-  integrity sha512-Ne9DKPHTObRuB09Dru5AjwKjY4cJHVGu+y5f7coGn1E9Grkc3p2iBwE9AI/nJzsE29mQF7oq+mhYYRqOMFN1Bw==
+  version "3.13.0"
+  resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.13.0.tgz#58ca436bf01d6903aee3d364089868d0d89fe58d"
+  integrity sha512-iWDbiyha1M5vFwPFmQnvRv+tJzGbFAm6XimJUT0NgHYW3xZEs1SkCAcasWSVFxpI2Xb/V1DDJckq3v90+bQnog==
 
 core-util-is@1.0.2, core-util-is@~1.0.0:
   version "1.0.2"
@@ -3727,9 +3737,9 @@ dns-equal@^1.0.0:
   integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
 
 dns-packet@^1.3.1:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.3.tgz#7b62ee6e6aaac0c2de27cfc4a06af59cacb9cb38"
-  integrity sha512-dDwDMOJU+m6Qx+LhltSV+BWNrMaTqx3eXkAqgt/iouWTXGZMffg1rOSnG2xa3lWqmJ9xTBc7fgIe/css4S1rxA==
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.4.tgz#e3455065824a2507ba886c55a89963bb107dec6f"
+  integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==
   dependencies:
     ip "^1.1.0"
     safe-buffer "^5.0.1"
@@ -3876,9 +3886,9 @@ ee-first@1.1.1:
   integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
 
 electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.723:
-  version "1.3.738"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.738.tgz#aec24b091c82acbfabbdcce08076a703941d17ca"
-  integrity sha512-vCMf4gDOpEylPSLPLSwAEsz+R3ShP02Y3cAKMZvTqule3XcPp7tgc/0ESI7IS6ZeyBlGClE50N53fIOkcIVnpw==
+  version "1.3.740"
+  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.740.tgz#e38b7d2b848f632191b643e6dabca51be2162922"
+  integrity sha512-Mi2m55JrX2BFbNZGKYR+2ItcGnR4O5HhrvgoRRyZQlaMGQULqDhoGkLWHzJoshSzi7k1PUofxcDbNhlFrDZNhg==
 
 elliptic@^6.5.3:
   version "6.5.4"
@@ -3958,10 +3968,10 @@ error-ex@^1.2.0, error-ex@^1.3.1:
   dependencies:
     is-arrayish "^0.2.1"
 
-es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
-  version "1.18.0"
-  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
-  integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==
+es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2:
+  version "1.18.2"
+  resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.2.tgz#6eb518b640262e8ddcbd48e0bc8549f82efd48a7"
+  integrity sha512-byRiNIQXE6HWNySaU6JohoNXzYgbBjztwFnBLUTiJmWXjaU9bSq3urQLUlNLQ292tc+gc07zYZXNZjaOoAX3sw==
   dependencies:
     call-bind "^1.0.2"
     es-to-primitive "^1.2.1"
@@ -3971,14 +3981,14 @@ es-abstract@^1.17.2, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
     has-symbols "^1.0.2"
     is-callable "^1.2.3"
     is-negative-zero "^2.0.1"
-    is-regex "^1.1.2"
-    is-string "^1.0.5"
-    object-inspect "^1.9.0"
+    is-regex "^1.1.3"
+    is-string "^1.0.6"
+    object-inspect "^1.10.3"
     object-keys "^1.1.1"
     object.assign "^4.1.2"
     string.prototype.trimend "^1.0.4"
     string.prototype.trimstart "^1.0.4"
-    unbox-primitive "^1.0.0"
+    unbox-primitive "^1.0.1"
 
 es-to-primitive@^1.2.1:
   version "1.2.1"
@@ -4541,6 +4551,11 @@ fill-range@^7.0.1:
   dependencies:
     to-regex-range "^5.0.1"
 
+filter-obj@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b"
+  integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs=
+
 finalhandler@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
@@ -5285,6 +5300,11 @@ immer@1.10.0:
   resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d"
   integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==
 
+immer@^8.0.1:
+  version "8.0.4"
+  resolved "https://registry.yarnpkg.com/immer/-/immer-8.0.4.tgz#3a21605a4e2dded852fb2afd208ad50969737b7a"
+  integrity sha512-jMfL18P+/6P6epANRvRk6q8t+3gGhqsJ9EuJ25AXE+9bNTYtssvzeYbEd0mXRYWCmmXSIbnlpz6vd6iJlmGGGQ==
+
 import-cwd@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
@@ -5707,7 +5727,7 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
   dependencies:
     isobject "^3.0.1"
 
-is-regex@^1.0.4, is-regex@^1.1.2:
+is-regex@^1.0.4, is-regex@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f"
   integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==
@@ -5735,7 +5755,7 @@ is-stream@^1.1.0:
   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
   integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
 
-is-string@^1.0.5:
+is-string@^1.0.5, is-string@^1.0.6:
   version "1.0.6"
   resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f"
   integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==
@@ -7011,9 +7031,9 @@ nan@^2.12.1:
   integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==
 
 nanoid@^3.1.22:
-  version "3.1.22"
-  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844"
-  integrity sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==
+  version "3.1.23"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
+  integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
 
 nanomatch@^1.2.9:
   version "1.2.13"
@@ -7211,11 +7231,11 @@ object-copy@^0.1.0:
     kind-of "^3.0.3"
 
 object-hash@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.1.1.tgz#9447d0279b4fcf80cff3259bf66a1dc73afabe09"
-  integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.2.0.tgz#5ad518581eefc443bd763472b8ff2e9c2c0d54a5"
+  integrity sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==
 
-object-inspect@^1.9.0:
+object-inspect@^1.10.3, object-inspect@^1.9.0:
   version "1.10.3"
   resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369"
   integrity sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==
@@ -7251,14 +7271,13 @@ object.assign@^4.1.0, object.assign@^4.1.2:
     object-keys "^1.1.1"
 
 object.entries@^1.1.0, object.entries@^1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6"
-  integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd"
+  integrity sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==
   dependencies:
-    call-bind "^1.0.0"
+    call-bind "^1.0.2"
     define-properties "^1.1.3"
-    es-abstract "^1.18.0-next.1"
-    has "^1.0.3"
+    es-abstract "^1.18.2"
 
 object.fromentries@^2.0.2:
   version "2.0.4"
@@ -7287,14 +7306,13 @@ object.pick@^1.3.0:
     isobject "^3.0.1"
 
 object.values@^1.1.0, object.values@^1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee"
-  integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30"
+  integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
-    es-abstract "^1.18.0-next.2"
-    has "^1.0.3"
+    es-abstract "^1.18.2"
 
 obuf@^1.0.0, obuf@^1.1.2:
   version "1.1.2"
@@ -8585,6 +8603,16 @@ query-string@^4.1.0:
     object-assign "^4.1.0"
     strict-uri-encode "^1.0.0"
 
+query-string@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.0.0.tgz#aaad2c8d5c6a6d0c6afada877fecbd56af79e609"
+  integrity sha512-Iy7moLybliR5ZgrK/1R3vjrXq03S13Vz4Rbm5Jg3EFq1LUmQppto0qtXz4vqZ386MSRjZgnTSZ9QC+NZOSd/XA==
+  dependencies:
+    decode-uri-component "^0.2.0"
+    filter-obj "^1.1.0"
+    split-on-first "^1.0.0"
+    strict-uri-encode "^2.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"
@@ -9128,6 +9156,11 @@ requires-port@^1.0.0:
   resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
   integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
 
+reselect@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7"
+  integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==
+
 resolve-cwd@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
@@ -9737,6 +9770,11 @@ spdy@^4.0.2:
     select-hose "^2.0.0"
     spdy-transport "^3.0.0"
 
+split-on-first@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f"
+  integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==
+
 split-string@^3.0.1, split-string@^3.0.2:
   version "3.1.0"
   resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
@@ -9846,6 +9884,11 @@ strict-uri-encode@^1.0.0:
   resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
   integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
 
+strict-uri-encode@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546"
+  integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY=
+
 string-length@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed"
@@ -9881,14 +9924,15 @@ string-width@^4.1.0:
     strip-ansi "^6.0.0"
 
 string.prototype.matchall@^4.0.2:
-  version "4.0.4"
-  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29"
-  integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ==
+  version "4.0.5"
+  resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da"
+  integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==
   dependencies:
     call-bind "^1.0.2"
     define-properties "^1.1.3"
-    es-abstract "^1.18.0-next.2"
-    has-symbols "^1.0.1"
+    es-abstract "^1.18.2"
+    get-intrinsic "^1.1.1"
+    has-symbols "^1.0.2"
     internal-slot "^1.0.3"
     regexp.prototype.flags "^1.3.1"
     side-channel "^1.0.4"
@@ -10332,7 +10376,7 @@ typeface-open-sans@0.0.54:
   resolved "https://registry.yarnpkg.com/typeface-open-sans/-/typeface-open-sans-0.0.54.tgz#20f5b5ea5c7f95d89dc1f8b2d2b1457680129cee"
   integrity sha512-w6wOd6EicZdZKf0jSU/K3EzEi3zFgvWQSN7NOpRIQI5KeMWmC5Pg/lqtBVJHB0pRChYRmLdhf4h8ROur0A3JZQ==
 
-unbox-primitive@^1.0.0:
+unbox-primitive@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"
   integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==

