송용우

Update Slack Setting

1 import React from 'react'; 1 import React from 'react';
2 import { makeStyles } from '@material-ui/core/styles'; 2 import { makeStyles } from '@material-ui/core/styles';
3 -import styled from 'styled-components';
4 -import palette from '../../lib/styles/palette';
5 import Button from '@material-ui/core/Button'; 3 import Button from '@material-ui/core/Button';
6 import TextField from '@material-ui/core/TextField'; 4 import TextField from '@material-ui/core/TextField';
7 5
......
1 import React from 'react'; 1 import React from 'react';
2 -import styled from 'styled-components';
3 -import Button from '../common/Button';
4 import palette from '../../lib/styles/palette'; 2 import palette from '../../lib/styles/palette';
5 import BJIDForm from './BJIDForm'; 3 import BJIDForm from './BJIDForm';
4 +import SlackForm from './SlackForm';
6 import { makeStyles } from '@material-ui/core/styles'; 5 import { makeStyles } from '@material-ui/core/styles';
7 import Paper from '@material-ui/core/Paper'; 6 import Paper from '@material-ui/core/Paper';
8 import Grid from '@material-ui/core/Grid'; 7 import Grid from '@material-ui/core/Grid';
9 8
10 -const SettingFormBlock = styled.div`
11 - h3 {
12 - margin: 0;
13 - color: ${palette.gray[8]};
14 - margin-bottom: 1rem;
15 - }
16 - background: ${palette.gray[2]};
17 - margin: 0 auto;
18 - display: flex;
19 - flex-direction: column;
20 -`;
21 -const StyledInput = styled.input`
22 - font-size: 1rem;
23 - border: none;
24 - border-bottom: 1px solid ${palette.gray[5]};
25 - padding-bottom: 0.5rem;
26 - outline: none;
27 - &:focus {
28 - color: $oc-teal-7;
29 - border-bottom: 1px solid ${palette.gray[7]};
30 - }
31 - & + & {
32 - margin-top: 1rem;
33 - }
34 -`;
35 -const SectionContainer = styled.div`
36 - display: flex;
37 -`;
38 -
39 const useStyles = makeStyles((theme) => ({ 9 const useStyles = makeStyles((theme) => ({
40 root: { 10 root: {
41 flexGrow: 1, 11 flexGrow: 1,
...@@ -48,7 +18,13 @@ const useStyles = makeStyles((theme) => ({ ...@@ -48,7 +18,13 @@ const useStyles = makeStyles((theme) => ({
48 }, 18 },
49 })); 19 }));
50 20
51 -const SettingForm = ({ onChange, onBJIDSubmit, profile, onSyncBJIDSubmit }) => { 21 +const SettingForm = ({
22 + onChange,
23 + onBJIDSubmit,
24 + onSlackURLSubmit,
25 + profile,
26 + onSyncBJIDSubmit,
27 +}) => {
52 const classes = useStyles(); 28 const classes = useStyles();
53 return ( 29 return (
54 <div className={classes.root}> 30 <div className={classes.root}>
...@@ -68,6 +44,16 @@ const SettingForm = ({ onChange, onBJIDSubmit, profile, onSyncBJIDSubmit }) => { ...@@ -68,6 +44,16 @@ const SettingForm = ({ onChange, onBJIDSubmit, profile, onSyncBJIDSubmit }) => {
68 /> 44 />
69 </Paper> 45 </Paper>
70 </Grid> 46 </Grid>
47 +
48 + <Grid container item xs={12}>
49 + <Paper className={classes.paper} elevation={3}>
50 + <SlackForm
51 + profile={profile}
52 + onChange={onChange}
53 + onSlackURLSubmit={onSlackURLSubmit}
54 + />
55 + </Paper>
56 + </Grid>
71 </Grid> 57 </Grid>
72 </div> 58 </div>
73 ); 59 );
......
1 +import React from 'react';
2 +import { makeStyles } from '@material-ui/core/styles';
3 +
4 +import Button from '@material-ui/core/Button';
5 +import TextField from '@material-ui/core/TextField';
6 +
7 +const useStyles = makeStyles((theme) => ({
8 + root: {
9 + '& > *': {
10 + margin: theme.spacing(1),
11 + },
12 + },
13 +}));
14 +
15 +const SlackForm = ({ onChange, profile, onSlackURLSubmit }) => {
16 + const classes = useStyles();
17 + return (
18 + <div>
19 + <form onSubmit={onSlackURLSubmit}>
20 + <TextField
21 + name="slackWebHookURL"
22 + onChange={onChange}
23 + value={profile.slackWebHookURL}
24 + placeholder="슬랙 Webhook URL"
25 + label="슬랙 Webhook URL"
26 + />
27 + <Button variant="outlined" type="submit">
28 + 등록
29 + </Button>
30 + </form>
31 + </div>
32 + );
33 +};
34 +
35 +export default SlackForm;
1 -import React, { useEffect, useState } from 'react'; 1 +import React, { useEffect } from 'react';
2 import { useDispatch, useSelector } from 'react-redux'; 2 import { useDispatch, useSelector } from 'react-redux';
3 import { withRouter } from 'react-router-dom'; 3 import { withRouter } from 'react-router-dom';
4 import HomeForm from '../../components/home/HomeForm'; 4 import HomeForm from '../../components/home/HomeForm';
...@@ -6,7 +6,6 @@ import { getPROFILE } from '../../modules/profile'; ...@@ -6,7 +6,6 @@ import { getPROFILE } from '../../modules/profile';
6 import { analyzeBJ } from '../../lib/util/analyzeBJ'; 6 import { analyzeBJ } from '../../lib/util/analyzeBJ';
7 const HomeContainer = ({ history }) => { 7 const HomeContainer = ({ history }) => {
8 const dispatch = useDispatch(); 8 const dispatch = useDispatch();
9 - const [isLogin, setLogin] = useState(false);
10 const { user, profile } = useSelector(({ user, profile }) => ({ 9 const { user, profile } = useSelector(({ user, profile }) => ({
11 user: user.user, 10 user: user.user,
12 profile: profile, 11 profile: profile,
...@@ -15,7 +14,6 @@ const HomeContainer = ({ history }) => { ...@@ -15,7 +14,6 @@ const HomeContainer = ({ history }) => {
15 analyzeBJ(profile.solvedBJ); 14 analyzeBJ(profile.solvedBJ);
16 }, [profile.solvedBJ]); 15 }, [profile.solvedBJ]);
17 useEffect(() => { 16 useEffect(() => {
18 - setLogin(true);
19 if (user) { 17 if (user) {
20 let username = user.username; 18 let username = user.username;
21 dispatch(getPROFILE({ username })); 19 dispatch(getPROFILE({ username }));
......
1 -import React, { useEffect, useState } from 'react'; 1 +import React, { useEffect } from 'react';
2 import { useDispatch, useSelector } from 'react-redux'; 2 import { useDispatch, useSelector } from 'react-redux';
3 import { withRouter } from 'react-router-dom'; 3 import { withRouter } from 'react-router-dom';
4 import { 4 import {
...@@ -7,6 +7,7 @@ import { ...@@ -7,6 +7,7 @@ import {
7 getPROFILE, 7 getPROFILE,
8 syncBJID, 8 syncBJID,
9 initializeProfile, 9 initializeProfile,
10 + setSLACK,
10 } from '../../modules/profile'; 11 } from '../../modules/profile';
11 import SettingForm from '../../components/setting/SettingForm'; 12 import SettingForm from '../../components/setting/SettingForm';
12 13
...@@ -32,6 +33,12 @@ const SettingContainer = ({ history }) => { ...@@ -32,6 +33,12 @@ const SettingContainer = ({ history }) => {
32 let username = profile.username; 33 let username = profile.username;
33 dispatch(syncBJID({ username })); 34 dispatch(syncBJID({ username }));
34 }; 35 };
36 + const onSlackURLSubmit = (e) => {
37 + e.preventDefault();
38 + let username = profile.username;
39 + let slackWebHookURL = profile.slackWebHookURL;
40 + dispatch(setSLACK({ username, slackWebHookURL }));
41 + };
35 42
36 const onBJIDSubmit = (e) => { 43 const onBJIDSubmit = (e) => {
37 e.preventDefault(); 44 e.preventDefault();
...@@ -60,6 +67,7 @@ const SettingContainer = ({ history }) => { ...@@ -60,6 +67,7 @@ const SettingContainer = ({ history }) => {
60 onChange={onChange} 67 onChange={onChange}
61 onBJIDSubmit={onBJIDSubmit} 68 onBJIDSubmit={onBJIDSubmit}
62 onSyncBJIDSubmit={onSyncBJIDSubmit} 69 onSyncBJIDSubmit={onSyncBJIDSubmit}
70 + onSlackURLSubmit={onSlackURLSubmit}
63 profile={profile} 71 profile={profile}
64 ></SettingForm> 72 ></SettingForm>
65 ); 73 );
......
...@@ -5,7 +5,8 @@ export const setBJID = ({ username, userBJID }) => ...@@ -5,7 +5,8 @@ export const setBJID = ({ username, userBJID }) =>
5 username: username, 5 username: username,
6 userBJID: userBJID, 6 userBJID: userBJID,
7 }); 7 });
8 - 8 +export const setPROFILE = (postdata) =>
9 + client.post('api/profile/setprofile', postdata);
9 export const getPROFILE = ({ username }) => 10 export const getPROFILE = ({ username }) =>
10 client.post('api/profile/getprofile', { username }); 11 client.post('api/profile/getprofile', { username });
11 12
......
...@@ -12,6 +12,11 @@ const [SET_BJID, SET_BJID_SUCCESS, SET_BJID_FAILURE] = createRequestActionTypes( ...@@ -12,6 +12,11 @@ const [SET_BJID, SET_BJID_SUCCESS, SET_BJID_FAILURE] = createRequestActionTypes(
12 'profile/SET_BJID', 12 'profile/SET_BJID',
13 ); 13 );
14 const [ 14 const [
15 + SET_SLACK,
16 + SET_SLACK_SUCCESS,
17 + SET_SLACK_FAILURE,
18 +] = createRequestActionTypes('/profile/SET_SLACK');
19 +const [
15 GET_PROFILE, 20 GET_PROFILE,
16 GET_PROFILE_SUCCESS, 21 GET_PROFILE_SUCCESS,
17 GET_PROFILE_FAILURE, 22 GET_PROFILE_FAILURE,
...@@ -26,6 +31,13 @@ export const initializeProfile = createAction(INITIALIZE); ...@@ -26,6 +31,13 @@ export const initializeProfile = createAction(INITIALIZE);
26 export const syncBJID = createAction(SYNC_BJID, ({ username }) => ({ 31 export const syncBJID = createAction(SYNC_BJID, ({ username }) => ({
27 username, 32 username,
28 })); 33 }));
34 +export const setSLACK = createAction(
35 + SET_SLACK,
36 + ({ username, slackWebHookURL }) => ({
37 + username,
38 + slackWebHookURL,
39 + }),
40 +);
29 export const setBJID = createAction(SET_BJID, ({ username, userBJID }) => ({ 41 export const setBJID = createAction(SET_BJID, ({ username, userBJID }) => ({
30 username, 42 username,
31 userBJID, 43 userBJID,
...@@ -45,14 +57,17 @@ const initialState = { ...@@ -45,14 +57,17 @@ const initialState = {
45 solvedBJ: '', 57 solvedBJ: '',
46 friendList: [], 58 friendList: [],
47 profileError: '', 59 profileError: '',
60 + slackWebHookURL: '',
48 }; 61 };
49 const getPROFILESaga = createRequestSaga(GET_PROFILE, profileAPI.getPROFILE); 62 const getPROFILESaga = createRequestSaga(GET_PROFILE, profileAPI.getPROFILE);
50 const setBJIDSaga = createRequestSaga(SET_BJID, profileAPI.setBJID); 63 const setBJIDSaga = createRequestSaga(SET_BJID, profileAPI.setBJID);
64 +const setSLACKSaga = createRequestSaga(SET_SLACK, profileAPI.setPROFILE);
51 const syncBJIDSaga = createRequestSaga(SYNC_BJID, profileAPI.syncBJ); 65 const syncBJIDSaga = createRequestSaga(SYNC_BJID, profileAPI.syncBJ);
52 export function* profileSaga() { 66 export function* profileSaga() {
53 yield takeLatest(SET_BJID, setBJIDSaga); 67 yield takeLatest(SET_BJID, setBJIDSaga);
54 yield takeLatest(GET_PROFILE, getPROFILESaga); 68 yield takeLatest(GET_PROFILE, getPROFILESaga);
55 yield takeLatest(SYNC_BJID, syncBJIDSaga); 69 yield takeLatest(SYNC_BJID, syncBJIDSaga);
70 + yield takeLatest(SET_SLACK, setSLACKSaga);
56 } 71 }
57 72
58 export default handleActions( 73 export default handleActions(
...@@ -64,7 +79,9 @@ export default handleActions( ...@@ -64,7 +79,9 @@ export default handleActions(
64 }), 79 }),
65 [GET_PROFILE_SUCCESS]: ( 80 [GET_PROFILE_SUCCESS]: (
66 state, 81 state,
67 - { payload: { username, userBJID, solvedBJ, friendList } }, 82 + {
83 + payload: { username, userBJID, solvedBJ, friendList, slackWebHookURL },
84 + },
68 ) => ({ 85 ) => ({
69 ...state, 86 ...state,
70 username: username, 87 username: username,
...@@ -72,6 +89,7 @@ export default handleActions( ...@@ -72,6 +89,7 @@ export default handleActions(
72 solvedBJ: solvedBJ, 89 solvedBJ: solvedBJ,
73 friendList: friendList, 90 friendList: friendList,
74 profileError: null, 91 profileError: null,
92 + slackWebHookURL: slackWebHookURL,
75 }), 93 }),
76 [GET_PROFILE_FAILURE]: (state, { payload: error }) => ({ 94 [GET_PROFILE_FAILURE]: (state, { payload: error }) => ({
77 ...state, 95 ...state,
...@@ -87,6 +105,15 @@ export default handleActions( ...@@ -87,6 +105,15 @@ export default handleActions(
87 ...state, 105 ...state,
88 profileError: error, 106 profileError: error,
89 }), 107 }),
108 + [SET_SLACK_SUCCESS]: (state, { payload: { slackWebHookURL } }) => ({
109 + ...state,
110 + slackWebHookURL: slackWebHookURL,
111 + profileError: null,
112 + }),
113 + [SET_SLACK_FAILURE]: (state, { payload: error }) => ({
114 + ...state,
115 + profileError: error,
116 + }),
90 [SYNC_BJID_SUCCESS]: (state, { payload: { solvedBJ } }) => ({ 117 [SYNC_BJID_SUCCESS]: (state, { payload: { solvedBJ } }) => ({
91 ...state, 118 ...state,
92 solvedBJ, 119 solvedBJ,
......
1 import React from 'react'; 1 import React from 'react';
2 import HeaderContainer from '../containers/common/HeaderContainer'; 2 import HeaderContainer from '../containers/common/HeaderContainer';
3 -import SettingForm from '../components/setting/SettingForm';
4 import SettingContainer from '../containers/setting/SettingContainer'; 3 import SettingContainer from '../containers/setting/SettingContainer';
5 4
6 const SettingPage = () => { 5 const SettingPage = () => {
......
...@@ -1026,6 +1026,13 @@ ...@@ -1026,6 +1026,13 @@
1026 dependencies: 1026 dependencies:
1027 regenerator-runtime "^0.13.4" 1027 regenerator-runtime "^0.13.4"
1028 1028
1029 +"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.8.3":
1030 + version "7.10.3"
1031 + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364"
1032 + integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==
1033 + dependencies:
1034 + regenerator-runtime "^0.13.4"
1035 +
1029 "@babel/runtime@^7.6.3": 1036 "@babel/runtime@^7.6.3":
1030 version "7.10.2" 1037 version "7.10.2"
1031 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839" 1038 resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.2.tgz#d103f21f2602497d38348a32e008637d506db839"
...@@ -1117,6 +1124,11 @@ ...@@ -1117,6 +1124,11 @@
1117 resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18" 1124 resolved "https://registry.yarnpkg.com/@csstools/normalize.css/-/normalize.css-10.1.0.tgz#f0950bba18819512d42f7197e56c518aa491cf18"
1118 integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg== 1125 integrity sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==
1119 1126
1127 +"@emotion/hash@^0.8.0":
1128 + version "0.8.0"
1129 + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413"
1130 + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==
1131 +
1120 "@emotion/is-prop-valid@^0.8.8": 1132 "@emotion/is-prop-valid@^0.8.8":
1121 version "0.8.8" 1133 version "0.8.8"
1122 resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" 1134 resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a"
...@@ -1338,6 +1350,70 @@ ...@@ -1338,6 +1350,70 @@
1338 "@types/yargs" "^15.0.0" 1350 "@types/yargs" "^15.0.0"
1339 chalk "^3.0.0" 1351 chalk "^3.0.0"
1340 1352
1353 +"@material-ui/core@^4.10.2":
1354 + version "4.10.2"
1355 + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.10.2.tgz#0ef78572132fcef1a25f6969bce0d34652d42e31"
1356 + integrity sha512-Uf4iDLi9sW6HKbVQDyDZDr1nMR4RUAE7w/RIIJZGNVZResC0xwmpLRZMtaUdSO43N0R0yJehfxTi4Z461Cd49A==
1357 + dependencies:
1358 + "@babel/runtime" "^7.4.4"
1359 + "@material-ui/styles" "^4.10.0"
1360 + "@material-ui/system" "^4.9.14"
1361 + "@material-ui/types" "^5.1.0"
1362 + "@material-ui/utils" "^4.10.2"
1363 + "@types/react-transition-group" "^4.2.0"
1364 + clsx "^1.0.4"
1365 + hoist-non-react-statics "^3.3.2"
1366 + popper.js "1.16.1-lts"
1367 + prop-types "^15.7.2"
1368 + react-is "^16.8.0"
1369 + react-transition-group "^4.4.0"
1370 +
1371 +"@material-ui/styles@^4.10.0":
1372 + version "4.10.0"
1373 + resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.10.0.tgz#2406dc23aa358217aa8cc772e6237bd7f0544071"
1374 + integrity sha512-XPwiVTpd3rlnbfrgtEJ1eJJdFCXZkHxy8TrdieaTvwxNYj42VnnCyFzxYeNW9Lhj4V1oD8YtQ6S5Gie7bZDf7Q==
1375 + dependencies:
1376 + "@babel/runtime" "^7.4.4"
1377 + "@emotion/hash" "^0.8.0"
1378 + "@material-ui/types" "^5.1.0"
1379 + "@material-ui/utils" "^4.9.6"
1380 + clsx "^1.0.4"
1381 + csstype "^2.5.2"
1382 + hoist-non-react-statics "^3.3.2"
1383 + jss "^10.0.3"
1384 + jss-plugin-camel-case "^10.0.3"
1385 + jss-plugin-default-unit "^10.0.3"
1386 + jss-plugin-global "^10.0.3"
1387 + jss-plugin-nested "^10.0.3"
1388 + jss-plugin-props-sort "^10.0.3"
1389 + jss-plugin-rule-value-function "^10.0.3"
1390 + jss-plugin-vendor-prefixer "^10.0.3"
1391 + prop-types "^15.7.2"
1392 +
1393 +"@material-ui/system@^4.9.14":
1394 + version "4.9.14"
1395 + resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.9.14.tgz#4b00c48b569340cefb2036d0596b93ac6c587a5f"
1396 + integrity sha512-oQbaqfSnNlEkXEziDcJDDIy8pbvwUmZXWNqlmIwDqr/ZdCK8FuV3f4nxikUh7hvClKV2gnQ9djh5CZFTHkZj3w==
1397 + dependencies:
1398 + "@babel/runtime" "^7.4.4"
1399 + "@material-ui/utils" "^4.9.6"
1400 + csstype "^2.5.2"
1401 + prop-types "^15.7.2"
1402 +
1403 +"@material-ui/types@^5.1.0":
1404 + version "5.1.0"
1405 + resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-5.1.0.tgz#efa1c7a0b0eaa4c7c87ac0390445f0f88b0d88f2"
1406 + integrity sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==
1407 +
1408 +"@material-ui/utils@^4.10.2", "@material-ui/utils@^4.9.6":
1409 + version "4.10.2"
1410 + resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.10.2.tgz#3fd5470ca61b7341f1e0468ac8f29a70bf6df321"
1411 + integrity sha512-eg29v74P7W5r6a4tWWDAAfZldXIzfyO1am2fIsC39hdUUHm/33k6pGOKPbgDjg/U/4ifmgAePy/1OjkKN6rFRw==
1412 + dependencies:
1413 + "@babel/runtime" "^7.4.4"
1414 + prop-types "^15.7.2"
1415 + react-is "^16.8.0"
1416 +
1341 "@mrmlnc/readdir-enhanced@^2.2.1": 1417 "@mrmlnc/readdir-enhanced@^2.2.1":
1342 version "2.2.1" 1418 version "2.2.1"
1343 resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" 1419 resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde"
...@@ -1659,6 +1735,13 @@ ...@@ -1659,6 +1735,13 @@
1659 dependencies: 1735 dependencies:
1660 "@types/react" "*" 1736 "@types/react" "*"
1661 1737
1738 +"@types/react-transition-group@^4.2.0":
1739 + version "4.4.0"
1740 + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d"
1741 + integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w==
1742 + dependencies:
1743 + "@types/react" "*"
1744 +
1662 "@types/react@*": 1745 "@types/react@*":
1663 version "16.9.35" 1746 version "16.9.35"
1664 resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368" 1747 resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368"
...@@ -3236,6 +3319,11 @@ clone@^1.0.2: ...@@ -3236,6 +3319,11 @@ clone@^1.0.2:
3236 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 3319 resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
3237 integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 3320 integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
3238 3321
3322 +clsx@^1.0.4:
3323 + version "1.1.1"
3324 + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
3325 + integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
3326 +
3239 cmd-shim@^3.0.0, cmd-shim@^3.0.3: 3327 cmd-shim@^3.0.0, cmd-shim@^3.0.3:
3240 version "3.0.3" 3328 version "3.0.3"
3241 resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" 3329 resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb"
...@@ -3737,6 +3825,14 @@ css-tree@1.0.0-alpha.37: ...@@ -3737,6 +3825,14 @@ css-tree@1.0.0-alpha.37:
3737 mdn-data "2.0.4" 3825 mdn-data "2.0.4"
3738 source-map "^0.6.1" 3826 source-map "^0.6.1"
3739 3827
3828 +css-vendor@^2.0.8:
3829 + version "2.0.8"
3830 + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.8.tgz#e47f91d3bd3117d49180a3c935e62e3d9f7f449d"
3831 + integrity sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==
3832 + dependencies:
3833 + "@babel/runtime" "^7.8.3"
3834 + is-in-browser "^1.0.2"
3835 +
3740 css-what@2.1: 3836 css-what@2.1:
3741 version "2.1.3" 3837 version "2.1.3"
3742 resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" 3838 resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
...@@ -3864,7 +3960,7 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: ...@@ -3864,7 +3960,7 @@ cssstyle@^1.0.0, cssstyle@^1.1.1:
3864 dependencies: 3960 dependencies:
3865 cssom "0.3.x" 3961 cssom "0.3.x"
3866 3962
3867 -csstype@^2.2.0: 3963 +csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7:
3868 version "2.6.10" 3964 version "2.6.10"
3869 resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" 3965 resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b"
3870 integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== 3966 integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w==
...@@ -4160,6 +4256,14 @@ dom-converter@^0.2: ...@@ -4160,6 +4256,14 @@ dom-converter@^0.2:
4160 dependencies: 4256 dependencies:
4161 utila "~0.4" 4257 utila "~0.4"
4162 4258
4259 +dom-helpers@^5.0.1:
4260 + version "5.1.4"
4261 + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.1.4.tgz#4609680ab5c79a45f2531441f1949b79d6587f4b"
4262 + integrity sha512-TjMyeVUvNEnOnhzs6uAn9Ya47GmMo3qq7m+Lr/3ON0Rs5kHvb8I+SQYjLUSYn7qhEm0QjW0yrBkvz9yOrwwz1A==
4263 + dependencies:
4264 + "@babel/runtime" "^7.8.7"
4265 + csstype "^2.6.7"
4266 +
4163 dom-serializer@0: 4267 dom-serializer@0:
4164 version "0.2.2" 4268 version "0.2.2"
4165 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" 4269 resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
...@@ -5607,7 +5711,7 @@ hmac-drbg@^1.0.0: ...@@ -5607,7 +5711,7 @@ hmac-drbg@^1.0.0:
5607 minimalistic-assert "^1.0.0" 5711 minimalistic-assert "^1.0.0"
5608 minimalistic-crypto-utils "^1.0.1" 5712 minimalistic-crypto-utils "^1.0.1"
5609 5713
5610 -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0: 5714 +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
5611 version "3.3.2" 5715 version "3.3.2"
5612 resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" 5716 resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
5613 integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== 5717 integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
...@@ -5801,6 +5905,11 @@ humanize-ms@^1.2.1: ...@@ -5801,6 +5905,11 @@ humanize-ms@^1.2.1:
5801 dependencies: 5905 dependencies:
5802 ms "^2.0.0" 5906 ms "^2.0.0"
5803 5907
5908 +hyphenate-style-name@^1.0.3:
5909 + version "1.0.3"
5910 + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48"
5911 + integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==
5912 +
5804 iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: 5913 iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
5805 version "0.4.24" 5914 version "0.4.24"
5806 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 5915 resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
...@@ -6257,6 +6366,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: ...@@ -6257,6 +6366,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
6257 dependencies: 6366 dependencies:
6258 is-extglob "^2.1.1" 6367 is-extglob "^2.1.1"
6259 6368
6369 +is-in-browser@^1.0.2, is-in-browser@^1.1.3:
6370 + version "1.1.3"
6371 + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835"
6372 + integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=
6373 +
6260 is-installed-globally@^0.1.0: 6374 is-installed-globally@^0.1.0:
6261 version "0.1.0" 6375 version "0.1.0"
6262 resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 6376 resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
...@@ -7050,6 +7164,76 @@ jsprim@^1.2.2: ...@@ -7050,6 +7164,76 @@ jsprim@^1.2.2:
7050 json-schema "0.2.3" 7164 json-schema "0.2.3"
7051 verror "1.10.0" 7165 verror "1.10.0"
7052 7166
7167 +jss-plugin-camel-case@^10.0.3:
7168 + version "10.3.0"
7169 + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.3.0.tgz#ae4da53b39a6e3ea94b70a20fc41c11f0b87386a"
7170 + integrity sha512-tadWRi/SLWqLK3EUZEdDNJL71F3ST93Zrl9JYMjV0QDqKPAl0Liue81q7m/nFUpnSTXczbKDy4wq8rI8o7WFqA==
7171 + dependencies:
7172 + "@babel/runtime" "^7.3.1"
7173 + hyphenate-style-name "^1.0.3"
7174 + jss "^10.3.0"
7175 +
7176 +jss-plugin-default-unit@^10.0.3:
7177 + version "10.3.0"
7178 + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.3.0.tgz#cd74cf5088542620a82591f76c62c6b43a7e50a6"
7179 + integrity sha512-tT5KkIXAsZOSS9WDSe8m8lEHIjoEOj4Pr0WrG0WZZsMXZ1mVLFCSsD2jdWarQWDaRNyMj/I4d7czRRObhOxSuw==
7180 + dependencies:
7181 + "@babel/runtime" "^7.3.1"
7182 + jss "^10.3.0"
7183 +
7184 +jss-plugin-global@^10.0.3:
7185 + version "10.3.0"
7186 + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.3.0.tgz#6b883e74900bb71f65ac2b19bea78f7d1e85af3f"
7187 + integrity sha512-etYTG/y3qIR/vxZnKY+J3wXwObyBDNhBiB3l/EW9/pE3WHE//BZdK8LFvQcrCO48sZW1Z6paHo6klxUPP7WbzA==
7188 + dependencies:
7189 + "@babel/runtime" "^7.3.1"
7190 + jss "^10.3.0"
7191 +
7192 +jss-plugin-nested@^10.0.3:
7193 + version "10.3.0"
7194 + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.3.0.tgz#ae8aceac95e09c3d40c991ea32403fb647d9e0a8"
7195 + integrity sha512-qWiEkoXNEkkZ+FZrWmUGpf+zBsnEOmKXhkjNX85/ZfWhH9dfGxUCKuJFuOWFM+rjQfxV4csfesq4hY0jk8Qt0w==
7196 + dependencies:
7197 + "@babel/runtime" "^7.3.1"
7198 + jss "^10.3.0"
7199 + tiny-warning "^1.0.2"
7200 +
7201 +jss-plugin-props-sort@^10.0.3:
7202 + version "10.3.0"
7203 + resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.3.0.tgz#5b0625f87b6431a7969c56b0d8c696525969bfe4"
7204 + integrity sha512-boetORqL/lfd7BWeFD3K+IyPqyIC+l3CRrdZr+NPq7Noqp+xyg/0MR7QisgzpxCEulk+j2CRcEUoZsvgPC4nTg==
7205 + dependencies:
7206 + "@babel/runtime" "^7.3.1"
7207 + jss "^10.3.0"
7208 +
7209 +jss-plugin-rule-value-function@^10.0.3:
7210 + version "10.3.0"
7211 + resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.3.0.tgz#498b0e2bae16cb316a6bdb73fd783cf9604ba747"
7212 + integrity sha512-7WiMrKIHH3rwxTuJki9+7nY11r1UXqaUZRhHvqTD4/ZE+SVhvtD5Tx21ivNxotwUSleucA/8boX+NF21oXzr5Q==
7213 + dependencies:
7214 + "@babel/runtime" "^7.3.1"
7215 + jss "^10.3.0"
7216 + tiny-warning "^1.0.2"
7217 +
7218 +jss-plugin-vendor-prefixer@^10.0.3:
7219 + version "10.3.0"
7220 + resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.3.0.tgz#b09c13a4d05a055429d8a24e19cc01ce049f0ed4"
7221 + integrity sha512-sZQbrcZyP5V0ADjCLwUA1spVWoaZvM7XZ+2fSeieZFBj31cRsnV7X70FFDerMHeiHAXKWzYek+67nMDjhrZAVQ==
7222 + dependencies:
7223 + "@babel/runtime" "^7.3.1"
7224 + css-vendor "^2.0.8"
7225 + jss "^10.3.0"
7226 +
7227 +jss@^10.0.3, jss@^10.3.0:
7228 + version "10.3.0"
7229 + resolved "https://registry.yarnpkg.com/jss/-/jss-10.3.0.tgz#2cf7be265f72b59c1764d816fdabff1c5dd18326"
7230 + integrity sha512-B5sTRW9B6uHaUVzSo9YiMEOEp3UX8lWevU0Fsv+xtRnsShmgCfIYX44bTH8bPJe6LQKqEXku3ulKuHLbxBS97Q==
7231 + dependencies:
7232 + "@babel/runtime" "^7.3.1"
7233 + csstype "^2.6.5"
7234 + is-in-browser "^1.1.3"
7235 + tiny-warning "^1.0.2"
7236 +
7053 jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3: 7237 jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
7054 version "2.2.3" 7238 version "2.2.3"
7055 resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" 7239 resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
...@@ -9032,6 +9216,11 @@ pnp-webpack-plugin@1.6.4: ...@@ -9032,6 +9216,11 @@ pnp-webpack-plugin@1.6.4:
9032 dependencies: 9216 dependencies:
9033 ts-pnp "^1.1.6" 9217 ts-pnp "^1.1.6"
9034 9218
9219 +popper.js@1.16.1-lts:
9220 + version "1.16.1-lts"
9221 + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
9222 + integrity sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==
9223 +
9035 portfinder@^1.0.25: 9224 portfinder@^1.0.25:
9036 version "1.0.25" 9225 version "1.0.25"
9037 resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" 9226 resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca"
...@@ -10062,7 +10251,7 @@ react-error-overlay@^6.0.7: ...@@ -10062,7 +10251,7 @@ react-error-overlay@^6.0.7:
10062 resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" 10251 resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108"
10063 integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== 10252 integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==
10064 10253
10065 -react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0: 10254 +react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.9.0:
10066 version "16.13.1" 10255 version "16.13.1"
10067 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" 10256 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
10068 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== 10257 integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
...@@ -10167,6 +10356,16 @@ react-scripts@3.4.1: ...@@ -10167,6 +10356,16 @@ react-scripts@3.4.1:
10167 optionalDependencies: 10356 optionalDependencies:
10168 fsevents "2.1.2" 10357 fsevents "2.1.2"
10169 10358
10359 +react-transition-group@^4.4.0:
10360 + version "4.4.1"
10361 + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.1.tgz#63868f9325a38ea5ee9535d828327f85773345c9"
10362 + integrity sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==
10363 + dependencies:
10364 + "@babel/runtime" "^7.5.5"
10365 + dom-helpers "^5.0.1"
10366 + loose-envify "^1.4.0"
10367 + prop-types "^15.6.2"
10368 +
10170 react@^16.13.1: 10369 react@^16.13.1:
10171 version "16.13.1" 10370 version "16.13.1"
10172 resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" 10371 resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
...@@ -11766,7 +11965,7 @@ tiny-relative-date@^1.3.0: ...@@ -11766,7 +11965,7 @@ tiny-relative-date@^1.3.0:
11766 resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" 11965 resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07"
11767 integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== 11966 integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==
11768 11967
11769 -tiny-warning@^1.0.0, tiny-warning@^1.0.3: 11968 +tiny-warning@^1.0.0, tiny-warning@^1.0.2, tiny-warning@^1.0.3:
11770 version "1.0.3" 11969 version "1.0.3"
11771 resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" 11970 resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
11772 integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== 11971 integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==
......