From: Pawel Kowalczyk Date: Mon, 23 Jul 2018 12:14:16 +0000 (+0200) Subject: merge conflicts X-Git-Tag: 1.2.0~33^2~7 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/10ce16c28de952f6533ca3cc9df909269e3d2a53?hp=-c merge conflicts Feature #13781 Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk --- 10ce16c28de952f6533ca3cc9df909269e3d2a53 diff --combined package.json index a8c56177,0c06a6f1..06fa893f --- a/package.json +++ b/package.json @@@ -3,12 -3,11 +3,12 @@@ "version": "0.1.0", "private": true, "dependencies": { - "@material-ui/core": "1.2.1", + "@material-ui/core": "1.4.0", "@material-ui/icons": "1.1.0", - "@types/lodash": "4.14.109", + "@types/lodash": "4.14.112", + "@types/redux-form": "^7.4.1", "axios": "0.18.0", - "classnames": "^2.2.6", + "classnames": "2.2.6", "lodash": "4.17.10", "react": "16.4.1", "react-dom": "16.4.1", @@@ -30,24 -29,22 +30,24 @@@ }, "devDependencies": { "@types/classnames": "^2.2.4", - "@types/enzyme": "3.1.10", + "@types/enzyme": "3.1.12", "@types/enzyme-adapter-react-16": "1.0.2", - "@types/jest": "23.1.0", - "@types/node": "10.3.3", - "@types/react": "16.3", + "@types/jest": "23.3.0", + "@types/node": "10.5.2", + "@types/react": "16.4", "@types/react-dom": "16.0.6", - "@types/react-redux": "6.0.2", - "@types/react-router": "4.0.26", + "@types/react-redux": "6.0.4", + "@types/react-router": "4.0.29", "@types/react-router-dom": "4.2.7", "@types/react-router-redux": "5.0.15", "@types/redux-devtools": "3.0.44", + "@types/redux-form": "^7.4.1", - "axios-mock-adapter": "^1.15.0", - "enzyme": "^3.3.0", - "enzyme-adapter-react-16": "^1.1.1", + "axios-mock-adapter": "1.15.0", + "enzyme": "3.3.0", + "enzyme-adapter-react-16": "1.1.1", "jest-localstorage-mock": "2.2.0", "redux-devtools": "3.4.1", + "redux-form": "^7.4.2", "typescript": "2.9.2" }, "moduleNameMapper": { diff --combined src/common/api/common-resource-service.ts index 39825c0e,2541feab..3956fb73 --- a/src/common/api/common-resource-service.ts +++ b/src/common/api/common-resource-service.ts @@@ -3,9 -3,9 +3,9 @@@ // SPDX-License-Identifier: AGPL-3.0 import * as _ from "lodash"; - import FilterBuilder from "./filter-builder"; - import OrderBuilder from "./order-builder"; + import { FilterBuilder } from "./filter-builder"; + import { OrderBuilder } from "./order-builder"; -import { AxiosInstance } from "axios"; +import { AxiosInstance, AxiosPromise } from "axios"; import { Resource } from "../../models/resource"; export interface ListArguments { @@@ -26,12 -26,7 +26,12 @@@ export interface ListResults itemsAvailable: number; } +export interface Errors { + errors: string[]; + errorToken: string; +} + - export default class CommonResourceService { + export class CommonResourceService { static mapResponseKeys = (response: any): Promise => CommonResourceService.mapKeys(_.camelCase)(response.data) @@@ -54,12 -49,6 +54,12 @@@ } } + static defaultResponse(promise: AxiosPromise): Promise { + return promise + .then(CommonResourceService.mapResponseKeys) + .catch(({ response }) => Promise.reject(CommonResourceService.mapResponseKeys(response))); + } + protected serverApi: AxiosInstance; protected resourceType: string; @@@ -69,21 -58,21 +69,21 @@@ } create(data: Partial) { - return this.serverApi - .post(this.resourceType, CommonResourceService.mapKeys(_.snakeCase)(data)) - .then(CommonResourceService.mapResponseKeys); + return CommonResourceService.defaultResponse( + this.serverApi + .post(this.resourceType, CommonResourceService.mapKeys(_.snakeCase)(data))); } delete(uuid: string): Promise { - return this.serverApi - .delete(this.resourceType + uuid) - .then(CommonResourceService.mapResponseKeys); + return CommonResourceService.defaultResponse( + this.serverApi + .delete(this.resourceType + uuid)); } get(uuid: string) { - return this.serverApi - .get(this.resourceType + uuid) - .then(CommonResourceService.mapResponseKeys); + return CommonResourceService.defaultResponse( + this.serverApi + .get(this.resourceType + uuid)); } list(args: ListArguments = {}): Promise> { @@@ -93,16 -82,15 +93,15 @@@ filters: filters ? filters.serialize() : undefined, order: order ? order.getOrder() : undefined }; - return this.serverApi - .get(this.resourceType, { - params: CommonResourceService.mapKeys(_.snakeCase)(params) - }) - .then(CommonResourceService.mapResponseKeys); + return CommonResourceService.defaultResponse( + this.serverApi + .get(this.resourceType, { + params: CommonResourceService.mapKeys(_.snakeCase)(params) + })); } update(uuid: string) { throw new Error("Not implemented"); } - } diff --combined src/store/project/project-action.ts index 3da60f65,2a7a5c12..075e77d1 --- a/src/store/project/project-action.ts +++ b/src/store/project/project-action.ts @@@ -6,14 -6,15 +6,14 @@@ import { default as unionize, ofType, U import { ProjectResource } from "../../models/project"; import { projectService } from "../../services/services"; import { Dispatch } from "redux"; - import FilterBuilder from "../../common/api/filter-builder"; + import { FilterBuilder } from "../../common/api/filter-builder"; import { RootState } from "../store"; - const actions = unionize({ + export const projectActions = unionize({ OPEN_PROJECT_CREATOR: ofType<{ ownerUuid: string }>(), CLOSE_PROJECT_CREATOR: ofType<{}>(), CREATE_PROJECT: ofType>(), CREATE_PROJECT_SUCCESS: ofType(), - CREATE_PROJECT_ERROR: ofType(), REMOVE_PROJECT: ofType(), PROJECTS_REQUEST: ofType(), PROJECTS_SUCCESS: ofType<{ projects: ProjectResource[], parentItemId?: string }>(), @@@ -26,13 -27,13 +26,13 @@@ }); export const getProjectList = (parentUuid: string = '') => (dispatch: Dispatch) => { - dispatch(actions.PROJECTS_REQUEST(parentUuid)); + dispatch(projectActions.PROJECTS_REQUEST(parentUuid)); return projectService.list({ filters: FilterBuilder .create() .addEqual("ownerUuid", parentUuid) }).then(({ items: projects }) => { - dispatch(actions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid })); + dispatch(projectActions.PROJECTS_SUCCESS({ projects, parentItemId: parentUuid })); return projects; }); }; @@@ -41,11 -42,11 +41,10 @@@ export const createProject = (project: (dispatch: Dispatch, getState: () => RootState) => { const { ownerUuid } = getState().projects.creator; const projectData = { ownerUuid, ...project }; - dispatch(actions.CREATE_PROJECT(projectData)); + dispatch(projectActions.CREATE_PROJECT(projectData)); return projectService .create(projectData) - .then(project => dispatch(actions.CREATE_PROJECT_SUCCESS(project))); - .then(project => dispatch(projectActions.CREATE_PROJECT_SUCCESS(project))) - .catch(() => dispatch(projectActions.CREATE_PROJECT_ERROR("Could not create a project"))); ++ .then(project => dispatch(projectActions.CREATE_PROJECT_SUCCESS(project))); }; - export type ProjectAction = UnionOf; - export default actions; + export type ProjectAction = UnionOf; diff --combined src/store/project/project-reducer.ts index a329e812,40356c0c..94a451a8 --- a/src/store/project/project-reducer.ts +++ b/src/store/project/project-reducer.ts @@@ -4,7 -4,7 +4,7 @@@ import * as _ from "lodash"; - import actions, { ProjectAction } from "./project-action"; + import { projectActions, ProjectAction } from "./project-action"; import { TreeItem, TreeItemStatus } from "../../components/tree/tree"; import { ProjectResource } from "../../models/project"; @@@ -18,7 -18,6 +18,7 @@@ interface ProjectCreator opened: boolean; pending: boolean; ownerUuid: string; + error?: string; } export function findTreeItem(tree: Array>, itemId: string): TreeItem | undefined { @@@ -112,12 -111,13 +112,12 @@@ const initialState: ProjectState = }; - const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { - return actions.match(action, { - OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true }), + export const projectsReducer = (state: ProjectState = initialState, action: ProjectAction) => { + return projectActions.match(action, { + OPEN_PROJECT_CREATOR: ({ ownerUuid }) => updateCreator(state, { ownerUuid, opened: true, pending: false }), CLOSE_PROJECT_CREATOR: () => updateCreator(state, { opened: false }), - CREATE_PROJECT: () => updateCreator(state, { opened: false, pending: true }), - CREATE_PROJECT_SUCCESS: () => updateCreator(state, { ownerUuid: "", pending: false }), - CREATE_PROJECT_ERROR: () => updateCreator(state, { ownerUuid: "", pending: false }), + CREATE_PROJECT: () => updateCreator(state, { error: undefined }), + CREATE_PROJECT_SUCCESS: () => updateCreator(state, { opened: false, ownerUuid: "" }), REMOVE_PROJECT: () => state, PROJECTS_REQUEST: itemId => { const items = _.cloneDeep(state.items); @@@ -174,5 -174,3 +174,3 @@@ default: () => state }); }; - - export default projectsReducer; diff --combined src/store/store.ts index 956fb460,adb7ddde..01b06b95 --- a/src/store/store.ts +++ b/src/store/store.ts @@@ -7,13 -7,13 +7,14 @@@ import { routerMiddleware, routerReduce import thunkMiddleware from 'redux-thunk'; import { History } from "history"; - import projectsReducer, { ProjectState } from "./project/project-reducer"; - import sidePanelReducer, { SidePanelState } from './side-panel/side-panel-reducer'; - import authReducer, { AuthState } from "./auth/auth-reducer"; - import dataExplorerReducer, { DataExplorerState } from './data-explorer/data-explorer-reducer'; - import { projectPanelMiddleware } from '../store/project-panel/project-panel-middleware'; - import detailsPanelReducer, { DetailsPanelState } from './details-panel/details-panel-reducer'; + import { projectsReducer, ProjectState } from "./project/project-reducer"; + import { sidePanelReducer, SidePanelState } from './side-panel/side-panel-reducer'; + import { authReducer, AuthState } from "./auth/auth-reducer"; + import { dataExplorerReducer, DataExplorerState } from './data-explorer/data-explorer-reducer'; + import { projectPanelMiddleware } from './project-panel/project-panel-middleware'; + import { detailsPanelReducer, DetailsPanelState } from './details-panel/details-panel-reducer'; + import { contextMenuReducer, ContextMenuState } from './context-menu/context-menu-reducer'; +import { reducer as formReducer } from 'redux-form'; const composeEnhancers = (process.env.NODE_ENV === 'development' && @@@ -27,6 -27,7 +28,7 @@@ export interface RootState dataExplorer: DataExplorerState; sidePanel: SidePanelState; detailsPanel: DetailsPanelState; + contextMenu: ContextMenuState; } const rootReducer = combineReducers({ @@@ -36,11 -37,11 +38,12 @@@ dataExplorer: dataExplorerReducer, sidePanel: sidePanelReducer, detailsPanel: detailsPanelReducer, - contextMenu: contextMenuReducer ++ contextMenu: contextMenuReducer, + form: formReducer }); - export default function configureStore(history: History) { + export function configureStore(history: History) { const middlewares: Middleware[] = [ routerMiddleware(history), thunkMiddleware, diff --combined src/views-components/create-project-dialog/create-project-dialog.tsx index f75c4593,2f3e0b7f..43621bf7 --- a/src/views-components/create-project-dialog/create-project-dialog.tsx +++ b/src/views-components/create-project-dialog/create-project-dialog.tsx @@@ -4,22 -4,20 +4,22 @@@ import { connect } from "react-redux"; import { Dispatch } from "redux"; +import { SubmissionError } from "redux-form"; + import { RootState } from "../../store/store"; - import DialogProjectCreate from "../dialog-create/dialog-project-create"; - import actions, { createProject, getProjectList } from "../../store/project/project-action"; - import dataExplorerActions from "../../store/data-explorer/data-explorer-action"; -import { DialogProjectCreate as DialogProjectCreateComponent } from "../dialog-create/dialog-project-create"; ++import DialogProjectCreate from "../dialog-create/dialog-project-create"; + import { projectActions, createProject, getProjectList } from "../../store/project/project-action"; + import { dataExplorerActions } from "../../store/data-explorer/data-explorer-action"; import { PROJECT_PANEL_ID } from "../../views/project-panel/project-panel"; const mapStateToProps = (state: RootState) => ({ open: state.projects.creator.opened }); -const submit = (data: { name: string, description: string }) => +export const addProject = (data: { name: string, description: string }) => (dispatch: Dispatch, getState: () => RootState) => { const { ownerUuid } = getState().projects.creator; - dispatch(createProject(data)).then(() => { + return dispatch(createProject(data)).then(() => { dispatch(dataExplorerActions.REQUEST_ITEMS({ id: PROJECT_PANEL_ID })); dispatch(getProjectList(ownerUuid)); }); @@@ -27,14 -25,11 +27,14 @@@ const mapDispatchToProps = (dispatch: Dispatch) => ({ handleClose: () => { - dispatch(actions.CLOSE_PROJECT_CREATOR()); + dispatch(projectActions.CLOSE_PROJECT_CREATOR()); }, onSubmit: (data: { name: string, description: string }) => { - dispatch(submit(data)); + return dispatch(addProject(data)) + .catch((e: any) => { + throw new SubmissionError({ name: e.errors.join("").includes("UniqueViolation") ? "Project with this name already exists." : "" }); + }); } }); - export default connect(mapStateToProps, mapDispatchToProps)(DialogProjectCreate); -export const CreateProjectDialog = connect(mapStateToProps, mapDispatchToProps)(DialogProjectCreateComponent); ++export const CreateProjectDialog = connect(mapStateToProps, mapDispatchToProps)(DialogProjectCreate); diff --combined src/views-components/dialog-create/dialog-project-create.tsx index 6fb8a699,aefb8159..34c655e2 --- a/src/views-components/dialog-create/dialog-project-create.tsx +++ b/src/views-components/dialog-create/dialog-project-create.tsx @@@ -3,91 -3,16 +3,91 @@@ // SPDX-License-Identifier: AGPL-3.0 import * as React from 'react'; +import { reduxForm, Field } from 'redux-form'; +import { compose } from 'redux'; 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 DialogTitle from '@material-ui/core/DialogTitle'; -import { Button, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core'; +import { Button, StyleRulesCallback, WithStyles, withStyles, CircularProgress } from '@material-ui/core'; -import { Validator } from '../../utils/dialog-validator'; +import { NAME, DESCRIPTION } from '../../validators/create-project/create-project-validator'; -type CssRules = "button" | "lastButton" | "dialogContent" | "textField" | "dialog" | "dialogTitle"; +interface DialogProjectProps { + open: boolean; + handleClose: () => void; + onSubmit: (data: { name: string, description: string }) => void; + handleSubmit: any; + submitting: boolean; +} + +interface TextFieldProps { + label: string; + floatinglabeltext: string; + className?: string; + input?: string; + meta?: any; +} + +class DialogProjectCreate extends React.Component> { + render() { + const { classes, open, handleClose, handleSubmit, onSubmit, submitting } = this.props; + + return ( + +
+
onSubmit(data))}> + Create a project + + + + + + + + {submitting && } + +
+
+
+ ); + } + + renderTextField = ({ input, label, meta: { touched, error }, ...custom }: TextFieldProps) => ( + + ) +} + +type CssRules = "button" | "lastButton" | "formContainer" | "textField" | "dialog" | "dialogTitle" | "createProgress" | "dialogActions"; const styles: StyleRulesCallback = theme => ({ button: { @@@ -97,9 -22,7 +97,9 @@@ marginLeft: theme.spacing.unit, marginRight: "20px", }, - dialogContent: { + formContainer: { + display: "flex", + flexDirection: "column", marginTop: "20px", }, dialogTitle: { @@@ -111,18 -34,109 +111,18 @@@ dialog: { minWidth: "600px", minHeight: "320px" + }, + createProgress: { + position: "absolute", + minWidth: "20px", + right: "95px" + }, + dialogActions: { + marginBottom: "24px" } }); -interface ProjectCreateProps { - open: boolean; - handleClose: () => void; - onSubmit: (data: { name: string, description: string }) => void; -} - -interface DialogState { - name: string; - description: string; - isNameValid: boolean; - isDescriptionValid: boolean; -} - -export const DialogProjectCreate = withStyles(styles)( - class extends React.Component> { - state: DialogState = { - name: '', - description: '', - isNameValid: false, - isDescriptionValid: true - }; - - render() { - const { name, description } = this.state; - const { classes, open, handleClose } = this.props; - - return ( - -
- Create a project - - this.isNameValid(e)} - isRequired={true} - render={hasError => - this.handleProjectName(e)} - label="Project name" - error={hasError} - fullWidth/>}/> - this.isDescriptionValid(e)} - isRequired={false} - render={hasError => - this.handleDescriptionValue(e)} - label="Description - optional" - error={hasError} - fullWidth/>}/> - - - - - -
-
- ); - } - - handleSubmit = () => { - this.props.onSubmit({ - name: this.state.name, - description: this.state.description - }); - } - - handleProjectName(e: React.ChangeEvent) { - this.setState({ - name: e.target.value, - }); - } - - handleDescriptionValue(e: React.ChangeEvent) { - this.setState({ - description: e.target.value, - }); - } - - isNameValid(value: boolean | string) { - this.setState({ - isNameValid: value, - }); - } - - isDescriptionValid(value: boolean | string) { - this.setState({ - isDescriptionValid: value, - }); - } - } -); +export default compose( + reduxForm({ form: 'projectCreateDialog' }), + withStyles(styles) - )(DialogProjectCreate); ++)(DialogProjectCreate); diff --combined src/views/workbench/workbench.tsx index b2bdac80,a62b713a..b1e7cd78 --- a/src/views/workbench/workbench.tsx +++ b/src/views/workbench/workbench.tsx @@@ -7,34 -7,31 +7,31 @@@ import { StyleRulesCallback, WithStyles import Drawer from '@material-ui/core/Drawer'; import { connect, DispatchProp } from "react-redux"; import { Route, Switch, RouteComponentProps } from "react-router"; - import authActions from "../../store/auth/auth-action"; + import { authActions } from "../../store/auth/auth-action"; import { User } from "../../models/user"; import { RootState } from "../../store/store"; - import MainAppBar, { - MainAppBarActionProps, - MainAppBarMenuItem - } from '../../views-components/main-app-bar/main-app-bar'; + import { MainAppBar, MainAppBarActionProps, MainAppBarMenuItem } from '../../views-components/main-app-bar/main-app-bar'; import { Breadcrumb } from '../../components/breadcrumbs/breadcrumbs'; import { push } from 'react-router-redux'; - import ProjectTree from '../../views-components/project-tree/project-tree'; + import { ProjectTree } from '../../views-components/project-tree/project-tree'; import { TreeItem } from "../../components/tree/tree"; import { getTreePath } from '../../store/project/project-reducer'; - import sidePanelActions from '../../store/side-panel/side-panel-action'; - import SidePanel, { SidePanelItem } from '../../components/side-panel/side-panel'; + import { sidePanelActions } from '../../store/side-panel/side-panel-action'; + import { SidePanel, SidePanelItem } from '../../components/side-panel/side-panel'; import { ItemMode, setProjectItem } from "../../store/navigation/navigation-action"; - import projectActions from "../../store/project/project-action"; - import ProjectPanel from "../project-panel/project-panel"; - import DetailsPanel from '../../views-components/details-panel/details-panel'; + import { projectActions } from "../../store/project/project-action"; + import { ProjectPanel } from "../project-panel/project-panel"; + import { DetailsPanel } from '../../views-components/details-panel/details-panel'; import { ArvadosTheme } from '../../common/custom-theme'; - import ContextMenu, { ContextMenuAction } from '../../components/context-menu/context-menu'; - import { mockAnchorFromMouseEvent } from '../../components/popover/helpers'; - import DialogProjectCreate from "../../views-components/create-project-dialog/create-project-dialog"; + import { CreateProjectDialog } from "../../views-components/create-project-dialog/create-project-dialog"; import { authService } from '../../services/services'; - import detailsPanelActions, { loadDetails } from "../../store/details-panel/details-panel-action"; + import { detailsPanelActions, loadDetails } from "../../store/details-panel/details-panel-action"; + import { contextMenuActions } from "../../store/context-menu/context-menu-actions"; import { SidePanelIdentifiers } from '../../store/side-panel/side-panel-reducer'; import { ProjectResource } from '../../models/project'; import { ResourceKind } from '../../models/resource'; + import { ContextMenu, ContextMenuKind } from "../../views-components/context-menu/context-menu"; const drawerWidth = 240; const appBarHeight = 100; @@@ -98,10 -95,6 +95,6 @@@ interface NavMenuItem extends MainAppBa } interface WorkbenchState { - contextMenu: { - anchorEl?: HTMLElement; - itemUuid?: string; - }; anchorEl: any; searchText: string; menuItems: { @@@ -111,207 -104,157 +104,157 @@@ }; } - - class Workbench extends React.Component { - state = { - contextMenu: { - anchorEl: undefined, - itemUuid: undefined - }, - isCreationDialogOpen: false, - anchorEl: null, - searchText: "", - breadcrumbs: [], - menuItems: { - accountMenu: [ - { - label: "Logout", - action: () => this.props.dispatch(authActions.LOGOUT()) - }, - { - label: "My account", - action: () => this.props.dispatch(push("/my-account")) - } - ], - helpMenu: [ - { - label: "Help", - action: () => this.props.dispatch(push("/help")) + export const Workbench = withStyles(styles)( + connect( + (state: RootState) => ({ + projects: state.projects.items, + currentProjectId: state.projects.currentItemId, + user: state.auth.user, + sidePanelItems: state.sidePanel + }) + )( + class extends React.Component { + state = { + isCreationDialogOpen: false, + anchorEl: null, + searchText: "", + breadcrumbs: [], + menuItems: { + accountMenu: [ + { + label: "Logout", + action: () => this.props.dispatch(authActions.LOGOUT()) + }, + { + label: "My account", + action: () => this.props.dispatch(push("/my-account")) + } + ], + helpMenu: [ + { + label: "Help", + action: () => this.props.dispatch(push("/help")) + } + ], + anonymousMenu: [ + { + label: "Sign in", + action: () => this.props.dispatch(authActions.LOGIN()) + } + ] } - ], - anonymousMenu: [ - { - label: "Sign in", - action: () => this.props.dispatch(authActions.LOGIN()) - } - ] - } - }; + }; - mainAppBarActions: MainAppBarActionProps = { - onBreadcrumbClick: ({ itemId }: NavBreadcrumb) => { - this.props.dispatch(setProjectItem(itemId, ItemMode.BOTH)); - this.props.dispatch(loadDetails(itemId, ResourceKind.Project)); - }, - onSearch: searchText => { - this.setState({ searchText }); - this.props.dispatch(push(`/search?q=${searchText}`)); - }, - onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action(), - onDetailsPanelToggle: () => { - this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL()); - }, - onContextMenu: (event: React.MouseEvent, breadcrumb: NavBreadcrumb) => { - this.openContextMenu(event, breadcrumb.itemId); - } - }; + render() { + const path = getTreePath(this.props.projects, this.props.currentProjectId); + const breadcrumbs = path.map(item => ({ + label: item.data.name, + itemId: item.data.uuid, + status: item.status + })); - toggleSidePanelOpen = (itemId: string) => { - this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_OPEN(itemId)); - } + const { classes, user } = this.props; + return ( +
+
+ +
+ {user && + +
+ this.openContextMenu(event, authService.getUuid() || "", ContextMenuKind.RootProject)}> + this.props.dispatch(setProjectItem(itemId, ItemMode.OPEN))} + onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid, ContextMenuKind.Project)} + toggleActive={itemId => { + this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE)); + this.props.dispatch(loadDetails(itemId, ResourceKind.Project)); + this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(SidePanelIdentifiers.Projects)); + }} /> + + } +
+
+ + + +
- { user && } ++ {user && } +
+ + +
+ ); + } - toggleSidePanelActive = (itemId: string) => { - this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(itemId)); - this.props.dispatch(projectActions.RESET_PROJECT_TREE_ACTIVITY(itemId)); - this.props.dispatch(push("/")); - } + renderProjectPanel = (props: RouteComponentProps<{ id: string }>) => this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE))} + onContextMenu={(event, item) => this.openContextMenu(event, item.uuid, ContextMenuKind.Project)} + onDialogOpen={this.handleCreationDialogOpen} + onItemClick={item => { + this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); + }} + onItemDoubleClick={item => { + this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); + this.props.dispatch(loadDetails(item.uuid, ResourceKind.Project)); + }} + {...props} /> - handleCreationDialogOpen = (itemUuid: string) => { - this.closeContextMenu(); - this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid })); - } + mainAppBarActions: MainAppBarActionProps = { + onBreadcrumbClick: ({ itemId }: NavBreadcrumb) => { + this.props.dispatch(setProjectItem(itemId, ItemMode.BOTH)); + this.props.dispatch(loadDetails(itemId, ResourceKind.Project)); + }, + onSearch: searchText => { + this.setState({ searchText }); + this.props.dispatch(push(`/search?q=${searchText}`)); + }, + onMenuItemClick: (menuItem: NavMenuItem) => menuItem.action(), + onDetailsPanelToggle: () => { + this.props.dispatch(detailsPanelActions.TOGGLE_DETAILS_PANEL()); + }, + onContextMenu: (event: React.MouseEvent, breadcrumb: NavBreadcrumb) => { + this.openContextMenu(event, breadcrumb.itemId, ContextMenuKind.Project); + } + }; + toggleSidePanelOpen = (itemId: string) => { + this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_OPEN(itemId)); + } - openContextMenu = (event: React.MouseEvent, itemUuid: string) => { - event.preventDefault(); - this.setState({ - contextMenu: { - anchorEl: mockAnchorFromMouseEvent(event), - itemUuid + toggleSidePanelActive = (itemId: string) => { + this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(itemId)); + this.props.dispatch(projectActions.RESET_PROJECT_TREE_ACTIVITY(itemId)); + this.props.dispatch(push("/")); } - }); - } - closeContextMenu = () => { - this.setState({ contextMenu: {} }); - } + handleCreationDialogOpen = (itemUuid: string) => { + this.props.dispatch(projectActions.OPEN_PROJECT_CREATOR({ ownerUuid: itemUuid })); + } - openCreateDialog = (item: ContextMenuAction) => { - const { itemUuid } = this.state.contextMenu; - if (item.openCreateDialog && itemUuid) { - this.handleCreationDialogOpen(itemUuid); + openContextMenu = (event: React.MouseEvent, itemUuid: string, kind: ContextMenuKind) => { + event.preventDefault(); + this.props.dispatch( + contextMenuActions.OPEN_CONTEXT_MENU({ + position: { x: event.clientX, y: event.clientY }, + resource: { uuid: itemUuid, kind } + }) + ); + } } - } - - render() { - const path = getTreePath(this.props.projects, this.props.currentProjectId); - const breadcrumbs = path.map(item => ({ - label: item.data.name, - itemId: item.data.uuid, - status: item.status - })); - - const { classes, user } = this.props; - return ( -
-
- -
- {user && - -
- this.openContextMenu(event, authService.getUuid() || "")}> - this.props.dispatch(setProjectItem(itemId, ItemMode.OPEN))} - onContextMenu={(event, item) => this.openContextMenu(event, item.data.uuid)} - toggleActive={itemId => { - this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE)); - this.props.dispatch(loadDetails(itemId, ResourceKind.Project)); - this.props.dispatch(sidePanelActions.TOGGLE_SIDE_PANEL_ITEM_ACTIVE(SidePanelIdentifiers.Projects)); - }} /> - - } -
-
- - - -
- -
- - -
- ); - } - - renderProjectPanel = (props: RouteComponentProps<{ id: string }>) => this.props.dispatch(setProjectItem(itemId, ItemMode.ACTIVE))} - onContextMenu={(event, item) => this.openContextMenu(event, item.uuid)} - onDialogOpen={this.handleCreationDialogOpen} - onItemClick={item => { - this.props.dispatch(loadDetails(item.uuid, item.kind as ResourceKind)); - }} - onItemDoubleClick={item => { - this.props.dispatch(setProjectItem(item.uuid, ItemMode.ACTIVE)); - this.props.dispatch(loadDetails(item.uuid, ResourceKind.Project)); - }} - {...props} /> - } - - const contextMenuActions = [[{ - icon: "fas fa-plus fa-fw", - name: "New project", - openCreateDialog: true - }, { - icon: "fas fa-users fa-fw", - name: "Share" - }, { - icon: "fas fa-sign-out-alt fa-fw", - name: "Move to" - }, { - icon: "fas fa-star fa-fw", - name: "Add to favourite" - }, { - icon: "fas fa-edit fa-fw", - name: "Rename" - }, { - icon: "fas fa-copy fa-fw", - name: "Make a copy" - }, { - icon: "fas fa-download fa-fw", - name: "Download" - }], [{ - icon: "fas fa-trash-alt fa-fw", - name: "Remove" - } - ]]; - - export default connect( - (state: RootState) => ({ - projects: state.projects.items, - currentProjectId: state.projects.currentItemId, - user: state.auth.user, - sidePanelItems: state.sidePanel - }) - )( - withStyles(styles)(Workbench) + ) ); diff --combined yarn.lock index 0034169d,6960aaf6..3557ebef --- a/yarn.lock +++ b/yarn.lock @@@ -3,29 -3,29 +3,29 @@@ "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz#bd71d9b192af978df915829d39d4094456439a0c" + version "7.0.0-beta.54" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.54.tgz#0024f96fdf7028a21d68e273afd4e953214a1ead" dependencies: - "@babel/highlight" "7.0.0-beta.51" + "@babel/highlight" "7.0.0-beta.54" - "@babel/highlight@7.0.0-beta.51": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.51.tgz#e8844ae25a1595ccfd42b89623b4376ca06d225d" + "@babel/highlight@7.0.0-beta.54": + version "7.0.0-beta.54" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.54.tgz#155d507358329b8e7068970017c3fd74a9b08584" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" "@babel/runtime@^7.0.0-beta.42": - version "7.0.0-beta.51" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.51.tgz#48b8ed18307034c6620f643514650ca2ccc0165a" + version "7.0.0-beta.54" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.54.tgz#39ebb42723fe7ca4b3e1b00e967e80138d47cadf" dependencies: core-js "^2.5.7" - regenerator-runtime "^0.11.1" + regenerator-runtime "^0.12.0" - "@material-ui/core@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-1.2.1.tgz#f8c73da10b875762b37be7167ec2ac79b027499f" + "@material-ui/core@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-1.4.0.tgz#e535fef84576b096c46e1fb7d6c4c61895155fd3" dependencies: "@babel/runtime" "^7.0.0-beta.42" "@types/jss" "^9.5.3" @@@ -37,6 -37,7 +37,7 @@@ deepmerge "^2.0.1" dom-helpers "^3.2.1" hoist-non-react-statics "^2.5.0" + is-plain-object "^2.0.4" jss "^9.3.3" jss-camel-case "^6.0.0" jss-default-unit "^8.0.2" @@@ -46,12 -47,12 +47,12 @@@ jss-vendor-prefixer "^7.0.0" keycode "^2.1.9" normalize-scroll-left "^0.1.2" + popper.js "^1.0.0" prop-types "^15.6.0" react-event-listener "^0.6.0" react-jss "^8.1.0" - react-popper "^0.10.0" react-transition-group "^2.2.1" - recompose "^0.26.0 || ^0.27.0" + recompose "^0.27.0" scroll "^2.0.3" warning "^4.0.1" @@@ -62,12 -63,12 +63,12 @@@ recompose "^0.26.0 || ^0.27.0" "@types/cheerio@*": - version "0.22.7" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.7.tgz#4a92eafedfb2b9f4437d3a4410006d81114c66ce" + version "0.22.8" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.8.tgz#5702f74f78b73e13f1eb1bd435c2c9de61a250d4" "@types/classnames@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.4.tgz#d3ee9ebf714aa34006707b8f4a58fd46b642305a" + version "2.2.5" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.5.tgz#62945b24b48dc02fb32e89252bde3daf942c4235" "@types/enzyme-adapter-react-16@1.0.2": version "1.0.2" @@@ -75,9 -76,9 +76,9 @@@ dependencies: "@types/enzyme" "*" - "@types/enzyme@*", "@types/enzyme@3.1.10": - version "3.1.10" - resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.10.tgz#28108a9864e65699751469551a803a35d2e26160" + "@types/enzyme@*", "@types/enzyme@3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.1.12.tgz#293bb07c1ef5932d37add3879e72e0f5bc614f3c" dependencies: "@types/cheerio" "*" "@types/react" "*" @@@ -86,9 -87,9 +87,9 @@@ version "4.6.2" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.6.2.tgz#12cfaba693ba20f114ed5765467ff25fdf67ddb0" - "@types/jest@23.1.0": - version "23.1.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.1.0.tgz#8054dd838ba23dc331794d26456b86c7e50bf0f6" + "@types/jest@23.3.0": + version "23.3.0" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.0.tgz#5dd70033b616a6228042244ebd992f6426808810" "@types/jss@^9.5.3": version "9.5.3" @@@ -97,13 -98,13 +98,13 @@@ csstype "^2.0.0" indefinite-observable "^1.0.1" - "@types/lodash@4.14.109": - version "4.14.109" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.109.tgz#b1c4442239730bf35cabaf493c772b18c045886d" + "@types/lodash@4.14.112": + version "4.14.112" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.112.tgz#4a8d8e5716b97a1ac01fe1931ad1e4cba719de5a" - "@types/node@*", "@types/node@10.3.3": - version "10.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.3.3.tgz#8798d9e39af2fa604f715ee6a6b19796528e46c3" + "@types/node@*", "@types/node@10.5.2": + version "10.5.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707" "@types/react-dom@16.0.6": version "16.0.6" @@@ -112,9 -113,9 +113,9 @@@ "@types/node" "*" "@types/react" "*" - "@types/react-redux@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.2.tgz#10069b53db8e0920fd8656e068dcf10c53c9ad2a" + "@types/react-redux@6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-6.0.4.tgz#c1cfce0a0bd88983c75dbf393576f8dc59181586" dependencies: "@types/react" "*" redux "^4.0.0" @@@ -136,9 -137,9 +137,9 @@@ "@types/react-router" "*" redux ">= 3.7.2" - "@types/react-router@*", "@types/react-router@4.0.26": - version "4.0.26" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.0.26.tgz#4489c873642baa633014294a6d0a290001ba9860" + "@types/react-router@*", "@types/react-router@4.0.29": + version "4.0.29" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.0.29.tgz#1a906dd99abf21297a5b7cf003d1fd36e7a92069" dependencies: "@types/history" "*" "@types/react" "*" @@@ -149,9 -150,9 +150,9 @@@ dependencies: "@types/react" "*" - "@types/react@*", "@types/react@16.3": - version "16.3.18" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.3.18.tgz#bf195aed4d77dc86f06e4c9bb760214a3b822b8d" + "@types/react@*", "@types/react@16.4": + version "16.4.6" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.4.6.tgz#5024957c6bcef4f02823accf5974faba2e54fada" dependencies: csstype "^2.2.0" @@@ -162,13 -163,6 +163,13 @@@ "@types/react" "*" redux "^3.6.0" +"@types/redux-form@^7.4.1": + version "7.4.1" + resolved "https://registry.yarnpkg.com/@types/redux-form/-/redux-form-7.4.1.tgz#df84bbda5f06e4d517210797c3cfdc573c3bda36" + dependencies: + "@types/react" "*" + redux "^3.6.0 || ^4.0.0" + abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@@ -226,8 -220,8 +227,8 @@@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5 json-schema-traverse "^0.3.0" ajv@^6.1.0: - version "6.5.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.1.tgz#88ebc1263c7133937d108b80c5572e64e1d9322d" + version "6.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@@ -659,8 -653,8 +660,8 @@@ babel-jest@^22.1.0, babel-jest@^22.4.4 babel-preset-jest "^22.4.4" babel-loader@^7.1.2: - version "7.1.4" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.4.tgz#e3463938bd4e6d55d1c174c5485d406a188ed015" + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@@ -1040,8 -1034,8 +1041,8 @@@ babel-preset-jest@^22.0.1, babel-preset babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-react-app@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.1.tgz#d3f06a79742f0e89d7afcb72e282d9809c850920" + version "3.1.2" + resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.2.tgz#49ba3681b917c4e5c73a5249d3ef4c48fae064e2" dependencies: babel-plugin-dynamic-import-node "1.1.0" babel-plugin-syntax-dynamic-import "6.18.0" @@@ -1153,8 -1147,8 +1154,8 @@@ batch@0.6.1 resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" @@@ -1259,8 -1253,8 +1260,8 @@@ browser-process-hrtime@^0.1.2 resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: resolve "1.1.7" @@@ -1284,12 -1278,13 +1285,13 @@@ browserify-cipher@^1.0.0 evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" @@@ -1444,12 -1439,12 +1446,12 @@@ caniuse-api@^1.5.2 lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000856" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000856.tgz#fbebb99abe15a5654fc7747ebb5315bdfde3358f" + version "1.0.30000867" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000867.tgz#b55a6ecfac3107988940c9c7dfe1866315312c97" caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792: - version "1.0.30000856" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000856.tgz#ecc16978135a6f219b138991eb62009d25ee8daa" + version "1.0.30000865" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz#70026616e8afe6e1442f8bb4e1092987d81a2f25" capture-exit@^1.2.0: version "1.2.0" @@@ -1529,8 -1524,8 +1531,8 @@@ chokidar@^1.6.0, chokidar@^1.7.0 fsevents "^1.0.0" chokidar@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@@ -1539,12 -1534,13 +1541,13 @@@ inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^4.0.0" + lodash.debounce "^4.0.8" normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" - upath "^1.0.0" + upath "^1.0.5" optionalDependencies: - fsevents "^1.1.2" + fsevents "^1.2.2" chownr@^1.0.1: version "1.0.1" @@@ -1699,9 -1695,9 +1702,9 @@@ combined-stream@1.0.6, combined-stream@ dependencies: delayed-stream "~1.0.0" - commander@2.15.x, commander@^2.12.1, commander@~2.15.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" + commander@2.16.x, commander@^2.12.1, commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" commander@~2.13.0: version "2.13.0" @@@ -1719,22 -1715,22 +1722,22 @@@ component-emitter@^1.2.1 version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - compressible@~2.0.13: + compressible@~2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" dependencies: mime-db ">= 1.34.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.14" debug "2.6.9" on-headers "~1.0.1" - safe-buffer "5.1.1" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: @@@ -2015,8 -2011,8 +2018,8 @@@ csso@~2.3.1 source-map "^0.5.3" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" "cssstyle@>= 0.3.1 < 0.4.0": version "0.3.1" @@@ -2024,11 -2020,7 +2027,7 @@@ dependencies: cssom "0.3.x" - csstype@^2.0.0, csstype@^2.5.2: - version "2.5.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.3.tgz#2504152e6e1cc59b32098b7f5d6a63f16294c1f7" - - csstype@^2.2.0: + csstype@^2.0.0, csstype@^2.2.0, csstype@^2.5.2: version "2.5.5" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.5.tgz#4125484a3d42189a863943f23b9e4b80fedfa106" @@@ -2369,8 -2361,8 +2368,8 @@@ ee-first@1.1.1 resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.48" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz#d3b0d8593814044e092ece2108fc3ac9aea4b900" + version "1.3.52" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz#d2d9f1270ba4a3b967b831c40ef71fb4d9ab5ce0" elliptic@^6.0.0: version "6.4.0" @@@ -2430,11 -2422,10 +2429,10 @@@ enzyme-adapter-react-16@^1.1.1 react-test-renderer "^16.0.0-0" enzyme-adapter-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.3.0.tgz#d6c85756826c257a8544d362cc7a67e97ea698c7" + version "1.4.0" + resolved "https://registry.yarnpkg.com/enzyme-adapter-utils/-/enzyme-adapter-utils-1.4.0.tgz#c403b81e8eb9953658569e539780964bdc98de62" dependencies: - lodash "^4.17.4" - object.assign "^4.0.4" + object.assign "^4.1.0" prop-types "^15.6.0" enzyme@^3.3.0: @@@ -2465,8 -2456,8 +2463,8 @@@ errno@^0.1.3, errno@~0.1.7 prr "~1.0.1" error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" @@@ -2496,10 -2487,6 +2494,10 @@@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5 es6-symbol "~3.1.1" next-tick "1" +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@@ -2558,8 -2545,8 +2556,8 @@@ escape-string-regexp@1.0.5, escape-stri resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.10.0.tgz#f647395de22519fbd0d928ffcf1d17e0dec2603e" + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@@ -2586,8 -2573,8 +2584,8 @@@ esprima@^3.1.3 resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esrecurse@^4.1.0: version "4.2.1" @@@ -2636,10 -2623,10 +2634,10 @@@ evp_bytestokey@^1.0.0, evp_bytestokey@^ safe-buffer "^5.1.1" exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" dependencies: - merge "^1.1.3" + merge "^1.2.0" execa@^0.7.0: version "0.7.0" @@@ -2939,8 -2926,8 +2937,8 @@@ flush-write-stream@^1.0.0 readable-stream "^2.0.4" follow-redirects@^1.0.0, follow-redirects@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77" + version "1.5.1" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.1.tgz#67a8f14f5a1f67f962c2c46469c79eaec0a90291" dependencies: debug "^3.1.0" @@@ -3049,7 -3036,7 +3047,7 @@@ fs.realpath@^1.0.0 version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - fsevents@^1.0.0, fsevents@^1.1.2, fsevents@^1.1.3, fsevents@^1.2.3: + fsevents@^1.0.0, fsevents@^1.1.3, fsevents@^1.2.2, fsevents@^1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: @@@ -3082,8 -3069,8 +3080,8 @@@ gauge@~2.7.3 wide-align "^1.1.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" get-stdin@^4.0.1: version "4.0.1" @@@ -3318,11 -3305,11 +3316,11 @@@ hash-base@^3.0.0 safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.4.tgz#8b50e1f35d51bd01e5ed9ece4dbe3549ccfa0a3c" + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" he@1.1.x: version "1.1.1" @@@ -3347,13 -3334,9 +3345,13 @@@ hmac-drbg@^1.0.0 minimalistic-crypto-utils "^1.0.1" hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: - version "2.5.4" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.4.tgz#fc3b1ac05d2ae3abedec84eba846511b0d4fcc4f" + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" +hoist-non-react-statics@^2.5.4: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@@ -3368,8 -3351,8 +3366,8 @@@ homedir-polyfill@^1.0.1 parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" hpack.js@^2.1.6: version "2.1.6" @@@ -3395,16 -3378,16 +3393,16 @@@ html-entities@^1.2.0 resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.2.3: - version "3.5.16" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.16.tgz#39f5aabaf78bdfc057fe67334226efd7f3851175" + version "3.5.19" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.15.x" + commander "2.16.x" he "1.1.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.3.x" + uglify-js "3.4.x" html-webpack-plugin@2.29.0: version "2.29.0" @@@ -3679,8 -3662,8 +3677,8 @@@ is-builtin-module@^1.0.0 builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" is-ci@^1.0.10: version "1.1.0" @@@ -3833,12 -3816,6 +3831,6 @@@ is-obj@^1.0.0 version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@@ -4304,13 -4281,17 +4296,17 @@@ jest@22.4.2 jest-cli "^22.4.2" js-base64@^2.1.9: - version "2.4.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.5.tgz#e293cd3c7c82f070d700fc7a1ca0a2e69f101f92" + version "2.4.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + "js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + js-yaml@^3.4.3, js-yaml@^3.7.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" @@@ -4501,8 -4482,8 +4497,8 @@@ jss-vendor-prefixer@^7.0.0 css-vendor "^0.3.8" jss@^9.3.3, jss@^9.7.0: - version "9.8.3" - resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.3.tgz#399da571c4b2c8f4cf418ca7e8627e44fc287fc8" + version "9.8.7" + resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.7.tgz#ed9763fc0f2f0260fc8260dac657af61e622ce05" dependencies: is-in-browser "^1.1.3" symbol-observable "^1.1.0" @@@ -4620,7 -4601,7 +4616,7 @@@ locate-path@^2.0.0 p-locate "^2.0.0" path-exists "^3.0.0" -lodash-es@^4.17.5, lodash-es@^4.2.1: +lodash-es@^4.17.10, lodash-es@^4.17.5, lodash-es@^4.2.1: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.10.tgz#62cd7104cdf5dd87f235a837f0ede0e8e5117e05" @@@ -4632,6 -4613,10 +4628,10 @@@ lodash.camelcase@^4.3.0 version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@@ -4694,10 -4679,10 +4694,10 @@@ longest@^1.0.1 resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0: version "1.6.0" @@@ -4804,7 -4789,7 +4804,7 @@@ merge-stream@^1.0.1 dependencies: readable-stream "^2.0.1" - merge@^1.1.3: + merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@@ -4855,19 -4840,15 +4855,15 @@@ miller-rabin@^4.0.0 bn.js "^4.0.0" brorand "^1.0.1" - "mime-db@>= 1.34.0 < 2": - version "1.34.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.34.0.tgz#452d0ecff5c30346a6dc1e64b1eaee0d3719ff9a" - - mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + "mime-db@>= 1.34.0 < 2", mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" dependencies: - mime-db "~1.33.0" + mime-db "~1.35.0" mime@1.4.1: version "1.4.1" @@@ -4887,7 -4868,7 +4883,7 @@@ min-document@^2.19.0 dependencies: dom-walk "^0.1.0" - minimalistic-assert@^1.0.0: + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@@ -4995,15 -4976,14 +4991,14 @@@ nan@^2.9.2 resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@@ -5024,7 -5004,7 +5019,7 @@@ nearley@^2.7.10 randexp "0.4.6" semver "^5.4.1" - needle@^2.2.0: + needle@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" dependencies: @@@ -5103,16 -5083,16 +5098,16 @@@ node-notifier@^5.2.1 which "^1.3.0" node-pre-gyp@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" - needle "^2.2.0" + needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" tar "^4" @@@ -5204,8 -5184,8 +5199,8 @@@ number-is-nan@^1.0.0 resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" nwsapi@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.3.tgz#3f4010d6c943f34018d3dfb5f2fbc0de90476959" + version "2.0.6" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.6.tgz#5fb7f5b828b97fe1de47eb2a6f8703036b6cb71a" oauth-sign@~0.8.2: version "0.8.2" @@@ -5232,8 -5212,8 +5227,8 @@@ object-is@^1.0.1 resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" object-keys@^1.0.11, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" object-visit@^1.0.0: version "1.0.1" @@@ -5581,7 -5561,7 +5576,7 @@@ pn@^1.1.0 version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - popper.js@^1.14.1: + popper.js@^1.0.0: version "1.14.3" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.14.3.tgz#1438f98d046acf7b4d78cd502bf418ac64d4f095" @@@ -5873,8 -5853,8 +5868,8 @@@ postcss@^5.0.10, postcss@^5.0.11, postc supports-color "^3.2.3" postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13: - version "6.0.22" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: chalk "^2.4.1" source-map "^0.6.1" @@@ -5942,11 -5922,10 +5937,10 @@@ promise@^7.1.1 dependencies: asap "~2.0.3" - prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1: - version "15.6.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" + prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: + version "15.6.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" dependencies: - fbjs "^0.8.16" loose-envify "^1.3.1" object-assign "^4.1.1" @@@ -6094,7 -6073,7 +6088,7 @@@ raw-body@2.3.2 iconv-lite "0.4.19" unpipe "1.0.0" - rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: @@@ -6152,8 -6131,8 +6146,8 @@@ react-is@^16.4.1 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.4.1.tgz#d624c4650d2c65dbd52c72622bbf389435d9776e" react-jss@^8.1.0: - version "8.5.1" - resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.5.1.tgz#f97c72f6a1c86aa6408932a2a2836ce40c0ab9fc" + version "8.6.1" + resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.6.1.tgz#a06e2e1d2c4d91b4d11befda865e6c07fbd75252" dependencies: hoist-non-react-statics "^2.5.0" jss "^9.7.0" @@@ -6165,13 -6144,6 +6159,6 @@@ react-lifecycles-compat@^3.0.2, react-l version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - react-popper@^0.10.0: - version "0.10.4" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.10.4.tgz#af2a415ea22291edd504678d7afda8a6ee3295aa" - dependencies: - popper.js "^1.14.1" - prop-types "^15.6.1" - react-reconciler@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.7.0.tgz#9614894103e5f138deeeb5eabaf3ee80eb1d026d" @@@ -6277,12 -6249,13 +6264,13 @@@ react-test-renderer@^16.0.0-0 react-is "^16.4.1" react-transition-group@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.3.1.tgz#31d611b33e143a5e0f2d94c348e026a0f3b474b6" + version "2.4.0" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.4.0.tgz#1d9391fabfd82e016f26fabd1eec329dbd922b5a" dependencies: dom-helpers "^3.3.1" loose-envify "^1.3.1" - prop-types "^15.6.1" + prop-types "^15.6.2" + react-lifecycles-compat "^3.0.4" react@16.4.1: version "16.4.1" @@@ -6354,12 -6327,12 +6342,12 @@@ readdirp@^2.0.0 set-immediate-shim "^1.0.1" realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + version "1.0.1" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.1.tgz#07f40a0cce8f8261e2e8b7ebebf5c95965d7b633" dependencies: util.promisify "^1.0.0" - "recompose@^0.26.0 || ^0.27.0": + "recompose@^0.26.0 || ^0.27.0", recompose@^0.27.0: version "0.27.1" resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.27.1.tgz#1a49e931f183634516633bbb4f4edbfd3f38a7ba" dependencies: @@@ -6398,8 -6371,8 +6386,8 @@@ reduce-function-call@^1.0.1 balanced-match "^0.4.2" redux-devtools-instrument@^1.0.1: - version "1.8.3" - resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.8.3.tgz#c510d67ab4e5e4525acd6e410c25ab46b85aca7c" + version "1.9.0" + resolved "https://registry.yarnpkg.com/redux-devtools-instrument/-/redux-devtools-instrument-1.9.0.tgz#2faed9ac3292c783284b21843edfaa0567764a0c" dependencies: lodash "^4.2.0" symbol-observable "^1.0.2" @@@ -6412,24 -6385,11 +6400,24 @@@ redux-devtools@3.4.1 prop-types "^15.5.7" redux-devtools-instrument "^1.0.1" +redux-form@^7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/redux-form/-/redux-form-7.4.2.tgz#d6061088fb682eb9fc5fb9749bd8b102f03154b0" + dependencies: + es6-error "^4.1.1" + hoist-non-react-statics "^2.5.4" + invariant "^2.2.4" + is-promise "^2.1.0" + lodash "^4.17.10" + lodash-es "^4.17.10" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + redux-thunk@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" -redux@4.0.0, "redux@>= 3.7.2", redux@^4.0.0: +redux@4.0.0, "redux@>= 3.7.2", "redux@^3.6.0 || ^4.0.0", redux@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.0.tgz#aa698a92b729315d22b34a0553d7e6533555cc03" dependencies: @@@ -6449,10 -6409,14 +6437,14 @@@ regenerate@^1.2.1 version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: + regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + regenerator-runtime@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.0.tgz#8052ac952d85b10f3425192cd0c53f45cf65c6cb" + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@@ -6636,8 -6600,8 +6628,8 @@@ resolve@1.6.0 path-parse "^1.0.5" resolve@^1.1.7, resolve@^1.3.2: - version "1.8.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.0.tgz#a7f2ac27b78480ecc09c83782741d9f26e4f0c3e" + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" @@@ -6708,7 -6672,7 +6700,7 @@@ safe-buffer@5.1.1 version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" - safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@@ -7418,8 -7382,8 +7410,8 @@@ toposort@^1.0.0 resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" tough-cookie@>=2.3.3, tough-cookie@^2.3.3: - version "2.4.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.2.tgz#aa9133154518b494efab98a58247bfc38818c00c" + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" dependencies: psl "^1.1.24" punycode "^1.4.1" @@@ -7476,8 -7440,8 +7468,8 @@@ tsconfig-paths-webpack-plugin@^2.0.0 tsconfig-paths "^3.1.1" tsconfig-paths@^3.1.1: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.4.0.tgz#d19fe80c5b245f99d17363471971eab54e65a8a7" + version "3.4.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.4.2.tgz#4640bffaeee3fc0ab986607edae203859156a8c3" dependencies: deepmerge "^2.0.1" minimist "^1.2.0" @@@ -7485,8 -7449,8 +7477,8 @@@ strip-json-comments "^2.0.1" tslib@^1.8.0, tslib@^1.8.1: - version "1.9.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.2.tgz#8be0cc9a1f6dc7727c38deb16c2ebd1a2892988e" + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" tslint-config-prettier@^1.10.0: version "1.13.0" @@@ -7499,8 -7463,8 +7491,8 @@@ tslint-react@^3.2.0 tsutils "^2.13.1" tslint@^5.7.0: - version "5.10.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.10.0.tgz#11e26bccb88afa02dd0d9956cae3d4540b5f54c3" + version "5.11.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@@ -7513,11 -7477,11 +7505,11 @@@ resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.12.1" + tsutils "^2.27.2" - tsutils@^2.12.1, tsutils@^2.13.1: - version "2.27.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.27.1.tgz#ab0276ac23664f36ce8fd4414daec4aebf4373ee" + tsutils@^2.13.1, tsutils@^2.27.2: + version "2.28.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.28.0.tgz#6bd71e160828f9d019b6f4e844742228f85169a1" dependencies: tslib "^1.8.1" @@@ -7567,11 -7531,11 +7559,11 @@@ uglify-es@^3.3.4 commander "~2.13.0" source-map "~0.6.1" - uglify-js@3.3.x: - version "3.3.28" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.28.tgz#0efb9a13850e11303361c1051f64d2ec68d9be06" + uglify-js@3.4.x, uglify-js@^3.0.13: + version "3.4.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.5.tgz#650889c0766cf0f6fd5346cea09cd212f544be69" dependencies: - commander "~2.15.0" + commander "~2.16.0" source-map "~0.6.1" uglify-js@^2.6, uglify-js@^2.8.29: @@@ -7583,13 -7547,6 +7575,6 @@@ optionalDependencies: uglify-to-browserify "~1.0.0" - uglify-js@^3.0.13: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.0.tgz#796762282b5b5f0eafe7d5c8c708d1d7bd5ba11d" - dependencies: - commander "~2.15.0" - source-map "~0.6.1" - uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@@ -7603,8 -7560,8 +7588,8 @@@ uglifyjs-webpack-plugin@^0.4.6 webpack-sources "^1.0.1" uglifyjs-webpack-plugin@^1.1.8: - version "1.2.5" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" + version "1.2.7" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@@ -7659,8 -7616,8 +7644,8 @@@ unique-string@^1.0.0 crypto-random-string "^1.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@@ -7677,7 -7634,7 +7662,7 @@@ unzip-response@^2.0.1 version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - upath@^1.0.0: + upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" @@@ -7743,10 -7700,8 +7728,8 @@@ url@^0.11.0 querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" util-deprecate@~1.0.1: version "1.0.2" @@@ -7788,8 -7743,8 +7771,8 @@@ uuid@^2.0.2 resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" validate-npm-package-license@^3.0.1: version "3.0.3"