On the way to full query control.

master
Sander Vocke 6 years ago
parent 705d88a222
commit 31992ac010
  1. 15356
      package-lock.json
  2. 6
      package.json
  3. 65
      src/main.js
  4. 12
      src/queries.js
  5. 167
      src/userquerywidget.js
  6. 169
      yarn.lock

15356
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -10,13 +10,17 @@
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"alasql": "^0.5.4",
"eslint-plugin-react-hooks": "^2.3.0",
"lodash": "^4.17.15",
"lodash.clonedeep": "^4.5.0",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-grid-gallery": "^0.5.5",
"react-photo-gallery": "^8.0.0",
"react-scripts": "3.3.0",
"search-string": "^3.1.0",
"sql.js": "^1.1.0"
"sql.js": "^1.1.0",
"typeface-roboto": "^0.0.75"
},
"scripts": {
"start": "react-scripts start",

@ -1,8 +1,8 @@
import React, { useEffect } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import { borders } from '@material-ui/system';
import Box from '@material-ui/core/Box';
import { createMuiTheme, ThemeProvider } from '@material-ui/core/styles';
import { SearchBar } from './searchbar.js';
import { InternalErrorPage } from './error.js';
@ -11,6 +11,7 @@ import { ProvideDB, DBTypeEnum, DBSourceEnum } from './database.js';
import { GridGallery } from './gridgallery.js';
import { UserQuery, user_query_from_search_string, maybe_image_query, do_image_query, maybe_album_query, do_album_query, maybe_tag_query, do_tag_query } from './queries.js';
import { Browser } from './browser.js';
import { UserQueryWidget } from './userquerywidget.js'
const useStyles = makeStyles(theme => ({
root: {
@ -39,32 +40,33 @@ const useStyles = makeStyles(theme => ({
export function LoadedMainPage(props) {
const classes = useStyles();
const [gallery_user_query, setGalleryUserQuery] = React.useState(false);
const [photos, setPhotos] = React.useState(false);
const [albums, setAlbums] = React.useState(false);
const [tags, setTags] = React.useState(false);
const [gallery_user_query, setGalleryUserQuery] = React.useState(new UserQuery());
const [photos, setPhotos] = React.useState([]);
const [albums, setAlbums] = React.useState([]);
const [tags, setTags] = React.useState([]);
const { database, photos_dir, thumbs_dir } = props;
useEffect(() => {
// Single-fire effect to start retrieving the albums and tags lists.
var blank_user_query = new UserQuery;
var blank_user_query = new UserQuery();
var sql_album_query = maybe_album_query(blank_user_query);
var sql_tag_query = maybe_tag_query(blank_user_query);
do_album_query(sql_album_query, props.database)
do_album_query(sql_album_query, database)
.then(albums => {
setAlbums(albums);
});
do_tag_query(sql_tag_query, props.database)
do_tag_query(sql_tag_query, database)
.then(tags => {
setTags(tags);
});
}, []);
}, [database]);
useEffect(() => {
var sql_image_query = maybe_image_query(gallery_user_query);
setPhotos(false);
do_image_query(sql_image_query, props.database, props.photos_dir, props.thumbs_dir)
do_image_query(sql_image_query, database, photos_dir, thumbs_dir)
.then(got_photos => {
// Make each photo fetch its thumbnail size before proceeding
var promises = [];
@ -76,25 +78,22 @@ export function LoadedMainPage(props) {
setPhotos(got_photos);
});
});
}, [gallery_user_query]);
}, [gallery_user_query, database, photos_dir, thumbs_dir]);
function onSearch(q) {
var query = user_query_from_search_string(q);
setGalleryUserQuery(query);
}
function onBrowser(q) {
setGalleryUserQuery(q);
}
return (
<>
<Box className={classes.root}>
<Box className={classes.navigator}>
<Box className={classes.margined}>{albums && <Browser albums={albums} tags={tags} onNewQuery={onBrowser} />}</Box>
<Box className={classes.margined}>{albums && <Browser albums={albums} tags={tags} onNewQuery={setGalleryUserQuery} />}</Box>
</Box>
<Box className={classes.searchandview}>
<Box className={classes.margined}><SearchBar onSubmit={onSearch} /></Box>
<Box className={classes.margined}><UserQueryWidget userQuery={gallery_user_query} onChange={setGalleryUserQuery} /></Box>
<Box className={classes.margined}>{photos && <GridGallery photos={photos} />}</Box>
</Box>
</Box>
@ -102,16 +101,26 @@ export function LoadedMainPage(props) {
);
}
export const MainPage = () => (
<ProvideDB db_file={process.env.PUBLIC_URL + "/test_many_photos_db/digikam4.db"} db_source_type={DBTypeEnum.SQLJS_SQLITE} db_target_type={DBTypeEnum.ALASQL_NATIVE}
db_source_name="sqlite_db" db_target_name="db" db_source={DBSourceEnum.ATTACHFILE}>
{({ loading, error, done, db }) => (
const theme = createMuiTheme({
typography: {
fontFamily: [ 'Roboto', 'sans-serif' ].join(','),
},
});
<>
{loading && <LoadingPage file={process.env.PUBLIC_URL + "/test_many_photos_db/digikam4.db"} />}
{error && <InternalErrorPage message={error} />}
{done && <LoadedMainPage database={db} photos_dir="/test_many_photos" thumbs_dir="/test_many_photos_thumbs" />}
</>
)}
</ProvideDB>
)
export function MainPage() {
return (
<ThemeProvider theme={theme}>
<ProvideDB db_file={process.env.PUBLIC_URL + "/test_many_photos_db/digikam4.db"} db_source_type={DBTypeEnum.SQLJS_SQLITE} db_target_type={DBTypeEnum.ALASQL_NATIVE}
db_source_name="sqlite_db" db_target_name="db" db_source={DBSourceEnum.ATTACHFILE}>
{({ loading, error, done, db }) => (
<>
{loading && <LoadingPage file={process.env.PUBLIC_URL + "/test_many_photos_db/digikam4.db"} />}
{error && <InternalErrorPage message={error} />}
{done && <LoadedMainPage database={db} photos_dir="/test_many_photos" thumbs_dir="/test_many_photos_thumbs" />}
</>
)}
</ProvideDB>
</ThemeProvider>
);
}

@ -208,6 +208,18 @@ export function maybe_tag_query(user_query) {
return tag_query_with_where(where);
}
export function filter_is_const_false(filter) {
console.log("is const filter:", filter instanceof ConstFilter);
console.log("Has constval:", filter.constval);
console.log("is const false filter:", filter instanceof ConstFilter && filter.constval == false);
if(filter instanceof ConstFilter && filter.constval == false) {
return true;
}
// TODO resolve recursively
return false;
}
function filter_from_text_segment(result_type, segment) {
var filter = false;

@ -0,0 +1,167 @@
import React from 'react';
import Switch from '@material-ui/core/Switch';
import Box from '@material-ui/core/Box';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';
import Typography from '@material-ui/core/Typography';
import { makeStyles } from '@material-ui/core/styles';
import {
filter_is_const_false, ConstFilter, LogicalOperatorFilter, MatchingFilter,
ResultTypeEnum, LogicalOperatorEnum
} from './queries.js'
const useStyles = makeStyles(theme => ({
root: {}
}));
export function MatchingFilterExpressionControl(props) {
const classes = useStyles();
const { expr } = props;
var opstring = "";
if (expr.operator == LogicalOperatorEnum.AND) {
opstring = " AND ";
} else if (expr.operator == LogicalOperatorEnum.OR) {
opstring = " OR ";
}
return (
<Typography variant="p">TODO</Typography>
);
}
export function LogicalOperatorFilterExpressionControl(props) {
const classes = useStyles();
const { expr } = props;
var opstring = "";
if (expr.operator == LogicalOperatorEnum.AND) {
opstring = " AND ";
} else if (expr.operator == LogicalOperatorEnum.OR) {
opstring = " OR ";
}
return (
<>
<FilterExpressionControl expr={expr.sub_filter_a} />
<Typography variant="p">{opstring}</Typography>
<FilterExpressionControl expr={expr.sub_filter_b} />
</>
);
}
export function ConstFilterExpressionControl(props) {
const classes = useStyles();
const { expr } = props;
return (
<Typography variant="p">{JSON.stringify(expr.constval)}</Typography>
);
}
export function FilterExpressionControl(props) {
const classes = useStyles();
const { expr } = props;
if (expr instanceof ConstFilter) {
return <ConstFilterExpressionControl {...props} />
} else if (expr instanceof LogicalOperatorFilter) {
return <LogicalOperatorFilterExpressionControl {...props} />
} else if (expr instanceof MatchingFilter) {
return <MatchingFilterExpressionControl {...props} />
}
throw new Error('Unsupported filter expression');
}
export function FilterControl(props) {
const classes = useStyles();
const { filter, onChange, resultType, resultTypeString } = props;
function handleResultToggled() {
if (enabled) {
var new_filter = new ConstFilter(resultType, false);
onChange(new_filter);
}
else {
var new_filter = new ConstFilter(resultType, true);
onChange(new_filter);
}
}
const enabled = !filter_is_const_false(filter);
return (
<>
<Box>
<FormControlLabel
control={
<Switch
checked={enabled}
onChange={handleResultToggled}
color="primary"
/>
}
label={resultTypeString}
/>
<Box>
<Typography variant="p">Filters:</Typography>
<AddCircleOutlineIcon />
<FilterExpressionControl expr={filter} />
</Box>
</Box>
</>
);
}
export function UserQueryWidget(props) {
const classes = useStyles();
const { userQuery, onChange } = props;
console.log("User query widget instantiated with query:", userQuery);
var _ = require('lodash');
function handleImageFilterChange(filter) {
var q = _.cloneDeep(userQuery);
q.image_filter = filter;
onChange(q);
}
function handleAlbumFilterChange(filter) {
var q = _.cloneDeep(userQuery);
q.album_filter = filter;
onChange(q);
}
function handleTagFilterChange(filter) {
var q = _.cloneDeep(userQuery);
q.tag_filter = filter;
onChange(q);
}
return (
<>
<Box>
<FilterControl
filter={userQuery.image_filter}
onChange={handleImageFilterChange}
resultType={ResultTypeEnum.IMAGE}
resultTypeString="Images" />
</Box>
<Box>
<FilterControl
filter={userQuery.album_filter}
onChange={handleAlbumFilterChange}
resultType={ResultTypeEnum.ALBUM}
resultTypeString="Albums" />
</Box>
<Box>
<FilterControl
filter={userQuery.tag_filter}
onChange={handleTagFilterChange}
resultType={ResultTypeEnum.TAG}
resultTypeString="Tags" />
</Box>
</>
);
}

@ -1240,14 +1240,14 @@
"@types/yargs" "^13.0.0"
"@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==
version "4.9.0"
resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.9.0.tgz#96ca3281ee06216d44fd4d0e306dbe0429eb2ebe"
integrity sha512-zrrr8mPU5DDBYaVil4uJYauW41PjSn5otn7cqGsmWOY0t90fypr9nNgM7rRJaPz2AP6oRSDx1kBQt2igf5uelg==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/styles" "^4.8.2"
"@material-ui/styles" "^4.9.0"
"@material-ui/system" "^4.7.1"
"@material-ui/types" "^4.1.1"
"@material-ui/types" "^5.0.0"
"@material-ui/utils" "^4.7.1"
"@types/react-transition-group" "^4.2.0"
clsx "^1.0.2"
@ -1267,9 +1267,9 @@
"@babel/runtime" "^7.4.4"
"@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==
version "4.0.0-alpha.40"
resolved "https://registry.yarnpkg.com/@material-ui/lab/-/lab-4.0.0-alpha.40.tgz#8d78dc80d32c27c05def7eda8a36e0d0a0748e7f"
integrity sha512-VwXCNFJKfctu9Ot9XP5u2SSzXpm2Fn7F/o08bUfrJDkMCuRc8MCGVnNhT+guZRZa35rR97uWKc3SGQ/LAv8yEg==
dependencies:
"@babel/runtime" "^7.4.4"
"@material-ui/utils" "^4.7.1"
@ -1277,26 +1277,26 @@
prop-types "^15.7.2"
react-is "^16.8.0"
"@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==
"@material-ui/styles@^4.9.0":
version "4.9.0"
resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.9.0.tgz#10c31859f6868cfa9d3adf6b6c3e32c9d676bc76"
integrity sha512-nJHum4RqYBPWsjL/9JET8Z02FZ9gSizlg/7LWVFpIthNzpK6OQ5OSRR4T4x9/p+wK3t1qNn3b1uI4XpnZaPxOA==
dependencies:
"@babel/runtime" "^7.4.4"
"@emotion/hash" "^0.7.4"
"@material-ui/types" "^4.1.1"
"@material-ui/types" "^5.0.0"
"@material-ui/utils" "^4.7.1"
clsx "^1.0.2"
csstype "^2.5.2"
hoist-non-react-statics "^3.2.1"
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"
jss "^10.0.3"
jss-plugin-camel-case "^10.0.3"
jss-plugin-default-unit "^10.0.3"
jss-plugin-global "^10.0.3"
jss-plugin-nested "^10.0.3"
jss-plugin-props-sort "^10.0.3"
jss-plugin-rule-value-function "^10.0.3"
jss-plugin-vendor-prefixer "^10.0.3"
prop-types "^15.7.2"
"@material-ui/system@^4.7.1":
@ -1308,12 +1308,10 @@
"@material-ui/utils" "^4.7.1"
prop-types "^15.7.2"
"@material-ui/types@^4.1.1":
version "4.1.1"
resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b"
integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ==
dependencies:
"@types/react" "*"
"@material-ui/types@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.0.0.tgz#26d6259dc6b39f4c2e1e9aceff7a11e031941741"
integrity sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg==
"@material-ui/utils@^4.7.1":
version "4.7.1"
@ -1569,9 +1567,9 @@
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*":
version "13.1.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.8.tgz#1d590429fe8187a02707720ecf38a6fe46ce294b"
integrity sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A==
version "13.5.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.5.0.tgz#4e498dbf355795a611a87ae5ef811a8660d42662"
integrity sha512-Onhn+z72D2O2Pb2ql2xukJ55rglumsVo1H6Fmyi8mlU9SvKdBk/pUSUAiBY/d9bAOF7VVWajX3sths/+g6ZiAQ==
"@types/parse-json@^4.0.0":
version "4.0.0"
@ -1603,9 +1601,9 @@
"@types/react" "*"
"@types/react@*":
version "16.9.17"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.17.tgz#58f0cc0e9ec2425d1441dd7b623421a867aa253e"
integrity sha512-UP27In4fp4sWF5JgyV6pwVPAQM83Fj76JOcg02X5BZcpSu5Wx+fP9RMqc2v0ssBoQIFvD5JdKY41gjJJKmw6Bg==
version "16.9.19"
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.19.tgz#c842aa83ea490007d29938146ff2e4d9e4360c40"
integrity sha512-LJV97//H+zqKWMms0kvxaKYJDG05U2TtQB3chRLF8MPNs+MQh/H1aGlyDUxjaHvu08EAGerdX2z4LTBc7ns77A==
dependencies:
"@types/prop-types" "*"
csstype "^2.2.0"
@ -1636,9 +1634,9 @@
integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==
"@types/yargs@^13.0.0":
version "13.0.5"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.5.tgz#18121bfd39dc12f280cee58f92c5b21d32041908"
integrity sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q==
version "13.0.6"
resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.6.tgz#6aed913a92c262c13b94d4bca8043237de202124"
integrity sha512-IkltIncDQWv6fcAvnHtJ6KtkmY/vtR3bViOaCzpj/A3yNhlfZAgxNe6AEQD1cQrkYD+YsKVo08DSxvNKEsD7BA==
dependencies:
"@types/yargs-parser" "*"
@ -2589,11 +2587,11 @@ browserslist@4.7.3:
node-releases "^1.1.40"
browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.2, browserslist@^4.6.4, browserslist@^4.8.2, browserslist@^4.8.3:
version "4.8.4"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.4.tgz#b0cf2470ce928ce86b546217f70825577bb01c3a"
integrity sha512-3qv/Ar3nRnRTpwGD+LZc7F4YHDBb3NAEIn+DesNa8TcBhyxf8eDqYwTOa70kiWXwvFjQQz+abbykJcyOlfBfNg==
version "4.8.5"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.5.tgz#691af4e327ac877b25e7a3f7ee869c4ef36cdea3"
integrity sha512-4LMHuicxkabIB+n9874jZX/az1IaZ5a+EUuvD7KFOu9x/Bd5YHyO0DIz2ls/Kl8g0ItS4X/ilEgf4T1Br0lgSg==
dependencies:
caniuse-lite "^1.0.30001021"
caniuse-lite "^1.0.30001022"
electron-to-chromium "^1.3.338"
node-releases "^1.1.46"
@ -2760,7 +2758,7 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001010, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001021:
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001010, caniuse-lite@^1.0.30001020, caniuse-lite@^1.0.30001022:
version "1.0.30001022"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001022.tgz#9eeffe580c3a8f110b7b1742dcf06a395885e4c6"
integrity sha512-FjwPPtt/I07KyLPkBQ0g7/XuZg6oUkYBVnPHNj3VHJbOjmmJ/GdSo/GUY6MwINEQvjhP6WZVbX8Tvms8xh0D5A==
@ -3888,9 +3886,9 @@ ee-first@1.1.1:
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.3.306, electron-to-chromium@^1.3.338:
version "1.3.338"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.338.tgz#4f33745aed599dfa0fd7b388bf754c164e915168"
integrity sha512-wlmfixuHEc9CkfOKgcqdtzBmRW4NStM9ptl5oPILY2UDyHuSXb3Yit+yLVyLObTgGuMMU36hhnfs2GDJId7ctA==
version "1.3.340"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.340.tgz#5d4fe78e984d4211194cf5a52e08069543da146f"
integrity sha512-hRFBAglhcj5iVYH+o8QU0+XId1WGoc0VGowJB1cuJAt3exHGrivZvWeAO5BRgBZqwZtwxjm8a5MQeGoT/Su3ww==
elliptic@^6.0.0:
version "6.5.2"
@ -3966,9 +3964,9 @@ error-ex@^1.2.0, error-ex@^1.3.1:
is-arrayish "^0.2.1"
es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2:
version "1.17.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.3.tgz#d921ff5889a3664921094bb13aaf0dfd11818578"
integrity sha512-AwiVPKf3sKGMoWtFw0J7Y4MTZ4Iek67k4COWOwHqS8B9TOZ71DCfcoBmdamy8Y6mj4MDz0+VNUpC2HKHFHA3pg==
version "1.17.4"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.4.tgz#e3aedf19706b20e7c2594c35fc0d57605a79e184"
integrity sha512-Ae3um/gb8F0mui/jPL+QiqmglkUsaQf7FwBEHYIFkztkneosu9imhqHpBzQ3h1vit8t5iQ74t6PEVvphBZiuiQ==
dependencies:
es-to-primitive "^1.2.1"
function-bind "^1.1.1"
@ -4122,6 +4120,11 @@ eslint-plugin-react-hooks@^1.6.1:
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
eslint-plugin-react-hooks@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.3.0.tgz#53e073961f1f5ccf8dd19558036c1fac8c29d99a"
integrity sha512-gLKCa52G4ee7uXzdLiorca7JIQZPPXRAQDXV83J4bUEeUuc5pIEyZYAZ45Xnxe5IuupxEqHS+hUhSLIimK1EMw==
eslint-plugin-react@7.16.0:
version "7.16.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz#9928e4f3e2122ed3ba6a5b56d0303ba3e41d8c09"
@ -4739,9 +4742,9 @@ fs-extra@^8.1.0:
universalify "^0.1.0"
fs-minipass@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.1.tgz#3e5bcc0f7b94507b0390e2c7d4a2516ca16a38d2"
integrity sha512-22x6v7ceMyTfG8e4Y0YeudTuDNZEIR9pQoEVu1r5e6nLuMAbmrkTXlHADEHsdk2SHYM6opcRnKUbqB9bZ94D3g==
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
dependencies:
minipass "^3.0.0"
@ -5038,9 +5041,9 @@ hmac-drbg@^1.0.0:
minimalistic-crypto-utils "^1.0.1"
hoist-non-react-statics@^3.2.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f"
integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
dependencies:
react-is "^16.7.0"
@ -6338,7 +6341,7 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jss-plugin-camel-case@^10.0.0:
jss-plugin-camel-case@^10.0.3:
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==
@ -6347,7 +6350,7 @@ jss-plugin-camel-case@^10.0.0:
hyphenate-style-name "^1.0.3"
jss "^10.0.3"
jss-plugin-default-unit@^10.0.0:
jss-plugin-default-unit@^10.0.3:
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==
@ -6355,7 +6358,7 @@ jss-plugin-default-unit@^10.0.0:
"@babel/runtime" "^7.3.1"
jss "^10.0.3"
jss-plugin-global@^10.0.0:
jss-plugin-global@^10.0.3:
version "10.0.3"
resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.3.tgz#82bc95aa7f2c7171adc3ea47ec7717aca76a2389"
integrity sha512-kNotkAciJIXpIGYnmueaIifBne9rdq31O8Xq1nF7KMfKlskNRANTcEX5rVnsGKl2yubTMYfjKBFCeDgcQn6+gA==
@ -6363,7 +6366,7 @@ jss-plugin-global@^10.0.0:
"@babel/runtime" "^7.3.1"
jss "^10.0.3"
jss-plugin-nested@^10.0.0:
jss-plugin-nested@^10.0.3:
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==
@ -6372,7 +6375,7 @@ jss-plugin-nested@^10.0.0:
jss "^10.0.3"
tiny-warning "^1.0.2"
jss-plugin-props-sort@^10.0.0:
jss-plugin-props-sort@^10.0.3:
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==
@ -6380,7 +6383,7 @@ jss-plugin-props-sort@^10.0.0:
"@babel/runtime" "^7.3.1"
jss "^10.0.3"
jss-plugin-rule-value-function@^10.0.0:
jss-plugin-rule-value-function@^10.0.3:
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==
@ -6388,7 +6391,7 @@ jss-plugin-rule-value-function@^10.0.0:
"@babel/runtime" "^7.3.1"
jss "^10.0.3"
jss-plugin-vendor-prefixer@^10.0.0:
jss-plugin-vendor-prefixer@^10.0.3:
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==
@ -6397,7 +6400,7 @@ jss-plugin-vendor-prefixer@^10.0.0:
css-vendor "^2.0.7"
jss "^10.0.3"
jss@^10.0.0, jss@^10.0.3:
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==
@ -6581,6 +6584,11 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
lodash.clonedeep@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
@ -7092,9 +7100,9 @@ node-notifier@^5.4.2:
which "^1.3.0"
node-releases@^1.1.40, node-releases@^1.1.46:
version "1.1.46"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.46.tgz#6b262afef1bdc9a950a96df2e77e0d2290f484bf"
integrity sha512-YOjdx+Uoh9FbRO7yVYbnbt1puRWPQMemR3SutLeyv2XfxKs1ihpe0OLAUwBPEP2ImNH/PZC7SEiC6j32dwRZ7g==
version "1.1.47"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.47.tgz#c59ef739a1fd7ecbd9f0b7cf5b7871e8a8b591e4"
integrity sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==
dependencies:
semver "^6.3.0"
@ -7723,9 +7731,9 @@ pnp-webpack-plugin@1.5.0:
ts-pnp "^1.1.2"
popper.js@^1.14.1:
version "1.16.0"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3"
integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==
version "1.16.1"
resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b"
integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==
portfinder@^1.0.25:
version "1.0.25"
@ -7742,12 +7750,12 @@ posix-character-classes@^0.1.0:
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
postcss-attribute-case-insensitive@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7"
integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==
version "4.0.2"
resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz#d93e46b504589e94ac7277b0463226c68041a880"
integrity sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==
dependencies:
postcss "^7.0.2"
postcss-selector-parser "^5.0.0"
postcss-selector-parser "^6.0.2"
postcss-browser-comments@^3.0.0:
version "3.0.0"
@ -8329,7 +8337,7 @@ postcss-selector-parser@^3.0.0:
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4:
version "5.0.0"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c"
integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==
@ -9150,9 +9158,9 @@ resolve@1.12.2:
path-parse "^1.0.6"
resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.3.2, resolve@^1.8.1:
version "1.14.2"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
version "1.15.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.0.tgz#1b7ca96073ebb52e741ffd799f6b39ea462c67f5"
integrity sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==
dependencies:
path-parse "^1.0.6"
@ -10269,6 +10277,11 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
typeface-roboto@^0.0.75:
version "0.0.75"
resolved "https://registry.yarnpkg.com/typeface-roboto/-/typeface-roboto-0.0.75.tgz#98d5ba35ec234bbc7172374c8297277099cc712b"
integrity sha512-VrR/IiH00Z1tFP4vDGfwZ1esNqTiDMchBEXYY9kilT6wRGgFoCAlgkEUMHb1E3mB0FsfZhv756IF0+R+SFPfdg==
uglify-js@3.4.x:
version "3.4.10"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f"
@ -10480,9 +10493,9 @@ vary@~1.1.2:
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
vendors@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0"
integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==
version "1.0.4"
resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e"
integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==
verror@1.10.0:
version "1.10.0"

Loading…
Cancel
Save