Compare commits
9 Commits
ui
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e0bd1aa763 | ||
|
|
e158b5ccd6 | ||
|
|
aafba656c8 | ||
|
|
17de3426e2 | ||
|
|
f58d607c5d | ||
|
|
ddaf3df1a3 | ||
|
|
4398ee2d45 | ||
|
|
3b9ee304db | ||
|
|
f5c8edd74c |
14647
package-lock.json
generated
Normal file
14647
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,10 +3,12 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@reach/router": "^1.2.1",
|
||||
"firebase": "^7.2.2",
|
||||
"node-sass": "^4.13.0",
|
||||
"react": "^16.11.0",
|
||||
"react-dom": "^16.11.0",
|
||||
"react-firebaseui": "^4.1.0",
|
||||
"react-redux": "^7.1.1",
|
||||
"react-scripts": "3.2.0",
|
||||
"redux": "^4.0.4",
|
||||
|
||||
46
src/App.js
46
src/App.js
@@ -1,17 +1,49 @@
|
||||
import React from "react";
|
||||
import React, {useState, useEffect} from "react";
|
||||
import StyledFirebaseAuth from 'react-firebaseui/StyledFirebaseAuth';
|
||||
import firebase from'firebase'
|
||||
import { Provider } from "react-redux";
|
||||
import { Router } from "@reach/router";
|
||||
import Boxes from "./boxes/Boxes";
|
||||
import styles from "./App.module.css";
|
||||
import SignedIn from "./SignedIn/SignedIn.js";
|
||||
import setupStore from "./store/setupStore.js";
|
||||
|
||||
const config = {
|
||||
apiKey: "AIzaSyC5krz4RBiT87RK7cEidh3n-A4H63uGcyM",
|
||||
authDomain: "retrod-7e2cd.firebaseapp.com",
|
||||
};
|
||||
const uiConfig = {
|
||||
signInFlow: 'popup',
|
||||
signInSuccessUrl: '/',
|
||||
signInOptions: [
|
||||
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
|
||||
]
|
||||
};
|
||||
function App() {
|
||||
const [sprint, setSprint] = useState(1);
|
||||
const [isSignedIn, setSignIn] = useState(false)
|
||||
useEffect(() => {
|
||||
firebase.auth().onAuthStateChanged(user => {
|
||||
setSignIn(!!user)
|
||||
})
|
||||
})
|
||||
return (
|
||||
<Provider store={setupStore()}>
|
||||
<div className={styles.grid}>
|
||||
<Boxes sectionName={"What Went Well"} />
|
||||
<Boxes sectionName={"What Could Be Better"} />
|
||||
<Boxes sectionName={"Questions"} />
|
||||
</div>
|
||||
<Router>
|
||||
<Boxes exact path={`/` + sprint} />
|
||||
</Router>
|
||||
<div>
|
||||
{isSignedIn ? (
|
||||
<>
|
||||
<SignedIn/>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<h1>You're Not Signed In</h1>
|
||||
<StyledFirebaseAuth uiConfig={uiConfig} firebaseAuth={firebase.auth()}/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</Provider>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,25 @@
|
||||
import React from 'react';
|
||||
import { databaseRef } from '../store/firebase.js'
|
||||
import styles from "./items.module.css";
|
||||
|
||||
export default function Item({ item }) {
|
||||
export default function Item({ item, boxId, sprint }) {
|
||||
const handleClick = e => {
|
||||
let url;
|
||||
if(boxId === "1"){
|
||||
url = `retros/` + sprint + `/www/`
|
||||
} else if(boxId === "2"){
|
||||
url = `retros/` + sprint + `/!www/`
|
||||
} else if(boxId === "3"){
|
||||
url = `retros/` + sprint + `/questions/`
|
||||
} else {
|
||||
url = 'retros/1/a/'
|
||||
}
|
||||
databaseRef.ref(url + item.id + `/completed`).set(item.completed === false ? true : false)
|
||||
}
|
||||
return (
|
||||
<div style={{ textDecoration: item.completed ? "line-through" : "" }}>
|
||||
{item.title}
|
||||
<div className={styles.flexItem}>
|
||||
<p style={{ textDecoration: item.completed ? "line-through" : "" }}>{item.title}</p>
|
||||
<button onClick={handleClick}>{item.completed === false ? <p className={styles.checkmark}>✓</p> : <p className={styles.redx}>x</p>}</button>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
15
src/Items/items.module.css
Normal file
15
src/Items/items.module.css
Normal file
@@ -0,0 +1,15 @@
|
||||
.flexItem{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
button{
|
||||
background: none;
|
||||
border: none;
|
||||
}
|
||||
.checkmark{
|
||||
color: green;
|
||||
cursor: pointer;
|
||||
}
|
||||
.redx{
|
||||
color: red;
|
||||
}
|
||||
@@ -1,23 +1,45 @@
|
||||
import React, {useState} from 'react';
|
||||
import { databaseRef } from '../store/firebase.js'
|
||||
import uuid from "uuid";
|
||||
|
||||
export default function NewItem({ addItem }) {
|
||||
export default function NewItem({ addItem, boxId, sprint }) {
|
||||
const [value, setValue ] = useState("");
|
||||
|
||||
const handleSubmit = e => {
|
||||
e.preventDefault();
|
||||
if(!value) return;
|
||||
|
||||
addItem(value);
|
||||
setValue("");
|
||||
let retroRef;
|
||||
let url;
|
||||
if(boxId === "1"){
|
||||
url = `retros/` + sprint + `/www`;
|
||||
retroRef = databaseRef.ref(url);
|
||||
} else if(boxId === "2"){
|
||||
url = `retros/` + sprint + `/!www`;
|
||||
retroRef = databaseRef.ref(url);
|
||||
} else if(boxId === "3"){
|
||||
url = `retros/` + sprint + `/questions`;
|
||||
retroRef = databaseRef.ref(url);
|
||||
} else {
|
||||
url = 'retros/1/a';
|
||||
retroRef = databaseRef.ref(url);
|
||||
}
|
||||
const item = {
|
||||
completed: false,
|
||||
id: uuid.v4(),
|
||||
title: value,
|
||||
}
|
||||
let objectId = retroRef.push(item);
|
||||
databaseRef.ref(url + `/` + objectId.key + `/id`).set(objectId.key)
|
||||
setValue("")
|
||||
}
|
||||
return (
|
||||
<form onSubmit={handleSubmit}>
|
||||
<input
|
||||
type="text"
|
||||
value={value}
|
||||
placeholder="stuff"
|
||||
onChange={e => setValue(e.target.value)}
|
||||
/>
|
||||
</form>
|
||||
<div>
|
||||
<form onSubmit={handleSubmit}>
|
||||
<input
|
||||
type="text"
|
||||
value={value}
|
||||
placeholder="stuff"
|
||||
onChange={e => setValue(e.target.value)}
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
21
src/SignedIn/SignedIn.js
Normal file
21
src/SignedIn/SignedIn.js
Normal file
@@ -0,0 +1,21 @@
|
||||
import React from "react";
|
||||
import firebase from'firebase';
|
||||
import SprintSelect from "../sprintSelect/SprintSelect"
|
||||
import styles from "./signedIn.module.css";
|
||||
|
||||
export default function SignedIn() {
|
||||
return (
|
||||
<div>
|
||||
<div className={styles.alignRight}>
|
||||
<div className={styles.marginRight}>
|
||||
<p>{firebase.auth().currentUser.displayName}</p>
|
||||
<div>
|
||||
<img align="right" className={styles.profilePicture} alt='user profile' src={firebase.auth().currentUser.photoURL} />
|
||||
</div>
|
||||
<button className={styles.signOutButton} onClick={() => firebase.auth().signOut()}>Sign Out</button>
|
||||
</div>
|
||||
</div>
|
||||
<SprintSelect />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
25
src/SignedIn/signedIn.module.css
Normal file
25
src/SignedIn/signedIn.module.css
Normal file
@@ -0,0 +1,25 @@
|
||||
body{
|
||||
background: lightseagreen;
|
||||
}
|
||||
.alignRight{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
}
|
||||
.marginRight{
|
||||
margin-right: 1rem;
|
||||
}
|
||||
.signOutButton{
|
||||
background: none;
|
||||
border: none;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
padding: 0;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
.alignRight .profilePicture{
|
||||
max-width: 50px;
|
||||
}
|
||||
@@ -2,12 +2,11 @@ import React from 'react';
|
||||
import styles from './Boxes.module.css'
|
||||
import Cards from '../cards/Cards.js'
|
||||
|
||||
export default function Boxes({ sectionName }) {
|
||||
export default function Boxes({ sectionName, boxId, sprint }) {
|
||||
return (
|
||||
<div>
|
||||
<h3>{sectionName}</h3>
|
||||
<div className={styles.box}>
|
||||
<Cards />
|
||||
<Cards sectionName={sectionName} boxId={boxId} sprint={sprint} />
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
.box{
|
||||
border: .15rem solid black;
|
||||
background: lightgrey;
|
||||
}
|
||||
|
||||
@@ -2,43 +2,42 @@ import React, { useState, useEffect, useMemo } from 'react';
|
||||
import { databaseRef } from '../store/firebase.js'
|
||||
import Item from '../Items/Items.js';
|
||||
import NewItem from '../NewItem/NewItem.js'
|
||||
import uuid from "uuid";
|
||||
import DeleteItem from '../deleteItem/DeleteItem.js'
|
||||
import styles from "./cards.module.css";
|
||||
|
||||
export function Cards({item, setItem}) {
|
||||
export function Cards({item, setItem, boxId, sprint, sectionName, sprint_id}) {
|
||||
return (
|
||||
<>
|
||||
<h3>{sectionName}</h3>
|
||||
{item.map((i, index) => (
|
||||
<div className={i.sprint_id === sprint ? styles.cardBackground : styles.hide} key={i.id}>
|
||||
<Item
|
||||
item={i}
|
||||
index={index}
|
||||
boxId={boxId}
|
||||
sprint={sprint}
|
||||
/>
|
||||
<DeleteItem item={i} boxId={boxId} sprint={sprint}/>
|
||||
</div>
|
||||
))}
|
||||
<NewItem sprint={sprint} boxId={boxId}/>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
const addItem = title => {
|
||||
const newItem = [...item, {title, completed: false, id: uuid.v4()}];
|
||||
setItem(newItem)
|
||||
}
|
||||
const deleteItem = id => {
|
||||
const deleted = item.reduce((acc, current) => {
|
||||
if(current.id !== id){
|
||||
return [...acc, current];
|
||||
}
|
||||
return [...acc, {...current, completed: true}]
|
||||
}, [])
|
||||
setItem(deleted)
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{item.map((i, index) => (
|
||||
<div key={i.id}>
|
||||
<Item
|
||||
item={i}
|
||||
index={index}
|
||||
/>
|
||||
<button onClick={() => deleteItem(i.id) }>x</button>
|
||||
</div>
|
||||
))}
|
||||
<NewItem addItem={addItem} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default function FirebaseWrapper() {
|
||||
export default function FirebaseWrapper({sectionName, boxId, sprint}) {
|
||||
const [cards, setCards] = useState(null)
|
||||
const retroRef = useMemo(() => databaseRef.ref('retros/1'), []);
|
||||
let retro;
|
||||
if(boxId === "1"){
|
||||
retro = databaseRef.ref(`retros/` + sprint + `/www`);
|
||||
} else if(boxId === "2"){
|
||||
retro = databaseRef.ref(`retros/` + sprint + `/!www`);
|
||||
} else if(boxId === "3"){
|
||||
retro = databaseRef.ref(`retros/` + sprint + `/questions`);
|
||||
} else {
|
||||
retro = databaseRef.ref('retros/1/a');
|
||||
}
|
||||
const retroRef = useMemo(() => databaseRef.ref(retro), []);
|
||||
useEffect(() => {
|
||||
retroRef.on('value', function(snapshot) {
|
||||
const values = Object.values(snapshot.val())
|
||||
@@ -52,5 +51,5 @@ export default function FirebaseWrapper() {
|
||||
if(!cards) {
|
||||
return <div>loading...</div>;
|
||||
};
|
||||
return <Cards item={cards} setItem={()=> {}}/>
|
||||
return <Cards sectionName={sectionName} item={cards} boxId={boxId} sprint={sprint} setItem={()=> {}}/>
|
||||
}
|
||||
|
||||
8
src/cards/cards.module.css
Normal file
8
src/cards/cards.module.css
Normal file
@@ -0,0 +1,8 @@
|
||||
.cardBackground{
|
||||
background: white;
|
||||
margin: .5em;
|
||||
padding: 1em;
|
||||
}
|
||||
.hide{
|
||||
display: none;
|
||||
}
|
||||
@@ -1,12 +1,31 @@
|
||||
import React, {useState} from 'react';
|
||||
import React from 'react';
|
||||
import { databaseRef } from '../store/firebase.js'
|
||||
import styles from "./deleteItem.module.css";
|
||||
|
||||
export default function DeleteItem({ deleteItem }) {
|
||||
export default function DeleteItem({ item, boxId, objectId, sprint }) {
|
||||
// const [value, setValue ] = useState("");
|
||||
|
||||
const handleClick = e => {
|
||||
deleteItem(value);
|
||||
setValue("");
|
||||
let retroRef;
|
||||
if(boxId === "1"){
|
||||
retroRef = databaseRef.ref(`retros/` + sprint + `/www/` + item.id);
|
||||
} else if(boxId === "2"){
|
||||
retroRef = databaseRef.ref(`retros/` + sprint + `/!www/` + item.id);
|
||||
} else if(boxId === "3"){
|
||||
retroRef = databaseRef.ref(`retros/` + sprint + `/questions/` + item.id);
|
||||
} else {
|
||||
retroRef = databaseRef.ref(`retros/1/a/` + item.id);
|
||||
}
|
||||
// const item = {
|
||||
// completed: false,
|
||||
// id: uuid.v4(),
|
||||
// title: value,
|
||||
// }
|
||||
// databaseRef.ref.remove(retroRef);
|
||||
// setValue("")
|
||||
retroRef.remove()
|
||||
}
|
||||
return (
|
||||
<button onClick={handleClick}>x</button>
|
||||
<button className={styles.deleteButton} onClick={handleClick}>DELETE</button>
|
||||
)
|
||||
}
|
||||
|
||||
10
src/deleteItem/deleteItem.module.css
Normal file
10
src/deleteItem/deleteItem.module.css
Normal file
@@ -0,0 +1,10 @@
|
||||
.deleteButton{
|
||||
color: darkred;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
font-size: .5em;
|
||||
font-weight: bolder;
|
||||
letter-spacing: 1px;
|
||||
cursor: pointer;
|
||||
}
|
||||
54
src/sprintSelect/SprintSelect.js
Normal file
54
src/sprintSelect/SprintSelect.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import React, { useState, useEffect, useMemo } from 'react';
|
||||
import Boxes from "../boxes/Boxes";
|
||||
import { databaseRef } from '../store/firebase.js'
|
||||
import styles from "../sprintSelect/sprintSelect.module.css";
|
||||
|
||||
export function SprintSelect({item}) {
|
||||
const [sprint, setSprint] = useState(1);
|
||||
let sprintArray = [];
|
||||
let sortedSprint;
|
||||
sortedSprint = item.map((i, index) => (
|
||||
sprintArray.push(i.sprint_id)
|
||||
))
|
||||
.reduce((unique, item) => {
|
||||
return unique.includes(item) ? unique : [...unique, item]
|
||||
}, [])
|
||||
.sort();
|
||||
let dropdownSprint;
|
||||
dropdownSprint = sortedSprint.map((i, index) => (
|
||||
<option onClick={() => setSprint(i)}>{i}</option>
|
||||
));
|
||||
return (
|
||||
<div>
|
||||
<label>Choose Sprint:</label>
|
||||
<select>
|
||||
{dropdownSprint}
|
||||
</select>
|
||||
<h3>Sprint {sprint}</h3>
|
||||
<div className={styles.grid}>
|
||||
<Boxes sectionName={"What Went Well"} sprint={sprint} boxId={'1'} />
|
||||
<Boxes sectionName={"What Could Be Better"} sprint={sprint} boxId={'2'}/>
|
||||
<Boxes sectionName={"Questions"} sprint={sprint} boxId={'3'}/>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export default function FirebaseWrapper() {
|
||||
const [cards, setCards] = useState(null)
|
||||
let retro = databaseRef.ref(`retros/1/www`);
|
||||
const retroRef = useMemo(() => databaseRef.ref(retro), []);
|
||||
useEffect(() => {
|
||||
retroRef.on('value', function(snapshot) {
|
||||
const values = Object.values(snapshot.val())
|
||||
setCards(values)
|
||||
});
|
||||
return () => {
|
||||
retroRef.off();
|
||||
}
|
||||
}, [retroRef]);
|
||||
if(!cards) {
|
||||
return <div>loading...</div>;
|
||||
};
|
||||
return <SprintSelect item={cards} setItem={()=> {}}/>
|
||||
}
|
||||
86
yarn.lock
86
yarn.lock
@@ -1366,6 +1366,16 @@
|
||||
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
|
||||
integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
|
||||
|
||||
"@reach/router@^1.2.1":
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c"
|
||||
integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==
|
||||
dependencies:
|
||||
create-react-context "0.3.0"
|
||||
invariant "^2.2.3"
|
||||
prop-types "^15.6.1"
|
||||
react-lifecycles-compat "^3.0.4"
|
||||
|
||||
"@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"
|
||||
@@ -3147,6 +3157,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
|
||||
safe-buffer "^5.0.1"
|
||||
sha.js "^2.4.8"
|
||||
|
||||
create-react-context@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
|
||||
integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==
|
||||
dependencies:
|
||||
gud "^1.0.0"
|
||||
warning "^4.0.3"
|
||||
|
||||
cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
||||
version "6.0.5"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||
@@ -3451,7 +3469,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
|
||||
debug@^3.1.1, debug@^3.2.5, debug@^3.2.6:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
|
||||
@@ -3604,6 +3622,11 @@ detect-port-alt@1.1.6:
|
||||
address "^1.0.1"
|
||||
debug "^2.6.0"
|
||||
|
||||
dialog-polyfill@^0.4.7:
|
||||
version "0.4.10"
|
||||
resolved "https://registry.yarnpkg.com/dialog-polyfill/-/dialog-polyfill-0.4.10.tgz#c4ea68a0deed4abb59a6a2a025c548b278cd532e"
|
||||
integrity sha512-j5yGMkP8T00UFgyO+78OxiN5vC5dzRQF3BEio+LhNvDbyfxWBsi3sfPArDm54VloaJwy2hm3erEiDWqHRC8rzw==
|
||||
|
||||
diff-sequences@^24.9.0:
|
||||
version "24.9.0"
|
||||
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"
|
||||
@@ -4144,9 +4167,9 @@ etag@~1.8.1:
|
||||
integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
|
||||
|
||||
eventemitter3@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb"
|
||||
integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==
|
||||
version "4.0.7"
|
||||
resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
||||
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
|
||||
|
||||
events@^3.0.0:
|
||||
version "3.0.0"
|
||||
@@ -4468,6 +4491,14 @@ firebase@^7.2.2:
|
||||
"@firebase/storage" "0.3.16"
|
||||
"@firebase/util" "0.2.31"
|
||||
|
||||
firebaseui@^4.1.0:
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/firebaseui/-/firebaseui-4.6.1.tgz#142b2e431f736e953137515fc1d9b1b9c43ab339"
|
||||
integrity sha512-wZHv1feHMKunYj5ZC72CvZcfNjn+3aVB7XGbK5xOH1ukNFHs5VZDtlEu+oOX8jI2OfotbQs72oOTIRVNrJgAqw==
|
||||
dependencies:
|
||||
dialog-polyfill "^0.4.7"
|
||||
material-design-lite "^1.2.0"
|
||||
|
||||
flat-cache@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
|
||||
@@ -4496,11 +4527,9 @@ flush-write-stream@^1.0.0:
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
follow-redirects@^1.0.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f"
|
||||
integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==
|
||||
dependencies:
|
||||
debug "^3.0.0"
|
||||
version "1.13.0"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
|
||||
integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==
|
||||
|
||||
for-in@^0.1.3:
|
||||
version "0.1.8"
|
||||
@@ -4822,6 +4851,11 @@ grpc@1.24.1:
|
||||
node-pre-gyp "^0.13.0"
|
||||
protobufjs "^5.0.3"
|
||||
|
||||
gud@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
|
||||
integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
|
||||
|
||||
gzip-size@5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
|
||||
@@ -5098,9 +5132,9 @@ http-proxy-middleware@^0.19.1:
|
||||
micromatch "^3.1.10"
|
||||
|
||||
http-proxy@^1.17.0:
|
||||
version "1.18.0"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a"
|
||||
integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==
|
||||
version "1.18.1"
|
||||
resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
|
||||
integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
|
||||
dependencies:
|
||||
eventemitter3 "^4.0.0"
|
||||
follow-redirects "^1.0.0"
|
||||
@@ -5322,7 +5356,7 @@ internal-ip@^4.2.0:
|
||||
default-gateway "^4.2.0"
|
||||
ipaddr.js "^1.9.0"
|
||||
|
||||
invariant@^2.2.2, invariant@^2.2.4:
|
||||
invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
|
||||
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
|
||||
@@ -6587,6 +6621,11 @@ map-visit@^1.0.0:
|
||||
dependencies:
|
||||
object-visit "^1.0.0"
|
||||
|
||||
material-design-lite@^1.2.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/material-design-lite/-/material-design-lite-1.3.0.tgz#d004ce3fee99a1eeb74a78b8a325134a5f1171d3"
|
||||
integrity sha1-0ATOP+6Zoe63Sni4oyUTSl8RcdM=
|
||||
|
||||
md5.js@^1.3.4:
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
|
||||
@@ -8493,7 +8532,7 @@ prompts@^2.0.1:
|
||||
kleur "^3.0.3"
|
||||
sisteransi "^1.0.3"
|
||||
|
||||
prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2:
|
||||
version "15.7.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
|
||||
integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
|
||||
@@ -8749,11 +8788,23 @@ react-error-overlay@^6.0.3:
|
||||
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.3.tgz#c378c4b0a21e88b2e159a3e62b2f531fd63bf60d"
|
||||
integrity sha512-bOUvMWFQVk5oz8Ded9Xb7WVdEi3QGLC8tH7HmYP0Fdp4Bn3qw0tRFmr5TW6mvahzvmrK4a6bqWGfCevBflP+Xw==
|
||||
|
||||
react-firebaseui@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/react-firebaseui/-/react-firebaseui-4.1.0.tgz#fbd8381432b53b58ce56ee86df81e2a6e40af7b6"
|
||||
integrity sha512-Y5pAom+W6/R5xZeF4xdvYiP7tObo7GDGWra1Pf2td+FxhtXtGQXQTKdW5Rs4js5zIuN0A3fApZzO+3sa1MHl9Q==
|
||||
dependencies:
|
||||
firebaseui "^4.1.0"
|
||||
|
||||
react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0:
|
||||
version "16.11.0"
|
||||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa"
|
||||
integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==
|
||||
|
||||
react-lifecycles-compat@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
|
||||
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
|
||||
|
||||
react-redux@^7.1.1:
|
||||
version "7.1.1"
|
||||
resolved "https://artifactory-eng.cargurus.com/artifactory/api/npm/npm-registry/react-redux/-/react-redux-7.1.1.tgz#ce6eee1b734a7a76e0788b3309bf78ff6b34fa0a"
|
||||
@@ -10556,6 +10607,13 @@ walker@^1.0.7, walker@~1.0.5:
|
||||
dependencies:
|
||||
makeerror "1.0.x"
|
||||
|
||||
warning@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
|
||||
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
|
||||
dependencies:
|
||||
loose-envify "^1.0.0"
|
||||
|
||||
watchpack@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
|
||||
|
||||
Reference in New Issue
Block a user