Merge pull request #57 from AntlerVC/develop

Develop
This commit is contained in:
shamsmosowi
2020-01-21 13:15:44 +11:00
committed by GitHub
20 changed files with 793 additions and 261 deletions

5
.gitignore vendored
View File

@@ -29,3 +29,8 @@ Firetable/.env
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Accidental package installs to root directory
yarn.lock
package.json
package-lock.json

View File

@@ -1,3 +1,4 @@
{
"trailingComma": "es5"
"trailingComma": "es5",
"proseWrap": "always"
}

View File

@@ -1,76 +1,100 @@
## Firetable
# Firetable
Firetable is an Excel/Google Sheets like UI for Firebase/Firestore. No more building admin portal for allowing business users to access data from GCP.
Firetable is a spreadsheet-like UI for Firestore.
#### Firetable UI
No more building admin portals to let business users to access data from Google
Cloud.
### Firetable UI
Supports fields such as images, files, single/multi select, in addition to
standard fields. Functions such as row resizing, data import/export are
supported. More coming soon, for comprehensive list see ROADMAP.md.
Supports fields such as images, files, single/multi select in addition to standard fields. Functions such a row resizing, data import/export are supported. More coming soon, for comprehensive list of checkout ROADMAP.
![Firetable](https://i.imgur.com/Isuhy3u.png)
## Setup instructions
#### 1) Create a firebase project ([instructions](https://console.firebase.google.com/u/0/))
### 1. Create a Firebase project [(Instructions)](https://console.firebase.google.com/u/0/)
- enable firestore
- setup security rules: test mode or setup required permission
- upgrade project to Blaze plan
- go to authentication/ sign method enable google auth
- Enable the Firestore database
- Set up Firestore Security Rules: use Test Mode or set up required permissions.
Below are sample rules that allow for unlimited access to the entire database:
```
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
```
- Upgrade project to the Blaze Plan
- Enable the Google sign-in method in **Authentication / Sign-in method**
### 2. Create an [Algolia](https://algolia.com) project
#### 2) Create an algolia project
- Get the generated **Application ID** and **Search-Only API Key** from the
**API Keys** page
- get the generated appId,API key and search key
#### 3) Clone repo
### 3. Clone this repo
```
git clone https://github.com/AntlerVC/firetable.git
```
#### 4) Setup cloud functions
### 4. Set up Cloud Functions
install dependencies
- Install dependencies
```
cd cloud_functions/functions;yarn
cd cloud_functions/functions
yarn
```
insure that you have firebase cli installed, [instructions](https://firebase.google.com/docs/cli)
- Ensure that you have Firebase CLI installed.
[(Instructions)](https://firebase.google.com/docs/cli)
then set cloud environment keys using the following commands
- Set cloud environment keys for Algolia
```
firebase functions:config:set algolia.appid=YOUR_APP_ID algolia.apikey=ADMIN_API_KEY
```
Deploy the cloud functions to your firebase project
- Deploy the Cloud Functions to your Firebase project
```
yarn deploy
```
#### 5) Set environment variables
### 5. Set React app environment variables
Create a .env file in the `www` directory
create a .env file in the www directory
- Get the generated **Application ID** and **Search-Only API Key** from the
Algolia **API Keys** page
- Get the Firebase **Project ID** and **Web API Key** from your Firebase
Projects **Settings** page. Click the cog icon on the left sidebar (under the
Firebase logo) and click **Project settings**
```
REACT_APP_FIREBASE_PROJECT_NAME =
REACT_APP_FIREBASE_PROJECT_KEY =
REACT_APP_ALGOLIA_APP_ID =
REACT_APP_ALGOLIA_SEARCH_KEY =
REACT_APP_ALGOLIA_APP_ID=
REACT_APP_ALGOLIA_SEARCH_API_KEY=
REACT_APP_FIREBASE_PROJECT_ID=
REACT_APP_FIREBASE_PROJECT_WEB_API_KEY=
```
#### 6) Run frontend
install dependencies
### 6. Install front-end dependencies
```
cd www;yarn
cd www
yarn
```
#### 7) Run project locally
### 7. Run project locally
```
yarn start

5
www/.env.example Normal file
View File

@@ -0,0 +1,5 @@
REACT_APP_ALGOLIA_APP_ID=
REACT_APP_ALGOLIA_SEARCH_API_KEY=
REACT_APP_FIREBASE_PROJECT_ID=
REACT_APP_FIREBASE_PROJECT_WEB_API_KEY=

View File

@@ -4,10 +4,10 @@
"private": true,
"dependencies": {
"@date-io/date-fns": "^1.3.11",
"@material-ui/core": "^4.4.0",
"@material-ui/icons": "^4.4.1",
"@material-ui/lab": "^4.0.0-alpha.26",
"@material-ui/pickers": "^3.2.5",
"@material-ui/core": "^4.8.3",
"@material-ui/icons": "^4.5.1",
"@material-ui/lab": "^4.0.0-alpha.39",
"@material-ui/pickers": "^3.2.9",
"@types/algoliasearch": "^3.34.2",
"@types/backbone": "^1.4.1",
"@types/cash": "^0.0.3",

View File

@@ -21,6 +21,12 @@
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<link rel="stylesheet" href="https://use.typekit.net/ngg8buf.css" />
<link
href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&display=swap"
rel="stylesheet"
/>
<title>Firetable</title>
</head>
<body>

View File

@@ -1,10 +1,12 @@
import React, { lazy, Suspense } from "react";
import { ThemeProvider } from "@material-ui/styles";
import Theme from "./Theme";
import { Route } from "react-router-dom";
import {
MuiThemeProvider as ThemeProvider,
CssBaseline,
} from "@material-ui/core";
import Theme from "./Theme";
import CustomBrowserRouter from "./util/CustomBrowserRouter";
import PrivateRoute from "./util/PrivateRoute";
import Snack from "./components/Snack";
@@ -19,6 +21,7 @@ const EditorView = lazy(() => import("./views/EditorView"));
const App: React.FC = () => {
return (
<ThemeProvider theme={Theme}>
<CssBaseline />
<AuthProvider>
<SnackProvider>
<CustomBrowserRouter>

View File

@@ -1,14 +1,122 @@
import createMuiTheme from "@material-ui/core/styles/createMuiTheme";
const HEADING_TEXT = "Europa, sans-serif";
const BODY_TEXT = '"Open Sans", sans-serif';
const Theme = createMuiTheme({
spacing: 4,
palette: {
primary: {
main: "#E34C4E",
primary: { main: "#e22729" },
secondary: { main: "#e22729" },
text: { secondary: "rgba(0, 0, 0, 0.6)" },
},
typography: {
fontFamily: BODY_TEXT,
h3: {
fontFamily: HEADING_TEXT,
fontSize: 36,
fontWeight: "bold",
fontStyle: "normal",
lineHeight: "normal",
letterSpacing: "normal",
},
secondary: {
main: "#007bff",
h4: {
fontFamily: HEADING_TEXT,
fontWeight: "bold",
letterSpacing: 0.2,
},
h5: {
fontFamily: HEADING_TEXT,
fontSize: "1.5rem",
fontWeight: "bold",
fontStyle: "normal",
lineHeight: 1.25,
letterSpacing: "normal",
},
h6: {
fontFamily: HEADING_TEXT,
fontSize: "1.125rem",
fontWeight: "bold",
letterSpacing: 0.2,
textTransform: "uppercase",
},
overline: {
fontFamily: HEADING_TEXT,
fontSize: 13.4,
fontWeight: "bold",
fontStyle: "normal",
lineHeight: 1.2,
letterSpacing: 2,
color: "rgba(0, 0, 0, 0.6)",
},
subtitle1: {
fontSize: 15.9,
fontWeight: 300,
lineHeight: 1.51,
letterSpacing: 0.15,
},
body1: {
lineHeight: 1.75,
letterSpacing: 0.5,
},
subtitle2: {
fontFamily: HEADING_TEXT,
fontWeight: "bold",
fontSize: "1rem",
lineHeight: 1.5,
},
body2: {
fontSize: 13.8,
fontWeight: "normal",
lineHeight: 1.45,
letterSpacing: 0.25,
},
button: {
fontFamily: HEADING_TEXT,
fontSize: "1rem",
fontWeight: "bold",
lineHeight: 1,
letterSpacing: 0.75,
},
caption: {
fontFamily: HEADING_TEXT,
fontSize: "0.8125rem",
fontWeight: "bold",
letterSpacing: 0.4,
lineHeight: 1.2,
},
},
overrides: {
MuiChip: {
root: { borderRadius: 4 },
},
MuiCard: {
root: { borderRadius: 8 },
},
MuiFormLabel: {
root: {
fontFamily: "Europa",
fontSize: "1rem",
fontWeight: "bold",
letterSpacing: 0.4,
},
},
MuiTooltip: {
tooltip: {
fontFamily: HEADING_TEXT,
fontSize: "0.8125rem",
fontWeight: "bold",
letterSpacing: 0.4,
lineHeight: 1.2,
},
},
MuiTab: {
root: { fontSize: "1rem !important" },
},
},
props: {
MuiRadio: { color: "primary" },
MuiCheckbox: { color: "primary" },
MuiCircularProgress: { size: 44 },
},
});

View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="72" height="72"><g fill="none" fill-rule="evenodd"><path fill="#EF4C47" fill-rule="nonzero" d="M0 0h72v72H0z"/><path fill="#FFF" d="M34.076 21L21 52h5.35l10.056-24.531L46.473 52H52L38.921 21z"/></g></svg>

After

Width:  |  Height:  |  Size: 252 B

View File

@@ -0,0 +1,113 @@
import React from "react";
import {
createStyles,
makeStyles,
useTheme,
useMediaQuery,
useScrollTrigger,
AppBar as MuiAppBar,
Toolbar,
Typography,
Grid,
TextField,
MenuItem,
} from "@material-ui/core";
import AntlerLogo from "../assets/antler.svg";
const useStyles = makeStyles(theme =>
createStyles({
appBar: {
backgroundColor: theme.palette.background.paper,
marginBottom: theme.spacing(8),
},
toolbar: {
[theme.breakpoints.up("md")]: { minHeight: 80 },
},
logo: {
display: "block",
marginRight: theme.spacing(2),
},
heading: { textTransform: "none" },
locationDropdown: {
minWidth: 140,
margin: 0,
},
})
);
const locations = ["SYD2", "SG4", "LON2", "NYC2", "STO3", "AMS2"];
interface IAppBarProps {
cohort?: string;
onChangeCohort?: (event: React.ChangeEvent<HTMLInputElement>) => void;
}
const AppBar: React.FunctionComponent<IAppBarProps> = ({
cohort,
onChangeCohort,
}) => {
const classes = useStyles();
const theme = useTheme();
const trigger = useScrollTrigger({ disableHysteresis: true, threshold: 0 });
const isMd = useMediaQuery(theme.breakpoints.down("md"));
return (
<MuiAppBar
position="sticky"
color="default"
className={classes.appBar}
elevation={trigger ? 4 : 0}
>
<Toolbar className={classes.toolbar}>
<Grid item>
<img
src={AntlerLogo}
width="32"
height="32"
alt="Antler"
className={classes.logo}
/>
</Grid>
<Grid item xs>
<Typography
variant={isMd ? "h6" : "h4"}
color="primary"
component="h1"
className={classes.heading}
>
Manager
</Typography>
</Grid>
{cohort !== undefined && onChangeCohort && (
<Grid item>
<TextField
select
label="Cohort"
variant="filled"
margin={isMd ? "dense" : "normal"}
className={classes.locationDropdown}
value={cohort}
onChange={onChangeCohort}
>
<MenuItem value="all">All</MenuItem>
{locations.map(option => (
<MenuItem key={option} value={option}>
{option}
</MenuItem>
))}
</TextField>
</Grid>
)}
</Toolbar>
</MuiAppBar>
);
};
export default AppBar;

View File

@@ -1,21 +1,34 @@
import React, { useState, useEffect } from "react";
import AddIcon from "@material-ui/icons/Add";
import _camelCase from "lodash/camelCase";
import useRouter from "../hooks/useRouter";
import Button from "@material-ui/core/Button";
import TextField from "@material-ui/core/TextField";
import Dialog from "@material-ui/core/Dialog";
import DialogActions from "@material-ui/core/DialogActions";
import DialogContent from "@material-ui/core/DialogContent";
import DialogContentText from "@material-ui/core/DialogContentText";
import DialogTitle from "@material-ui/core/DialogTitle";
import Fab from "@material-ui/core/Fab";
import Tooltip from "@material-ui/core/Tooltip";
// TODO: Create an interface for props
export default function CreateTableDialog(props: any) {
import AddIcon from "@material-ui/icons/Add";
import useRouter from "../hooks/useRouter";
import {
Tooltip,
Fab,
Dialog,
DialogActions,
DialogContent,
DialogContentText,
DialogTitle,
TextField,
Button,
} from "@material-ui/core";
export interface ICreateTableDialogProps {
/** Optional class overrides */
classes?: Partial<Record<"fab", string>>;
/** Function to handle table creation */
createTable: (tableName: string, collectionName: string) => void;
}
export default function CreateTableDialog({
classes = {},
createTable,
}: ICreateTableDialogProps) {
const router = useRouter();
const { classes, createTable } = props;
const [open, setOpen] = React.useState(false);
const [tableName, setTableName] = useState("");
const [collectionName, setCollectionName] = useState("");
@@ -46,9 +59,9 @@ export default function CreateTableDialog(props: any) {
<div>
<Tooltip title="Create a table">
<Fab
className={classes.fabButton}
className={classes.fab}
color="secondary"
aria-label="add"
aria-label="Create table"
onClick={handleClickOpen}
>
<AddIcon />

View File

@@ -0,0 +1,10 @@
import React from "react";
import ChevronRightIcon from "@material-ui/icons/ChevronRight";
import { SvgIconProps } from "@material-ui/core/SvgIcon";
const GoIcon: React.FunctionComponent<SvgIconProps> = props => (
<ChevronRightIcon style={{ marginLeft: -8 }} {...props} />
);
export default GoIcon;

View File

@@ -39,7 +39,7 @@ const useStyles = makeStyles(theme =>
grow: {
flexGrow: 1,
},
fabButton: {
fab: {
position: "absolute",
zIndex: 1,
top: -30,

View File

@@ -17,8 +17,8 @@ const searchClient = algoliasearch(
process.env.REACT_APP_ALGOLIA_APP_ID
? process.env.REACT_APP_ALGOLIA_APP_ID
: "",
process.env.REACT_APP_ALGOLIA_SEARCH_KEY
? process.env.REACT_APP_ALGOLIA_SEARCH_KEY
process.env.REACT_APP_ALGOLIA_SEARCH_API_KEY
? process.env.REACT_APP_ALGOLIA_SEARCH_API_KEY
: ""
);

View File

@@ -0,0 +1,169 @@
import React from "react";
import clsx from "clsx";
import { Link, LinkProps } from "react-router-dom";
import {
makeStyles,
createStyles,
Card,
Grid,
Typography,
Button,
CardActions,
CardContent,
CardMedia,
Divider,
} from "@material-ui/core";
import { ButtonProps } from "@material-ui/core/Button";
import GoIcon from "./GoIcon";
const useStyles = makeStyles(theme =>
createStyles({
root: { width: "100%" },
container: { height: "100%" },
cardContent: { "&:last-child": { paddingBottom: 0 } },
headerSection: { marginBottom: theme.spacing(1) },
overline: {
marginBottom: theme.spacing(2),
color: theme.palette.text.disabled,
},
title: { whiteSpace: "pre-line" },
image: {
width: 80,
height: 80,
borderRadius: theme.shape.borderRadius,
},
cardActions: {
padding: theme.spacing(1),
display: "flex",
justifyContent: "space-between",
},
divider: {
margin: theme.spacing(2),
marginBottom: 0,
},
})
);
interface StyledCardProps {
className?: string;
overline?: React.ReactNode;
title?: string;
imageSource?: string;
bodyContent?: React.ReactNode;
primaryButton?: Partial<ButtonProps>;
primaryLink?: {
to: LinkProps["to"];
children?: React.ReactNode;
label?: string;
};
secondaryAction?: React.ReactNode;
}
export default function StyledCard({
className,
overline,
title,
imageSource,
bodyContent,
primaryButton,
primaryLink,
secondaryAction,
}: StyledCardProps) {
const classes = useStyles();
return (
<Card className={clsx(className, classes.root)}>
<Grid
container
direction="column"
wrap="nowrap"
className={classes.container}
>
<Grid item xs>
<CardContent className={clsx(classes.container, classes.cardContent)}>
<Grid
container
direction="column"
wrap="nowrap"
className={classes.container}
>
<Grid item>
<Grid container className={classes.headerSection} spacing={3}>
<Grid item xs>
{overline && (
<Typography
variant="overline"
className={classes.overline}
>
{overline}
</Typography>
)}
{title && (
<Typography variant="h5" className={classes.title}>
{title}
</Typography>
)}
</Grid>
{imageSource && (
<Grid item>
<CardMedia
className={classes.image}
image={imageSource}
title={title}
/>
</Grid>
)}
</Grid>
</Grid>
<Grid item xs>
{bodyContent && Array.isArray(bodyContent) ? (
<Grid
container
direction="column"
wrap="nowrap"
justify="space-between"
>
{bodyContent.map(element => (
<Grid item>{element}</Grid>
))}
</Grid>
) : (
bodyContent
)}
</Grid>
</Grid>
</CardContent>
</Grid>
<Grid item>
<Divider className={classes.divider} />
<CardActions className={classes.cardActions}>
{primaryButton && <Button color="primary" {...primaryButton} />}
{primaryLink && (
<Button
color="primary"
component={Link}
to={primaryLink.to}
children={primaryLink.children || primaryLink.label}
endIcon={<GoIcon />}
/>
)}
{secondaryAction}
</CardActions>
</Grid>
</Grid>
</Card>
);
}

View File

@@ -0,0 +1,8 @@
export enum routes {
home = "/",
auth = "/auth",
table = "/table",
editor = "/editor",
}
export default routes;

View File

@@ -5,11 +5,11 @@ import "firebase/functions";
import "firebase/storage";
const config = {
apiKey: process.env.REACT_APP_FIREBASE_PROJECT_KEY,
authDomain: `${process.env.REACT_APP_FIREBASE_PROJECT_NAME}.firebaseapp.com`,
databaseURL: `https://${process.env.REACT_APP_FIREBASE_PROJECT_NAME}.firebaseio.com`,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_NAME,
storageBucket: `${process.env.REACT_APP_FIREBASE_PROJECT_NAME}.appspot.com`,
apiKey: process.env.REACT_APP_FIREBASE_PROJECT_WEB_API_KEY,
authDomain: `${process.env.REACT_APP_FIREBASE_PROJECT_ID}.firebaseapp.com`,
databaseURL: `https://${process.env.REACT_APP_FIREBASE_PROJECT_ID}.firebaseio.com`,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: `${process.env.REACT_APP_FIREBASE_PROJECT_ID}.appspot.com`,
};
firebase.initializeApp(config);

View File

@@ -98,7 +98,7 @@ const useTable = (initialOverrides: any) => {
//TODO:callable to create new index
if (error.message.includes("indexes?create_composite=")) {
const url =
`https://console.firebase.google.com/project/${process.env.REACT_APP_FIREBASE_PROJECT_NAME}/database/firestore/` +
`https://console.firebase.google.com/project/${process.env.REACT_APP_FIREBASE_PROJECT_ID}/database/firestore/` +
"indexes?create_composite=" +
error.message.split("indexes?create_composite=")[1];
console.log(url);

View File

@@ -1,82 +1,160 @@
import React from "react";
import React, { useContext, useState } from "react";
import { Link } from "react-router-dom";
import createStyles from "@material-ui/core/styles/createStyles";
import makeStyles from "@material-ui/core/styles/makeStyles";
import Card from "@material-ui/core/Card";
import CardActions from "@material-ui/core/CardActions";
import CardContent from "@material-ui/core/CardContent";
import Button from "@material-ui/core/Button";
import Typography from "@material-ui/core/Typography";
import Grid from "@material-ui/core/Grid";
import {
createStyles,
makeStyles,
Container,
Grid,
Typography,
Chip,
Button,
Divider,
} from "@material-ui/core";
import useSettings from "../hooks/useSettings";
import useRouter from "../hooks/useRouter";
import routes from "../constants/routes";
import AuthContext from "../contexts/authContext";
import AppBar from "../components/AppBar";
import GoIcon from "../components/GoIcon";
import StyledCard from "../components/StyledCard";
import CreateTableDialog from "../components/CreateTableDialog";
const useStyles = makeStyles(() =>
const useStyles = makeStyles(theme =>
createStyles({
card: {
minWidth: 275,
},
bullet: {
root: { minHeight: "100vh", paddingBottom: theme.spacing(8) },
greeting: {
textTransform: "uppercase",
letterSpacing: 3,
display: "inline-block",
margin: "0 2px",
transform: "scale(0.8)",
verticalAlign: "middle",
},
title: {
fontSize: 14,
newChip: {
...theme.typography.overline,
backgroundColor: theme.palette.text.secondary,
color: theme.palette.getContrastText(theme.palette.text.secondary),
marginLeft: theme.spacing(4),
},
pos: {
marginBottom: 12,
newChipLabel: { padding: theme.spacing(0, 2) },
divider: {
margin: theme.spacing(2, 0, 4),
},
fabButton: {
position: "absolute",
right: 15,
bottom: 15,
cardGrid: {
[theme.breakpoints.down("xs")]: { maxWidth: 360, margin: "0 auto" },
},
card: {
height: "100%",
[theme.breakpoints.up("md")]: { minHeight: 220 },
[theme.breakpoints.down("md")]: { minHeight: 180 },
},
createTableContainer: {
alignSelf: "flex-end",
marginLeft: "auto",
},
createTableFab: {
width: 80,
height: 80,
borderRadius: theme.shape.borderRadius * 2,
"& svg": { width: "2em", height: "2em" },
},
})
);
// TODO: Create an interface for props
const TablesView = (props: any) => {
const TablesView = () => {
const classes = useStyles();
const { currentUser } = useContext(AuthContext);
const [settings, createTable] = useSettings();
const tables = settings.tables;
const classes = useStyles();
const router = useRouter();
const [cohort, setCohort] = useState("all");
const handleCohortChange = (e: React.ChangeEvent<HTMLInputElement>) =>
setCohort(e.target.value);
return (
<>
<Grid container>
{tables
? tables.map((table: any) => (
<Card className={classes.card}>
<CardContent>
<Typography variant="h5" component="h2">
{table.name}
</Typography>
<Typography className={classes.pos} color="textSecondary">
primary
</Typography>
<Typography variant="body2" component="p">
Table summery use
</Typography>
</CardContent>
<CardActions>
<Button
size="small"
onClick={() => {
router.history.push(`table/${table.collection}`);
}}
>
open{" "}
</Button>
</CardActions>
</Card>
))
: "TODO: card skeleton"}
</Grid>
<main className={classes.root}>
<AppBar cohort={cohort} onChangeCohort={handleCohortChange} />
<CreateTableDialog classes={classes} createTable={createTable} />
</>
<Container>
<Grid container spacing={2} justify="center">
<Grid item xs>
<Typography
variant="h5"
color="textSecondary"
component="h2"
className={classes.greeting}
>
Hi {currentUser!.displayName!.split(" ")[0]}!
</Typography>
{/* <Chip
label="1 New"
size="small"
classes={{ root: classes.newChip, label: classes.newChipLabel }}
/> */}
</Grid>
{/* <Grid item>
<Button color="primary" component={Link} to="" endIcon={<GoIcon />}>
Manage Team
</Button>
</Grid> */}
</Grid>
<Divider className={classes.divider} />
<Grid
container
spacing={4}
justify="space-between"
className={classes.cardGrid}
>
{Array.isArray(tables)
? tables.map((table: any) => (
<Grid key={table.name} item xs={12} sm={6} md={4}>
<StyledCard
className={classes.card}
overline="Primary"
title={table.name}
bodyContent={table.description}
primaryLink={{
to: {
pathname: `${routes.table}/${table.collection}`,
search:
cohort === "all"
? ""
: encodeURI(
"?filters=" +
JSON.stringify([
{
key: "cohort",
operator: "==",
value: cohort,
},
])
),
},
label: "Open",
}}
/>
</Grid>
))
: "TODO: card skeleton"}
<Grid item className={classes.createTableContainer}>
<CreateTableDialog
createTable={createTable}
classes={{ fab: classes.createTableFab }}
/>
</Grid>
</Grid>
</Container>
</main>
);
};
export default TablesView;

View File

@@ -780,7 +780,7 @@
pirates "^4.0.0"
source-map-support "^0.5.9"
"@babel/runtime@7.6.0", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5":
"@babel/runtime@7.6.0", "@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.0", "@babel/runtime@^7.4.2", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.0.tgz#4fc1d642a9fd0299754e8b5de62c631cf5568205"
integrity sha512-89eSBLJsxNxOERC0Op4vd+0Bqm6wRMqMbFtV3i0/fbaWw/mJ8Q3eBvgX0G4SyrOOLCtbu98HspF8o09MRT+KzQ==
@@ -794,6 +794,13 @@
dependencies:
regenerator-runtime "^0.13.2"
"@babel/runtime@^7.6.2":
version "7.8.3"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1"
integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==
dependencies:
regenerator-runtime "^0.13.2"
"@babel/template@^7.1.0", "@babel/template@^7.4.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0":
version "7.6.0"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6"
@@ -845,6 +852,11 @@
resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-9.0.1.tgz#c27b391d8457d1e893f1eddeaf5e5412d12ffbb5"
integrity sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA==
"@date-io/core@1.x":
version "1.3.13"
resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"
integrity sha512-AlEKV7TxjeK+jxWVKcCFrfYAk8spX9aCyiToFIiLPtfQbsjmRGLIhb5VZgptQcJdHtLXo7+m0DuurwFgUToQuA==
"@date-io/core@^1.3.11":
version "1.3.11"
resolved "https://registry.yarnpkg.com/@date-io/core/-/core-1.3.11.tgz#98e3c366794dfff571e39227e5d718ac7f26b729"
@@ -857,10 +869,10 @@
dependencies:
"@date-io/core" "^1.3.11"
"@emotion/hash@^0.7.1":
version "0.7.2"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.2.tgz#53211e564604beb9befa7a4400ebf8147473eeef"
integrity sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q==
"@emotion/hash@^0.7.4":
version "0.7.4"
resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.4.tgz#f14932887422c9056b15a8d222a9074a7dfa2831"
integrity sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==
"@firebase/app-types@0.4.3", "@firebase/app-types@0.x":
version "0.4.3"
@@ -1229,91 +1241,86 @@
"@babel/traverse" "^7.4.5"
jscodeshift-add-imports "^1.0.1"
"@material-ui/core@^4.4.0":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.4.1.tgz#cc9b8e417ced1ab3145fdeda41a6aee657d3524b"
integrity sha512-LotIIGv8EDMj6mwXobsMF4WlCe+PtMjrXa34U2B0xFMdZLrNYwdOHFgkAIaE0m/ibMXTobNKWqhc5bhXLxvXoQ==
"@material-ui/core@^4.8.3":
version "4.8.3"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.8.3.tgz#858f758b26d8417eb39310f07fb9d7a72beb8b03"
integrity sha512-ZJbfJQmkuZCSQTf0nzpfZwizmDdCq8ruZxnPNFnhoKDqgJpMvV8TJRi8vdI9ls1tMuTqxlhyhw8556fxOpWpFQ==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/styles" "^4.4.1"
"@material-ui/system" "^4.3.3"
"@material-ui/styles" "^4.8.2"
"@material-ui/system" "^4.7.1"
"@material-ui/types" "^4.1.1"
"@material-ui/utils" "^4.4.0"
"@material-ui/utils" "^4.7.1"
"@types/react-transition-group" "^4.2.0"
clsx "^1.0.2"
convert-css-length "^2.0.1"
deepmerge "^4.0.0"
hoist-non-react-statics "^3.2.1"
is-plain-object "^3.0.0"
normalize-scroll-left "^0.2.0"
popper.js "^1.14.1"
prop-types "^15.7.2"
react-transition-group "^4.0.0"
warning "^4.0.1"
react-is "^16.8.0"
react-transition-group "^4.3.0"
"@material-ui/icons@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.4.1.tgz#a09d53275a5d73a77ee621f91c005a1793432df7"
integrity sha512-ilo6rSgsI3B5L7s1H3tBS1x77sJqPql3QJDYzVi2TVluZLCTfRKjpbYYDUwolEAQC0MzXLjVbXHqJ97VeJqpmQ==
"@material-ui/icons@^4.5.1":
version "4.5.1"
resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.5.1.tgz#6963bad139e938702ece85ca43067688018f04f8"
integrity sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/lab@^4.0.0-alpha.26":
version "4.0.0-alpha.26"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.26.tgz#8db16de1ab46cda5d06afdd97578536989ed3c4e"
integrity sha512-23N43d2/DJkQKbJjg3J9DqORgmvxA9ebqpnqrA6JB8zIiDSoSuZmJu1hHUtINgMechxwWGTf73PMy9ihm0AAQA==
"@material-ui/lab@^4.0.0-alpha.39":
version "4.0.0-alpha.39"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.39.tgz#715ec621111ce876f1744bde1e55018341c4be3e"
integrity sha512-TbYfqS0zWdOzH44K7x74+dcLlMe6o5zrIvvHA2y6IZ1l9a9/qLUZGLwBIOtkBPHDDDJ32rv/bOPzOGGbnxLUDw==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/utils" "^4.4.0"
"@material-ui/utils" "^4.7.1"
clsx "^1.0.4"
prop-types "^15.7.2"
warning "^4.0.3"
react-is "^16.8.0"
"@material-ui/pickers@^3.2.5":
version "3.2.5"
resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.5.tgz#e5c9a56c8b57ceb8bca50c4fd7b7a03cb3c918e1"
integrity sha512-UV5UKslOcmcP4cB2wwOg1SFoXS6RTRRvCNkDclHtOa+Ni+gyZLEt3WcSQWH7oDx8A94gmkiZTpfweNFV7sC4sw==
"@material-ui/pickers@^3.2.9":
version "3.2.9"
resolved "https://registry.yarnpkg.com/@material-ui/pickers/-/pickers-3.2.9.tgz#34feea26d0681264765ba41a94bf75b9f1c99ea9"
integrity sha512-OvrqmCwvroUzRrsG7VebWDr/m/6kq5USBTH54zA75WrTG1quo/xCLHRJhjBPnu6dpfmnjyhM6b1Lut18G2jwPQ==
dependencies:
"@babel/runtime" "^7.2.0"
"@babel/runtime" "^7.6.0"
"@date-io/core" "1.x"
"@types/styled-jsx" "^2.2.8"
clsx "^1.0.2"
react-transition-group "^4.0.0"
rifm "^0.7.0"
tslib "^1.9.3"
"@material-ui/styles@^4.4.1":
version "4.4.1"
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.4.1.tgz#a53fb39e373636bd2c296a78c54afecb80f68446"
integrity sha512-wXASlta7G+N8NeihbAKQjL6E1XMkS3SWpksNKn1cxhmKYQ+5pkMAUW/rChC5ovG7C/C2ZIdajYgOz977m3xlBA==
"@material-ui/styles@^4.8.2":
version "4.8.2"
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.8.2.tgz#841acbc4314accbe82a45cb1feb758d47448c802"
integrity sha512-r5U+93pkpwQOmHTmwyn2sqTio6PHd873xvSHiKP6fdybAXXX6CZgVvh3W8saZNbYr/QXsS8OHmFv7sYJLt5Yfg==
dependencies:
"@babel/runtime" "^7.4.4"
"@emotion/hash" "^0.7.1"
"@emotion/hash" "^0.7.4"
"@material-ui/types" "^4.1.1"
"@material-ui/utils" "^4.1.0"
"@material-ui/utils" "^4.7.1"
clsx "^1.0.2"
csstype "^2.5.2"
deepmerge "^4.0.0"
hoist-non-react-statics "^3.2.1"
jss "10.0.0-alpha.24"
jss-plugin-camel-case "10.0.0-alpha.24"
jss-plugin-default-unit "10.0.0-alpha.24"
jss-plugin-global "10.0.0-alpha.24"
jss-plugin-nested "10.0.0-alpha.24"
jss-plugin-props-sort "10.0.0-alpha.24"
jss-plugin-rule-value-function "10.0.0-alpha.24"
jss-plugin-vendor-prefixer "10.0.0-alpha.24"
jss "^10.0.0"
jss-plugin-camel-case "^10.0.0"
jss-plugin-default-unit "^10.0.0"
jss-plugin-global "^10.0.0"
jss-plugin-nested "^10.0.0"
jss-plugin-props-sort "^10.0.0"
jss-plugin-rule-value-function "^10.0.0"
jss-plugin-vendor-prefixer "^10.0.0"
prop-types "^15.7.2"
warning "^4.0.1"
"@material-ui/system@^4.3.3":
version "4.3.3"
resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.3.3.tgz#8534fe76adbd3938a8dea833e69d84a7a143ecff"
integrity sha512-j7JyvlhcTdc1wV6HzrDTU7XXlarxYXEUyzyHawOA0kCGmYVN2uFHENQRARLUdl+mEmuXO4TsAhNAiqiKakkFMg==
"@material-ui/system@^4.7.1":
version "4.7.1"
resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.7.1.tgz#d928dacc0eeae6bea569ff3ee079f409efb3517d"
integrity sha512-zH02p+FOimXLSKOW/OT2laYkl9bB3dD1AvnZqsHYoseUaq0aVrpbl2BGjQi+vJ5lg8w73uYlt9zOWzb3+1UdMQ==
dependencies:
"@babel/runtime" "^7.4.4"
deepmerge "^4.0.0"
"@material-ui/utils" "^4.7.1"
prop-types "^15.7.2"
warning "^4.0.1"
"@material-ui/types@^4.1.1":
version "4.1.1"
@@ -1322,14 +1329,14 @@
dependencies:
"@types/react" "*"
"@material-ui/utils@^4.1.0", "@material-ui/utils@^4.4.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.4.0.tgz#9275421e2798a067850d201212d46f12725828ad"
integrity sha512-UXoQVwArQEQWXxf2FPs0iJGT+MePQpKr0Qh0CPoLc1OdF0GSMTmQczcqCzwZkeHxHAOq/NkIKM1Pb/ih1Avicg==
"@material-ui/utils@^4.7.1":
version "4.7.1"
resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.7.1.tgz#dc16c7f0d2cd02fbcdd5cfe601fd6863ae3cc652"
integrity sha512-+ux0SlLdlehvzCk2zdQ3KiS3/ylWvuo/JwAGhvb8dFVvwR21K28z0PU9OQW2PGogrMEdvX3miEI5tGxTwwWiwQ==
dependencies:
"@babel/runtime" "^7.4.4"
prop-types "^15.7.2"
react-is "^16.8.6"
react-is "^16.8.0"
"@mrmlnc/readdir-enhanced@^2.2.1":
version "2.2.1"
@@ -3750,12 +3757,12 @@ css-unit-converter@^1.1.1:
resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=
css-vendor@^2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.6.tgz#a205f73d7562e8728c86ef6ce5ee7c7e5eefd71b"
integrity sha512-buv8FoZh84iMrtPHYGYll00/qSNV0gYO6E/GUCjUPTsSPj7uf/wot/QZwig+7qdFGxJ7HjOSJoclbhag09TVUQ==
css-vendor@^2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda"
integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg==
dependencies:
"@babel/runtime" "^7.5.5"
"@babel/runtime" "^7.6.2"
is-in-browser "^1.0.2"
css-what@2.1, css-what@^2.1.2:
@@ -4023,11 +4030,6 @@ deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
deepmerge@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09"
integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww==
default-gateway@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b"
@@ -6558,13 +6560,6 @@ is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
is-plain-object@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928"
integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg==
dependencies:
isobject "^4.0.0"
is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
@@ -6668,11 +6663,6 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isobject@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0"
integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==
isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
@@ -7332,69 +7322,69 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jss-plugin-camel-case@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0-alpha.24.tgz#579a48989d2628ee8baaa006449b1b82d32ee27e"
integrity sha512-cRYLbGl6oO9wdGXp3hn+xqc8pw8bjaui25dDYuEeEsRZMh5/OKl3ByYxDT3PLKgFqouy5Xo+YmLGVH8l+nnEdQ==
jss-plugin-camel-case@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.3.tgz#ce25f3cdb7f2b80724558361351fe6b644ca9e4f"
integrity sha512-rild/oFKFkmRP7AoiX9D6bdDAUfmJv8c7sEBvFoi+JP31dn2W8nw4txMKGnV1LJKlFkYprdZt1X99Uvztl1hug==
dependencies:
"@babel/runtime" "^7.3.1"
hyphenate-style-name "^1.0.3"
jss "10.0.0-alpha.24"
jss "^10.0.3"
jss-plugin-default-unit@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0-alpha.24.tgz#3e6e24e8ec7aaa950c8975f1645ea861b8aa338e"
integrity sha512-1E1XlJqJ/9I1lR5EO/tA75U1LIIicKvW6xZEKLxAP8NC/rUjI+yBQBTBJn61LOpua51e7fgW8me46Z+iuXiC4A==
jss-plugin-default-unit@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.3.tgz#c4b97b7b18c6cf9e9809e05b8525045decc298d3"
integrity sha512-n+XfVLPF9Qh7IOTdQ8M4oRpjpg6egjr/r0NNytubbCafMgCILJYIVrMTGgOTydH+uvak8onQY3f/F9hasPUx6g==
dependencies:
"@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.24"
jss "^10.0.3"
jss-plugin-global@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0-alpha.24.tgz#a53e2028d0cb073661e8213f2e622fef9ef4b1fa"
integrity sha512-3LoxrZloF4tvXrS5S7enV9OhtaxXsEP3BQdiE76vI/ecCmgNDZNpnPd8MG20ptn2iAOsoMGfoMX20Ea1IKl/Mg==
jss-plugin-global@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.3.tgz#82bc95aa7f2c7171adc3ea47ec7717aca76a2389"
integrity sha512-kNotkAciJIXpIGYnmueaIifBne9rdq31O8Xq1nF7KMfKlskNRANTcEX5rVnsGKl2yubTMYfjKBFCeDgcQn6+gA==
dependencies:
"@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.24"
jss "^10.0.3"
jss-plugin-nested@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0-alpha.24.tgz#f1b4a0bd1050e29d627c9bc2dc0f424c35f0aa44"
integrity sha512-BWU6NaRZTVSJc7N+3FeHacdkFOjCMThouoRQPCWVxeT0nmAVlVGwgYzChcI+vzncx+UaRQC0x+01FYhVQ2xAFA==
jss-plugin-nested@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.3.tgz#1ff39383154a710008788dbc9f73e6dec77b2852"
integrity sha512-OMucRs9YLvWlZ3Ew+VhdgNVMwSS2zZy/2vy+s/etvopnPUzDHgCnJwdY2Wx/SlhLGERJeKKufyih2seH+ui0iw==
dependencies:
"@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.24"
jss "^10.0.3"
tiny-warning "^1.0.2"
jss-plugin-props-sort@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0-alpha.24.tgz#e309e286004b6e059c373efaa308b8742e22ec16"
integrity sha512-TB4RpXwnGSEE58rN2RRzcWqhIaz0oAS1UBg10mk1fuLpkKyHEJWuuZXzgGih23Ivl/8LDVzTF+QRY5JagMUUGg==
jss-plugin-props-sort@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.3.tgz#8bc9f2a670fbd603f110486d28c526eb9efcbdc4"
integrity sha512-ufhvdCMnRcDa0tNHoZ12OcVNQQyE10yLMohxo/UIMarLV245rM6n9D19A12epjldRgyiS13SoSyLFCJEobprYg==
dependencies:
"@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.24"
jss "^10.0.3"
jss-plugin-rule-value-function@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0-alpha.24.tgz#85bfd5f994647cb4bf2237d18232421ea362665c"
integrity sha512-uFw4tf8PN48bdv4ZcDjG3OzKPIFZ4gpCC1cWO/dyexYfFIubX3bnQUbK4B0wPNe9LJU4KQo8s4F42B8B1ADTrA==
jss-plugin-rule-value-function@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.3.tgz#1103240cf686bde5baee16cd7b15b0daf79d1103"
integrity sha512-RWwIT2UBAIwf3f6DQtt5gyjxHMRJoeO9TQku+ueR8dBMakqSSe8vFwQNfjXEoe0W+Tez5HZCTkZKNMulv3Z+9A==
dependencies:
"@babel/runtime" "^7.3.1"
jss "10.0.0-alpha.24"
jss "^10.0.3"
jss-plugin-vendor-prefixer@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0-alpha.24.tgz#c4c2c28667d3c7c0d9a01ca1f7a2f74367d1ceef"
integrity sha512-hffKj0kSSvZsXs6RYEylpBlEGjryMzU1lsWqC5vQAT/Xb3tDe60BbEarEOFLBGv7EfyajXkuRwlXAQocV5ejCg==
jss-plugin-vendor-prefixer@^10.0.0:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.3.tgz#cfdf2ac1263e190ee9a0d874cdcc6092df452012"
integrity sha512-zVs6e5z4tFRK/fJ5kuTLzXlTFQbLeFTVwk7lTZiYNufmZwKT0kSmnOJDUukcSe7JLGSRztjWhnHB/6voP174gw==
dependencies:
"@babel/runtime" "^7.3.1"
css-vendor "^2.0.5"
jss "10.0.0-alpha.24"
css-vendor "^2.0.7"
jss "^10.0.3"
jss@10.0.0-alpha.24:
version "10.0.0-alpha.24"
resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0-alpha.24.tgz#f8e2044b6b2f034db05a685d99c599095baf8b61"
integrity sha512-kfuSitcj7MTrDtSPLkrWcZppgZlTE3A+cqrkC+Z10WYROt0RXIWINAaK8tE2ohwkDfUlaM1YcRYvV3iT6YNFTA==
jss@^10.0.0, jss@^10.0.3:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.3.tgz#5c160f96aa8ce8b9f851ee0b33505dcd37f490a4"
integrity sha512-AcDvFdOk16If9qvC9KN3oFXsrkHWM9+TaPMpVB9orm3z+nq1Xw3ofHyflRe/mkSucRZnaQtlhZs1hdP3DR9uRw==
dependencies:
"@babel/runtime" "^7.3.1"
csstype "^2.6.5"
@@ -10324,11 +10314,16 @@ react-is-deprecated@^0.1.2:
resolved "https://registry.yarnpkg.com/react-is-deprecated/-/react-is-deprecated-0.1.2.tgz#301148f86ea428fe8e673eca7a372160b7579dbd"
integrity sha1-MBFI+G6kKP6OZz7KejchYLdXnb0=
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6:
react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4:
version "16.9.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
react-is@^16.8.0:
version "16.12.0"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
react-quill@^1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/react-quill/-/react-quill-1.3.3.tgz#95b8e088ad4e4acc6c79c2f85bdc0460eebe08eb"
@@ -10441,7 +10436,7 @@ react-select@^1.3.0:
prop-types "^15.5.8"
react-input-autosize "^2.1.2"
react-transition-group@^4.0.0:
react-transition-group@^4.0.0, react-transition-group@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.3.0.tgz#fea832e386cf8796c58b61874a3319704f5ce683"
integrity sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==
@@ -12148,7 +12143,7 @@ ts-toolbelt@^3.8.4:
resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-3.8.72.tgz#647ba67a3bd55f1e5a8057c1a7621c38b2e418a5"
integrity sha512-rVwnPRczAamCTIs/9iUgWW12YMscmDG79M0xiUmcmWgTk8lkjxrrwzUys72wsIxNohtiNQaOhbkgQPIxqIdwmA==
tslib@1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
tslib@1.10.0, tslib@^1.8.1, tslib@^1.9.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
@@ -12507,13 +12502,6 @@ walker@^1.0.7, walker@~1.0.5:
dependencies:
makeerror "1.0.x"
warning@^4.0.1, 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"