diff --git a/ui/.github_release_version b/ui/.github_release_version index 029313e92d..631579cf74 100644 --- a/ui/.github_release_version +++ b/ui/.github_release_version @@ -1,3 +1,3 @@ # This file contains a version number which will be used to release assets to # GitHub. To trigger a new asset release, simply increase this version number. -20200424_2 +20200427_1 diff --git a/ui/.package_release_version b/ui/.package_release_version index ba2e994b15..e3425ad774 100644 --- a/ui/.package_release_version +++ b/ui/.package_release_version @@ -1,3 +1,3 @@ # This file contains a version number which will be used to release packages. # To trigger a new package release, simply increase this version number. -0.0.4 +0.0.5 diff --git a/ui/dashboardApp/layout/main/Sider/Banner.js b/ui/dashboardApp/layout/main/Sider/Banner.js index cc6801bc19..b4f677308f 100644 --- a/ui/dashboardApp/layout/main/Sider/Banner.js +++ b/ui/dashboardApp/layout/main/Sider/Banner.js @@ -11,7 +11,7 @@ const toggleWidth = 40 const toggleHeight = 50 export default function ToggleBanner({ - width, + fullWidth, collapsedWidth, collapsed, onToggle, @@ -22,7 +22,7 @@ export default function ToggleBanner({ height: collapsed ? toggleHeight : bannerSize.height || 0, }) const transButton = useSpring({ - left: collapsed ? 0 : width - toggleWidth, + left: collapsed ? 0 : fullWidth - toggleWidth, width: collapsed ? collapsedWidth : toggleWidth, }) @@ -35,7 +35,7 @@ export default function ToggleBanner({
diff --git a/ui/dashboardApp/layout/main/Sider/index.js b/ui/dashboardApp/layout/main/Sider/index.js index 544f630ed5..02dc3f36a6 100644 --- a/ui/dashboardApp/layout/main/Sider/index.js +++ b/ui/dashboardApp/layout/main/Sider/index.js @@ -71,7 +71,8 @@ function useCurrentLogin() { export default function Sider({ registry, - width, + fullWidth, + defaultCollapsed, collapsed, collapsedWidth, onToggle, @@ -120,24 +121,25 @@ export default function Sider({ ] const transSider = useSpring({ - width: collapsed ? collapsedWidth : width, + width: collapsed ? collapsedWidth : fullWidth, }) return ( { } export default function App({ registry }) { - const { state: collapsed, toggle: toggleCollapsed } = useToggle() + const [collapsed, setCollapsed] = useLocalStorageState( + 'layout.sider.collapsed', + false + ) + const [defaultCollapsed] = useState(collapsed) const { contentLeftOffset, onAnimationStart, @@ -50,7 +54,6 @@ export default function App({ registry }) { } = useContentLeftOffset(collapsed) const transContentBack = useSpring({ x: collapsed ? collapsedContentOffset : 0, - from: { x: 0 }, onStart: onAnimationStart, onFrame: onAnimationFrame, }) @@ -60,14 +63,19 @@ export default function App({ registry }) { delay: 100, }) + const handleToggle = useCallback(() => { + setCollapsed((c) => !c) + }, [setCollapsed]) + return ( toggleCollapsed()} + fullWidth={siderWidth} + onToggle={handleToggle} + defaultCollapsed={defaultCollapsed} collapsed={collapsed} collapsedWidth={siderCollapsedWidth} animationDelay={0} diff --git a/ui/lib/apps/KeyViz/components/KeyViz.tsx b/ui/lib/apps/KeyViz/components/KeyViz.tsx index d249ea5c92..51c9b78ff0 100644 --- a/ui/lib/apps/KeyViz/components/KeyViz.tsx +++ b/ui/lib/apps/KeyViz/components/KeyViz.tsx @@ -1,13 +1,15 @@ -import React, { useRef, useState, useEffect, useCallback } from 'react' +import React, { useState, useEffect, useCallback } from 'react' import { Button, Drawer } from 'antd' import { useTranslation } from 'react-i18next' -import useInterval from '@use-it/interval' import { Heatmap } from '../heatmap' import { HeatmapData, HeatmapRange, DataTag } from '../heatmap/types' -import { fetchHeatmap, fetchServiceStatus } from '../utils' +import { fetchHeatmap } from '../utils' import ToolBar from './ToolBar' import KeyVizSettingForm from './KeyVizSettingForm' import './KeyViz.less' +import { useGetSet, useMount, useInterval } from 'react-use' +import client from '@lib/client' +import { useBoolean } from '@umijs/hooks' type CacheEntry = { metricType: DataTag @@ -78,125 +80,128 @@ let cache = new HeatmapCache() const KeyViz = (props) => { const [chartState, setChartState] = useState() - const [selection, setSelection] = useState(null) + const [getSelection, setSelection] = useGetSet(null) const [isLoading, setLoading] = useState(true) - const [autoRefreshSeconds, setAutoRefreshSeconds] = useState(0) - const autoRefreshSecondsRef = useRef(autoRefreshSeconds) - const [remainingRefreshSeconds, setRemainingRefreshSeconds] = useState(0) - const [isOnBrush, setOnBrush] = useState(false) - const [dateRange, setDateRange] = useState(3600 * 6) - const [brightLevel, setBrightLevel] = useState(1) - const [metricType, setMetricType] = useState('written_bytes') + const [getAutoRefreshSeconds, setAutoRefreshSeconds] = useGetSet(0) + const [getRemainingRefreshSeconds, setRemainingRefreshSeconds] = useGetSet(0) + const [getOnBrush, setOnBrush] = useGetSet(false) + const [getDateRange, setDateRange] = useGetSet(3600 * 6) + const [getBrightLevel, setBrightLevel] = useGetSet(1) + const [getMetricType, setMetricType] = useGetSet('written_bytes') const [serviceEnabled, setServiceEnabled] = useState(false) - const [showSettings, setShowSettings] = useState(false) + const { + state: shouldShowSettings, + setTrue: openSettings, + setFalse: closeSettings, + } = useBoolean(false) const { t } = useTranslation() - const onFetchServiceStatus = () => { + const updateServiceStatus = useCallback(async function () { setLoading(true) - fetchServiceStatus().then( - (status) => { - if (!status) { - setAutoRefreshSeconds(0) - } - setServiceEnabled(status) - setLoading(false) - }, - () => { - setLoading(false) + try { + const config = await client.getInstance().keyvisualConfigGet() + const enabled = config.data.auto_collection_enabled === true + if (!enabled) { + setAutoRefreshSeconds(0) } - ) - } + setServiceEnabled(enabled) + if (enabled) { + updateHeatmap() + } + } catch (e) {} + setLoading(false) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) + + useMount(() => { + updateServiceStatus() + }) - const onFetchHeatmap = useCallback(() => { - if (autoRefreshSecondsRef.current > 0) { - setRemainingRefreshSeconds(autoRefreshSecondsRef.current) + const updateHeatmap = useCallback(async () => { + if (getAutoRefreshSeconds() > 0) { + setRemainingRefreshSeconds(getAutoRefreshSeconds()) } setLoading(true) setOnBrush(false) - cache.fetch(selection || dateRange, metricType).then( - (data) => { - setChartState({ heatmapData: data!, metricType: metricType }) - setLoading(false) - }, - () => { - setLoading(false) - } - ) - }, [selection, dateRange, metricType]) + try { + const metricType = getMetricType() + const data = await cache.fetch( + getSelection() || getDateRange(), + metricType + ) + setChartState({ heatmapData: data!, metricType }) + } catch (e) {} + setLoading(false) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) - const onChangeBrightLevel = (val) => { + const onChangeBrightLevel = useCallback((val) => { if (!_chart) return setBrightLevel(val) _chart.brightness(val) - } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) - const onChangeDateRange = (v: number) => { + const onChangeDateRange = useCallback((v: number) => { setDateRange(v) setSelection(null) - } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) - const onResetZoom = () => { + const onResetZoom = useCallback(() => { setSelection(null) - } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) - const onToggleBrush = () => { + const onToggleBrush = useCallback(() => { + const newOnBrush = !getOnBrush() setAutoRefreshSeconds(0) - setOnBrush(!isOnBrush) - _chart.brush(!isOnBrush) - } + setOnBrush(newOnBrush) + _chart.brush(newOnBrush) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []) const onBrush = useCallback((selection: HeatmapRange) => { setOnBrush(false) setAutoRefreshSeconds(0) setSelection(selection) + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const onZoom = useCallback(() => { setAutoRefreshSeconds(0) + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const onChartInit = useCallback((chart) => { _chart = chart setLoading(false) - setBrightLevel((l) => { - _chart.brightness(l) - return l - }) + _chart.brightness(getBrightLevel()) + // eslint-disable-next-line react-hooks/exhaustive-deps }, []) useEffect(() => { - autoRefreshSecondsRef.current = autoRefreshSeconds - }, [autoRefreshSeconds]) - - useEffect(onFetchServiceStatus, []) - - useEffect(() => { - if (serviceEnabled) { - onFetchHeatmap() + if (getRemainingRefreshSeconds() > getAutoRefreshSeconds()) { + setRemainingRefreshSeconds(getAutoRefreshSeconds()) } - }, [serviceEnabled, onFetchHeatmap]) - - useEffect(() => { - setRemainingRefreshSeconds((r) => { - if (r > autoRefreshSeconds) { - return autoRefreshSeconds - } else { - return r - } - }) - - if (autoRefreshSeconds > 0) { + if (getAutoRefreshSeconds() > 0) { onResetZoom() setOnBrush(false) } - }, [autoRefreshSeconds]) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [getAutoRefreshSeconds()]) + + useEffect(() => { + updateHeatmap() + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [getSelection(), getDateRange(), getMetricType()]) useInterval(() => { - if (autoRefreshSeconds === 0) { + if (getAutoRefreshSeconds() === 0) { return } - if (remainingRefreshSeconds === 0) { - onFetchHeatmap() + if (getRemainingRefreshSeconds() === 0) { + updateHeatmap() } else { setRemainingRefreshSeconds((c) => c - 1) } @@ -219,7 +224,7 @@ const KeyViz = (props) => {

{t('keyviz.settings.disabled_desc_line_1')}

{t('keyviz.settings.disabled_desc_line_2')}

-
@@ -229,34 +234,34 @@ const KeyViz = (props) => {
setShowSettings(true)} + onRefresh={updateHeatmap} + onShowSettings={openSettings} /> {mainPart} setShowSettings(false)} + visible={shouldShowSettings} + onClose={closeSettings} destroyOnClose={true} > setShowSettings(false)} - onConfigUpdated={onFetchServiceStatus} + onClose={closeSettings} + onConfigUpdated={updateServiceStatus} />
diff --git a/ui/lib/apps/KeyViz/components/KeyVizSettingForm.tsx b/ui/lib/apps/KeyViz/components/KeyVizSettingForm.tsx index 41fad2fe2b..0edde253ab 100644 --- a/ui/lib/apps/KeyViz/components/KeyVizSettingForm.tsx +++ b/ui/lib/apps/KeyViz/components/KeyVizSettingForm.tsx @@ -2,8 +2,8 @@ import React, { useEffect, useState } from 'react' import { Form, Skeleton, Switch, Space, Button, Modal } from 'antd' import { ExclamationCircleOutlined } from '@ant-design/icons' import { useTranslation } from 'react-i18next' -import { fetchServiceStatus, updateServiceStatus } from '../utils' -import { ConfigKeyVisualConfig } from '@lib/client' +import { updateServiceStatus } from '../utils' +import client, { ConfigKeyVisualConfig } from '@lib/client' interface Props { onClose: () => void @@ -18,29 +18,39 @@ function KeyVizSettingForm({ onClose, onConfigUpdated }: Props) { const onFetchServiceStatus = () => { setLoading(true) - fetchServiceStatus().then( - (status) => { - setConfig({ auto_collection_enabled: status }) - setLoading(false) - }, - () => { - setLoading(false) - } - ) + client + .getInstance() + .keyvisualConfigGet() + .then( + (r) => { + setConfig({ + auto_collection_enabled: r.data.auto_collection_enabled === true, + }) + setLoading(false) + }, + () => { + setLoading(false) + } + ) } const onSubmitted = () => { - fetchServiceStatus().then( - (status) => { - setConfig({ auto_collection_enabled: status }) - setSubmitting(false) - onClose() - setTimeout(onConfigUpdated, 500) - }, - () => { - setSubmitting(false) - } - ) + client + .getInstance() + .keyvisualConfigGet() + .then( + (r) => { + setConfig({ + auto_collection_enabled: r.data.auto_collection_enabled === true, + }) + setSubmitting(false) + onClose() + setTimeout(onConfigUpdated, 500) + }, + () => { + setSubmitting(false) + } + ) } const onUpdateServiceStatus = (status) => { diff --git a/ui/lib/apps/KeyViz/components/ToolBar.tsx b/ui/lib/apps/KeyViz/components/ToolBar.tsx index d39c19396b..8aec2749a2 100644 --- a/ui/lib/apps/KeyViz/components/ToolBar.tsx +++ b/ui/lib/apps/KeyViz/components/ToolBar.tsx @@ -14,7 +14,7 @@ import { withTranslation, WithTranslation } from 'react-i18next' import { useSpring, animated } from 'react-spring' import Flexbox from '@g07cha/flexbox-react' import { Card } from '@lib/components' -import prettyMs from 'pretty-ms' +import { getValueFormat } from '@baurine/grafana-value-formats' function RefreshProgress(props) { const { value } = props @@ -159,7 +159,7 @@ class KeyVisToolBar extends Component { {autoRefreshOptions.map((sec) => { return ( - {prettyMs(sec * 1000, { verbose: true })} + {getValueFormat('s')(sec, 0)} ) })} @@ -233,8 +233,7 @@ class KeyVisToolBar extends Component { value={hour * 60 * 60} className="PD-KeyVis-Select-Option" > - {' '} - {prettyMs(hour * 60 * 60 * 1000, { verbose: true })} + {getValueFormat('h')(hour, 0)} ))} diff --git a/ui/lib/apps/KeyViz/heatmap/index.tsx b/ui/lib/apps/KeyViz/heatmap/index.tsx index 4aedb27fff..4583bc15bd 100644 --- a/ui/lib/apps/KeyViz/heatmap/index.tsx +++ b/ui/lib/apps/KeyViz/heatmap/index.tsx @@ -1,6 +1,6 @@ import React, { useRef, useEffect } from 'react' import * as d3 from 'd3' -import useEventListener from '@use-it/event-listener' +import { useEventListener } from '@umijs/hooks' import { heatmapChart } from './chart' import { HeatmapData, DataTag, HeatmapRange } from './types' diff --git a/ui/lib/apps/KeyViz/utils/api.ts b/ui/lib/apps/KeyViz/utils/api.ts index 4dd59cec18..bbc287d243 100644 --- a/ui/lib/apps/KeyViz/utils/api.ts +++ b/ui/lib/apps/KeyViz/utils/api.ts @@ -18,13 +18,6 @@ export async function fetchHeatmap( return resp.data } -export async function fetchServiceStatus(): Promise { - return client - .getInstance() - .keyvisualConfigGet() - .then((res) => res.data.auto_collection_enabled || false) -} - export async function updateServiceStatus(auto_collection_enabled: boolean) { await client.getInstance().keyvisualConfigPut({ auto_collection_enabled, diff --git a/ui/lib/packEntry.js b/ui/lib/packEntry.js index 07ad6c5e35..74d258f3a9 100644 --- a/ui/lib/packEntry.js +++ b/ui/lib/packEntry.js @@ -1,6 +1,7 @@ import * as i18n from './utils/i18n' import AppKeyVizMeta from './apps/KeyViz/index.meta' import AppStatementMeta from './apps/Statement/index.meta' +import AppSlowQueryMeta from './apps/SlowQuery/index.meta' export { i18n } export { default as client } from './client' @@ -10,3 +11,6 @@ export { default as AppKeyViz } from './apps/KeyViz' i18n.addTranslations(AppStatementMeta.translations) export { default as AppStatement } from './apps/Statement' + +i18n.addTranslations(AppSlowQueryMeta.translations) +export { default as AppSlowQuery } from './apps/SlowQuery' diff --git a/ui/package.json b/ui/package.json index 98369cfc28..54788bc406 100644 --- a/ui/package.json +++ b/ui/package.json @@ -7,10 +7,8 @@ "@baurine/grafana-value-formats": "^0.1.2", "@fortawesome/fontawesome-free": "^5.13.0", "@g07cha/flexbox-react": "^5.0.0", - "@umijs/hooks": "^1.9.1", - "@use-it/event-listener": "^0.1.3", - "@use-it/interval": "^0.1.3", - "antd": "^4.1.3", + "@umijs/hooks": "^1.9.2", + "antd": "^4.1.5", "axios": "^0.19.0", "bulma": "^0.8.2", "classnames": "^2.2.6", @@ -24,19 +22,18 @@ "lodash": "^4.17.15", "moment": "^2.24.0", "office-ui-fabric-react": "^7.105.3", - "pretty-ms": "^6.0.1", "react": "^16.13.1", "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.13.1", - "react-i18next": "^11.3.4", + "react-i18next": "^11.3.5", "react-resize-detector": "^4.2.3", "react-router": "^6.0.0-alpha.3", "react-router-dom": "^6.0.0-alpha.3", "react-spring": "^8.0.27", "react-syntax-highlighter": "^12.2.1", - "react-use": "^14.1.1", - "single-spa": "^5.3.2", - "single-spa-react": "^2.13.0", + "react-use": "^14.2.0", + "single-spa": "^5.3.4", + "single-spa-react": "^2.14.0", "sql-formatter-plus": "^1.3.6", "string-template": "^1.0.0" }, diff --git a/ui/yarn.lock b/ui/yarn.lock index 183cc1fe96..378d0ca390 100644 --- a/ui/yarn.lock +++ b/ui/yarn.lock @@ -2173,36 +2173,26 @@ prop-types "^15.7.2" tslib "^1.10.0" -"@umijs/hooks@^1.9.1": - version "1.9.1" - resolved "https://registry.yarnpkg.com/@umijs/hooks/-/hooks-1.9.1.tgz#30edfdba7b891eb39a6fc949003e98b2b4bd8a50" - integrity sha512-3MwCxy1BLKvBFu7KagONcTnmgdRJ7BWOniTBE4FrPbWl9/gEVkBIlfB/Zl6268f1xNR3Dtfa57pbbvgA2RYP+Q== +"@umijs/hooks@^1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@umijs/hooks/-/hooks-1.9.2.tgz#647becc86d4e6aa96f78371edab987b533845b8b" + integrity sha512-mYT9C7cL4u1ZymCn8zNBiAV011fwnNQFYGkl3HCVyqWTzqtdVngSbVL3vUE9ii6v30zge/tpPQAjosjrrBHfIQ== dependencies: - "@umijs/use-request" "^1.4.1" + "@umijs/use-request" "^1.4.2" intersection-observer "^0.7.0" lodash.isequal "^4.5.0" resize-observer-polyfill "^1.5.1" screenfull "^5.0.0" -"@umijs/use-request@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@umijs/use-request/-/use-request-1.4.1.tgz#eb58f509a9b81761d3a5b14c3aa821d5b7869a9c" - integrity sha512-QJ7fNXSe0LPLM/0neZ3gsaxWomFRoKNvaz59zxlbbDmgfwIlMaddB2IueKiWBHb1vlHGuffRZDRDgu1C6twC+w== +"@umijs/use-request@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@umijs/use-request/-/use-request-1.4.2.tgz#8673435d3d0c4205062b74e35f3fb0d25397c213" + integrity sha512-PBoOsM+4ISspGGV/5y2i21HLd/h+BkdIDmbxYvUIOF/MVXrumS6C9EFJaSl9+RrLzW9w10/wKpy0GGIg1CJ3gw== dependencies: lodash.debounce "^4.0.8" lodash.throttle "^4.1.1" umi-request "^1.2.17" -"@use-it/event-listener@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@use-it/event-listener/-/event-listener-0.1.3.tgz#a9920b2819d211cf55e68e830997546eec6886d3" - integrity sha512-UCHkLOVU+xj3/1R8jXz8GzDTowkzfIDPESOBlVC2ndgwUSBEqiFdwCoUEs2lcGhJOOiEdmWxF+T23C5+60eEew== - -"@use-it/interval@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@use-it/interval/-/interval-0.1.3.tgz#5d1096b2295d7a5dda8e8022f3abb5f9d9ef27f8" - integrity sha512-chshdtDZTFoWA9aszBz1Cc04Ca9NBD2JTi/GMjdJ+HGm4q7Vy1v71+2mm22r7Kfb2nYW+lTRsPcEHdB/VFVHsQ== - "@webassemblyjs/ast@1.8.5": version "1.8.5" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" @@ -2552,10 +2542,10 @@ ansi-wrap@0.1.0, ansi-wrap@^0.1.0: resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768= -antd@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/antd/-/antd-4.1.3.tgz#c5fd6e4eb3d335c4bb27d903ee2306b9cbeb28ef" - integrity sha512-gVAc+xsDQY07REfu7oy/IXCbFm3VtxwaUy+BNI3lNyzk8rx0XS/7Yuf6q+fZwVgQiVRUUamxkGCzwV1oFFBkdw== +antd@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/antd/-/antd-4.1.5.tgz#3eb67a5162186dec6b096e74a8b35952ab229040" + integrity sha512-UGiuQJBc5uSvDsBt+C3Q4sD6YG/MSZSjftsnTwKM73xJyYDHuQnBOUU0O1HokOW17+Hr1AFbep8IPhs4S2pKRQ== dependencies: "@ant-design/icons" "^4.0.0" "@ant-design/react-slick" "~0.25.5" @@ -2568,7 +2558,7 @@ antd@^4.1.3: omit.js "^1.0.2" prop-types "^15.7.2" raf "^3.4.1" - rc-animate "~2.10.2" + rc-animate "~2.11.0" rc-cascader "~1.0.0" rc-checkbox "~2.2.0" rc-collapse "~1.11.3" @@ -2595,7 +2585,7 @@ antd@^4.1.3: rc-tree "~3.1.0" rc-tree-select "~3.1.0" rc-trigger "~4.0.0" - rc-upload "~3.0.0" + rc-upload "~3.0.4" rc-util "^4.20.0" rc-virtual-list "^1.1.0" resize-observer-polyfill "^1.5.1" @@ -9710,11 +9700,6 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - parse-node-version@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" @@ -10706,13 +10691,6 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -pretty-ms@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-6.0.1.tgz#03ec6cfee20329f142645e63efad96bb775d3da4" - integrity sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw== - dependencies: - parse-ms "^2.1.0" - pretty-quick@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-2.0.1.tgz#417ee605ade98ecc686e72f63b5d28a2c35b43e9" @@ -10972,7 +10950,7 @@ rc-align@^3.0.0-rc.0: rc-util "^4.12.0" resize-observer-polyfill "^1.5.1" -rc-animate@2.x, rc-animate@^2.10.0, rc-animate@^2.10.1, rc-animate@^2.10.2, rc-animate@^2.9.2, rc-animate@~2.10.2: +rc-animate@2.x, rc-animate@^2.10.0, rc-animate@^2.10.1, rc-animate@^2.10.2, rc-animate@^2.9.2: version "2.10.3" resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.10.3.tgz#163d5e29281a4ff82d53ee7918eeeac856b756f9" integrity sha512-A9qQ5Y8BLlM7EhuCO3fWb/dChndlbWtY/P5QvPqBU7h4r5Q2QsvsbpTGgdYZATRDZbTRnJXXfVk9UtlyS7MBLg== @@ -10985,6 +10963,19 @@ rc-animate@2.x, rc-animate@^2.10.0, rc-animate@^2.10.1, rc-animate@^2.10.2, rc-a rc-util "^4.15.3" react-lifecycles-compat "^3.0.4" +rc-animate@~2.11.0: + version "2.11.1" + resolved "https://registry.yarnpkg.com/rc-animate/-/rc-animate-2.11.1.tgz#2666eeb6f1f2a495a13b2af09e236712278fdb2c" + integrity sha512-1NyuCGFJG/0Y+9RKh5y/i/AalUCA51opyyS/jO2seELpgymZm2u9QV3xwODwEuzkmeQ1BDPxMLmYLcTJedPlkQ== + dependencies: + babel-runtime "6.x" + classnames "^2.2.6" + css-animation "^1.3.2" + prop-types "15.x" + raf "^3.4.0" + rc-util "^4.15.3" + react-lifecycles-compat "^3.0.4" + rc-cascader@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/rc-cascader/-/rc-cascader-1.0.1.tgz#770de1e1fa7bd559aabd4d59e525819b8bc809b7" @@ -11261,10 +11252,10 @@ rc-trigger@^4.0.0, rc-trigger@~4.0.0: rc-animate "^2.10.2" rc-util "^4.20.0" -rc-upload@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-3.0.0.tgz#1365a77405b2df82749e55bcc475ee0de9424370" - integrity sha512-GTmLJ2Habrgon26xwtF8nx1FBxu8KUjRC6QW/7a+NVZ6qXIo+s7HnjqwseuG42kz6xGCoSLNpHgIoHW55EwpxA== +rc-upload@~3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/rc-upload/-/rc-upload-3.0.4.tgz#5fd8ba9eefc1e466225240ae997404693d86fa09" + integrity sha512-dTCvj1iHxjHG0qo5UyN2ZmtueG9GG3xrOhOwnjsehaoOvl0TOjLbHkUIPPqLZk+wHb57Ue4KB7c3+IMgkDoBvw== dependencies: babel-runtime "6.x" classnames "^2.2.5" @@ -11394,10 +11385,10 @@ react-error-overlay@^6.0.7: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== -react-i18next@^11.3.4: - version "11.3.4" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.3.4.tgz#355df5fe5133e5e30302d166f529678100ffc968" - integrity sha512-IRZMD7PAM3C+fJNzRbyLNi1ZD0kc3Z3obBspJjEl+9H+ME41PhVor3BpdIqv/Rm7lUoGhMjmpu42J45ooJ61KA== +react-i18next@^11.3.5: + version "11.3.5" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.3.5.tgz#9cd5273f752a241db65b3118e3075f895f5fbf65" + integrity sha512-x1dgM7UU/jKQ72/q3p9kkYz0C8fqAfMlUlx+SxqBUcRMTs/09HfnOUZFry1+GBpUcDHAg8R/vmPqL9rRzFO0UQ== dependencies: "@babel/runtime" "^7.3.1" html-parse-stringify2 "2.0.1" @@ -11518,10 +11509,10 @@ react-syntax-highlighter@^12.2.1: prismjs "^1.8.4" refractor "^2.4.1" -react-use@^14.1.1: - version "14.1.1" - resolved "https://registry.yarnpkg.com/react-use/-/react-use-14.1.1.tgz#f6ba8a861ba76a3aba0684609e27eb633c7d858f" - integrity sha512-3BVJJg+OrbgWG3aiyVhCgJuhx91T7juIr75QvFlMS+pesRZUd+PQNqoDhI+9pXwrc9FjCptvTHzl/YFpul3HHA== +react-use@^14.2.0: + version "14.2.0" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-14.2.0.tgz#abac033fae5e358599b7e38084ff11b02e5d4868" + integrity sha512-vwC7jsBsiDENLrXGPqIH3W4mMS2j24h5jp4ol3jiiUQzZhCaG+ihumrShJxBI59hXso1pLHAePRQAg/fJjDcaQ== dependencies: "@types/js-cookie" "2.2.6" "@xobotyi/scrollbar-width" "1.9.5" @@ -12389,15 +12380,15 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -single-spa-react@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/single-spa-react/-/single-spa-react-2.13.0.tgz#080f840dbbf67b1094e51ad785e1b8cc0d516aad" - integrity sha512-7p3sC8VX+UgJoSRmjoZTmyQsVWggdtgAYhSWbQGUYbpIbiA/IrORFegUo9KIvzo0Dy4ehKGpjlro5f+J72rC1g== +single-spa-react@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/single-spa-react/-/single-spa-react-2.14.0.tgz#4a55ea74a57db06adb41f0de3419a0c378745e1b" + integrity sha512-KQ2/y7/JBIquK0WUiwb1/Y7f4qTZITNotw+JwNPesj0WKeCi91u0LOZe2ps56QMJbyB4UrA5IzMBwbYWDr1pIw== -single-spa@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.3.2.tgz#dfc0b97145819a77e7c2777ddcc9fb8fe639c234" - integrity sha512-3FKoXRkWbluoHI9eZ05KecsJqfXHaSSYeh3+Z0WlSwzm8YCpZYIyr8RM4U+5sp+q69X9wrY7+wEmnarvaiyO4A== +single-spa@^5.3.4: + version "5.3.4" + resolved "https://registry.yarnpkg.com/single-spa/-/single-spa-5.3.4.tgz#d456b698f2068e98f94d3e203620dfc69b1a57c4" + integrity sha512-J0I+OfKn04QdaOp3lC8UL2xmD/BA/V0OisbCFbrR5LDIdsbcP9QG6ZFRNqIQQP8C9XXUtlGnA3ZWPLQBKGcOrw== sisteransi@^1.0.4: version "1.0.4"