From 1316aa5f014d631b877016bc5cd274be6bef8cc8 Mon Sep 17 00:00:00 2001 From: Edoardo Sabadelli Date: Mon, 15 Apr 2019 13:55:42 +0200 Subject: [PATCH] fix(filters): wrap badges + clear/disable filters on dashboard switch and edit mode (#281) * fix(filters): dimension items selection (#278) Always set the filter items by replacing the existing one. The logic depends on the component where the selection is happening (via checkboxes, selects, ItemSelector...), the components know how to make the list of selected items. (cherry picked from commit 8344c4ae4cc9fb5d9727fe4a088ea06ce071f946) * fix(filters): wrap badges + clear/disable filters on dashboard switch and edit mode (#280) Remove filters when switching dashboard Filters are not removed when the same dashboard is (re)selected. Also disable filters when switching to edit mode and enable them again when returning to view mode. Wrap filter badges instead of text in them. (cherry picked from commit ad3e3c3c3ad14bcf36c86ebb5063c6346cbc63c6) --- package.json | 4 +- src/actions/dashboards.js | 19 ++ src/actions/editItemFilters.js | 5 + src/actions/itemFilters.js | 5 + src/components/FilterBar/FilterBadge.js | 3 +- src/components/FilterBar/FilterBar.js | 1 + src/components/Item/VisualizationItem/Item.js | 2 +- .../VisualizationItem/__tests__/Item.spec.js | 4 +- src/components/ItemFilter/FilterSelector.js | 37 +-- src/reducers/__tests__/editItemFilters.js | 61 +++++ src/reducers/__tests__/itemFilters.js | 18 +- src/reducers/editItemFilters.js | 4 + src/reducers/itemFilters.js | 4 + yarn.lock | 221 ++++-------------- 14 files changed, 183 insertions(+), 205 deletions(-) create mode 100644 src/reducers/__tests__/editItemFilters.js diff --git a/package.json b/package.json index 767a8f15d..8b7dd147e 100644 --- a/package.json +++ b/package.json @@ -6,20 +6,20 @@ "license": "BSD-3-Clause", "dependencies": { "@dhis2/d2-i18n": "^1.0.4", - "@dhis2/d2-ui-analytics": "0.0.4", + "@dhis2/d2-ui-analytics": "^0.0.9", "@dhis2/d2-ui-core": "^5.2.9", "@dhis2/d2-ui-interpretations": "^5.2.10", "@dhis2/d2-ui-mentions-wrapper": "^5.2.9", "@dhis2/d2-ui-rich-text": "^5.3.0", "@dhis2/d2-ui-sharing-dialog": "^5.2.9", "@dhis2/d2-ui-translation-dialog": "^5.2.9", + "@dhis2/data-visualizer-plugin": "^32.0.3", "@dhis2/ui": "1.0.0-beta.15", "@dhis2/ui-core": "^1.1.3", "@material-ui/core": "^3.9.2", "@material-ui/icons": "^3.0.2", "d2": "^31.6.0", "d2-utilizr": "^0.2.16", - "data-visualizer-plugin": "github:d2-ci/data-visualizer-plugin", "i18next": "^15.0.6", "lodash": "^4.17.11", "material-design-icons": "^3.0.1", diff --git a/src/actions/dashboards.js b/src/actions/dashboards.js index d7b42d89d..95e195334 100644 --- a/src/actions/dashboards.js +++ b/src/actions/dashboards.js @@ -12,6 +12,11 @@ import { } from '../reducers/dashboards'; import { sGetUserUsername } from '../reducers/user'; import { tSetSelectedDashboardById, acSetSelectedId } from './selected'; +import { sGetSelectedId } from '../reducers/selected'; +import { sGetIsEditing } from '../reducers/editDashboard'; +import { sGetEditItemFiltersRoot } from '../reducers/editItemFilters'; +import { acSetItemFilters, acClearItemFilters } from './itemFilters'; +import { acClearEditItemFilters } from './editItemFilters'; import { acClearEditDashboard } from './editDashboard'; import { apiFetchDashboards, @@ -82,6 +87,20 @@ export const tSelectDashboard = id => async (dispatch, getState) => { if (dashboardToSelect) { dispatch(tSetSelectedDashboardById(dashboardToSelect.id)); + + if (dashboardToSelect.id === sGetSelectedId(state)) { + if (sGetIsEditing(state)) { + // disable filters when switching to edit mode + dispatch(acClearItemFilters()); + } else { + // enable filters when switching to view mode + dispatch(acSetItemFilters(sGetEditItemFiltersRoot(state))); + } + } else { + // clear filters when switching dashboard + dispatch(acClearEditItemFilters()); + dispatch(acClearItemFilters()); + } } else { dispatch(acSetSelectedId(false)); } diff --git a/src/actions/editItemFilters.js b/src/actions/editItemFilters.js index 4585b082d..bf8ab92a8 100644 --- a/src/actions/editItemFilters.js +++ b/src/actions/editItemFilters.js @@ -1,6 +1,7 @@ import { REMOVE_EDIT_ITEM_FILTER, SET_EDIT_ITEM_FILTERS, + CLEAR_EDIT_ITEM_FILTERS, } from '../reducers/editItemFilters'; // actions @@ -10,6 +11,10 @@ export const acRemoveEditItemFilter = id => ({ id, }); +export const acClearEditItemFilters = () => ({ + type: CLEAR_EDIT_ITEM_FILTERS, +}); + export const acSetEditItemFilters = filters => ({ type: SET_EDIT_ITEM_FILTERS, filters, diff --git a/src/actions/itemFilters.js b/src/actions/itemFilters.js index 8fccddf1a..03cb04664 100644 --- a/src/actions/itemFilters.js +++ b/src/actions/itemFilters.js @@ -2,6 +2,7 @@ import { ADD_ITEM_FILTER, REMOVE_ITEM_FILTER, SET_ITEM_FILTERS, + CLEAR_ITEM_FILTERS, } from '../reducers/itemFilters'; export const FILTER_ORG_UNIT = 'ou'; @@ -18,6 +19,10 @@ export const acRemoveItemFilter = id => ({ id, }); +export const acClearItemFilters = () => ({ + type: CLEAR_ITEM_FILTERS, +}); + export const acSetItemFilters = filters => ({ type: SET_ITEM_FILTERS, filters, diff --git a/src/components/FilterBar/FilterBadge.js b/src/components/FilterBar/FilterBadge.js index d695e9131..32d7893a2 100644 --- a/src/components/FilterBar/FilterBadge.js +++ b/src/components/FilterBar/FilterBadge.js @@ -7,7 +7,7 @@ import { colors } from '../../modules/colors'; const styles = { badgeContainer: { - margin: '0 4px', + margin: '2px', padding: '0 16px', borderRadius: '4px', color: colors.white, @@ -19,6 +19,7 @@ const styles = { badge: { fontSize: '13px', cursor: 'pointer', + whiteSpace: 'nowrap', }, badgeRemove: { fontSize: '12px', diff --git a/src/components/FilterBar/FilterBar.js b/src/components/FilterBar/FilterBar.js index afc8f5669..7a8d83d4d 100644 --- a/src/components/FilterBar/FilterBar.js +++ b/src/components/FilterBar/FilterBar.js @@ -19,6 +19,7 @@ const styles = { padding: '8px 0', display: 'flex', justifyContent: 'center', + flexWrap: 'wrap', }, }; diff --git a/src/components/Item/VisualizationItem/Item.js b/src/components/Item/VisualizationItem/Item.js index 5c588d205..02953e54c 100644 --- a/src/components/Item/VisualizationItem/Item.js +++ b/src/components/Item/VisualizationItem/Item.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import { connect } from 'react-redux'; import { withStyles } from '@material-ui/core/styles'; import LaunchIcon from '@material-ui/icons/Launch'; -import ChartPlugin from 'data-visualizer-plugin'; +import ChartPlugin from '@dhis2/data-visualizer-plugin'; import i18n from '@dhis2/d2-i18n'; import uniqueId from 'lodash/uniqueId'; diff --git a/src/components/Item/VisualizationItem/__tests__/Item.spec.js b/src/components/Item/VisualizationItem/__tests__/Item.spec.js index 1113020c6..b880a7e58 100644 --- a/src/components/Item/VisualizationItem/__tests__/Item.spec.js +++ b/src/components/Item/VisualizationItem/__tests__/Item.spec.js @@ -1,11 +1,11 @@ import React from 'react'; import { shallow } from 'enzyme'; -import ChartPlugin from 'data-visualizer-plugin'; +import ChartPlugin from '@dhis2/data-visualizer-plugin'; import { CHART, REPORT_TABLE } from '../../../../modules/itemTypes'; import { Item } from '../Item'; import DefaultPlugin from '../DefaultPlugin'; -jest.mock('data-visualizer-plugin', () => () =>
); +jest.mock('@dhis2/data-visualizer-plugin', () => () =>
); jest.mock('../DefaultPlugin', () => () =>
); jest.mock('../ItemFooter', () => () =>
); jest.mock('../plugin', () => { diff --git a/src/components/ItemFilter/FilterSelector.js b/src/components/ItemFilter/FilterSelector.js index 23e77d0c3..cf340c6b8 100644 --- a/src/components/ItemFilter/FilterSelector.js +++ b/src/components/ItemFilter/FilterSelector.js @@ -14,7 +14,7 @@ import { sGetActiveModalDimension } from '../../reducers/activeModalDimension'; import { sGetDimensions } from '../../reducers/dimensions'; import { sGetFiltersKeys } from '../../reducers/itemFilters'; import { sGetEditItemFiltersRoot } from '../../reducers/editItemFilters'; -import { acAddItemFilter, acSetItemFilters } from '../../actions/itemFilters'; +import { acAddItemFilter, acRemoveItemFilter } from '../../actions/itemFilters'; import { acRemoveEditItemFilter, acSetEditItemFilters, @@ -55,22 +55,15 @@ class FilterSelector extends Component { }; onSelectItems = ({ dimensionType: dimensionId, value: items }) => { - const oldList = this.props.selectedItems[dimensionId] || []; - const newList = [ - ...oldList, - ...items.filter(item => !oldList.find(i => i.id === item.id)), - ]; - this.props.setEditItemFilters({ ...this.props.selectedItems, - [dimensionId]: newList, + [dimensionId]: items, }); }; onDeselectItems = ({ dimensionType: dimensionId, value: idsToRemove }) => { - const newList = this.props.selectedItems[dimensionId].filter( - item => !idsToRemove.includes(item.id) - ); + const oldList = this.props.selectedItems[dimensionId] || []; + const newList = oldList.filter(item => !idsToRemove.includes(item.id)); if (newList.length) { this.props.setEditItemFilters({ @@ -83,8 +76,10 @@ class FilterSelector extends Component { }; onReorderItems = ({ dimensionType: dimensionId, value: ids }) => { - const items = this.props.selectedItems[dimensionId]; - const reorderedList = ids.map(id => items.find(item => item.id === id)); + const oldList = this.props.selectedItems[dimensionId] || []; + const reorderedList = ids.map(id => + oldList.find(item => item.id === id) + ); this.props.setEditItemFilters({ ...this.props.selectedItems, @@ -93,10 +88,16 @@ class FilterSelector extends Component { }; saveFilter = id => { - this.props.addItemFilter({ - id, - value: [...this.props.selectedItems[id]], - }); + const filterItems = this.props.selectedItems[id]; + + if (filterItems && filterItems.length) { + this.props.addItemFilter({ + id, + value: [...filterItems], + }); + } else { + this.props.removeItemFilter(id); + } this.closeDialog(); }; @@ -160,7 +161,7 @@ export default connect( clearActiveModalDimension: acClearActiveModalDimension, setActiveModalDimension: acSetActiveModalDimension, addItemFilter: acAddItemFilter, - setItemFilters: acSetItemFilters, + removeItemFilter: acRemoveItemFilter, removeEditItemFilter: acRemoveEditItemFilter, setEditItemFilters: acSetEditItemFilters, } diff --git a/src/reducers/__tests__/editItemFilters.js b/src/reducers/__tests__/editItemFilters.js new file mode 100644 index 000000000..f40aaee22 --- /dev/null +++ b/src/reducers/__tests__/editItemFilters.js @@ -0,0 +1,61 @@ +import reducer, { + DEFAULT_STATE_EDIT_ITEM_FILTERS, + SET_EDIT_ITEM_FILTERS, + REMOVE_EDIT_ITEM_FILTER, + CLEAR_EDIT_ITEM_FILTERS, +} from '../editItemFilters'; + +const testKey = 'ou'; +const testValue = [{ id: 'ou1', name: 'OU test' }]; + +const testState = { + [testKey]: testValue, +}; + +describe('item filter reducer', () => { + describe('reducer', () => { + it('should return the default state', () => { + const actualState = reducer(DEFAULT_STATE_EDIT_ITEM_FILTERS, {}); + + expect(actualState).toEqual(DEFAULT_STATE_EDIT_ITEM_FILTERS); + }); + + it('should set a filter', () => { + const action = { + type: SET_EDIT_ITEM_FILTERS, + filters: testState, + }; + + const expectedState = testState; + + const actualState = reducer(undefined, action); + + expect(actualState).toEqual(expectedState); + }); + + it('should remove a filter', () => { + const action = { + type: REMOVE_EDIT_ITEM_FILTER, + id: testKey, + }; + + const expectedState = DEFAULT_STATE_EDIT_ITEM_FILTERS; + + const actualState = reducer(testState, action); + + expect(actualState).toEqual(expectedState); + }); + + it('should clear all filters', () => { + const action = { + type: CLEAR_EDIT_ITEM_FILTERS, + }; + + const expectedState = DEFAULT_STATE_EDIT_ITEM_FILTERS; + + const actualState = reducer(testState, action); + + expect(actualState).toEqual(expectedState); + }); + }); +}); diff --git a/src/reducers/__tests__/itemFilters.js b/src/reducers/__tests__/itemFilters.js index cf94ddd9a..218577e3b 100644 --- a/src/reducers/__tests__/itemFilters.js +++ b/src/reducers/__tests__/itemFilters.js @@ -1,6 +1,8 @@ import reducer, { DEFAULT_STATE_ITEM_FILTERS, SET_ITEM_FILTERS, + REMOVE_ITEM_FILTER, + CLEAR_ITEM_FILTERS, } from '../itemFilters'; const testKey = 'ou'; @@ -33,8 +35,20 @@ describe('item filter reducer', () => { it('should remove a filter', () => { const action = { - type: SET_ITEM_FILTERS, - filters: {}, + type: REMOVE_ITEM_FILTER, + id: testKey, + }; + + const expectedState = DEFAULT_STATE_ITEM_FILTERS; + + const actualState = reducer(testState, action); + + expect(actualState).toEqual(expectedState); + }); + + it('should clear all filters', () => { + const action = { + type: CLEAR_ITEM_FILTERS, }; const expectedState = DEFAULT_STATE_ITEM_FILTERS; diff --git a/src/reducers/editItemFilters.js b/src/reducers/editItemFilters.js index 39dae28e4..48a1e496a 100644 --- a/src/reducers/editItemFilters.js +++ b/src/reducers/editItemFilters.js @@ -1,3 +1,4 @@ +export const CLEAR_EDIT_ITEM_FILTERS = 'CLEAR_EDIT_ITEM_FILTERS'; export const REMOVE_EDIT_ITEM_FILTER = 'REMOVE_EDIT_ITEM_FILTER'; export const SET_EDIT_ITEM_FILTERS = 'SET_EDIT_ITEM_FILTERS'; @@ -15,6 +16,9 @@ export default (state = DEFAULT_STATE_EDIT_ITEM_FILTERS, action) => { case SET_EDIT_ITEM_FILTERS: { return action.filters; } + case CLEAR_EDIT_ITEM_FILTERS: { + return DEFAULT_STATE_EDIT_ITEM_FILTERS; + } default: return state; } diff --git a/src/reducers/itemFilters.js b/src/reducers/itemFilters.js index 9cda8e1ff..15bac642a 100644 --- a/src/reducers/itemFilters.js +++ b/src/reducers/itemFilters.js @@ -1,3 +1,4 @@ +export const CLEAR_ITEM_FILTERS = 'CLEAR_ITEM_FILTERS'; export const SET_ITEM_FILTERS = 'SET_ITEM_FILTERS'; export const ADD_ITEM_FILTER = 'ADD_ITEM_FILTER'; export const REMOVE_ITEM_FILTER = 'REMOVE_ITEM_FILTER'; @@ -22,6 +23,9 @@ export default (state = DEFAULT_STATE_ITEM_FILTERS, action) => { case SET_ITEM_FILTERS: { return action.filters; } + case CLEAR_ITEM_FILTERS: { + return DEFAULT_STATE_ITEM_FILTERS; + } default: return state; } diff --git a/yarn.lock b/yarn.lock index 7b12d0513..c1d2d8846 100644 --- a/yarn.lock +++ b/yarn.lock @@ -830,7 +830,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.1.0" -"@babel/runtime-corejs2@^7.4.3": +"@babel/runtime-corejs2@^7.4.2": version "7.4.3" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.4.3.tgz#40271fc260e570fb356da984e42e5990bd275860" integrity sha512-anTLTF7IK8Hd5f73zpPzt875I27UaaTWARJlfMGgnmQhvEe1uNHQRKBUbXL0Gc0VEYiVzsHsTPso5XdK8NGvFg== @@ -950,20 +950,19 @@ dependencies: i18next "^10.3" -"@dhis2/d2-ui-analytics@0.0.4": - version "0.0.4" - resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-analytics/-/d2-ui-analytics-0.0.4.tgz#6571d0a409c917729d343e9c9096a109036385f1" - integrity sha512-E6JUxZEcVZxx5eomlMSiKz0VoBfQ5RP5prrgGaYi7I83+kAR5NTo5ff7me0TYQy2Wam+MhvR6IgrcGofsdsl/g== +"@dhis2/d2-ui-analytics@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-analytics/-/d2-ui-analytics-0.0.9.tgz#4c2baa7dc941f9219d35da08287b676a57eb2cb8" + integrity sha512-wwfu9SPhJrbxgbmICKVX2WE6EphTovA8up8EBBSW5+2BgYV1262VVssXj5XboCsXxxbA35x6zvGa1KxT0+yHog== dependencies: "@dhis2/d2-i18n" "^1.0.4" "@dhis2/d2-ui-org-unit-dialog" "5.3.1" - "@dhis2/d2-ui-period-selector-dialog" "5.3.0" - "@dhis2/ui-core" "^1.1.3" + "@dhis2/d2-ui-period-selector-dialog" "^5.3.1" "@material-ui/core" "^3.9.3" "@material-ui/icons" "^3.0.2" classnames "^2.2.6" lodash "^4.17.11" - react-beautiful-dnd "^11.0.0-beta" + react-beautiful-dnd "^10.1.1" styled-jsx "^3.2.1" "@dhis2/d2-ui-core@5.2.10", "@dhis2/d2-ui-core@^5.2.9": @@ -1041,10 +1040,10 @@ recompose "^0.26.0" rxjs "^5.5.7" -"@dhis2/d2-ui-period-selector-dialog@5.3.0": - version "5.3.0" - resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-period-selector-dialog/-/d2-ui-period-selector-dialog-5.3.0.tgz#b1a73badefea9686d351dd0e8f574bd44e5df15a" - integrity sha512-p4tdzK4UDKcJ4YDOsvmt8hR2ajwEyPdp4qeWR6F/Jer67pTcj1ZyYHDe9BfcrxYsl9OYXVnOwVIGRYdvcBdy4w== +"@dhis2/d2-ui-period-selector-dialog@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@dhis2/d2-ui-period-selector-dialog/-/d2-ui-period-selector-dialog-5.3.1.tgz#9a5e81a2b5b5cd2980ab3ae9f9a88163503dc545" + integrity sha512-Bm+dyRcplgmkw9Iutnqrb7JN9kciPljpiNo7ZmOIRODYdRMKRwhCtmolAWOOdjPjrYFKAyYvd942C0BjYz5W4g== dependencies: "@dhis2/d2-i18n" "^1.0.4" "@material-ui/core" "^3.3.1" @@ -1103,6 +1102,17 @@ recompose "^0.26.0" rxjs "^5.5.7" +"@dhis2/data-visualizer-plugin@^32.0.3": + version "32.0.3" + resolved "https://registry.yarnpkg.com/@dhis2/data-visualizer-plugin/-/data-visualizer-plugin-32.0.3.tgz#70552cb7b4f3240d4eebb14f685788b49dd5d145" + integrity sha512-1aFTOz7KiCcEmyZNGJDjpdbIW2kUrQTXPTCGjHXFF8EorTXBPf4Avw+rEKajGuhlJ9f1+gCGr21BP6rQOgZOUA== + dependencies: + "@material-ui/core" "^3.1.2" + d2-charts-api "32.0.1" + lodash-es "^4.17.11" + react "^16.6.0" + react-dom "^16.6.0" + "@dhis2/ui-core@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@dhis2/ui-core/-/ui-core-1.1.3.tgz#9adbdf56c2035cd628b7053d080604a88a63c102" @@ -1401,9 +1411,9 @@ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== "@types/react-transition-group@^2.0.8": - version "2.8.0" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.8.0.tgz#0e30ced3ad695ac053f715675467162b19bbe539" - integrity sha512-DHZrY4UBypeT/bD2WakC3MkdBHMOkhqWnRRCMqrtNknyhfkCfKmRlpKdxGlPkDKvNl2uDSHcdvmKy8JW0aNETA== + version "2.9.0" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.9.0.tgz#2a74a885432d673a93a2c93c34ce5dbf9f1426f8" + integrity sha512-hP7vUaZMVSWKxo133P8U51U6UZ7+pbY+eAQb8+p6SZ2rB1rj3mOTDgTzhhi+R2SCB4S+sWekAAGoxdiZPG0ReQ== dependencies: "@types/react" "*" @@ -2134,14 +2144,6 @@ babel-jest@23.6.0, babel-jest@^23.6.0: babel-plugin-istanbul "^4.1.6" babel-preset-jest "^23.2.0" -babel-jest@^22.4.3: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" - integrity sha512-A9NB6/lZhYyypR9ATryOSDcqBaqNdzq4U+CN+/wcMsLcmKkPxQEoTKLajGfd3IkxNyVBT8NewUK2nWyGbSzHEQ== - dependencies: - babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.4" - babel-loader@8.0.5: version "8.0.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.5.tgz#225322d7509c2157655840bba52e46b6c2f2fe33" @@ -2184,7 +2186,7 @@ babel-plugin-emotion@^9.2.11: source-map "^0.5.7" touch "^2.0.1" -babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6: +babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== @@ -2194,11 +2196,6 @@ babel-plugin-istanbul@^4.1.5, babel-plugin-istanbul@^4.1.6: istanbul-lib-instrument "^1.10.1" test-exclude "^4.2.1" -babel-plugin-jest-hoist@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" - integrity sha512-DUvGfYaAIlkdnygVIEl0O4Av69NtuQWcrjMOv6DODPuhuGLDnbsARz3AwiiI/EkIMMlxQDUcrZ9yoyJvTNjcVQ== - babel-plugin-jest-hoist@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" @@ -2249,14 +2246,6 @@ babel-plugin-transform-react-remove-prop-types@0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-jest@^22.4.4: - version "22.4.4" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" - integrity sha512-+dxMtOFwnSYWfum0NaEc0O03oSdwBsjx4tMSChRDPGwu/4wSY6Q6ANW3wkjKpJzzguaovRs/DODcT4hbSN8yiA== - dependencies: - babel-plugin-jest-hoist "^22.4.4" - babel-plugin-syntax-object-rest-spread "^6.13.0" - babel-preset-jest@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" @@ -2347,11 +2336,6 @@ babel-types@6.26.0, babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.19: - version "7.0.0-beta.19" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.19.tgz#e928c7e807e970e0536b078ab3e0c48f9e052503" - integrity sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A== - babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -2417,7 +2401,7 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bluebird@^3.5.1, bluebird@~3.5.0: +bluebird@^3.5.1: version "3.5.4" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.4.tgz#d6cc661595de30d5b3af5fcedd3c0b3ef6ec5714" integrity sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw== @@ -2772,13 +2756,6 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -catharsis@~0.8.9: - version "0.8.9" - resolved "https://registry.yarnpkg.com/catharsis/-/catharsis-0.8.9.tgz#98cc890ca652dd2ef0e70b37925310ff9e90fc8b" - integrity sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is= - dependencies: - underscore-contrib "~0.3.0" - ccount@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.3.tgz#f1cec43f332e2ea5a569fd46f9f5bde4e6102aff" @@ -3630,10 +3607,10 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= -d2-charts-api@^31.0.12: - version "31.0.14" - resolved "https://registry.yarnpkg.com/d2-charts-api/-/d2-charts-api-31.0.14.tgz#bce5a761393f02cfc00c7aaaa402c9fef52f4431" - integrity sha512-KLv83cl+lqQZ2dAOaAD1KKHpECZy2j9MfjnGHR9BOQPzUnpKBf2aYsAVmP3dqsHUI5Y/SZDKUBCIjZS+6DBtXA== +d2-charts-api@32.0.1: + version "32.0.1" + resolved "https://registry.yarnpkg.com/d2-charts-api/-/d2-charts-api-32.0.1.tgz#f402a5352a08fe3281a437652afc2dc8fd7fd22e" + integrity sha512-s6VlDLCkcjNluOXwUp1csa/6ZaNDBtbu9RWmaa8kb5gPpc1BDovwx0lE34FPrEUIefF5JNpisl3fwlrLrH592Q== dependencies: d2-utilizr "0.2.13" d3-color "1.0.1" @@ -3681,16 +3658,6 @@ d2-utilizr@^0.2.15, d2-utilizr@^0.2.16: lodash.isset "^4.3.0" lodash.isstring "^4.0.1" -d2@31.2.1: - version "31.2.1" - resolved "https://registry.yarnpkg.com/d2/-/d2-31.2.1.tgz#0ca21a30118d0486f3807f165a2420ecaad0a1e1" - integrity sha512-0AuYkAHR3+hnxKjpi8okaiNXoBDfr1ZFlzELyuN+BMo42fu4IIANEy4/MoVZvN8ezfbFM5Y8aJu1MmG1zLCNtA== - dependencies: - babel-jest "^22.4.3" - docdash "^0.4.0" - jsdoc "^3.5.5" - whatwg-fetch "^2.0.3" - d2@^31.6.0: version "31.6.0" resolved "https://registry.yarnpkg.com/d2/-/d2-31.6.0.tgz#de30c97764db9efd973e67f4c118d23d3c5c8836" @@ -3738,17 +3705,6 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -"data-visualizer-plugin@github:d2-ci/data-visualizer-plugin": - version "32.0.2" - resolved "https://codeload.github.com/d2-ci/data-visualizer-plugin/tar.gz/176c8d28499dde80fd324c252edacf8712019331" - dependencies: - "@material-ui/core" "^3.1.2" - d2 "31.2.1" - d2-charts-api "^31.0.12" - lodash-es "^4.17.11" - react "^16.6.0" - react-dom "^16.6.0" - date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -3995,11 +3951,6 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -docdash@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/docdash/-/docdash-0.4.0.tgz#05c3a50d83189981699ee0c076d3a3950db7ec00" - integrity sha1-BcOlDYMYmYFpnuDAdtOjlQ237AA= - docopt@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/docopt/-/docopt-0.6.2.tgz#b28e9e2220da5ec49f7ea5bb24a47787405eeb11" @@ -4330,7 +4281,7 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5, escape-string-regexp@~1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -5345,7 +5296,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== @@ -6955,36 +6906,11 @@ js-yaml@^3.13.0, js-yaml@^3.7.0, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" -js2xmlparser@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/js2xmlparser/-/js2xmlparser-3.0.0.tgz#3fb60eaa089c5440f9319f51760ccd07e2499733" - integrity sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM= - dependencies: - xmlcreate "^1.0.1" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdoc@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-3.5.5.tgz#484521b126e81904d632ff83ec9aaa096708fa4d" - integrity sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg== - dependencies: - babylon "7.0.0-beta.19" - bluebird "~3.5.0" - catharsis "~0.8.9" - escape-string-regexp "~1.0.5" - js2xmlparser "~3.0.0" - klaw "~2.0.0" - marked "~0.3.6" - mkdirp "~0.5.1" - requizzle "~0.2.1" - strip-json-comments "~2.0.1" - taffydb "2.6.2" - underscore "~1.8.3" - jsdom@^11.5.1: version "11.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" @@ -7203,13 +7129,6 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -klaw@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-2.0.0.tgz#59c128e0dc5ce410201151194eeb9cbf858650f6" - integrity sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY= - dependencies: - graceful-fs "^4.1.9" - kleur@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" @@ -7547,11 +7466,6 @@ markdown-it@^8.4.2: mdurl "^1.0.1" uc.micro "^1.0.5" -marked@~0.3.6: - version "0.3.19" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" - integrity sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg== - material-design-icons@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/material-design-icons/-/material-design-icons-3.0.1.tgz#9a71c48747218ebca51e51a66da682038cdcb7bf" @@ -7624,7 +7538,7 @@ memoize-one@^5.0.0: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.2.tgz#6aba5276856d72fb44ead3efab86432f94ba203d" integrity sha512-o7lldN4fs/axqctc03NF+PMhd2veRrWeJ2n2GjEzUPBD4F9rmNg4A+bQCACIzwjHJEXuYv4aFFMaH35KZfHUrw== -memoize-one@^5.0.4: +memoize-one@^5.0.1: version "5.0.4" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.0.4.tgz#005928aced5c43d890a4dfab18ca908b0ec92cbc" integrity sha512-P0z5IeAH6qHHGkJIXWw0xC2HNEgkx/9uWWBQw64FJj3/ol14VYdfVGWWr0fXfjhhv3TKVIqUq65os6O4GUNksA== @@ -9685,19 +9599,19 @@ react-app-polyfill@^0.2.2: raf "3.4.1" whatwg-fetch "3.0.0" -react-beautiful-dnd@^11.0.0-beta: - version "11.0.0-beta.2" - resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-11.0.0-beta.2.tgz#5bd5fa328f08ddec0555daf4acb64c7e03db4f96" - integrity sha512-b3cDEfBzS3AzfsqqBXIfNMxFqOD/2aBYm/9qwGfoP+nEbhGYt/hsUmATTRykXJ/XOVA6qA/e1RAZ5lt++hWEeg== +react-beautiful-dnd@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-10.1.1.tgz#d753088d77d7632e77cf8a8935fafcffa38f574b" + integrity sha512-TdE06Shfp56wm28EzjgC56EEMgGI5PDHejJ2bxuAZvZr8CVsbksklsJC06Hxf0MSL7FHbflL/RpkJck9isuxHg== dependencies: - "@babel/runtime-corejs2" "^7.4.3" + "@babel/runtime-corejs2" "^7.4.2" css-box-model "^1.1.1" - memoize-one "^5.0.4" + memoize-one "^5.0.1" + prop-types "^15.6.1" raf-schd "^4.0.0" - react-redux "7.0.0-beta.1" + react-redux "^5.0.7" redux "^4.0.1" tiny-invariant "^1.0.4" - use-memo-one "^1.0.1" react-dev-utils@^8.0.0: version "8.0.0" @@ -9812,18 +9726,6 @@ react-portal@^4.1.5: dependencies: prop-types "^15.5.8" -react-redux@7.0.0-beta.1: - version "7.0.0-beta.1" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.0.0-beta.1.tgz#43ff36337fcda9787031c4f9cd59af9e19cb389f" - integrity sha512-Q1ptmtv1ijH6/H879DyJ+DoMbMjNGcafzssDXO6OzzuZXD7/jxXIhl7bS43H4DN5qjIG8EOcCGkfq3U/LynjlQ== - dependencies: - "@babel/runtime" "^7.3.1" - hoist-non-react-statics "^3.3.0" - invariant "^2.2.4" - loose-envify "^1.4.0" - prop-types "^15.7.2" - react-is "^16.8.2" - react-redux@^5.0.7: version "5.1.1" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.1.tgz#88e368682c7fa80e34e055cd7ac56f5936b0f52f" @@ -10388,13 +10290,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -requizzle@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/requizzle/-/requizzle-0.2.1.tgz#6943c3530c4d9a7e46f1cddd51c158fc670cdbde" - integrity sha1-aUPDUwxNmn5G8c3dUcFY/GcM294= - dependencies: - underscore "~1.6.0" - reselect@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" @@ -11355,11 +11250,6 @@ table@^5.0.2: slice-ansi "^2.1.0" string-width "^3.0.0" -taffydb@2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/taffydb/-/taffydb-2.6.2.tgz#7cbcb64b5a141b6a2efc2c5d2c67b4e150b2a268" - integrity sha1-fLy2S1oUG2ou/CxdLGe04VCyomg= - tapable@^1.0.0, tapable@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e" @@ -11698,23 +11588,6 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= -underscore-contrib@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/underscore-contrib/-/underscore-contrib-0.3.0.tgz#665b66c24783f8fa2b18c9f8cbb0e2c7d48c26c7" - integrity sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc= - dependencies: - underscore "1.6.0" - -underscore@1.6.0, underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= - -underscore@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" - integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= - unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -11869,11 +11742,6 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use-memo-one@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.0.1.tgz#e2aea0cb4b41e9292391908e951526998358bfa7" - integrity sha512-j4R9HCMUVktNm7D3qnNglesHs67Wnmib8z5rrvUXTlKsB4LcSYMKsmJes+rUrlKCdVqVyYuDHBRsmIcverwbDg== - use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" @@ -12455,11 +12323,6 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xmlcreate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/xmlcreate/-/xmlcreate-1.0.2.tgz#fa6bf762a60a413fb3dd8f4b03c5b269238d308f" - integrity sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8= - xregexp@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"