From 12d8e716a95c2b248bb19de5ff94f9d427dbe8a4 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Mon, 8 Feb 2021 10:56:13 -0500 Subject: [PATCH 001/200] finish off the i18n cleanup --- scripts/utils/i18n_excludes | 46 +++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index 76b37af32..50ef9991f 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -11,7 +11,29 @@ breakdown.historical_chart.view_data breakdown.navigation.aws breakdown.navigation.azure breakdown.navigation.gcp +breakdown.navigation.ocp breakdown.navigation.ocpunit_tooltips.core-hours +chart.cost_forecast_cone_legend_label_no_data +chart.cost_forecast_cone_legend_label_plural +chart.cost_forecast_legend_label_no_data +chart.cost_forecast_legend_label_plural +chart.cost_infrastructure_forecast_cone_legend_label_no_data +chart.cost_infrastructure_forecast_cone_legend_label_plural +chart.cost_infrastructure_forecast_cone_tooltip +chart.cost_infrastructure_forecast_legend_label_no_data +chart.cost_infrastructure_forecast_legend_label_plural +chart.cost_infrastructure_legend_label_no_data +chart.cost_infrastructure_legend_label_plural +chart.cost_legend_label_no_data +chart.cost_legend_label_plural +chart.cost_supplementary_legend_label_no_data +chart.cost_supplementary_legend_label_plural +chart.limit_legend_label_no_data +chart.limit_legend_label_plural +chart.requests_legend_label_no_data +chart.requests_legend_label_plural +chart.usage_legend_label_no_data +chart.usage_legend_label_plural cost_models.add_rate_form.save_rate_button cost_models.infra_cost_switch cost_models.infra_no @@ -56,6 +78,7 @@ details.price_list.modal.hours details.price_list.modal.month details.price_list.modal.no_match details.price_list.modal.title +details.tags_modal_title details.usage.cpu_capacity details.usage.cpu_limit details.usage.cpu_requests @@ -72,6 +95,16 @@ details.usage.memory_requests_unused_units details.usage.memory_usage details.usage.memory_usage_unused_label details.usage.memory_usage_unused_units +dialog.deleteMarkup +dialog.markup.body +dialog.markup.title +dialog.title +explorer.title.azure +explorer.title.gcp +explorer.title.ocp +explorer.total_cost +export.daily +export.monthly filter_by.account.button_aria_label filter_by.account.input_aria_label filter_by.account.placeholder @@ -155,12 +188,25 @@ group_by.values.tag group_by.values.tag_plural months_abbr no_match_found_state.title +onboarding.type_label +overview.title_aria_label source_details.type.AWS source_details.type.AZURE source_details.type.OCP +source_details.type.GCP +toolbar.filterby toolbar.pricelist.options.Currency toolbar.pricelist.options.Request toolbar.pricelist.options.Usage +toolbar.sources.lower.description +toolbar.sources.lower.name +toolbar.sources.primary.description +toolbar.sources.primary.name +toolbar.sources.primary.source_type +toolbar.sources.secondary.aws +toolbar.sources.secondary.azure +toolbar.sources.secondary.none +toolbar.sources.secondary.ocp units.core-hours units.gb units.gb-hours From 47e6e3a42ad60569a3cb1aa1b203d5c460a5513f Mon Sep 17 00:00:00 2001 From: Andrew Berglund Date: Wed, 10 Feb 2021 08:32:44 -0500 Subject: [PATCH 002/200] Add tag release github action --- .github/workflows/tag_release.yml | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/tag_release.yml diff --git a/.github/workflows/tag_release.yml b/.github/workflows/tag_release.yml new file mode 100644 index 000000000..d1bcac7d6 --- /dev/null +++ b/.github/workflows/tag_release.yml @@ -0,0 +1,36 @@ +name: Tag Release +on: + push: + branches: + - prod-stable +jobs: + tag_release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + ref: prod-stable + - run: | + git fetch --prune --unshallow + - name: Tag this release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + DATE=$(date +"%Y.%m.%d") + PREV_RELEASE=$(git tag --list | tail -1) + MINOR_VERSION=0 + case $PREV_RELEASE in + *"$DATE"*) + MINOR_VERSION="$PREV_RELEASE" | cut -d'.' -f5 + MINOR_VERSION=$((MINOR_VERSION+1)) + ;; + *) + MINOR_VERSION=0 + ;; + esac + TAG="r.$DATE.$MINOR_VERSION" + git config --local user.email "cost-mgmt@redhat.com" + git config --local user.name "Cost Management Release Action" + git log $(git tag --list | tail -1)..prod-stable | git tag -a $TAG -F - + git push origin $TAG + shell: bash From 1ecc80433bd4adab8895f91786d544fedf79bdf8 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:13:55 -0500 Subject: [PATCH 003/200] Created explorer utils for common functions --- src/pages/explorer/explorerUtils.ts | 378 ++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 src/pages/explorer/explorerUtils.ts diff --git a/src/pages/explorer/explorerUtils.ts b/src/pages/explorer/explorerUtils.ts new file mode 100644 index 000000000..3313bbef3 --- /dev/null +++ b/src/pages/explorer/explorerUtils.ts @@ -0,0 +1,378 @@ +import { OrgPathsType } from 'api/orgs/org'; +import { Providers } from 'api/providers'; +import { getQueryRoute, Query } from 'api/queries/query'; +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { TagPathsType } from 'api/tags/tag'; +import { UserAccess, UserAccessType } from 'api/userAccess'; +import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; +import { FetchStatus } from 'store/common'; +import { ComputedAwsReportItemsParams } from 'utils/computedReport/getComputedAwsReportItems'; +import { ComputedAzureReportItemsParams } from 'utils/computedReport/getComputedAzureReportItems'; +import { ComputedGcpReportItemsParams } from 'utils/computedReport/getComputedGcpReportItems'; +import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; + +// eslint-disable-next-line no-shadow +export const enum PerspectiveType { + allCloud = 'all_cloud', // All filtered by Ocp + aws = 'aws', + awsCloud = 'aws_cloud', // Aws filtered by Ocp + azure = 'azure', + azureCloud = 'azure_cloud', // Azure filtered by Ocp + gcp = 'gcp', + ocp = 'ocp', + ocpSupplementary = 'ocp_supplementary', + ocpUsage = 'ocp_usage', +} + +export const baseQuery: Query = { + filter: { + limit: 10, + offset: 0, + resolution: 'daily', + time_scope_units: 'month', + time_scope_value: -1, + }, + filter_by: {}, + group_by: { + account: '*', + }, + order_by: { + cost: 'desc', + }, +}; + +export const groupByAwsOptions: { + label: string; + value: ComputedAwsReportItemsParams['idKey']; +}[] = [ + { label: 'account', value: 'account' }, + { label: 'service', value: 'service' }, + { label: 'region', value: 'region' }, +]; + +export const groupByAzureOptions: { + label: string; + value: ComputedAzureReportItemsParams['idKey']; +}[] = [ + { label: 'subscription_guid', value: 'subscription_guid' }, + { label: 'service_name', value: 'service_name' }, + { label: 'resource_location', value: 'resource_location' }, +]; + +export const groupByGcpOptions: { + label: string; + value: ComputedGcpReportItemsParams['idKey']; +}[] = [ + { label: 'account', value: 'account' }, + { label: 'project', value: 'project' }, + { label: 'service', value: 'service' }, + { label: 'region', value: 'region' }, +]; + +export const groupByOcpOptions: { + label: string; + value: ComputedOcpReportItemsParams['idKey']; +}[] = [ + { label: 'cluster', value: 'cluster' }, + { label: 'node', value: 'node' }, + { label: 'project', value: 'project' }, +]; + +// Infrastructure all cloud options +export const infrastructureAllCloudOptions = [{ label: 'explorer.perspective.all_cloud', value: 'all_cloud' }]; + +// Infrastructure AWS options +export const infrastructureAwsOptions = [{ label: 'explorer.perspective.aws', value: 'aws' }]; + +// Infrastructure AWS cloud options +export const infrastructureAwsCloudOptions = [{ label: 'explorer.perspective.aws_cloud', value: 'aws_cloud' }]; + +// Infrastructure Azure options +export const infrastructureAzureOptions = [{ label: 'explorer.perspective.azure', value: 'azure' }]; + +// Infrastructure Azure cloud options +export const infrastructureAzureCloudOptions = [{ label: 'explorer.perspective.azure_cloud', value: 'azure_cloud' }]; + +// Infrastructure GCP options +export const infrastructureGcpOptions = [{ label: 'explorer.perspective.gcp', value: 'gcp' }]; + +// Infrastructure Ocp options +export const infrastructureOcpOptions = [{ label: 'explorer.perspective.ocp_usage', value: 'ocp_usage' }]; + +// Ocp options +export const ocpOptions = [ + { label: 'explorer.perspective.ocp', value: 'ocp' }, + { label: 'explorer.perspective.ocp_supplementary', value: 'ocp_supplementary' }, +]; + +export const getComputedReportItemType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.ocpSupplementary: + result = ComputedReportItemType.supplementary; + break; + case PerspectiveType.aws: + case PerspectiveType.allCloud: + case PerspectiveType.awsCloud: + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + case PerspectiveType.gcp: + case PerspectiveType.ocp: + case PerspectiveType.ocpUsage: + default: + result = ComputedReportItemType.cost; + break; + } + return result; +}; + +export const getPerspectiveDefault = queryFromRoute => { + return queryFromRoute.perspective || PerspectiveType.ocp; +}; + +export const getGroupByDefault = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.aws: + case PerspectiveType.awsCloud: + case PerspectiveType.gcp: + result = 'account'; + break; + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + result = 'subscription_guid'; + break; + case PerspectiveType.allCloud: + case PerspectiveType.ocp: + case PerspectiveType.ocpSupplementary: + case PerspectiveType.ocpUsage: + result = 'project'; + break; + default: + result = undefined; + break; + } + return result; +}; + +export const getGroupByOptions = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.aws: + case PerspectiveType.awsCloud: + result = groupByAwsOptions; + break; + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + result = groupByAzureOptions; + break; + case PerspectiveType.gcp: + result = groupByGcpOptions; + break; + case PerspectiveType.allCloud: + case PerspectiveType.ocp: + case PerspectiveType.ocpSupplementary: + case PerspectiveType.ocpUsage: + result = groupByOcpOptions; + break; + default: + result = undefined; + break; + } + return result; +}; + +export const getOrgReportPathsType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.aws: + result = OrgPathsType.aws; + break; + case PerspectiveType.allCloud: + case PerspectiveType.awsCloud: + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + case PerspectiveType.gcp: + case PerspectiveType.ocp: + case PerspectiveType.ocpSupplementary: + case PerspectiveType.ocpUsage: + default: + result = undefined; + break; + } + return result; +}; + +export const getReportType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.allCloud: + case PerspectiveType.aws: + case PerspectiveType.awsCloud: + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + case PerspectiveType.gcp: + case PerspectiveType.ocp: + case PerspectiveType.ocpSupplementary: + case PerspectiveType.ocpUsage: + default: + result = ReportType.cost; + break; + } + return result; +}; + +export const getReportPathsType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.allCloud: + result = ReportPathsType.ocpCloud; + break; + case PerspectiveType.aws: + result = ReportPathsType.aws; + break; + case PerspectiveType.awsCloud: + result = ReportPathsType.awsCloud; + break; + case PerspectiveType.azure: + result = ReportPathsType.azure; + break; + case PerspectiveType.azureCloud: + result = ReportPathsType.azureCloud; + break; + case PerspectiveType.gcp: + result = ReportPathsType.gcp; + break; + case PerspectiveType.ocp: + result = ReportPathsType.ocp; + break; + case PerspectiveType.ocpSupplementary: + result = ReportPathsType.ocp; + break; + case PerspectiveType.ocpUsage: + result = ReportPathsType.ocpUsage; + break; + default: + result = undefined; + break; + } + return result; +}; + +export const getTagReportPathsType = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.aws: + case PerspectiveType.awsCloud: + return TagPathsType.aws; + break; + case PerspectiveType.azure: + case PerspectiveType.azureCloud: + return TagPathsType.azure; + break; + case PerspectiveType.gcp: + return TagPathsType.gcp; + break; + case PerspectiveType.allCloud: + case PerspectiveType.ocp: + case PerspectiveType.ocpSupplementary: + case PerspectiveType.ocpUsage: + return TagPathsType.ocp; + break; + default: + result = undefined; + break; + } + return result; +}; + +export const getRouteForQuery = (history, query: Query, reset: boolean = false) => { + // Reset pagination + if (reset) { + query.filter = { + ...query.filter, + offset: baseQuery.filter.offset, + }; + } + return `${history.location.pathname}?${getQueryRoute(query)}`; +}; + +export const isAwsAvailable = ( + awsProviders: Providers, + awsProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (awsProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.aws); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + awsProviders !== undefined && + awsProviders.meta !== undefined && + awsProviders.meta.count > 0; + } + return result; +}; + +export const isAzureAvailable = ( + azureProviders: Providers, + azureProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (azureProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.azure); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + azureProviders !== undefined && + azureProviders.meta !== undefined && + azureProviders.meta.count > 0; + } + return result; +}; + +export const isGcpAvailable = ( + gcpProviders: Providers, + gcpsProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (gcpsProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.gcp); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + gcpProviders !== undefined && + gcpProviders.meta !== undefined && + gcpProviders.meta.count > 0; + } + return result; +}; + +export const isOcpAvailable = ( + ocpProviders: Providers, + ocpProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (ocpProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.ocp); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + ocpProviders !== undefined && + ocpProviders.meta !== undefined && + ocpProviders.meta.count > 0; + } + return result; +}; From f471a2dbcc484764fd1d5155e8bc35ef8ac657e1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:14:42 -0500 Subject: [PATCH 004/200] Created explorer report items for perspective dropdown --- src/api/reports/explorerReports.ts | 16 +++++++ .../getComputedExplorerReportItems.ts | 44 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/api/reports/explorerReports.ts create mode 100644 src/utils/computedReport/getComputedExplorerReportItems.ts diff --git a/src/api/reports/explorerReports.ts b/src/api/reports/explorerReports.ts new file mode 100644 index 000000000..23490c0e8 --- /dev/null +++ b/src/api/reports/explorerReports.ts @@ -0,0 +1,16 @@ +import { ReportItem } from './report'; + +export interface ExplorerReportItem extends ReportItem { + account?: string; + account_alias?: string; + cluster?: string; + instance_type?: string; + node?: string; + org_unit_id?: string; + project?: string; + region?: string; + resource_location?: string; + service?: string; + service_name?: string; + subscription_guid?: string; +} diff --git a/src/utils/computedReport/getComputedExplorerReportItems.ts b/src/utils/computedReport/getComputedExplorerReportItems.ts new file mode 100644 index 000000000..d4bc0d2eb --- /dev/null +++ b/src/utils/computedReport/getComputedExplorerReportItems.ts @@ -0,0 +1,44 @@ +import { Query } from 'api/queries/query'; +import { ExplorerReportItem } from 'api/reports/explorerReports'; +import { Report } from 'api/reports/report'; + +import { ComputedReportItemsParams } from './getComputedReportItems'; + +export interface ComputedExplorerReportItemsParams extends ComputedReportItemsParams {} + +export function getIdKeyForGroupBy(groupBy: Query['group_by'] = {}): ComputedExplorerReportItemsParams['idKey'] { + if (groupBy.account) { + return 'account'; + } + if (groupBy.cluster) { + return 'cluster'; + } + if (groupBy.instance_type) { + return 'instance_type'; + } + if (groupBy.node) { + return 'node'; + } + if (groupBy.org_unit_id) { + return 'org_unit_id'; + } + if (groupBy.project) { + return 'project'; + } + if (groupBy.region) { + return 'region'; + } + if (groupBy.resource_location) { + return 'resource_location'; + } + if (groupBy.service) { + return 'service'; + } + if (groupBy.service_name) { + return 'service_name'; + } + if (groupBy.subscription_guid) { + return 'subscription_guid'; + } + return 'date'; +} From 744d2e9aa25cf8392c7f2a28adefd62865d7bceb Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:15:09 -0500 Subject: [PATCH 005/200] alphabetical order --- src/api/queries/gcpQuery.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/api/queries/gcpQuery.ts b/src/api/queries/gcpQuery.ts index 40086928f..20b9edbde 100644 --- a/src/api/queries/gcpQuery.ts +++ b/src/api/queries/gcpQuery.ts @@ -10,17 +10,17 @@ interface GcpGroupBys { service?: GcpGroupByValue; account?: GcpGroupByValue; instance_type?: GcpGroupByValue; - region?: GcpGroupByValue; project?: GcpGroupByValue; + region?: GcpGroupByValue; } interface GcpOrderBys { account?: string; + cost?: string; + project?: string; region?: string; service?: string; - cost?: string; usage?: string; - project?: string; } export interface GcpQuery extends utils.Query { From fceb9666fd7c906156b17e87ce5a0c17ffcc2e3e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:16:02 -0500 Subject: [PATCH 006/200] Renamed overview perspective awsFiltered as awsCloud --- src/pages/overview/overview.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/overview/overview.tsx b/src/pages/overview/overview.tsx index 51ef76898..c9851df16 100644 --- a/src/pages/overview/overview.tsx +++ b/src/pages/overview/overview.tsx @@ -40,7 +40,7 @@ import { Perspective } from './perspective'; const enum InfrastructurePerspective { allCloud = 'all_cloud', // All filtered by Ocp aws = 'aws', - awsFiltered = 'aws_cloud', // Aws filtered by Ocp + awsCloud = 'aws_cloud', // Aws filtered by Ocp azure = 'azure', azureCloud = 'azure_cloud', // Azure filtered by Ocp gcp = 'gcp', @@ -345,7 +345,7 @@ class OverviewBase extends React.Component { return this.hasCurrentMonthData(ocpProviders) ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.aws) { return this.hasCurrentMonthData(awsProviders) ? : noData; - } else if (currentInfrastructurePerspective === InfrastructurePerspective.awsFiltered) { + } else if (currentInfrastructurePerspective === InfrastructurePerspective.awsCloud) { return this.hasCurrentMonthData(awsProviders) ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.gcp) { return this.hasCurrentMonthData(gcpProviders) ? : noData; From 659d987eb4a2dabbbe054ac338b7bb38fb3cf4b6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:16:37 -0500 Subject: [PATCH 007/200] Added computedReportItemType to show supplementary cost --- src/pages/explorer/explorerTable.tsx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 9934b6b8c..824b094f0 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -6,6 +6,7 @@ import { sortable, SortByDirection, Table, TableBody, TableHeader } from '@patte import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; +import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import getDate from 'date-fns/get_date'; import getMonth from 'date-fns/get_month'; @@ -18,6 +19,7 @@ import { formatCurrency } from 'utils/formatValue'; import { styles } from './explorerTable.styles'; interface ExplorerTableOwnProps { + computedReportItemType?: ComputedReportItemType; groupBy: string; isAllSelected?: boolean; isLoading?: boolean; @@ -67,7 +69,14 @@ class ExplorerTableBase extends React.Component { } private initDatum = () => { - const { isAllSelected, query, report, selectedItems, t } = this.props; + const { + computedReportItemType = ComputedReportItemType.cost, + isAllSelected, + query, + report, + selectedItems, + t, + } = this.props; if (!query || !report) { return; } @@ -117,7 +126,10 @@ class ExplorerTableBase extends React.Component { // Add row cells cells.push({ - title: item.cost && item.cost.total ? formatCurrency(item.cost.total.value) : t('explorer.no_data'), + title: + item[computedReportItemType] && item[computedReportItemType].total + ? formatCurrency(item[computedReportItemType].total.value) + : t('explorer.no_data'), }); }); // Fill in missing data From e735acdc1ed2180db08dc954a8bb280fbe8730fd Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:17:26 -0500 Subject: [PATCH 008/200] Allow perspective menu to be disabled --- src/pages/overview/perspective.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/pages/overview/perspective.tsx b/src/pages/overview/perspective.tsx index 28ac01708..7b446d90b 100644 --- a/src/pages/overview/perspective.tsx +++ b/src/pages/overview/perspective.tsx @@ -6,6 +6,7 @@ import { styles } from './perspective.styles'; interface PerspectiveOwnProps { currentItem?: string; + isDisabled?: boolean; onItemClicked(value: string); options?: { label: string; @@ -68,7 +69,7 @@ class PerspectiveBase extends React.Component { }; public render() { - const { t } = this.props; + const { isDisabled, t } = this.props; const { isPerspectiveOpen } = this.state; const dropdownItems = this.getDropDownItems(); @@ -77,7 +78,11 @@ class PerspectiveBase extends React.Component { {this.getCurrentLabel()}} + toggle={ + + {this.getCurrentLabel()} + + } isOpen={isPerspectiveOpen} dropdownItems={dropdownItems} /> From 722a783ebe96d8cb911b317cae6dafc6247fccf6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:18:06 -0500 Subject: [PATCH 009/200] Added perspective query param --- src/api/queries/query.ts | 2 + src/locales/en.json | 11 + src/pages/explorer/explorerHeader.styles.ts | 7 + src/pages/explorer/explorerHeader.tsx | 347 ++++++++++++++++---- 4 files changed, 306 insertions(+), 61 deletions(-) diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index e1b3ccdd5..d5042b598 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -31,6 +31,8 @@ export interface Query { filter_by?: FilterBys; group_by?: any; key_only?: boolean; + order_by?: any; + perspective?: any; } // Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 diff --git a/src/locales/en.json b/src/locales/en.json index e843cc411..0fed85793 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -477,6 +477,17 @@ "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "name_column_title": "Names", "no_data": "no data", + "perspective": { + "all_cloud": "All cloud filtered by OpenShift", + "aws": "Amazon Web Services", + "aws_cloud": "Amazon Web Services filtered by OpenShift", + "azure": "Microsoft Azure", + "azure_cloud": "Microsoft Azure filtered by OpenShift", + "gcp": "Google Cloud Platform", + "ocp": "All OpenShift cost", + "ocp_supplementary": "OpenShift supplementary cost", + "ocp_usage": "OpenShift usage" + }, "tag_column_title": "Tag names", "title": { "aws": "Amazon Web Services - All Cost Top 5 Costliest", diff --git a/src/pages/explorer/explorerHeader.styles.ts b/src/pages/explorer/explorerHeader.styles.ts index 125e2ea8d..54b1499d2 100644 --- a/src/pages/explorer/explorerHeader.styles.ts +++ b/src/pages/explorer/explorerHeader.styles.ts @@ -26,6 +26,9 @@ export const styles = { fontSize: global_FontSize_sm.value, color: global_Color_200.var, }, + groupBy: { + paddingLeft: global_spacer_lg.var, + }, header: { display: 'flex', justifyContent: 'space-between', @@ -35,6 +38,10 @@ export const styles = { paddingTop: global_spacer_lg.var, backgroundColor: global_BackgroundColor_light_100.var, }, + perspectiveContainer: { + display: 'flex', + marginTop: global_spacer_md.var, + }, title: { paddingBottom: global_spacer_sm.var, }, diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/explorer/explorerHeader.tsx index dd9b27c53..0460c5348 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/explorer/explorerHeader.tsx @@ -1,80 +1,237 @@ import { Title } from '@patternfly/react-core'; -import { OrgPathsType } from 'api/orgs/org'; import { Providers, ProviderType } from 'api/providers'; -import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { getProvidersQuery } from 'api/queries/providersQuery'; -import { Query, tagPrefix } from 'api/queries/query'; -import { AwsReport } from 'api/reports/awsReports'; -import { TagPathsType } from 'api/tags/tag'; +import { getQuery, parseQuery, Query, tagPrefix } from 'api/queries/query'; +import { getUserAccessQuery } from 'api/queries/userAccessQuery'; +import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; import { getGroupByTagKey } from 'pages/details/common/detailsUtils'; import { GroupBy } from 'pages/details/components/groupBy/groupBy'; +import { Perspective } from 'pages/overview/perspective'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { RouteComponentProps, withRouter } from 'react-router'; import { createMapStateToProps, FetchStatus } from 'store/common'; -import { awsProvidersQuery, providersSelectors } from 'store/providers'; -import { ComputedAwsReportItemsParams, getIdKeyForGroupBy } from 'utils/computedReport/getComputedAwsReportItems'; +import { + awsProvidersQuery, + azureProvidersQuery, + gcpProvidersQuery, + ocpProvidersQuery, + providersSelectors, +} from 'store/providers'; +import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ExplorerFilter } from './explorerFilter'; import { styles } from './explorerHeader.styles'; +import { + baseQuery, + getGroupByDefault, + getGroupByOptions, + getOrgReportPathsType, + getPerspectiveDefault, + getRouteForQuery, + getTagReportPathsType, + infrastructureAllCloudOptions, + infrastructureAwsCloudOptions, + infrastructureAwsOptions, + infrastructureAzureCloudOptions, + infrastructureAzureOptions, + infrastructureGcpOptions, + infrastructureOcpOptions, + isAwsAvailable, + isAzureAvailable, + isGcpAvailable, + isOcpAvailable, + ocpOptions, + PerspectiveType, +} from './explorerUtils'; interface ExplorerHeaderOwnProps { groupBy?: string; onGroupByClicked(value: string); onFilterAdded(filterType: string, filterValue: string); onFilterRemoved(filterType: string, filterValue?: string); - report: AwsReport; - query?: Query; } interface ExplorerHeaderStateProps { - queryString?: string; - providers: Providers; - providersError: AxiosError; - providersFetchStatus: FetchStatus; + awsProviders: Providers; + awsProvidersFetchStatus: FetchStatus; + awsProvidersQueryString: string; + azureProviders: Providers; + azureProvidersFetchStatus: FetchStatus; + azureProvidersQueryString: string; + gcpProviders: Providers; + gcpProvidersFetchStatus: FetchStatus; + gcpProvidersQueryString: string; + ocpProviders: Providers; + ocpProvidersFetchStatus: FetchStatus; + ocpProvidersQueryString: string; + perspective: PerspectiveType; + query: Query; + queryString: string; + userAccess: UserAccess; + userAccessError: AxiosError; + userAccessFetchStatus: FetchStatus; + userAccessQueryString: string; } -type ExplorerHeaderProps = ExplorerHeaderOwnProps & ExplorerHeaderStateProps & WithTranslation; - -const baseQuery: AwsQuery = { - delta: 'cost', - filter: { - time_scope_units: 'month', - time_scope_value: -1, - resolution: 'monthly', - }, -}; - -const groupByOptions: { - label: string; - value: ComputedAwsReportItemsParams['idKey']; -}[] = [ - { label: 'account', value: 'account' }, - { label: 'service', value: 'service' }, - { label: 'region', value: 'region' }, -]; - -const orgReportPathsType = OrgPathsType.aws; -const tagReportPathsType = TagPathsType.aws; +interface ExplorerHeaderState { + currentPerspective?: PerspectiveType; +} + +type ExplorerHeaderProps = ExplorerHeaderOwnProps & + ExplorerHeaderStateProps & + RouteComponentProps & + WithTranslation; class ExplorerHeaderBase extends React.Component { + protected defaultState: ExplorerHeaderState = { + // TBD... + }; + public state: ExplorerHeaderState = { ...this.defaultState }; + + public componentDidMount() { + this.setState({ + currentPerspective: this.getDefaultPerspective(), + }); + } + + private getDefaultPerspective = () => { + const { + awsProviders, + awsProvidersFetchStatus, + azureProviders, + azureProvidersFetchStatus, + gcpProviders, + gcpProvidersFetchStatus, + ocpProviders, + ocpProvidersFetchStatus, + userAccess, + } = this.props; + + if (isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess)) { + return PerspectiveType.ocp; + } + if (isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess)) { + return PerspectiveType.aws; + } + if (isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess)) { + return PerspectiveType.azure; + } + if (isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess)) { + return PerspectiveType.gcp; + } + return undefined; + }; + + private getPerspective = (isDisabled: boolean) => { + const { + awsProviders, + awsProvidersFetchStatus, + azureProviders, + azureProvidersFetchStatus, + gcpProviders, + gcpProvidersFetchStatus, + ocpProviders, + ocpProvidersFetchStatus, + userAccess, + } = this.props; + const { currentPerspective } = this.state; + + const _isAwsAvailable = isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess); + const _isAzureAvailable = isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess); + const _isGcpAvailable = isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess); + const _isOcpAvailable = isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess); + + if (!(_isAwsAvailable || _isAzureAvailable || _isGcpAvailable || _isOcpAvailable)) { + return null; + } + + // Dynamically show options if providers are available + const options = []; + if (_isOcpAvailable) { + options.push(...ocpOptions); + options.push(...infrastructureAllCloudOptions); + } + if (_isAwsAvailable) { + options.push(...infrastructureAwsOptions); + } + if (_isOcpAvailable && isAwsAvailable) { + options.push(...infrastructureAwsCloudOptions); + } + if (_isGcpAvailable) { + options.push(...infrastructureGcpOptions); + } + if (_isAzureAvailable) { + options.push(...infrastructureAzureOptions); + } + if (_isOcpAvailable && isAzureAvailable) { + options.push(...infrastructureAzureCloudOptions); + } + if (_isOcpAvailable) { + options.push(...infrastructureOcpOptions); + } + + return ( + + ); + }; + + private handlePerspectiveClick = (value: string) => { + const { history, query } = this.props; + + const newQuery = { + ...JSON.parse(JSON.stringify(query)), + filter_by: undefined, + group_by: { [getGroupByDefault(value)]: '*' }, + order_by: { cost: 'desc' }, + perspective: value, + }; + history.replace(getRouteForQuery(history, newQuery, true)); + this.setState({ currentPerspective: value }); + }; + public render() { const { + awsProviders, + azureProviders, + gcpProviders, + ocpProviders, + awsProvidersFetchStatus, + azureProvidersFetchStatus, + gcpProvidersFetchStatus, groupBy, + ocpProvidersFetchStatus, onFilterAdded, onFilterRemoved, onGroupByClicked, - providers, - providersError, + perspective, query, - report, t, + userAccess, } = this.props; const groupById = getIdKeyForGroupBy(query.group_by); const groupByTagKey = getGroupByTagKey(query); - const showContent = report && !providersError && providers && providers.meta && providers.meta.count > 0; + + // Test for no providers + const noProviders = !( + isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess) && + isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess) && + isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess) && + isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess) + ); + + const groupByOptions = getGroupByOptions(perspective); + const orgReportPathsType = getOrgReportPathsType(perspective); + const tagReportPathsType = getTagReportPathsType(perspective); return (
@@ -82,20 +239,25 @@ class ExplorerHeaderBase extends React.Component { {t('navigation.explorer')} - +
+ {this.getPerspective(noProviders)} +
+ +
+
{ // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const queryString = getQuery(baseQuery); - const providersQueryString = getProvidersQuery(awsProvidersQuery); - const providers = providersSelectors.selectProviders(state, ProviderType.aws, providersQueryString); - const providersError = providersSelectors.selectProvidersError(state, ProviderType.aws, providersQueryString); - const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( + const queryFromRoute = parseQuery(location.search); + const perspective = getPerspectiveDefault(queryFromRoute); + const query = { + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + }, + filter_by: queryFromRoute.filter_by || baseQuery.filter_by, + group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, + order_by: queryFromRoute.order_by || baseQuery.order_by, + perspective, + }; + const queryString = getQuery({ + ...query, + perspective: undefined, + }); + + const awsProvidersQueryString = getProvidersQuery(awsProvidersQuery); + const awsProviders = providersSelectors.selectProviders(state, ProviderType.aws, awsProvidersQueryString); + const awsProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( state, ProviderType.aws, - providersQueryString + awsProvidersQueryString + ); + + const azureProvidersQueryString = getProvidersQuery(azureProvidersQuery); + const azureProviders = providersSelectors.selectProviders(state, ProviderType.azure, azureProvidersQueryString); + const azureProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.azure, + azureProvidersQueryString + ); + + const gcpProvidersQueryString = getProvidersQuery(gcpProvidersQuery); + const gcpProviders = providersSelectors.selectProviders(state, ProviderType.gcp, gcpProvidersQueryString); + const gcpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.gcp, + gcpProvidersQueryString + ); + + const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); + const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); + const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ocp, + ocpProvidersQueryString + ); + + const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); + const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); + const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString); + const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( + state, + UserAccessType.all, + userAccessQueryString ); return { - providers, - providersError, - providersFetchStatus, + awsProviders, + awsProvidersFetchStatus, + awsProvidersQueryString, + azureProviders, + azureProvidersFetchStatus, + azureProvidersQueryString, + gcpProviders, + gcpProvidersFetchStatus, + gcpProvidersQueryString, + ocpProviders, + ocpProvidersFetchStatus, + ocpProvidersQueryString, + perspective, + query, queryString, + userAccess, + userAccessError, + userAccessFetchStatus, + userAccessQueryString, }; }); -const ExplorerHeader = withTranslation()(connect(mapStateToProps, {})(ExplorerHeaderBase)); +const ExplorerHeader = withRouter(withTranslation()(connect(mapStateToProps, {})(ExplorerHeaderBase))); export { ExplorerHeader, ExplorerHeaderProps }; From adbb360db3a6e2cbbddf96a7cb801f289f4487cd Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 00:18:50 -0500 Subject: [PATCH 010/200] Updated chart to be in sync with perspective menu --- src/pages/explorer/explorer.tsx | 254 ++++++++++++++++++--------- src/pages/explorer/explorerChart.tsx | 67 +++---- 2 files changed, 209 insertions(+), 112 deletions(-) diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index c0b89d897..58a952eae 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -1,10 +1,11 @@ import { Pagination, PaginationVariant } from '@patternfly/react-core'; import { Providers, ProviderType } from 'api/providers'; -import { AwsQuery, getQuery, getQueryRoute, parseQuery } from 'api/queries/awsQuery'; import { getProvidersQuery } from 'api/queries/providersQuery'; +import { getQuery, parseQuery, Query } from 'api/queries/query'; import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; -import { AwsReport } from 'api/reports/awsReports'; -import { ReportPathsType, ReportType } from 'api/reports/report'; +import { getUserAccessQuery } from 'api/queries/userAccessQuery'; +import { Report } from 'api/reports/report'; +import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; import { ExportModal } from 'pages/details/components/export/exportModal'; @@ -17,9 +18,16 @@ import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { RouteComponentProps } from 'react-router'; import { createMapStateToProps, FetchStatus } from 'store/common'; -import { awsProvidersQuery, providersSelectors } from 'store/providers'; +import { + awsProvidersQuery, + azureProvidersQuery, + gcpProvidersQuery, + ocpProvidersQuery, + providersSelectors, +} from 'store/providers'; import { reportActions, reportSelectors } from 'store/reports'; -import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedAwsReportItems'; +import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; import { styles } from './explorer.styles'; @@ -27,15 +35,44 @@ import { ExplorerChart } from './explorerChart'; import { ExplorerHeader } from './explorerHeader'; import { ExplorerTable } from './explorerTable'; import { ExplorerToolbar } from './explorerToolbar'; +import { + baseQuery, + getComputedReportItemType, + getGroupByDefault, + getPerspectiveDefault, + getReportPathsType, + getReportType, + getRouteForQuery, + isAwsAvailable, + isAzureAvailable, + isGcpAvailable, + isOcpAvailable, + PerspectiveType, +} from './explorerUtils'; interface ExplorerStateProps { - providers: Providers; - providersFetchStatus: FetchStatus; - query: AwsQuery; + awsProviders: Providers; + awsProvidersFetchStatus: FetchStatus; + awsProvidersQueryString: string; + azureProviders: Providers; + azureProvidersFetchStatus: FetchStatus; + azureProvidersQueryString: string; + gcpProviders: Providers; + gcpProvidersFetchStatus: FetchStatus; + gcpProvidersQueryString: string; + ocpProviders: Providers; + ocpProvidersFetchStatus: FetchStatus; + ocpProvidersQueryString: string; + perspective: PerspectiveType; + query: Query; queryString: string; - report: AwsReport; + report: Report; reportError: AxiosError; reportFetchStatus: FetchStatus; + userAccess: UserAccess; + userAccessError: AxiosError; + userAccessFetchStatus: FetchStatus; + userAccessQueryString: string; } interface ExplorerDispatchProps { @@ -44,6 +81,7 @@ interface ExplorerDispatchProps { interface ExplorerState { columns: any[]; + currentPerspective?: string; isAllSelected: boolean; isExportModalOpen: boolean; rows: any[]; @@ -54,26 +92,6 @@ type ExplorerOwnProps = RouteComponentProps & WithTranslation; type ExplorerProps = ExplorerStateProps & ExplorerOwnProps & ExplorerDispatchProps; -const baseQuery: AwsQuery = { - filter: { - limit: 10, - offset: 0, - resolution: 'daily', - time_scope_units: 'month', - time_scope_value: -1, - }, - filter_by: {}, - group_by: { - account: '*', - }, - order_by: { - cost: 'desc', - }, -}; - -const reportType = ReportType.cost; -const reportPathsType = ReportPathsType.aws; - class Explorer extends React.Component { protected defaultState: ExplorerState = { columns: [], @@ -128,8 +146,8 @@ class Explorer extends React.Component { }; private getExportModal = (computedItems: ComputedReportItem[]) => { + const { perspective, query, report } = this.props; const { isAllSelected, isExportModalOpen, selectedItems } = this.state; - const { query, report } = this.props; const groupById = getIdKeyForGroupBy(query.group_by); const groupByTagKey = getGroupByTagKey(query); @@ -143,7 +161,7 @@ class Explorer extends React.Component { items={selectedItems} onClose={this.handleExportModalClose} query={query} - reportPathsType={reportPathsType} + reportPathsType={getReportPathsType(perspective)} /> ); }; @@ -176,21 +194,8 @@ class Explorer extends React.Component { ); }; - private getRouteForQuery(query: AwsQuery, reset: boolean = false) { - const { history } = this.props; - - // Reset pagination - if (reset) { - query.filter = { - ...query.filter, - offset: baseQuery.filter.offset, - }; - } - return `${history.location.pathname}?${getQueryRoute(query)}`; - } - private getTable = () => { - const { query, report, reportFetchStatus } = this.props; + const { perspective, query, report, reportFetchStatus } = this.props; const { isAllSelected, selectedItems } = this.state; const groupById = getIdKeyForGroupBy(query.group_by); @@ -198,6 +203,7 @@ class Explorer extends React.Component { return ( { const { history, query } = this.props; const filteredQuery = addQueryFilter(query, filterType, filterValue); - history.replace(this.getRouteForQuery(filteredQuery, true)); + history.replace(getRouteForQuery(history, filteredQuery, true)); }; private handleFilterRemoved = (filterType: string, filterValue: string) => { const { history, query } = this.props; const filteredQuery = removeQueryFilter(query, filterType, filterValue); - history.replace(this.getRouteForQuery(filteredQuery, true)); + history.replace(getRouteForQuery(history, filteredQuery, true)); }; private handleGroupByClick = groupBy => { @@ -288,7 +294,7 @@ class Explorer extends React.Component { }, order_by: { cost: 'desc' }, }; - history.replace(this.getRouteForQuery(newQuery, true)); + history.replace(getRouteForQuery(history, newQuery, true)); this.setState({ isAllSelected: false, selectedItems: [] }); }; @@ -299,7 +305,7 @@ class Explorer extends React.Component { ...query.filter, limit: perPage, }; - const filteredQuery = this.getRouteForQuery(newQuery, true); + const filteredQuery = getRouteForQuery(history, newQuery, true); history.replace(filteredQuery); }; @@ -333,7 +339,7 @@ class Explorer extends React.Component { ...query.filter, offset, }; - const filteredQuery = this.getRouteForQuery(newQuery); + const filteredQuery = getRouteForQuery(history, newQuery); history.replace(filteredQuery); }; @@ -342,13 +348,12 @@ class Explorer extends React.Component { const newQuery = { ...JSON.parse(JSON.stringify(query)) }; newQuery.order_by = {}; newQuery.order_by[sortType] = isSortAscending ? 'asc' : 'desc'; - const filteredQuery = this.getRouteForQuery(newQuery); + const filteredQuery = getRouteForQuery(history, newQuery); history.replace(filteredQuery); }; // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; + private hasCurrentMonthData = (providers: Providers) => { let result = false; if (providers && providers.data) { @@ -363,44 +368,76 @@ class Explorer extends React.Component { }; private updateReport = () => { - const { query, location, fetchReport, history, queryString } = this.props; + const { perspective, fetchReport, history, location, query, queryString } = this.props; if (!location.search) { history.replace( - this.getRouteForQuery({ + getRouteForQuery(history, { filter_by: query ? query.filter_by : undefined, group_by: query ? query.group_by : undefined, order_by: { cost: 'desc' }, }) ); } else { - fetchReport(reportPathsType, reportType, queryString); + fetchReport(getReportPathsType(perspective), getReportType(perspective), queryString); } }; public render() { - const { providers, providersFetchStatus, query, report, reportError, reportFetchStatus, t } = this.props; + const { + awsProviders, + azureProviders, + gcpProviders, + ocpProviders, + awsProvidersFetchStatus, + azureProvidersFetchStatus, + gcpProvidersFetchStatus, + ocpProvidersFetchStatus, + perspective, + userAccessFetchStatus, + query, + reportError, + reportFetchStatus, + t, + userAccess, + } = this.props; + + const isLoading = + awsProvidersFetchStatus === FetchStatus.inProgress || + azureProvidersFetchStatus === FetchStatus.inProgress || + gcpProvidersFetchStatus === FetchStatus.inProgress || + ocpProvidersFetchStatus === FetchStatus.inProgress || + userAccessFetchStatus === FetchStatus.inProgress; const groupById = getIdKeyForGroupBy(query.group_by); const computedItems = this.getComputedItems(); const title = t('navigation.explorer'); + // Test for no providers + const noProviders = !( + isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess) && + isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess) && + isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess) && + isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess) + ); + // Note: Providers are fetched via the InactiveSources component used by all routes if (reportError) { return ; - } else if (providersFetchStatus === FetchStatus.inProgress && reportFetchStatus === FetchStatus.inProgress) { + } else if (isLoading) { return ; - } else if (providersFetchStatus === FetchStatus.complete && reportFetchStatus === FetchStatus.complete) { - // API returns empy data array for no sources - const noProviders = - providers && providers.meta && providers.meta.count === 0 && providersFetchStatus === FetchStatus.complete; - - if (noProviders) { - return ; - } - if (!this.hasCurrentMonthData()) { - return ; - } + } else if (noProviders) { + return ; + } else if ( + !( + this.hasCurrentMonthData(awsProviders) && + this.hasCurrentMonthData(azureProviders) && + this.hasCurrentMonthData(gcpProviders) && + this.hasCurrentMonthData(ocpProviders) + ) + ) { + return ; } + return (
{ onGroupByClicked={this.handleGroupByClick} onFilterAdded={this.handleFilterAdded} onFilterRemoved={this.handleFilterRemoved} - query={query} - report={report} />
- +
@@ -437,37 +472,94 @@ class Explorer extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const queryFromRoute = parseQuery(location.search); + const queryFromRoute = parseQuery(location.search); + const perspective = getPerspectiveDefault(queryFromRoute); const query = { filter: { ...baseQuery.filter, ...queryFromRoute.filter, }, filter_by: queryFromRoute.filter_by || baseQuery.filter_by, - group_by: queryFromRoute.group_by || baseQuery.group_by, + group_by: queryFromRoute.group_by || { [getGroupByDefault(perspective)]: '*' } || baseQuery.group_by, order_by: queryFromRoute.order_by || baseQuery.order_by, + perspective, }; - const queryString = getQuery(query); + const queryString = getQuery({ + ...query, + perspective: undefined, + }); + + const reportPathsType = getReportPathsType(perspective); + const reportType = getReportType(perspective); + const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); - const providersQueryString = getProvidersQuery(awsProvidersQuery); - const providers = providersSelectors.selectProviders(state, ProviderType.aws, providersQueryString); - const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( + const awsProvidersQueryString = getProvidersQuery(awsProvidersQuery); + const awsProviders = providersSelectors.selectProviders(state, ProviderType.aws, awsProvidersQueryString); + const awsProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( state, ProviderType.aws, - providersQueryString + awsProvidersQueryString + ); + + const azureProvidersQueryString = getProvidersQuery(azureProvidersQuery); + const azureProviders = providersSelectors.selectProviders(state, ProviderType.azure, azureProvidersQueryString); + const azureProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.azure, + azureProvidersQueryString + ); + + const gcpProvidersQueryString = getProvidersQuery(gcpProvidersQuery); + const gcpProviders = providersSelectors.selectProviders(state, ProviderType.gcp, gcpProvidersQueryString); + const gcpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.gcp, + gcpProvidersQueryString + ); + + const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); + const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); + const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ocp, + ocpProvidersQueryString + ); + + const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); + const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); + const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString); + const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( + state, + UserAccessType.all, + userAccessQueryString ); return { - providers, - providersFetchStatus, + awsProviders, + awsProvidersFetchStatus, + awsProvidersQueryString, + azureProviders, + azureProvidersFetchStatus, + azureProvidersQueryString, + gcpProviders, + gcpProvidersFetchStatus, + gcpProvidersQueryString, + ocpProviders, + ocpProvidersFetchStatus, + ocpProvidersQueryString, + perspective, query, queryString, report, reportError, reportFetchStatus, + userAccess, + userAccessError, + userAccessFetchStatus, + userAccessQueryString, }; }); diff --git a/src/pages/explorer/explorerChart.tsx b/src/pages/explorer/explorerChart.tsx index 1025cbd85..00258c5c3 100644 --- a/src/pages/explorer/explorerChart.tsx +++ b/src/pages/explorer/explorerChart.tsx @@ -1,11 +1,9 @@ import { Title } from '@patternfly/react-core'; import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; -import { AwsQuery, getQuery, parseQuery } from 'api/queries/awsQuery'; -import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; +import { getQuery, orgUnitIdKey, parseQuery, Query, tagPrefix } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; -import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { ChartDatum, isFloat, isInt } from 'components/charts/common/chartDatumUtils'; +import { ChartDatum, ComputedReportItemType, isFloat, isInt } from 'components/charts/common/chartDatumUtils'; import { HistoricalExplorerChart } from 'components/charts/historicalExplorerChart'; import getDate from 'date-fns/get_date'; import getMonth from 'date-fns/get_month'; @@ -20,9 +18,22 @@ import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/comput import { formatValue } from 'utils/formatValue'; import { chartStyles, styles } from './explorerChart.styles'; +import { + baseQuery, + getGroupByDefault, + getPerspectiveDefault, + getReportPathsType, + getReportType, + PerspectiveType, +} from './explorerUtils'; + +interface ExplorerChartOwnProps extends RouteComponentProps, WithTranslation { + computedReportItemType?: ComputedReportItemType; +} interface ExplorerChartStateProps { - query: AwsQuery; + perspective: PerspectiveType; + query: Query; queryString: string; report: AwsReport; reportError: AxiosError; @@ -37,29 +48,8 @@ interface ExplorerChartState { // TBD... } -type ExplorerChartOwnProps = RouteComponentProps & WithTranslation; - type ExplorerChartProps = ExplorerChartStateProps & ExplorerChartOwnProps & ExplorerChartDispatchProps; -const baseQuery: AwsQuery = { - filter: { - limit: 5, - resolution: 'daily', - time_scope_units: 'month', - time_scope_value: -1, - }, - filter_by: {}, - group_by: { - account: '*', - }, - order_by: { - cost: 'asc', - }, -}; - -const reportType = ReportType.cost; -const reportPathsType = ReportPathsType.aws; - class ExplorerChartBase extends React.Component { protected defaultState: ExplorerChartState = {}; public state: ExplorerChartState = { ...this.defaultState }; @@ -107,13 +97,18 @@ class ExplorerChartBase extends React.Component { }; private fetchReport = () => { - const { fetchReport, queryString } = this.props; + const { fetchReport, perspective, queryString } = this.props; + + const reportPathsType = getReportPathsType(perspective); + const reportType = getReportType(perspective); fetchReport(reportPathsType, reportType, queryString); }; private getChartDatums = (computedItems: ComputedReportItem[]) => { - const reportItem = 'cost'; + const { computedReportItemType = ComputedReportItemType.cost } = this.props; + + const reportItem = computedReportItemType; const reportItemValue = 'total'; const chartDatums = []; @@ -229,7 +224,8 @@ class ExplorerChartBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { - const queryFromRoute = parseQuery(location.search); + const queryFromRoute = parseQuery(location.search); + const perspective = getPerspectiveDefault(queryFromRoute); const query = { filter: { ...baseQuery.filter, @@ -238,17 +234,26 @@ const mapStateToProps = createMapStateToProps Date: Wed, 10 Feb 2021 11:40:58 -0500 Subject: [PATCH 011/200] add gcp storage charts (#1839) * add gcp storage charts * changed location of GCP storage widget to follow the other perspective views. * update test to following gcp storage widget move * fix linting error * fixed ordering --- src/store/dashboard/gcpDashboard/gcpDashboard.test.ts | 7 +++---- .../dashboard/gcpDashboard/gcpDashboardReducer.ts | 10 ++++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/store/dashboard/gcpDashboard/gcpDashboard.test.ts b/src/store/dashboard/gcpDashboard/gcpDashboard.test.ts index 842430b7e..50c52bf1e 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboard.test.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboard.test.ts @@ -9,7 +9,7 @@ import * as actions from './gcpDashboardActions'; import { gcpDashboardStateKey, GcpDashboardTab, getGroupByForTab, getQueryForWidgetTabs } from './gcpDashboardCommon'; import { gcpDashboardReducer } from './gcpDashboardReducer'; import * as selectors from './gcpDashboardSelectors'; -import { computeWidget, costSummaryWidget, databaseWidget, networkWidget } from './gcpDashboardWidgets'; +import { computeWidget, costSummaryWidget, databaseWidget, networkWidget, storageWidget } from './gcpDashboardWidgets'; const createGcpDashboardStore = createMockStoreCreator({ [gcpDashboardStateKey]: gcpDashboardReducer, @@ -27,10 +27,9 @@ test('default state', () => { expect(selectors.selectCurrentWidgets(state)).toEqual([ costSummaryWidget.id, computeWidget.id, - databaseWidget.id, + storageWidget.id, networkWidget.id, - // TODO: add these as APIs become available - // storageWidget.id, + databaseWidget.id, ]); expect(selectors.selectWidget(state, costSummaryWidget.id)).toEqual(costSummaryWidget); }); diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts b/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts index ffb92ca4e..a6afd01bf 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts @@ -2,8 +2,7 @@ import { ActionType, getType } from 'typesafe-actions'; import { setWidgetTab } from './gcpDashboardActions'; import { GcpDashboardWidget } from './gcpDashboardCommon'; -import { computeWidget, costSummaryWidget, databaseWidget, networkWidget } from './gcpDashboardWidgets'; -// import { computeWidget, costSummaryWidget, databaseWidget, networkWidget, storageWidget } from './gcpDashboardWidgets'; +import { computeWidget, costSummaryWidget, databaseWidget, networkWidget, storageWidget } from './gcpDashboardWidgets'; export type GcpDashboardAction = ActionType; @@ -14,14 +13,13 @@ export type GcpDashboardState = Readonly<{ export const defaultState: GcpDashboardState = { // currentWidgets: [costSummaryWidget.id, computeWidget.id, storageWidget.id, networkWidget.id, databaseWidget.id], - currentWidgets: [costSummaryWidget.id, computeWidget.id, databaseWidget.id, networkWidget.id], + currentWidgets: [costSummaryWidget.id, computeWidget.id, storageWidget.id, networkWidget.id, databaseWidget.id], widgets: { [costSummaryWidget.id]: costSummaryWidget, [computeWidget.id]: computeWidget, - [databaseWidget.id]: databaseWidget, + [storageWidget.id]: storageWidget, [networkWidget.id]: networkWidget, - // @Todo:add these as APIs become available - // [storageWidget.id]: storageWidget, + [databaseWidget.id]: databaseWidget, }, }; From 670b895bd29f1aeadfd9d33a0980cbb2f168d2f2 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 17:11:19 -0500 Subject: [PATCH 012/200] fix explorer chart titles --- src/locales/en.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 0fed85793..bfac3508f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -490,10 +490,15 @@ }, "tag_column_title": "Tag names", "title": { - "aws": "Amazon Web Services - All Cost Top 5 Costliest", - "azure": "Microsoft Azure - All Cost Top 5 Costliest", - "gcp": "Google Cloud Platform - All Cost Top 5 Costliest", - "ocp": "OpenShift - All Cost Top 5 Costliest" + "all_cloud": "All cloud filtered by OpenShift - Top 5 Costliest", + "aws": "Amazon Web Services - Top 5 Costliest", + "aws_cloud": "Amazon Web Services filtered by OpenShift - Top 5 Costliest", + "azure": "Microsoft Azure - Top 5 Costliest", + "azure_cloud": "Microsoft Azure filtered by OpenShift - Top 5 Costliest", + "gcp": "Google Cloud Platform - Top 5 Costliest", + "ocp": "All OpenShift cost - Top 5 Costliest", + "ocp_supplementary": "OpenShift supplementary cost - Top 5 Costliest", + "ocp_usage": "OpenShift usage - Top 5 Costliest" }, "total_cost": "Total cost" }, From 3247cbfd53b25468292e33b451cd669af97045f4 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 17:12:18 -0500 Subject: [PATCH 013/200] Display chart titles according to perspective --- src/pages/explorer/explorerChart.tsx | 47 +++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/src/pages/explorer/explorerChart.tsx b/src/pages/explorer/explorerChart.tsx index 00258c5c3..3036d4a06 100644 --- a/src/pages/explorer/explorerChart.tsx +++ b/src/pages/explorer/explorerChart.tsx @@ -1,7 +1,7 @@ import { Title } from '@patternfly/react-core'; import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagPrefix } from 'api/queries/query'; -import { AwsReport } from 'api/reports/awsReports'; +import { Report } from 'api/reports/report'; import { AxiosError } from 'axios'; import { ChartDatum, ComputedReportItemType, isFloat, isInt } from 'components/charts/common/chartDatumUtils'; import { HistoricalExplorerChart } from 'components/charts/historicalExplorerChart'; @@ -13,7 +13,7 @@ import { connect } from 'react-redux'; import { RouteComponentProps, withRouter } from 'react-router'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { reportActions, reportSelectors } from 'store/reports'; -import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedAwsReportItems'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; import { formatValue } from 'utils/formatValue'; @@ -35,7 +35,7 @@ interface ExplorerChartStateProps { perspective: PerspectiveType; query: Query; queryString: string; - report: AwsReport; + report: Report; reportError: AxiosError; reportFetchStatus: FetchStatus; } @@ -127,6 +127,43 @@ class ExplorerChartBase extends React.Component { return chartDatums; }; + private getChartTitle = (perspective: string) => { + let result; + switch (perspective) { + case PerspectiveType.allCloud: + result = 'explorer.title.all_cloud'; + break; + case PerspectiveType.aws: + result = 'explorer.title.aws'; + break; + case PerspectiveType.awsCloud: + result = 'explorer.title.aws_cloud'; + break; + case PerspectiveType.azure: + result = 'explorer.title.azure'; + break; + case PerspectiveType.azureCloud: + result = 'explorer.title.azure_cloud'; + break; + case PerspectiveType.gcp: + result = 'explorer.title.gcp'; + break; + case PerspectiveType.ocp: + result = 'explorer.title.ocp'; + break; + case PerspectiveType.ocpSupplementary: + result = 'explorer.title.ocp_supplementary'; + break; + case PerspectiveType.ocpUsage: + result = 'explorer.title.ocp_usage'; + break; + default: + result = undefined; + break; + } + return result; + }; + private getComputedItems = () => { const { report } = this.props; @@ -184,7 +221,7 @@ class ExplorerChartBase extends React.Component { }; public render() { - const { reportFetchStatus, t } = this.props; + const { perspective, reportFetchStatus, t } = this.props; const datums = this.getChartDatums(this.getComputedItems()); @@ -193,7 +230,7 @@ class ExplorerChartBase extends React.Component { <>
- {t(`explorer.title.aws`)} + {t(this.getChartTitle(perspective))}
From d0bf7cb95a3e33415a04b14a524a4eb9191f8cb7 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 17:19:38 -0500 Subject: [PATCH 014/200] Update explorer filter to show group by options --- src/pages/explorer/explorerFilter.tsx | 89 +++++++++++++++++++++------ 1 file changed, 69 insertions(+), 20 deletions(-) diff --git a/src/pages/explorer/explorerFilter.tsx b/src/pages/explorer/explorerFilter.tsx index 471ba0479..eee494c27 100644 --- a/src/pages/explorer/explorerFilter.tsx +++ b/src/pages/explorer/explorerFilter.tsx @@ -1,6 +1,6 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; -import { getQuery, orgUnitIdKey, Query, tagKey } from 'api/queries/query'; +import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; import React from 'react'; @@ -12,6 +12,13 @@ import { tagActions, tagSelectors } from 'store/tags'; import { isEqual } from 'utils/equal'; import { styles } from './explorerFilter.styles'; +import { + getGroupByOptions, + getOrgReportPathsType, + getPerspectiveDefault, + getTagReportPathsType, + PerspectiveType, +} from './explorerUtils'; interface ExplorerFilterOwnProps { groupBy: string; @@ -26,8 +33,11 @@ interface ExplorerFilterOwnProps { interface ExplorerFilterStateProps { orgReport?: Org; orgReportFetchStatus?: FetchStatus; + orgReportPathsType?: OrgPathsType; + perspective: PerspectiveType; tagReport?: Tag; tagReportFetchStatus?: FetchStatus; + tagReportPathsType?: TagPathsType; } interface ExplorerFilterDispatchProps { @@ -44,9 +54,7 @@ type ExplorerFilterProps = ExplorerFilterOwnProps & ExplorerFilterDispatchProps & WithTranslation; -const orgReportPathsType = OrgPathsType.aws; const orgReportType = OrgType.org; -const tagReportPathsType = TagPathsType.aws; const tagReportType = TagType.tag; export class ExplorerFilterBase extends React.Component { @@ -54,19 +62,38 @@ export class ExplorerFilterBase extends React.Component { public state: ExplorerFilterState = { ...this.defaultState }; public componentDidMount() { - const { fetchOrg, fetchTag, queryString } = this.props; - fetchOrg(orgReportPathsType, orgReportType, queryString); - fetchTag(tagReportPathsType, tagReportType, queryString); + const { fetchOrg, fetchTag, orgReportPathsType, queryString, tagReportPathsType } = this.props; + + if (orgReportPathsType) { + fetchOrg(orgReportPathsType, orgReportType, queryString); + } + if (tagReportPathsType) { + fetchTag(tagReportPathsType, tagReportType, queryString); + } this.setState({ categoryOptions: this.getCategoryOptions(), }); } public componentDidUpdate(prevProps: ExplorerFilterProps) { - const { fetchOrg, fetchTag, orgReport, query, queryString, tagReport } = this.props; + const { + fetchOrg, + fetchTag, + orgReport, + orgReportPathsType, + query, + queryString, + tagReport, + tagReportPathsType, + } = this.props; + if (query && !isEqual(query, prevProps.query)) { - fetchOrg(orgReportPathsType, orgReportType, queryString); - fetchTag(tagReportPathsType, tagReportType, queryString); + if (orgReportPathsType) { + fetchOrg(orgReportPathsType, orgReportType, queryString); + } + if (tagReportPathsType) { + fetchTag(tagReportPathsType, tagReportType, queryString); + } } if (!isEqual(orgReport, prevProps.orgReport) || !isEqual(tagReport, prevProps.tagReport)) { this.setState({ @@ -76,13 +103,16 @@ export class ExplorerFilterBase extends React.Component { } private getCategoryOptions = (): ToolbarChipGroup[] => { - const { orgReport, t, tagReport } = this.props; + const { orgReport, perspective, t, tagReport } = this.props; - const options = [ - { name: t('filter_by.values.account'), key: 'account' }, - { name: t('filter_by.values.service'), key: 'service' }, - { name: t('filter_by.values.region'), key: 'region' }, - ]; + const options = []; + const groupByOptions = getGroupByOptions(perspective); + groupByOptions.map(option => { + options.push({ + name: t(`filter_by.values.${option.label}`), + key: option.value, + }); + }); if (orgReport && orgReport.data && orgReport.data.length > 0) { options.push({ name: t('filter_by.values.org_unit_id'), @@ -118,20 +148,39 @@ export class ExplorerFilterBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { + const queryFromRoute = parseQuery(location.search); + const perspective = getPerspectiveDefault(queryFromRoute); + // Omitting key_only to share a single request -- the toolbar needs key values const queryString = getQuery({ // key_only: true }); - const orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, queryString); - const orgReportFetchStatus = orgSelectors.selectOrgFetchStatus(state, orgReportPathsType, orgReportType, queryString); - const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); - const tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, queryString); + + let orgReport; + let orgReportFetchStatus; + const orgReportPathsType = getOrgReportPathsType(perspective); + if (orgReportPathsType) { + orgReport = orgSelectors.selectOrg(state, orgReportPathsType, orgReportType, queryString); + orgReportFetchStatus = orgSelectors.selectOrgFetchStatus(state, orgReportPathsType, orgReportType, queryString); + } + + let tagReport; + let tagReportFetchStatus; + const tagReportPathsType = getTagReportPathsType(perspective); + if (tagReportPathsType) { + tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); + tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, queryString); + } + return { - queryString, orgReport, orgReportFetchStatus, + orgReportPathsType, + perspective, + queryString, tagReport, tagReportFetchStatus, + tagReportPathsType, }; }); From c9138c18dce1b32bf1d12a90d0e0ce9087088e2d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Feb 2021 17:20:14 -0500 Subject: [PATCH 015/200] Explorer table should not use AWS computed report items --- src/pages/explorer/explorerTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 824b094f0..26174babd 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -12,7 +12,7 @@ import getDate from 'date-fns/get_date'; import getMonth from 'date-fns/get_month'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; -import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedAwsReportItems'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedExplorerReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; import { formatCurrency } from 'utils/formatValue'; From e4294511920dfd00730dc157bda99bab5a6b8efc Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Thu, 11 Feb 2021 08:41:16 -0500 Subject: [PATCH 016/200] initial tooling to check for duplicate values in i18n keys (#1844) * initial tooling to check for duplicate values in i18n keys * log message change --- package.json | 1 + scripts/utils/i18n_key_tool.py | 161 ++++++++++++++++++++++----------- 2 files changed, 107 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index f26527443..898f41c3a 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "lint:ts:fix": "yarn lint:ts --fix", "i18n:key:check:full": "scripts/utils/i18n_key_tool.py --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:notfound": "scripts/utils/i18n_key_tool.py --Xreport-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", + "i18n:key:check:duplicates": "scripts/utils/i18n_key_tool.py --find-duplicates --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "start": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js", "start:dev": "APP_ENV=proxy yarn start", "stats": "webpack --mode production --profile --json > stats.json", diff --git a/scripts/utils/i18n_key_tool.py b/scripts/utils/i18n_key_tool.py index 3f9580cf7..b654f2832 100755 --- a/scripts/utils/i18n_key_tool.py +++ b/scripts/utils/i18n_key_tool.py @@ -8,14 +8,16 @@ not_found_cnt = 0 found_cnt = 0 exclude_cnt = 0 +key_vals = {} + def check_dir(dir_name): - dir = os.path.join(os.getcwd(), dir_name) + directory = os.path.join(os.getcwd(), dir_name) - if os.path.isdir(dir): - return dir + if os.path.isdir(directory): + return directory else: - raise NotADirectoryError(dir) + raise NotADirectoryError(directory) def check_file(filename): @@ -32,6 +34,8 @@ def check_file(filename): parser.add_argument('--json-file', type=check_file, required=True, help='i18n json file location') parser.add_argument('--exclude-file', type=check_file, help='file that lists i18n tags in dot notation to exclude' 'from reporting') +parser.add_argument('--find-duplicates', action='store_true', help='report all duplicate values') + parser.add_argument('--Xreport-found', action='store_false', help='do not report any "Found" keys') parser.add_argument('--Xreport-not-found', action='store_false', help='do not report any "Not Found" keys') args = parser.parse_args() @@ -51,11 +55,19 @@ def walk_keys(obj, path=""): if isinstance(obj, dict): for k, v in obj.items(): for r in walk_keys(v, path + "." + k if path else k): + # save the leaf key value pairs + if args.find_duplicates and not isinstance(v, (list, dict)): + if not r.endswith("."): + key_vals.update({r: v}) yield r elif isinstance(obj, list): for i, v in enumerate(obj): s = "" for r in walk_keys(v, path if path else s): + # save the leaf key value pairs + if args.find_duplicates and not isinstance(v, (list, dict)): + if not r.endswith("."): + key_vals.update({r: v}) yield r else: yield path @@ -73,61 +85,100 @@ def search_for_key(path, key): return results +# find duplicate values from dictionary using set +def find_duplicate_values(data): + val_checked = [] + total_dupes = 0 + + print(Colors.OKBLUE + 'Checking for duplicate key values...' + Colors.ENDC) + + for k, v in data.items(): + if v not in val_checked: + res = [] + + for key, value in data.items(): + if v == value and key != k: + res.append(key) + + if len(res) > 1: + total_dupes += 1 + print(Colors.OKCYAN + '"' + v + '"' + Colors.ENDC) + for dupe in res: + print(Colors.OKBLUE + "\tFOUND IN KEY: " + Colors.FAIL + dupe + Colors.ENDC) + + val_checked.append(v) + + print("\n") + print(Colors.OKCYAN + "TOTAL DUPLICATES FOUND: ", Colors.OKBLUE + str(total_dupes) + Colors.ENDC) + + json_data = json.load(open(args.json_file)) previous_key_status = {} -for i18n_key in sorted(list(set(walk_keys(json_data)))): - exclude_data = [] - found = False - - # check if excludelist is given - if args.exclude_file is not None: - with open(args.exclude_file) as f: - exclude_data = f.read().splitlines() - - if exclude_data.__contains__(i18n_key): - # key is on exclude list - previous_key_status.clear() - previous_key_status[i18n_key] = True - print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.WARN + '[TAG EXCLUDED]') + Colors.ENDC) - exclude_cnt += 1 - else: - result = search_for_key(args.search_path, i18n_key) +# Check all i18n_keys to see if they are being used in the src code +if args.Xreport_not_found or args.Xreport_found: + print(Colors.OKBLUE + 'Checking for dead keys...' + Colors.ENDC) + for i18n_key in sorted(list(set(walk_keys(json_data)))): + exclude_data = [] + found = False - # check plurals and exclude if none plural is already found - if len(previous_key_status) > 0: - prev_key = next(iter(previous_key_status)) - if prev_key + "_plural" == i18n_key and previous_key_status[prev_key]: - previous_key_status.clear() - print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.WARN + '[TAG EXCLUDED]') + Colors.ENDC) - exclude_cnt += 1 - continue + # check if exclude list is given + if args.exclude_file is not None: + with open(args.exclude_file) as f: + exclude_data = f.read().splitlines() - # found status - if len(result) <= 0: - found = False - previous_key_status.clear() - previous_key_status[i18n_key] = False - not_found_cnt += 1 - else: - found = True + if exclude_data.__contains__(i18n_key): + # key is on exclude list previous_key_status.clear() previous_key_status[i18n_key] = True - found_cnt += 1 - - # report based on cli args - if found is False and args.Xreport_not_found: - print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.FAIL + '[NOT FOUND]') + Colors.ENDC) - continue - - if args.Xreport_found: - print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.PASS + '[FOUND]') + Colors.ENDC) - for f in result: - print(Colors.OKBLUE + "\tFOUND IN: " + f + Colors.ENDC) - -# totals -print("\n") -print('{:>25s}'.format(Colors.OKCYAN + "TOTALS" + Colors.ENDC)) -print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "FOUND", Colors.OKBLUE + str(found_cnt) + Colors.ENDC)) -print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "NOT FOUND", Colors.FAIL + str(not_found_cnt) + Colors.ENDC)) -print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "EXCLUDED", Colors.WARN + str(exclude_cnt) + Colors.ENDC)) + print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.WARN + '[TAG EXCLUDED]') + Colors.ENDC) + exclude_cnt += 1 + else: + result = search_for_key(args.search_path, i18n_key) + + # check plurals and exclude if none plural is already found + if len(previous_key_status) > 0: + prev_key = next(iter(previous_key_status)) + if prev_key + "_plural" == i18n_key and previous_key_status[prev_key]: + previous_key_status.clear() + print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.WARN + '[TAG EXCLUDED]') + Colors.ENDC) + exclude_cnt += 1 + continue + + # found status + if len(result) <= 0: + found = False + previous_key_status.clear() + previous_key_status[i18n_key] = False + not_found_cnt += 1 + else: + found = True + previous_key_status.clear() + previous_key_status[i18n_key] = True + found_cnt += 1 + + # report based on cli args + if found is False and args.Xreport_not_found: + print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.FAIL + '[NOT FOUND]') + Colors.ENDC) + continue + + if args.Xreport_found: + print('{:<80s}{:>10s}'.format(Colors.OKCYAN + i18n_key, Colors.PASS + '[FOUND]') + Colors.ENDC) + for f in result: + print(Colors.OKBLUE + "\tFOUND IN: " + f + Colors.ENDC) + + # Dead Key Report Totals + print("\n") + print('{:>30s}'.format(Colors.OKCYAN + "DEAD KEY TOTALS" + Colors.ENDC)) + print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "FOUND", Colors.OKBLUE + str(found_cnt) + Colors.ENDC)) + print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "NOT FOUND", Colors.FAIL + str(not_found_cnt) + Colors.ENDC)) + print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "EXCLUDED", Colors.WARN + str(exclude_cnt) + Colors.ENDC)) + print('{:<30s}{:>10s}'.format(Colors.OKCYAN + "TOTAL NUM OF KEYS", Colors.OKBLUE + str(found_cnt + not_found_cnt + + exclude_cnt) + Colors.ENDC)) + +# Report all duplicate values in i18n file +if args.find_duplicates: + print("\n") + for i18n_key in sorted(list(set(walk_keys(json_data)))): + pass + find_duplicate_values(key_vals) From 8506daa5ef2d30e8b7904649ff35fe05660c210d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Feb 2021 08:41:28 -0500 Subject: [PATCH 017/200] Cost models button shows broken i18n key (#1843) https://issues.redhat.com/browse/COST-1007 --- .../costModels/costModelsDetails/createCostModelButton.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/costModels/costModelsDetails/createCostModelButton.tsx b/src/pages/costModels/costModelsDetails/createCostModelButton.tsx index 296850d5c..1a817bedb 100644 --- a/src/pages/costModels/costModelsDetails/createCostModelButton.tsx +++ b/src/pages/costModels/costModelsDetails/createCostModelButton.tsx @@ -32,7 +32,7 @@ const buttonMergeProps = ( return { isDisabled: !canWrite, - tooltip: t('cost_model.read_only_tooltip'), + tooltip: t('cost_models.read_only_tooltip'), children: (
), }); + rows.push({ cells, - item: items[0], // Any row cell contains the info needed for row selection + item: items[0], // Any row cell contains the ID needed for row selection selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === id) !== undefined), }); }); - // Add first column heading (i.e., name) - if (groupByTagKey || groupByOrg) { - columns.unshift({ - title: groupByOrg ? t('explorer.name_column_title') : t('explorer.tag_column_title'), - }); - } else { - columns.unshift({ - orderBy: groupById === 'account' ? 'account_alias' : groupById, // Todo: GCP uses account, not alias - title: t('explorer.name_column_title', { groupBy: groupById }), - transforms: [sortable], - }); - } - const loadingRows = [ { heightAuto: true, From 1791baa910d9b5c38e411e18f68b590ef182eadb Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Feb 2021 20:23:45 -0500 Subject: [PATCH 021/200] =?UTF-8?q?Set=20explorer=E2=80=99s=20default=20pe?= =?UTF-8?q?rspective=20option?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/explorer/explorerHeader.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/explorer/explorerHeader.tsx index 0460c5348..b525a5bc0 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/explorer/explorerHeader.tsx @@ -108,9 +108,13 @@ class ExplorerHeaderBase extends React.Component { gcpProvidersFetchStatus, ocpProviders, ocpProvidersFetchStatus, + perspective, userAccess, } = this.props; + if (perspective) { + return perspective; + } if (isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess)) { return PerspectiveType.ocp; } From 3a95fde041c4e69d7020f746f692592389e92eaa Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Feb 2021 20:30:58 -0500 Subject: [PATCH 022/200] Reset explorer group by tag dropdown --- src/pages/details/components/groupBy/groupBy.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/details/components/groupBy/groupBy.tsx b/src/pages/details/components/groupBy/groupBy.tsx index 7671d767a..929e77862 100644 --- a/src/pages/details/components/groupBy/groupBy.tsx +++ b/src/pages/details/components/groupBy/groupBy.tsx @@ -105,13 +105,16 @@ class GroupByBase extends React.Component { tagReportPathsType, } = this.props; if (prevProps.groupBy !== groupBy) { + const options: any = {}; if (showOrgs) { fetchOrg(orgReportPathsType, orgReportType, queryString); + options.isGroupByOrgVisible = false; } if (showTags) { fetchTag(tagReportPathsType, tagReportType, queryString); + options.isGroupByTagVisible = false; } - this.setState({ currentItem: this.getCurrentGroupBy() }); + this.setState({ currentItem: this.getCurrentGroupBy(), ...options }); } } From 1d66dd52fa62f680bb7f20e3ab802e22ee5e10dc Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Feb 2021 20:33:37 -0500 Subject: [PATCH 023/200] Reset explorer group by org unit dropdown --- src/pages/details/components/groupBy/groupBy.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/pages/details/components/groupBy/groupBy.tsx b/src/pages/details/components/groupBy/groupBy.tsx index 929e77862..f55434bf4 100644 --- a/src/pages/details/components/groupBy/groupBy.tsx +++ b/src/pages/details/components/groupBy/groupBy.tsx @@ -105,16 +105,13 @@ class GroupByBase extends React.Component { tagReportPathsType, } = this.props; if (prevProps.groupBy !== groupBy) { - const options: any = {}; if (showOrgs) { fetchOrg(orgReportPathsType, orgReportType, queryString); - options.isGroupByOrgVisible = false; } if (showTags) { fetchTag(tagReportPathsType, tagReportType, queryString); - options.isGroupByTagVisible = false; } - this.setState({ currentItem: this.getCurrentGroupBy(), ...options }); + this.setState({ currentItem: this.getCurrentGroupBy(), isGroupByOrgVisible: false, isGroupByTagVisible: false }); } } From 1fa9d50c398378b9f24923a3af197cd3a2a9cd1e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Feb 2021 21:45:50 -0500 Subject: [PATCH 024/200] Removed explorer x-domain, replacing with y-domain if max values are zero --- .../historicalExplorerChart.styles.ts | 8 +++--- .../historicalExplorerChart.tsx | 26 ++++++++++++++++--- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts b/src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts index fabfff551..5494744d1 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts @@ -25,9 +25,11 @@ export const chartStyles = { ticks: { stroke: 'none', }, - // tickLabels: { - // fontSize: 0, - // }, + }, + yAxisAlt: { + tickLabels: { + fontSize: 0, + }, }, xAxis: { axisLabel: { diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 774b89e95..6a33362cc 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -12,7 +12,7 @@ import { getInteractiveLegendEvents, } from '@patternfly/react-charts'; import { default as ChartTheme } from 'components/charts/chartTheme'; -import { getDateRange } from 'components/charts/common/chartDatumUtils'; +import {getDateRange, getMaxValue} from 'components/charts/common/chartDatumUtils'; import { ChartSeries, getChartNames, @@ -230,7 +230,7 @@ class HistoricalExplorerChart extends React.Component) { + let maxValue = -1; + let domain; + + if (series) { + series.forEach((s: any, index) => { + if (!isSeriesHidden(hiddenSeries, index) && s.data && s.data.length !== 0) { + const max = getMaxValue(s.data); + maxValue = Math.max(maxValue, max); + } + }); + } + + if (maxValue <= 0) { + domain = { y: [0, 1] }; + } + return domain; + }; + private getEndDate() { const { top1stData, top2ndData, top3rdData, top4thData, top5thData, top6thData } = this.props; @@ -369,7 +389,7 @@ class HistoricalExplorerChart extends React.Component Date: Thu, 11 Feb 2021 21:48:46 -0500 Subject: [PATCH 025/200] fixed linter --- .../historicalExplorerChart/historicalExplorerChart.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 6a33362cc..39a709dbe 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -12,7 +12,7 @@ import { getInteractiveLegendEvents, } from '@patternfly/react-charts'; import { default as ChartTheme } from 'components/charts/chartTheme'; -import {getDateRange, getMaxValue} from 'components/charts/common/chartDatumUtils'; +import { getDateRange, getMaxValue } from 'components/charts/common/chartDatumUtils'; import { ChartSeries, getChartNames, @@ -282,7 +282,7 @@ class HistoricalExplorerChart extends React.Component Date: Fri, 12 Feb 2021 10:43:33 -0500 Subject: [PATCH 026/200] Explorer chart to show every 3rd tick value https://issues.redhat.com/browse/COST-915 --- .../historicalExplorerChart.tsx | 94 ++++++++++--------- 1 file changed, 49 insertions(+), 45 deletions(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 39a709dbe..38350ee42 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -12,7 +12,7 @@ import { getInteractiveLegendEvents, } from '@patternfly/react-charts'; import { default as ChartTheme } from 'components/charts/chartTheme'; -import { getDateRange, getMaxValue } from 'components/charts/common/chartDatumUtils'; +import { getMaxValue } from 'components/charts/common/chartDatumUtils'; import { ChartSeries, getChartNames, @@ -23,7 +23,6 @@ import { isDataHidden, isSeriesHidden, } from 'components/charts/common/chartUtils'; -import getDate from 'date-fns/get_date'; import i18next from 'i18next'; import React from 'react'; import { FormatOptions, ValueFormatter } from 'utils/formatValue'; @@ -214,14 +213,21 @@ class HistoricalExplorerChart extends React.Component { - setTimeout(this.handleResize, 500); - }; + private getAdjustedContainerHeight = () => { + const { adjustContainerHeight, height, containerHeight = height } = this.props; + const { width } = this.state; - private handleResize = () => { - if (this.containerRef.current) { - this.setState({ width: this.containerRef.current.clientWidth }); + let adjustedContainerHeight = containerHeight; + if (adjustContainerHeight) { + if (width > 675 && width < 1175) { + adjustedContainerHeight += 25; + } else if (width > 450 && width < 675) { + adjustedContainerHeight += 50; + } else if (width <= 450) { + adjustedContainerHeight += 75; + } } + return adjustedContainerHeight; }; private getChart = (series: ChartSeries, index: number) => { @@ -284,21 +290,6 @@ class HistoricalExplorerChart extends React.Component 0 || top2ndDate > 0 || top3rdDate > 0 || top4thDate > 0 || top5thDate > 0 || top6thDate > 0 - ? Math.max(top1stDate, top2ndDate, top3rdDate, top4thDate, top5thDate, top6thDate) - : 31; // Todo: this needs to work with more than current month's data - } - // Returns onMouseOver, onMouseOut, and onClick events for the interactive legend private getEvents() { const { hiddenSeries, series } = this.state; @@ -327,27 +318,48 @@ class HistoricalExplorerChart extends React.Component { + if (!datum || datum.length < val.length) { + datum = val; + } + }); + + const values = []; + datum.map(val => { + values.push(val.x); + }); + + // Prune tick values to show every 3rd + const tickValues = []; + for (let i = 0; i < values.length; i++) { + if (i % 3 === 0) { + tickValues.push(values[i]); + } + } + tickValues.push(values[values.length - 1]); + return tickValues; + } + // Hide each data series individually private handleLegendClick = (index: number) => { const hiddenSeries = initHiddenSeries(this.state.series, this.state.hiddenSeries, index); this.setState({ hiddenSeries }); }; - private getAdjustedContainerHeight = () => { - const { adjustContainerHeight, height, containerHeight = height } = this.props; - const { width } = this.state; + private handleNavToggle = () => { + setTimeout(this.handleResize, 500); + }; - let adjustedContainerHeight = containerHeight; - if (adjustContainerHeight) { - if (width > 675 && width < 1175) { - adjustedContainerHeight += 25; - } else if (width > 450 && width < 675) { - adjustedContainerHeight += 50; - } else if (width <= 450) { - adjustedContainerHeight += 75; - } + private handleResize = () => { + if (this.containerRef.current) { + this.setState({ width: this.containerRef.current.clientWidth }); } - return adjustedContainerHeight; }; public render() { @@ -362,14 +374,6 @@ class HistoricalExplorerChart extends React.Component 0 && ( {series.map((s, index) => this.getChart(s, index))} )} - +
From 30ece64d17995025882ec74ae3dd0b98d594db36 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 12 Feb 2021 10:48:54 -0500 Subject: [PATCH 027/200] Updated explorer chart comments --- .../historicalExplorerChart/historicalExplorerChart.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 38350ee42..b9d840ada 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -318,6 +318,9 @@ class HistoricalExplorerChart extends React.Component Date: Fri, 12 Feb 2021 11:02:59 -0500 Subject: [PATCH 028/200] Adjust explorer filter padding --- src/pages/explorer/explorerFilter.styles.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/explorer/explorerFilter.styles.ts b/src/pages/explorer/explorerFilter.styles.ts index 98eb9ce29..4a4b619dd 100644 --- a/src/pages/explorer/explorerFilter.styles.ts +++ b/src/pages/explorer/explorerFilter.styles.ts @@ -1,11 +1,12 @@ import global_BackgroundColor_light_100 from '@patternfly/react-tokens/dist/js/global_BackgroundColor_light_100'; import global_spacer_md from '@patternfly/react-tokens/dist/js/global_spacer_md'; +import global_spacer_sm from '@patternfly/react-tokens/dist/js/global_spacer_sm'; import React from 'react'; export const styles = { toolbarContainer: { backgroundColor: global_BackgroundColor_light_100.value, marginLeft: `-${global_spacer_md.value}`, - paddingTop: global_spacer_md.value, + paddingTop: global_spacer_sm.value, }, } as { [className: string]: React.CSSProperties }; From cac34a3fbc588f29211792a10224abe425372fb3 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 12 Feb 2021 12:41:36 -0500 Subject: [PATCH 029/200] Adjust explorer chart container height --- .../historicalExplorerChart.tsx | 10 +++++----- src/pages/explorer/explorer.styles.ts | 2 +- src/pages/explorer/explorerChart.tsx | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index b9d840ada..df9a4e6c6 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -100,7 +100,7 @@ class HistoricalExplorerChart extends React.Component 675 && width < 1175) { + if (width > 675 && width < 1250) { adjustedContainerHeight += 25; - } else if (width > 450 && width < 675) { + } else if (width > 400 && width < 650) { adjustedContainerHeight += 50; - } else if (width <= 450) { - adjustedContainerHeight += 75; + } else if (width <= 400) { + adjustedContainerHeight += 150; } } return adjustedContainerHeight; diff --git a/src/pages/explorer/explorer.styles.ts b/src/pages/explorer/explorer.styles.ts index 8c550cf2e..4bc60b938 100644 --- a/src/pages/explorer/explorer.styles.ts +++ b/src/pages/explorer/explorer.styles.ts @@ -5,10 +5,10 @@ import global_spacer_md from '@patternfly/react-tokens/dist/js/global_spacer_md' export const styles = { chartContainer: { backgroundColor: global_BackgroundColor_light_100.value, - height: '375px', marginLeft: global_spacer_lg.value, marginRight: global_spacer_lg.value, paddingRight: global_spacer_lg.value, + paddingBottom: global_spacer_lg.value, paddingTop: global_spacer_lg.value, }, chartContent: { diff --git a/src/pages/explorer/explorerChart.tsx b/src/pages/explorer/explorerChart.tsx index 3036d4a06..e90155c48 100644 --- a/src/pages/explorer/explorerChart.tsx +++ b/src/pages/explorer/explorerChart.tsx @@ -240,7 +240,7 @@ class ExplorerChartBase extends React.Component { ) : ( Date: Fri, 12 Feb 2021 12:50:05 -0500 Subject: [PATCH 030/200] Truncate long resource names shown in explorer chart --- .../historicalExplorerChart.tsx | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index df9a4e6c6..2b97878ad 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -96,15 +96,16 @@ class HistoricalExplorerChart extends React.Component maxChars ? str.substr(0, maxChars - 1) + '...' : str; + } + // Hide each data series individually private handleLegendClick = (index: number) => { const hiddenSeries = initHiddenSeries(this.state.series, this.state.hiddenSeries, index); From d85316c082f6995569f9f5580365d10c18a803f0 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 12 Feb 2021 13:56:07 -0500 Subject: [PATCH 031/200] Group by tag option should remain visible while selection is valid --- src/pages/details/components/groupBy/groupBy.tsx | 15 +++++++++++++-- src/pages/explorer/explorer.tsx | 15 ++++++++++----- src/pages/explorer/explorerHeader.tsx | 9 +++------ 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/pages/details/components/groupBy/groupBy.tsx b/src/pages/details/components/groupBy/groupBy.tsx index f55434bf4..aabaf5258 100644 --- a/src/pages/details/components/groupBy/groupBy.tsx +++ b/src/pages/details/components/groupBy/groupBy.tsx @@ -12,6 +12,7 @@ import { tagActions, tagSelectors } from 'store/tags'; import { styles } from './groupBy.styles'; import { GroupByOrg } from './groupByOrg'; import { GroupByTag } from './groupByTag'; +import {PerspectiveType} from '../../../explorer/explorerUtils'; interface GroupByOwnProps extends WithTranslation { getIdKeyForGroupBy: (groupBy: Query['group_by']) => string; @@ -23,6 +24,7 @@ interface GroupByOwnProps extends WithTranslation { value: string; }[]; orgReportPathsType?: OrgPathsType; + perspective?: PerspectiveType; queryString?: string; showOrgs?: boolean; showTags?: boolean; @@ -99,19 +101,28 @@ class GroupByBase extends React.Component { fetchTag, groupBy, orgReportPathsType, + perspective, queryString, showOrgs, showTags, tagReportPathsType, } = this.props; - if (prevProps.groupBy !== groupBy) { + if (prevProps.groupBy !== groupBy || prevProps.perspective !== perspective) { if (showOrgs) { fetchOrg(orgReportPathsType, orgReportType, queryString); } if (showTags) { fetchTag(tagReportPathsType, tagReportType, queryString); } - this.setState({ currentItem: this.getCurrentGroupBy(), isGroupByOrgVisible: false, isGroupByTagVisible: false }); + + let options; + if (prevProps.perspective !== perspective) { + options = { + isGroupByOrgVisible: false, + isGroupByTagVisible: false, + }; + } + this.setState({ currentItem: this.getCurrentGroupBy(), ...(options ? options : {}) }); } } diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index 75c1d5d12..b6bdb7540 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -396,6 +396,7 @@ class Explorer extends React.Component { perspective, userAccessFetchStatus, query, + report, reportError, reportFetchStatus, t, @@ -410,7 +411,9 @@ class Explorer extends React.Component { userAccessFetchStatus === FetchStatus.inProgress; const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = getGroupByTagKey(query); const computedItems = this.getComputedItems(); + const itemsTotal = report && report.meta ? report.meta.count : 0; const title = t('navigation.explorer'); // Test for no providers @@ -442,16 +445,18 @@ class Explorer extends React.Component { return (
-
-
- + {itemsTotal > 0 && ( +
+
+ +
-
+ )}
{this.getToolbar(computedItems)} {this.getExportModal(computedItems)} diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/explorer/explorerHeader.tsx index b525a5bc0..f2276661c 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/explorer/explorerHeader.tsx @@ -1,11 +1,10 @@ import { Title } from '@patternfly/react-core'; import { Providers, ProviderType } from 'api/providers'; import { getProvidersQuery } from 'api/queries/providersQuery'; -import { getQuery, parseQuery, Query, tagPrefix } from 'api/queries/query'; +import { getQuery, parseQuery, Query } from 'api/queries/query'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { getGroupByTagKey } from 'pages/details/common/detailsUtils'; import { GroupBy } from 'pages/details/components/groupBy/groupBy'; import { Perspective } from 'pages/overview/perspective'; import React from 'react'; @@ -222,9 +221,6 @@ class ExplorerHeaderBase extends React.Component { userAccess, } = this.props; - const groupById = getIdKeyForGroupBy(query.group_by); - const groupByTagKey = getGroupByTagKey(query); - // Test for no providers const noProviders = !( isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess) && @@ -253,6 +249,7 @@ class ExplorerHeaderBase extends React.Component { onItemClicked={onGroupByClicked} options={groupByOptions} orgReportPathsType={orgReportPathsType} + perspective={perspective} showOrgs={orgReportPathsType} showTags={tagReportPathsType} tagReportPathsType={tagReportPathsType} @@ -260,7 +257,7 @@ class ExplorerHeaderBase extends React.Component {
Date: Fri, 12 Feb 2021 14:22:21 -0500 Subject: [PATCH 032/200] Reset filter tag selection when new group by is chosen --- src/pages/details/components/dataToolbar/dataToolbar.tsx | 4 ++++ src/pages/details/components/groupBy/groupBy.tsx | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/pages/details/components/dataToolbar/dataToolbar.tsx b/src/pages/details/components/dataToolbar/dataToolbar.tsx index 549a8cd0b..0d32a3297 100644 --- a/src/pages/details/components/dataToolbar/dataToolbar.tsx +++ b/src/pages/details/components/dataToolbar/dataToolbar.tsx @@ -128,7 +128,11 @@ export class DataToolbarBase extends React.Component { const filters = this.getActiveFilters(query); return categoryOptions !== prevProps.categoryOptions || prevProps.groupBy !== groupBy ? { + categoryInput: '', currentCategory: this.getDefaultCategory(), + currentOrgUnit: '', + currentTagKey: '', + tagKeyValueInput: '', filters, } : { diff --git a/src/pages/details/components/groupBy/groupBy.tsx b/src/pages/details/components/groupBy/groupBy.tsx index aabaf5258..20c3c70f9 100644 --- a/src/pages/details/components/groupBy/groupBy.tsx +++ b/src/pages/details/components/groupBy/groupBy.tsx @@ -2,6 +2,7 @@ import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey, tagPrefix } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; +import { PerspectiveType } from 'pages/explorer/explorerUtils'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -12,7 +13,6 @@ import { tagActions, tagSelectors } from 'store/tags'; import { styles } from './groupBy.styles'; import { GroupByOrg } from './groupByOrg'; import { GroupByTag } from './groupByTag'; -import {PerspectiveType} from '../../../explorer/explorerUtils'; interface GroupByOwnProps extends WithTranslation { getIdKeyForGroupBy: (groupBy: Query['group_by']) => string; From 6301e8962168e0ef34112c9b7272b68b13667385 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 13 Feb 2021 23:27:08 -0500 Subject: [PATCH 033/200] Added horizontal scroll to explorer table https://issues.redhat.com/browse/COST-915 --- src/pages/explorer/explorerTable.scss | 24 +++++++++++++++------- src/pages/explorer/explorerTable.styles.ts | 4 ++++ src/pages/explorer/explorerTable.tsx | 5 ++--- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/explorer/explorerTable.scss index e17311d3f..9cfb46cd2 100644 --- a/src/pages/explorer/explorerTable.scss +++ b/src/pages/explorer/explorerTable.scss @@ -31,14 +31,24 @@ .tableOverride { &.pf-c-table { - thead th + th + th + th { - .pf-c-table__button { - margin-left: auto; - } - text-align: right; + thead th:first-child, tbody td:first-child { + background-clip: padding-box; + background-color: var(--pf-global--BackgroundColor--light-100); + left: 0px; + position: sticky; + z-index: 9999; + } + thead th:nth-child(2), tbody td:nth-child(2) { + background-clip: padding-box; + background-color: var(--pf-global--BackgroundColor--light-100); + left: 45px; + position: sticky; + z-index: 9999; } - tbody td + td + td + td { - text-align: right; + @media (min-width: 1200px) { + thead th:nth-child(2), tbody td:nth-child(2) { + left: 53px; + } } } } diff --git a/src/pages/explorer/explorerTable.styles.ts b/src/pages/explorer/explorerTable.styles.ts index 97752f957..34f5c8736 100644 --- a/src/pages/explorer/explorerTable.styles.ts +++ b/src/pages/explorer/explorerTable.styles.ts @@ -24,4 +24,8 @@ export const styles = { color: global_disabled_color_100.value, fontSize: global_FontSize_xs.value, }, + tableContainer: { + position: 'relative', + overflowX: 'auto', + }, } as { [className: string]: React.CSSProperties }; diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index c61ccb919..c4ad3b586 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -330,7 +330,7 @@ class ExplorerTableBase extends React.Component { const { columns, loadingRows, rows } = this.state; return ( - <> +
{ sortBy={this.getSortBy()} onSelect={isLoading ? undefined : this.handleOnSelect} onSort={this.handleOnSort} - gridBreakPoint="grid-2xl" >
{Boolean(rows.length === 0) &&
{this.getEmptyState()}
} - +
); } } From eece8aad0ffcd9c387fc2fd0a2fdb52d03b0f2df Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 15 Feb 2021 12:30:59 -0500 Subject: [PATCH 034/200] Webpck upgrd cost 934 (#1851) * webpack 5 and dependencies upgraded * manifest updated * add in memory limit for dev server --- koku-ui-manifest | 329 +++----- package.json | 14 +- webpack.config.js | 3 +- yarn.lock | 1824 ++++++++++++++++++--------------------------- 4 files changed, 834 insertions(+), 1336 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 877aa7bdb..aae561d09 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -1,13 +1,17 @@ mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/core:7.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.12.15.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.12.15.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-member-expression-to-functions:7.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-imports:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-transforms:7.11.0.yarnlock @@ -18,15 +22,19 @@ mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-replace-supers:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-simple-access:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.12.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.12.16.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.12.16.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-async-generators:7.8.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-bigint:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-class-properties:7.10.4.yarnlock @@ -54,23 +62,28 @@ mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@bcoe/v8-coverage:0.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@cnakazawa/watch:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@discoveryjs/json-ext:0.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@eslint/eslintrc:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/fontawesome-common-types:0.2.32.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/free-solid-svg-icons:5.1.0.yarnlock @@ -144,6 +157,10 @@ mgmt_services/cost-mgmt:koku-ui/@types/debounce-promise:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/enzyme-adapter-react-16:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/enzyme:3.10.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/enzyme:3.1.15.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/eslint-scope:3.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/eslint:7.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/glob:7.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/graceful-fs:4.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/history:4.7.8.yarnlock @@ -158,6 +175,7 @@ mgmt_services/cost-mgmt:koku-ui/@types/istanbul-reports:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-reports:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.14.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.6.yarnlock @@ -197,24 +215,24 @@ mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/scope-manager:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/types:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/typescript-estree:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/visitor-keys:4.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/ast:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/floating-point-hex-parser:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-api-error:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-buffer:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-code-frame:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-fsm:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-module-context:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-wasm-bytecode:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-wasm-section:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/ieee754:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/leb128:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/utf8:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-edit:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-gen:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-opt:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-parser:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wast-parser:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wast-printer:1.9.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/ast:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/floating-point-hex-parser:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-api-error:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-buffer:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-numbers:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-wasm-bytecode:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-wasm-section:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/ieee754:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/leb128:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/utf8:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-edit:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-gen:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-opt:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wasm-parser:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/wast-printer:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/configtest:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/info:1.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@webpack-cli/serve:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/graph:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xstate/test:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xtuc/ieee754:1.2.0.yarnlock @@ -227,15 +245,14 @@ mgmt_services/cost-mgmt:koku-ui/accepts:1.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-globals:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-jsx:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-walk:7.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/acorn:6.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/acorn:8.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/aggregate-error:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/airbnb-prop-types:2.16.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-errors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock @@ -258,7 +275,6 @@ mgmt_services/cost-mgmt:koku-ui/anymatch:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/anymatch:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/anymatch:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/aphrodite:2.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/aproba:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/argparse:1.0.10.yarnlock mgmt_services/cost-mgmt:koku-ui/aria-query:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/aria-query:4.2.2.yarnlock @@ -277,11 +293,9 @@ mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.flatmap:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/asap:2.0.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/asn1.js:5.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/asn1:0.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/assert-plus:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/assert-plus:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/assert:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/assign-symbols:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ast-types-flow:0.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/ast-types:0.9.6.yarnlock @@ -311,7 +325,6 @@ mgmt_services/cost-mgmt:koku-ui/babel-preset-current-node-syntax:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-preset-jest:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/bail:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/balanced-match:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/base64-js:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/base:0.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/batch:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/bcrypt-pbkdf:1.0.2.yarnlock @@ -319,11 +332,6 @@ mgmt_services/cost-mgmt:koku-ui/big.js:5.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/binary-extensions:1.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/binary-extensions:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bindings:1.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/bluebird:3.7.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/bn.js:4.11.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/bn.js:4.11.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/bn.js:4.11.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/bn.js:5.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/body-parser:1.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bonjour:3.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/boolbase:1.0.0.yarnlock @@ -332,29 +340,19 @@ mgmt_services/cost-mgmt:koku-ui/braces:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/braces:3.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/brorand:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/browser-process-hrtime:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-aes:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-aes:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-cipher:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-des:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-rsa:4.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-rsa:4.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-sign:4.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/browserify-zlib:0.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/browserslist:4.16.3.yarnlock mgmt_services/cost-mgmt:koku-ui/bs-logger:0.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/bser:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-from:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-from:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-indexof:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/buffer-xor:1.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/buffer:4.9.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/builtin-status-codes:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/cacache:12.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cacache:15.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/cache-base:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/callsites:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camel-case:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camel-case:4.1.1.yarnlock @@ -362,6 +360,7 @@ mgmt_services/cost-mgmt:koku-ui/camelcase:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:6.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/caniuse-lite:1.0.30001185.yarnlock mgmt_services/cost-mgmt:koku-ui/capture-exit:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/caseless:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock @@ -376,15 +375,10 @@ mgmt_services/cost-mgmt:koku-ui/character-entities:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/character-reference-invalid:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio:1.0.0-rc.3.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:3.4.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/chokidar:3.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:2.1.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/chownr:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/chownr:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chrome-trace-event:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ci-info:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/cipher-base:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/cipher-base:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/cipher-base:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cjs-module-lexer:0.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/class-utils:0.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/classnames:2.2.6.yarnlock @@ -394,6 +388,7 @@ mgmt_services/cost-mgmt:koku-ui/clean-stack:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:6.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/clone-deep:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/co:4.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/code-point-at:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/collapse-white-space:1.0.6.yarnlock @@ -403,6 +398,7 @@ mgmt_services/cost-mgmt:koku-ui/color-convert:1.9.3.yarnlock mgmt_services/cost-mgmt:koku-ui/color-convert:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/colorette:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.17.1.yarnlock @@ -410,6 +406,7 @@ mgmt_services/cost-mgmt:koku-ui/commander:6.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:4.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/commander:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/comment-parser:0.7.6.yarnlock mgmt_services/cost-mgmt:koku-ui/commondir:1.0.1.yarnlock @@ -417,10 +414,7 @@ mgmt_services/cost-mgmt:koku-ui/component-emitter:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/compressible:2.0.18.yarnlock mgmt_services/cost-mgmt:koku-ui/compression:1.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/concat-map:0.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/concat-stream:1.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/connect-history-api-fallback:1.6.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/console-browserify:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/constants-browserify:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/contains-path:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/content-disposition:0.5.3.yarnlock mgmt_services/cost-mgmt:koku-ui/content-type:1.0.4.yarnlock @@ -430,7 +424,6 @@ mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie-signature:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie:0.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/copy-concurrently:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-descriptor:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-webpack-plugin:6.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/core-js-pure:3.6.5.yarnlock @@ -438,19 +431,12 @@ mgmt_services/cost-mgmt:koku-ui/core-js:2.6.11.yarnlock mgmt_services/cost-mgmt:koku-ui/core-js:2.6.11.yarnlock mgmt_services/cost-mgmt:koku-ui/core-util-is:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/core-util-is:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-ecdh:4.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hash:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hash:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hash:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hmac:1.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hmac:1.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/create-hmac:1.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-env:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:6.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:6.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/crypto-browserify:3.12.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/css-in-js-utils:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/css-loader:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/css-select:1.2.0.yarnlock @@ -462,7 +448,6 @@ mgmt_services/cost-mgmt:koku-ui/cssom:0.3.8.yarnlock mgmt_services/cost-mgmt:koku-ui/cssstyle:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/csstype:2.6.13.yarnlock mgmt_services/cost-mgmt:koku-ui/csstype:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/cyclist:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-array:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-collection:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-color:1.4.1.yarnlock @@ -488,8 +473,8 @@ mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:3.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:3.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock @@ -513,14 +498,11 @@ mgmt_services/cost-mgmt:koku-ui/delaunator:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/delaunay-find:0.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/delayed-stream:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/depd:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/des.js:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/destroy:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/detect-file:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/detect-newline:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/detect-node:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/diff-sequences:25.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/diff-sequences:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/diffie-hellman:5.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/dir-glob:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/discontinuous-range:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dns-equal:1.0.0.yarnlock @@ -538,7 +520,6 @@ mgmt_services/cost-mgmt:koku-ui/dom-helpers:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-serializer:0.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-serializer:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-serializer:0.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/domain-browser:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:1.3.1.yarnlock @@ -551,11 +532,9 @@ mgmt_services/cost-mgmt:koku-ui/domutils:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/dot-case:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/duplexify:3.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/duplexify:3.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ecc-jsbn:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ee-first:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/elliptic:6.5.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/electron-to-chromium:1.3.663.yarnlock mgmt_services/cost-mgmt:koku-ui/emittery:0.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:8.0.0.yarnlock @@ -563,20 +542,19 @@ mgmt_services/cost-mgmt:koku-ui/emoji-regex:9.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/emojis-list:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/encodeurl:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/end-of-stream:1.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/end-of-stream:1.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:5.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:2.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/envinfo:7.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-adapter-react-16:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-adapter-utils:1.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-to-json:3.3.5.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme:3.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/errno:0.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/errno:0.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/error-ex:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/error-ex:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock @@ -585,8 +563,10 @@ mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-module-lexer:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/es-to-primitive:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es6-templates:0.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/escalade:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-html:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:2.0.0.yarnlock @@ -617,7 +597,7 @@ mgmt_services/cost-mgmt:koku-ui/eslint-plugin-simple-import-sort:5.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-standard:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-restricted-globals:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:3.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-scope:4.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-scope:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-utils:2.1.0.yarnlock @@ -643,15 +623,12 @@ mgmt_services/cost-mgmt:koku-ui/etag:1.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eventemitter3:4.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/events:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eventsource:1.0.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/evp_bytestokey:1.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/evp_bytestokey:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/exec-sh:0.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:4.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/execa:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/exit:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/expand-brackets:2.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/expand-tilde:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/expand-tilde:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/expect:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/express:4.17.1.yarnlock mgmt_services/cost-mgmt:koku-ui/extend-shallow:2.0.1.yarnlock @@ -671,12 +648,11 @@ mgmt_services/cost-mgmt:koku-ui/fast-json-stable-stringify:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-json-stable-stringify:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-levenshtein:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-levenshtein:2.0.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/fastest-levenshtein:1.0.12.yarnlock mgmt_services/cost-mgmt:koku-ui/fastparse:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fastq:1.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/faye-websocket:0.10.0.yarnlock mgmt_services/cost-mgmt:koku-ui/faye-websocket:0.11.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fb-watchman:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/figgy-pudding:3.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/file-entry-cache:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/file-loader:1.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/file-selector:0.1.13.yarnlock @@ -692,13 +668,11 @@ mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:4.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/findup-sync:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/flat-cache:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/flatted:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/flush-write-stream:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/focus-trap:6.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.5.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.2.yarnlock mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/for-in:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/forever-agent:0.6.1.yarnlock @@ -706,9 +680,7 @@ mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/forwarded:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fresh:0.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/from2:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fs-minipass:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/fs-write-stream-atomic:1.0.10.yarnlock mgmt_services/cost-mgmt:koku-ui/fs.realpath:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:2.1.3.yarnlock @@ -721,10 +693,12 @@ mgmt_services/cost-mgmt:koku-ui/functions-have-names:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/gensync:1.0.0-beta.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-caller-file:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/get-caller-file:2.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-package-type:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/get-stdin:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-stream:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/get-stream:5.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/get-stream:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/get-value:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/get-value:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/getpass:0.1.7.yarnlock @@ -734,22 +708,18 @@ mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-to-regexp:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/global-modules:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/global-modules:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/global-prefix:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/global-prefix:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:11.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:12.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:11.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:6.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/growly:1.3.0.yarnlock @@ -764,22 +734,17 @@ mgmt_services/cost-mgmt:koku-ui/has-value:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has-values:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/has-values:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has:1.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/hash-base:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/hash.js:1.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/hash.js:1.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/he:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/he:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/history:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/hmac-drbg:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/hoist-non-react-statics:2.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/hoist-non-react-statics:3.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/hoist-non-react-statics:3.3.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/homedir-polyfill:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/hook-into-props:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/hosted-git-info:2.8.8.yarnlock mgmt_services/cost-mgmt:koku-ui/hpack.js:2.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/html-encoding-sniffer:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-entities:1.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-entities:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-escaper:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/html-loader:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock @@ -794,24 +759,22 @@ mgmt_services/cost-mgmt:koku-ui/http-deceiver:1.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/http-parser-js:0.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/http-parser-js:0.5.3.yarnlock mgmt_services/cost-mgmt:koku-ui/http-proxy-middleware:0.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-proxy:1.18.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-signature:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/https-browserify:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-date:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/human-signals:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/human-signals:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/hyphenate-style-name:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-json-sync:2.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next:19.8.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/i18next:19.8.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/i18next:19.8.7.yarnlock mgmt_services/cost-mgmt:koku-ui/iconv-lite:0.4.24.yarnlock mgmt_services/cost-mgmt:koku-ui/icss-utils:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/icss-utils:4.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ieee754:1.1.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/iferr:0.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:3.3.10.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:4.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:5.1.8.yarnlock @@ -823,7 +786,6 @@ mgmt_services/cost-mgmt:koku-ui/imurmurhash:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/indent-string:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/indexes-of:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/infer-owner:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/infer-owner:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inflight:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock @@ -832,15 +794,11 @@ mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/inherits:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/ini:1.3.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/ini:1.3.5.yarnlock mgmt_services/cost-mgmt:koku-ui/inline-style-prefixer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/internal-ip:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/internal-slot:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/interpret:1.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/interpret:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/invariant:2.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/invert-kv:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ip-regex:2.1.0.yarnlock @@ -853,7 +811,7 @@ mgmt_services/cost-mgmt:koku-ui/is-accessor-descriptor:0.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-accessor-descriptor:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-alphabetical:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-alphanumerical:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-arguments:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-arguments:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-arrayish:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-binary-path:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-binary-path:2.1.0.yarnlock @@ -864,6 +822,7 @@ mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-ci:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-core-module:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-core-module:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-data-descriptor:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-data-descriptor:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-date-object:1.0.2.yarnlock @@ -898,7 +857,7 @@ mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-stream:1.1.0.yarnlock @@ -913,7 +872,6 @@ mgmt_services/cost-mgmt:koku-ui/is-utf8:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-whitespace-character:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-windows:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-word-character:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-wsl:2.2.0.yarnlock @@ -983,8 +941,8 @@ mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json3:3.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsonify:0.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsprim:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:2.4.1.yarnlock @@ -1009,7 +967,7 @@ mgmt_services/cost-mgmt:koku-ui/levn:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lines-and-columns:1.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/load-json-file:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/load-json-file:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/loader-runner:2.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/loader-runner:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock @@ -1033,7 +991,7 @@ mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevelnext:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock @@ -1042,7 +1000,6 @@ mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/lru-cache:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/lru-cache:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock @@ -1052,7 +1009,6 @@ mgmt_services/cost-mgmt:koku-ui/makeerror:1.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/map-cache:0.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/map-visit:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/markdown-escapes:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/md5.js:1.3.5.yarnlock mgmt_services/cost-mgmt:koku-ui/media-typer:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/memory-fs:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/memory-fs:0.5.0.yarnlock @@ -1062,24 +1018,21 @@ mgmt_services/cost-mgmt:koku-ui/merge2:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/methods:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/miller-rabin:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-db:1.44.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-db:1.45.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-db:1.46.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:1.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:2.4.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime:2.4.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mimic-fn:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:0.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/minimalistic-assert:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/minimalistic-assert:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/minimalistic-crypto-utils:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/minimalistic-crypto-utils:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/minimatch:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock @@ -1090,7 +1043,6 @@ mgmt_services/cost-mgmt:koku-ui/minipass-pipeline:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/minipass:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/minipass:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/minizlib:2.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/mississippi:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mixin-deep:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock @@ -1099,30 +1051,27 @@ mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/moo:0.5.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/move-concurrently:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/ms:2.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/ms:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/multicast-dns-service-types:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/multicast-dns:6.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/nan:2.14.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/nan:2.14.2.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:2.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/nanomatch:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/natural-compare:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/nearley:2.19.7.yarnlock mgmt_services/cost-mgmt:koku-ui/negotiator:0.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/neo-async:2.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/neo-async:2.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/neo-async:2.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/nice-try:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/no-case:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/no-case:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/node-forge:0.10.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-int64:0.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/node-libs-browser:2.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/node-modules-regexp:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.70.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock @@ -1131,6 +1080,7 @@ mgmt_services/cost-mgmt:koku-ui/normalize-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-url:1.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nth-check:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/null-loader:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/number-is-nan:1.0.1.yarnlock @@ -1164,11 +1114,11 @@ mgmt_services/cost-mgmt:koku-ui/once:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/once:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/once:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/onetime:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/onetime:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/opn:5.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/original:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/os-browserify:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/os-locale:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-each-series:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-finally:1.0.0.yarnlock @@ -1176,6 +1126,7 @@ mgmt_services/cost-mgmt:koku-ui/p-limit:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:3.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-limit:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:4.1.0.yarnlock @@ -1184,17 +1135,12 @@ mgmt_services/cost-mgmt:koku-ui/p-map:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-retry:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pako:1.0.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/parallel-transform:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/param-case:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/param-case:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/parent-module:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse-asn1:5.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse-asn1:5.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-entities:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-json:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-json:5.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse-passwd:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-srcset:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5:3.0.3.yarnlock @@ -1202,7 +1148,6 @@ mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/pascal-case:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pascalcase:0.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/path-browserify:0.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-dirname:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:3.0.0.yarnlock @@ -1219,7 +1164,6 @@ mgmt_services/cost-mgmt:koku-ui/path-to-regexp:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-type:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-type:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/path-type:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pbkdf2:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/performance-now:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/picomatch:2.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/picomatch:2.2.2.yarnlock @@ -1262,7 +1206,6 @@ mgmt_services/cost-mgmt:koku-ui/pretty-format:26.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pretty-format:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/private:0.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/process-nextick-args:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/process:0.11.10.yarnlock mgmt_services/cost-mgmt:koku-ui/progress:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/promise-inflight:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prompts:2.3.2.yarnlock @@ -1277,29 +1220,20 @@ mgmt_services/cost-mgmt:koku-ui/prop-types:15.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/proxy-addr:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/prr:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/public-encrypt:4.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/pump:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pump:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pumpify:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:1.3.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/punycode:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/query-string:4.3.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/querystring-es3:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/querystring:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/querystringify:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/raf:3.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/railroad-diagrams:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/randexp:0.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/randombytes:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/randombytes:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/randombytes:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/randombytes:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/randomfill:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/range-parser:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/range-parser:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/raw-body:2.4.0.yarnlock @@ -1338,19 +1272,12 @@ mgmt_services/cost-mgmt:koku-ui/read-pkg:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/read-pkg:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:2.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/recast:0.11.23.yarnlock +mgmt_services/cost-mgmt:koku-ui/rechoir:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux-thunk:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux:4.0.5.yarnlock @@ -1358,7 +1285,7 @@ mgmt_services/cost-mgmt:koku-ui/reflect.ownkeys:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regenerator-runtime:0.13.7.yarnlock mgmt_services/cost-mgmt:koku-ui/regex-not:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/regex-not:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock @@ -1381,8 +1308,6 @@ mgmt_services/cost-mgmt:koku-ui/require-main-filename:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/requires-port:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-cwd:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-cwd:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve-dir:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve-dir:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:5.0.0.yarnlock @@ -1394,22 +1319,18 @@ mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.19.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ret:0.1.15.yarnlock mgmt_services/cost-mgmt:koku-ui/retry:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/reusify:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:2.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:2.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:2.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/rimraf:2.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/ripemd160:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/ripemd160:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rst-selector-parser:2.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rsvp:4.8.5.yarnlock mgmt_services/cost-mgmt:koku-ui/run-parallel:1.1.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/run-queue:1.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/run-queue:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock @@ -1418,8 +1339,6 @@ mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-regex:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock @@ -1453,16 +1372,15 @@ mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/send:0.17.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serialize-javascript:4.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/serialize-javascript:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-index:1.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-static:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/set-blocking:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/set-value:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/set-value:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/setimmediate:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/setprototypeof:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/setprototypeof:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/sha.js:2.4.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/sha.js:2.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/shallow-clone:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/shebang-command:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/shebang-command:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/shebang-regex:1.0.0.yarnlock @@ -1471,19 +1389,22 @@ mgmt_services/cost-mgmt:koku-ui/shellwords:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/side-channel:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/sisteransi:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/slash:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/slice-ansi:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon-node:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon-util:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon:0.8.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/sockjs-client:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/sockjs:0.3.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/sockjs-client:1.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/sockjs:0.3.21.yarnlock mgmt_services/cost-mgmt:koku-ui/sort-keys:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-resolve:0.5.3.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock +mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-url:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.5.7.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.5.7.yarnlock @@ -1493,6 +1414,7 @@ mgmt_services/cost-mgmt:koku-ui/source-map:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.7.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/source-map:0.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-correct:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-exceptions:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-expression-parse:3.0.1.yarnlock @@ -1504,7 +1426,6 @@ mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sprintf-js:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/sshpk:1.16.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ssri:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ssri:8.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/stack-utils:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/state-toggle:1.0.3.yarnlock @@ -1513,10 +1434,6 @@ mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/stealthy-require:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/stream-browserify:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/stream-each:1.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/stream-http:2.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/stream-shift:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strict-uri-encode:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-hash:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/string-length:4.0.1.yarnlock @@ -1531,7 +1448,6 @@ mgmt_services/cost-mgmt:koku-ui/string.prototype.trim:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.trimend:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string.prototype.trimstart:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string_decoder:1.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/string_decoder:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string_decoder:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:3.0.1.yarnlock @@ -1557,23 +1473,22 @@ mgmt_services/cost-mgmt:koku-ui/tabbable:5.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/table:5.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tar:6.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/terminal-link:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/terser-webpack-plugin:1.4.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/terser:4.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/terser-webpack-plugin:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/terser:4.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/terser:5.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/test-exclude:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/text-table:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/throat:5.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/through2:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/through:2.3.8.yarnlock mgmt_services/cost-mgmt:koku-ui/thunky:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/timers-browserify:2.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/tiny-invariant:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tiny-warning:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tippy.js:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/tmpl:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/to-arraybuffer:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/to-fast-properties:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/to-object-path:0.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/to-regex-range:2.1.1.yarnlock @@ -1590,7 +1505,7 @@ mgmt_services/cost-mgmt:koku-ui/trim:0.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/trough:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-jest:26.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-loader:4.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/tsconfig-paths-webpack-plugin:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/tsconfig-paths-webpack-plugin:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths:3.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths:3.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:1.13.0.yarnlock @@ -1600,7 +1515,6 @@ mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tsutils:3.17.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/tty-browserify:0.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tunnel-agent:0.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tweetnacl:0.14.5.yarnlock mgmt_services/cost-mgmt:koku-ui/tweetnacl:0.14.5.yarnlock @@ -1614,7 +1528,6 @@ mgmt_services/cost-mgmt:koku-ui/type-fest:0.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/type-is:1.6.18.yarnlock mgmt_services/cost-mgmt:koku-ui/type-is:1.6.18.yarnlock mgmt_services/cost-mgmt:koku-ui/typedarray-to-buffer:3.1.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/typedarray:0.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/typesafe-actions:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/typescript:3.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/uglify-js:3.4.10.yarnlock @@ -1641,14 +1554,13 @@ mgmt_services/cost-mgmt:koku-ui/urix:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/url-join:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/url-loader:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/url-parse:1.4.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/url-parse:1.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/url:0.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/use:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util.promisify:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/util:0.10.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/util:0.11.1.yarnlock mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utils-merge:1.0.1.yarnlock @@ -1656,7 +1568,7 @@ mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:8.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/v8-to-istanbul:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/validate-npm-package-license:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/value-equal:1.0.1.yarnlock @@ -1691,7 +1603,6 @@ mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/vm-browserify:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/void-elements:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-hr-time:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-xmlserializer:2.0.0.yarnlock @@ -1701,23 +1612,22 @@ mgmt_services/cost-mgmt:koku-ui/walker:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/warning:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/warning:4.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/warning:4.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/watchpack-chokidar2:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/watchpack:1.7.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/watchpack:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/wbuf:1.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webidl-conversions:6.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-cli:3.3.12.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-dev-middleware:3.7.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-dev-server:3.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-cli:4.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-dev-middleware:3.7.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-dev-server:3.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-log:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack:4.44.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.6.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack:5.21.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-extensions:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-encoding:1.0.5.yarnlock @@ -1726,14 +1636,12 @@ mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which:1.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/which:1.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/which:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/which:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which:2.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/wildcard:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/window-size:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/word-wrap:1.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/worker-farm:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrap-ansi:6.2.0.yarnlock @@ -1748,10 +1656,8 @@ mgmt_services/cost-mgmt:koku-ui/xmlchars:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xstate:4.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:3.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/yallist:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:13.1.2.yarnlock @@ -1760,3 +1666,4 @@ mgmt_services/cost-mgmt:koku-ui/yargs-parser:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:13.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:15.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs:5.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/yocto-queue:0.1.0.yarnlock diff --git a/package.json b/package.json index 898f41c3a..ccce0d9a7 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "i18n:key:check:full": "scripts/utils/i18n_key_tool.py --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:notfound": "scripts/utils/i18n_key_tool.py --Xreport-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", "i18n:key:check:duplicates": "scripts/utils/i18n_key_tool.py --find-duplicates --Xreport-found --Xreport-not-found --json-file src/locales/en.json --search-path src --exclude-file scripts/utils/i18n_excludes", - "start": "node --max-old-space-size=8192 node_modules/webpack-dev-server/bin/webpack-dev-server.js", + "start": "NODE_OPTIONS=--max-old-space-size=8192 webpack serve -c ./webpack.config.js", "start:dev": "APP_ENV=proxy yarn start", "stats": "webpack --mode production --profile --json > stats.json", "test": "jest", @@ -67,7 +67,7 @@ "html-replace-webpack-plugin": "2.5.6", "html-webpack-plugin": "4.3.0", "human-date": "1.4.0", - "i18next": "19.8.2", + "i18next": "19.8.7", "i18next-xhr-backend": "3.2.2", "js-file-download": "0.4.4", "lodash": "^4.17.19", @@ -84,15 +84,15 @@ "redux-thunk": "2.3.0", "rimraf": "2.6.2", "ts-loader": "4.4.1", - "tsconfig-paths-webpack-plugin": "3.2.0", + "tsconfig-paths-webpack-plugin": "^3.3.0", "typesafe-actions": "2.0.4", "typescript": "3.8.3", "url-join": "4.0.0", "url-loader": "1.0.1", "victory-core": "35.4.4", - "webpack": "^4.43.0", - "webpack-cli": "3.3.12", - "webpack-log": "3.0.1", + "webpack": "^5.21.2", + "webpack-cli": "^4.5.0", + "webpack-log": "^3.0.1", "xstate": "^4.7.7" }, "devDependencies": { @@ -124,7 +124,7 @@ "sass": "^1.26.10", "sass-loader": "^10.0.2", "ts-jest": "26.4.1", - "webpack-dev-server": "^3.11.0" + "webpack-dev-server": "^3.11.2" }, "insights": { "appname": "cost-management" diff --git a/webpack.config.js b/webpack.config.js index 2b765ac70..ed33b89d9 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -198,8 +198,7 @@ module.exports = env => { disableHostCheck: true, headers: { 'Access-Control-Allow-Origin': '*', - 'Access-Control-Allow-Headers': - 'Origin, X-Requested-With, Content-Type, Accept, Authorization', + 'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept, Authorization', }, }, }; diff --git a/yarn.lock b/yarn.lock index 57f8ae132..1608ac0db 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + "@babel/core@7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" @@ -51,7 +58,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.2.2": +"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== @@ -60,6 +67,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.13", "@babel/generator@^7.2.2": + version "7.12.15" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" + integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== + dependencies: + "@babel/types" "^7.12.13" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -69,6 +85,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -76,6 +101,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-member-expression-to-functions@^7.10.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -140,12 +172,24 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/helpers@^7.10.4", "@babel/helpers@^7.2.0": +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + +"@babel/helpers@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== @@ -154,6 +198,15 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helpers@^7.2.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" + integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.12.13" + "@babel/types" "^7.12.13" + "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -163,11 +216,25 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.2.2": +"@babel/highlight@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" + integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== +"@babel/parser@^7.12.13", "@babel/parser@^7.2.2": + version "7.12.16" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" + integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -303,7 +370,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.10.4", "@babel/template@^7.2.2", "@babel/template@^7.3.3": +"@babel/runtime@^7.12.0": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" + integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.10.4", "@babel/template@^7.3.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -312,7 +386,16 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.2.2": +"@babel/template@^7.12.13", "@babel/template@^7.2.2": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== @@ -327,7 +410,22 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.2.2", "@babel/types@^7.3.0", "@babel/types@^7.3.3": +"@babel/traverse@^7.12.13", "@babel/traverse@^7.2.2": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" + integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.12.13" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== @@ -336,6 +434,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.13", "@babel/types@^7.2.2": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" + integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -349,6 +456,11 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@discoveryjs/json-ext@^0.5.0": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" + integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== + "@eslint/eslintrc@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" @@ -964,6 +1076,27 @@ "@types/cheerio" "*" "@types/react" "*" +"@types/eslint-scope@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" + integrity sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "7.2.6" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" + integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + "@types/glob@^7.1.1": version "7.1.3" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" @@ -1046,6 +1179,11 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" +"@types/json-schema@*": + version "7.0.7" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== + "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.6" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" @@ -1315,150 +1453,143 @@ "@typescript-eslint/types" "4.4.1" eslint-visitor-keys "^2.0.0" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== + +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== + +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== + +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== + +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== + +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" + +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== +"@webpack-cli/configtest@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.0.1.tgz#241aecfbdc715eee96bed447ed402e12ec171935" + integrity sha512-B+4uBUYhpzDXmwuo3V9yBH6cISwxEI4J+NO5ggDaGEEHb0osY/R7MzeKc0bHURXQuZjMM4qD+bSJCKIuI3eNBQ== + +"@webpack-cli/info@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.2.2.tgz#ef3c0cd947a1fa083e174a59cb74e0b6195c236c" + integrity sha512-5U9kUJHnwU+FhKH4PWGZuBC1hTEPYyxGSL5jjoBI96Gx8qcYJGOikpiIpFoTq8mmgX3im2zAo2wanv/alD74KQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" + integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== "@xstate/graph@^1.0.0": version "1.2.0" @@ -1519,16 +1650,16 @@ acorn-walk@^7.1.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4: + version "8.0.5" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" + integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1557,7 +1688,7 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.1.0, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -1648,11 +1779,6 @@ aphrodite@2.3.1: inline-style-prefixer "^5.0.4" string-hash "^1.1.3" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1754,16 +1880,6 @@ asap@^2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1776,14 +1892,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -1988,11 +2096,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2040,21 +2143,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" - integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== - body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -2119,76 +2207,21 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== +browserslist@^4.14.5: + version "4.16.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" + integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - 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, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" + caniuse-lite "^1.0.30001181" + colorette "^1.2.1" + electron-to-chromium "^1.3.649" + escalade "^3.1.1" + node-releases "^1.1.70" bs-logger@0.x: version "0.2.6" @@ -2214,25 +2247,6 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -2243,27 +2257,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - cacache@^15.0.4: version "15.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" @@ -2302,6 +2295,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2338,6 +2339,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== +caniuse-lite@^1.0.30001181: + version "1.0.30001185" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" + integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -2407,7 +2413,7 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" -"chokidar@>=2.0.0 <4.0.0", chokidar@^3.4.1: +"chokidar@>=2.0.0 <4.0.0": version "3.4.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== @@ -2441,11 +2447,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2463,14 +2464,6 @@ ci-info@^2.0.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - cjs-module-lexer@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" @@ -2530,6 +2523,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2582,6 +2584,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -2609,6 +2616,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.0.0.tgz#3e2bbfd8bb6724760980988fb5b22b7ee6b71ab2" + integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2654,31 +2666,11 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" @@ -2713,18 +2705,6 @@ cookie@0.4.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2762,37 +2742,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - cross-env@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.0.tgz#6ecd4c015d5773e614039ee529076669b9d126f2" @@ -2812,7 +2761,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2821,23 +2770,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - css-in-js-utils@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" @@ -2912,11 +2844,6 @@ csstype@^3.0.2: resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - d3-array@^1.2.0: version "1.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" @@ -3041,10 +2968,10 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== +debug@^3.1.1, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" @@ -3164,24 +3091,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -3202,15 +3116,6 @@ diff-sequences@^26.6.2: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3314,11 +3219,6 @@ dom-serializer@~0.1.1: domelementtype "^1.3.0" entities "^1.1.1" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -3383,16 +3283,6 @@ dot-case@^3.0.3: no-case "^3.0.3" tslib "^1.10.0" -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -3406,18 +3296,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@^6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" +electron-to-chromium@^1.3.649: + version "1.3.663" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz#dd54adfd8d7f0e01b80d236c6e232efbaa0c686c" + integrity sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw== emittery@^0.7.1: version "0.7.1" @@ -3449,14 +3331,14 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: +enhanced-resolve@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -3465,7 +3347,15 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" -enquirer@^2.3.5: +enhanced-resolve@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" + integrity sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== @@ -3482,6 +3372,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== +envinfo@^7.7.3: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + enzyme-adapter-react-16@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.7.1.tgz#c37c4cb0fd75e88a063154a7a88096474914496a" @@ -3539,7 +3434,7 @@ enzyme@3.8.0: rst-selector-parser "^2.2.3" string.prototype.trim "^1.1.2" -errno@^0.1.3, errno@~0.1.7: +errno@^0.1.3: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== @@ -3588,6 +3483,11 @@ es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-module-lexer@^0.3.26: + version "0.3.26" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" + integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -3605,6 +3505,11 @@ es6-templates@^0.2.3: recast "~0.11.12" through "~2.3.6" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3851,15 +3756,7 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0, eslint-scope@^5.1.0: +eslint-scope@^5.0.0, eslint-scope@^5.1.0, eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== @@ -3985,7 +3882,7 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: +events@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== @@ -3997,14 +3894,6 @@ eventsource@^1.0.7: dependencies: original "^1.0.0" -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - exec-sh@^0.3.2: version "0.3.4" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" @@ -4038,6 +3927,21 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -4056,13 +3960,6 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - expect@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" @@ -4187,6 +4084,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + fastparse@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" @@ -4199,14 +4101,7 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: +faye-websocket@^0.11.3: version "0.11.3" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== @@ -4220,11 +4115,6 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -4330,16 +4220,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -4354,14 +4234,6 @@ flatted@^2.0.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - focus-trap@6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-6.2.2.tgz#0e6f391415b0697c99da932702dedd13084fa131" @@ -4376,7 +4248,12 @@ follow-redirects@1.5.10: dependencies: debug "=3.1.0" -follow-redirects@^1.0.0, follow-redirects@^1.10.0: +follow-redirects@^1.0.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" + integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== + +follow-redirects@^1.10.0: version "1.13.0" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== @@ -4417,14 +4294,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-minipass@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" @@ -4432,16 +4301,6 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4499,6 +4358,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -4523,6 +4391,11 @@ get-stream@^5.0.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -4555,6 +4428,11 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -4567,42 +4445,6 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -4638,7 +4480,12 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +graceful-fs@^4.1.11: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== @@ -4719,23 +4566,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - he@1.2.x, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -4750,17 +4580,8 @@ history@^4.7.2: loose-envify "^1.2.0" resolve-pathname "^3.0.0" tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" + tiny-warning "^1.0.0" + value-equal "^1.0.1" hoist-non-react-statics@^2.5.0: version "2.5.5" @@ -4774,13 +4595,6 @@ hoist-non-react-statics@^3.2.1, hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - hook-into-props@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/hook-into-props/-/hook-into-props-4.0.1.tgz#1b5cc9c7849a74e5d58084fb690f77aaa24215c3" @@ -4811,9 +4625,9 @@ html-encoding-sniffer@^2.0.1: whatwg-encoding "^1.0.5" html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== html-escaper@^2.0.0: version "2.0.2" @@ -4944,9 +4758,9 @@ http-errors@~1.7.2: toidentifier "1.0.0" http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== http-proxy-middleware@0.19.1: version "0.19.1" @@ -4976,11 +4790,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - human-date@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/human-date/-/human-date-1.4.0.tgz#88bb62bd804d00fd12ee2f47dc3c3bbb1e55f99a" @@ -4991,6 +4800,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + hyphenate-style-name@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" @@ -5012,13 +4826,20 @@ i18next-xhr-backend@*, i18next-xhr-backend@3.2.2: dependencies: "@babel/runtime" "^7.5.5" -i18next@*, i18next@19.8.2: +i18next@*: version "19.8.2" resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.2.tgz#8a20ee098c4702f14aae6dee3ecc39245a6a161e" integrity sha512-YWqkUpwnmeZxbNxhQ4BENC27BlXnq4kD6NlqMUwX7T6ZN3alNnBXsWrh/8mJ37BL5cKMZaqA0k/YUo4o6rLfpA== dependencies: "@babel/runtime" "^7.10.1" +i18next@19.8.7: + version "19.8.7" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.7.tgz#ef023e353974d1b1453e8b6331bd9fb7cba427df" + integrity sha512-ezo1gb7QO4OQ5gQCdZMUxopwQSoqpRp6whdEjm1grxMSmkGj1NJ+kYS0UQd4NnpPIVqsgqTQ2L2eqSQYQ+U3Fw== + dependencies: + "@babel/runtime" "^7.12.0" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5033,16 +4854,6 @@ icss-utils@^4.0.0, icss-utils@^4.1.1: dependencies: postcss "^7.0.14" -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - ignore@^3.3.6: version "3.3.10" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" @@ -5097,7 +4908,7 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -infer-owner@^1.0.3, infer-owner@^1.0.4: +infer-owner@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== @@ -5110,26 +4921,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - inline-style-prefixer@^5.0.4: version "5.1.2" resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-5.1.2.tgz#e5a5a3515e25600e016b71e39138971228486c33" @@ -5154,10 +4955,10 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== invariant@^2.2.4: version "2.2.4" @@ -5219,9 +5020,11 @@ is-alphanumerical@^1.0.0: is-decimal "^1.0.0" is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -5264,7 +5067,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.1.0: +is-core-module@^2.1.0, is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -5434,7 +5237,15 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1: +is-regex@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" + integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.1" + +is-regex@^1.1.0, is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== @@ -5483,7 +5294,7 @@ is-whitespace-character@^1.0.0: resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== -is-windows@^1.0.0, is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.0, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== @@ -6085,12 +5896,12 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.2: +json3@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.0, json5@^2.1.2: +json5@2.x, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -6104,6 +5915,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -6245,10 +6063,10 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" @@ -6327,9 +6145,9 @@ lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17. integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== loglevel@^1.6.8: - version "1.7.0" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" - integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + version "1.7.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" + integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== loglevelnext@^3.0.1: version "3.0.1" @@ -6355,13 +6173,6 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -6413,15 +6224,6 @@ markdown-escapes@^1.0.0: resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6463,7 +6265,7 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6490,41 +6292,50 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - mime-db@1.44.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== -"mime-db@>= 1.43.0 < 2": +mime-db@1.45.0: version "1.45.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: +"mime-db@>= 1.43.0 < 2": + version "1.46.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" + integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== + +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== dependencies: mime-db "1.44.0" +mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + dependencies: + mime-db "1.45.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.0.3, mime@^2.4.4: +mime@^2.0.3: version "2.4.6" resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== +mime@^2.4.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" + integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -6540,16 +6351,11 @@ mini-css-extract-plugin@0.11.2: schema-utils "^1.0.0" webpack-sources "^1.1.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -6598,22 +6404,6 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -6639,18 +6429,6 @@ moo@^0.5.0: resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" integrity sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6661,11 +6439,16 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns-service-types@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" @@ -6680,9 +6463,9 @@ multicast-dns@^6.0.1: thunky "^1.0.2" nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== nanoid@^2.0.3: version "2.1.11" @@ -6727,7 +6510,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -6762,35 +6545,6 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -6808,6 +6562,11 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" +node-releases@^1.1.70: + version "1.1.70" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" + integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6847,7 +6606,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -7001,7 +6760,7 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -7046,11 +6805,6 @@ original@^1.0.0: dependencies: url-parse "^1.4.3" -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" @@ -7089,6 +6843,13 @@ p-limit@^3.0.1: dependencies: p-try "^2.0.0" +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -7139,20 +6900,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - param-case@2.1.x: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" @@ -7175,17 +6922,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" @@ -7215,11 +6951,6 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - parse-srcset@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" @@ -7255,11 +6986,6 @@ pascalcase@^0.1.1: resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -7340,17 +7066,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7572,11 +7287,6 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -7639,26 +7349,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -7667,25 +7357,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -7709,11 +7385,6 @@ query-string@^4.1.0: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -7744,21 +7415,13 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: +randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: safe-buffer "^5.1.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -7984,7 +7647,7 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@^2.0.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -7997,7 +7660,7 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.1.1: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -8032,6 +7695,13 @@ recast@~0.11.12: private "~0.1.5" source-map "~0.5.0" +rechoir@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" + integrity sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q== + dependencies: + resolve "^1.9.0" + redux-thunk@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" @@ -8071,7 +7741,15 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: +regexp.prototype.flags@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +regexp.prototype.flags@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== @@ -8222,14 +7900,6 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -8270,6 +7940,14 @@ resolve@^1.18.1: is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.9.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -8299,7 +7977,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -8313,14 +7991,6 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rst-selector-parser@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" @@ -8339,19 +8009,12 @@ run-parallel@^1.1.9: resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.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" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -8474,7 +8137,7 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= -selfsigned@^1.10.7: +selfsigned@^1.10.8: version "1.10.8" resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== @@ -8522,6 +8185,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +serialize-javascript@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -8560,11 +8230,6 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" @@ -8575,13 +8240,12 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + kind-of "^6.0.2" shebang-command@^1.2.0: version "1.2.0" @@ -8620,7 +8284,7 @@ side-channel@^1.0.2: es-abstract "^1.18.0-next.0" object-inspect "^1.8.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -8674,26 +8338,26 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== +sockjs-client@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.5.0.tgz#2f8ff5d4b659e0d092f7aba0b7c386bd2aa20add" + integrity sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q== dependencies: - debug "^3.2.5" + debug "^3.2.6" eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" + faye-websocket "^0.11.3" + inherits "^2.0.4" + json3 "^3.3.3" + url-parse "^1.4.7" -sockjs@0.3.20: - version "0.3.20" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" - integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== +sockjs@^0.3.21: + version "0.3.21" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.21.tgz#b34ffb98e796930b60a0cfa11904d6a339a7d417" + integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== dependencies: - faye-websocket "^0.10.0" + faye-websocket "^0.11.3" uuid "^3.4.0" - websocket-driver "0.6.5" + websocket-driver "^0.7.4" sort-keys@^1.0.0: version "1.1.2" @@ -8702,7 +8366,7 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.0: +source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -8718,7 +8382,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -8741,7 +8405,7 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: +source-map@^0.7.3, source-map@~0.7.2: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -8822,13 +8486,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - ssri@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" @@ -8866,38 +8523,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -8979,7 +8604,7 @@ string.prototype.trimstart@^1.0.1: define-properties "^1.1.3" es-abstract "^1.17.5" -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -9105,6 +8730,11 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" + integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== + tar@^6.0.2: version "6.0.5" resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" @@ -9125,22 +8755,19 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== +terser-webpack-plugin@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz#7effadee06f7ecfa093dbbd3e9ab23f5f3ed8673" + integrity sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q== dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" + jest-worker "^26.6.2" + p-limit "^3.1.0" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" + terser "^5.5.1" -terser@^4.1.2, terser@^4.6.3: +terser@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -9149,6 +8776,15 @@ terser@^4.1.2, terser@^4.6.3: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.6.0.tgz#138cdf21c5e3100b1b3ddfddf720962f88badcd2" + integrity sha512-vyqLMoqadC1uR0vywqOZzriDYzgEkNJFK4q9GeyOBHIbiECHiWLKcWfbQWAUaPfxkjDhapSlZB9f7fkMrvkVjA== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -9168,14 +8804,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -9186,13 +8814,6 @@ thunky@^1.0.2: resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - tiny-invariant@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" @@ -9215,11 +8836,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -9329,10 +8945,10 @@ ts-loader@4.4.1: micromatch "^3.1.4" semver "^5.0.1" -tsconfig-paths-webpack-plugin@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz#6e70bd42915ad0efb64d3385163f0c1270f3e04d" - integrity sha512-S/gOOPOkV8rIL4LurZ1vUdYCVgo15iX9ZMJ6wx6w2OgcpT/G4wMyHB6WM+xheSqGMrWKuxFul+aXpCju3wmj/g== +tsconfig-paths-webpack-plugin@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.3.0.tgz#a7461723c20623ca9148621a5ce36532682ad2ff" + integrity sha512-MpQeZpwPY4gYASCUjY4yt2Zj8yv86O8f++3Ai4o0yI0fUC6G1syvnL9VuY71PBgimRYDQU47f12BEmJq9wRaSw== dependencies: chalk "^2.3.0" enhanced-resolve "^4.0.0" @@ -9370,11 +8986,6 @@ tsutils@^3.17.1: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -9436,11 +9047,6 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - typesafe-actions@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-2.0.4.tgz#31c8f8df3566d549eb52edb64a75997e970c17d0" @@ -9595,7 +9201,7 @@ url-loader@1.0.1: mime "^2.0.3" schema-utils "^0.4.3" -url-parse@^1.4.3: +url-parse@^1.4.3, url-parse@^1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== @@ -9629,20 +9235,6 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -9663,11 +9255,16 @@ uuid@^8.3.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1: +v8-compile-cache@^2.0.3: version "2.1.1" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-compile-cache@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + v8-to-istanbul@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz#5b95cef45c0f83217ec79f8fc7ee1c8b486aee07" @@ -9947,11 +9544,6 @@ victory-zoom-container@^35.4.4, victory-zoom-container@^35.4.7: prop-types "^15.5.8" victory-core "^35.4.7" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - void-elements@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" @@ -9997,23 +9589,13 @@ warning@^4.0.0, warning@^4.0.1: dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" - integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== +watchpack@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" + integrity sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -10032,27 +9614,30 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== -webpack-cli@3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" +webpack-cli@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" + integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.1" + "@webpack-cli/info" "^1.2.2" + "@webpack-cli/serve" "^1.3.0" + colorette "^1.2.1" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== dependencies: memory-fs "^0.4.1" mime "^2.4.4" @@ -10060,10 +9645,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" - integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== +webpack-dev-server@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz#695ebced76a4929f0d5de7fd73fafe185fe33708" + integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -10085,11 +9670,11 @@ webpack-dev-server@^3.11.0: p-retry "^3.0.1" portfinder "^1.0.26" schema-utils "^1.0.0" - selfsigned "^1.10.7" + selfsigned "^1.10.8" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.20" - sockjs-client "1.4.0" + sockjs "^0.3.21" + sockjs-client "^1.5.0" spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" @@ -10099,7 +9684,15 @@ webpack-dev-server@^3.11.0: ws "^6.2.1" yargs "^13.3.2" -webpack-log@3.0.1: +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-log@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-3.0.1.tgz#647c42231b6f74d7cc3c3a66510370e635d066ea" integrity sha512-mX/6BJPPpxco6BGCFZJ96NjgnwBrLQx6d7Kxe1PaJ7KvjI3LFmJK9QgRPCAr9tXrPVawPN1cuM8hJ2Vadnwm+Q== @@ -10108,15 +9701,15 @@ webpack-log@3.0.1: loglevelnext "^3.0.1" nanoid "^2.0.3" -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== +webpack-merge@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" + integrity sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA== dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" + clone-deep "^4.0.1" + wildcard "^2.0.0" -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: +webpack-sources@^1.1.0, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -10124,43 +9717,44 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.43.0: - version "4.44.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" - integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== +webpack-sources@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.2.0.tgz#058926f39e3d443193b6c31547229806ffd02bac" + integrity sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@^5.21.2: + version "5.21.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.21.2.tgz#647507e50d3637695be28af58a6a8246050394e7" + integrity sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" - eslint-scope "^4.0.3" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.3.26" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= - dependencies: - websocket-extensions ">=0.1.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" -websocket-driver@>=0.5.1: +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -10205,7 +9799,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -10219,6 +9813,11 @@ which@^2.0.1, which@^2.0.2: dependencies: isexe "^2.0.0" +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -10229,13 +9828,6 @@ word-wrap@^1.2.3, word-wrap@~1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -10316,7 +9908,7 @@ xstate@^4.7.7: resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.13.0.tgz#0be22ceb8bae2bc6a025fab330fe44204d76771c" integrity sha512-UnUJJzP2KTPqnmxIoD/ymXtpy/hehZnUlO6EXqWC/72XkPb15p9Oz/X4WhS3QE+by7NP+6b5bCi/GTGFzm5D+A== -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -10331,11 +9923,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -10422,3 +10009,8 @@ yargs@^5.0.0: window-size "^0.2.0" y18n "^3.2.1" yargs-parser "^3.2.0" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From 37a842ee9a3379c5b626da389dccccc52302145a Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 15 Feb 2021 10:58:32 -0500 Subject: [PATCH 035/200] Update @redhat-cloud-services packages to version 3 https://issues.redhat.com/browse/COST-909 --- koku-ui-manifest | 16 ++++++++------ package.json | 6 +++--- src/api/api.ts | 2 +- yarn.lock | 56 ++++++++++++++++++++++++++++++++---------------- 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index aae561d09..76c867136 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -112,20 +112,22 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.13.9.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.90.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.90.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.8.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.90.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.7.28.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.8.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.8.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.7.28.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.7.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.7.29.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.20.14.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.25.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.25.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.26.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:2.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.26.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:2.5.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.93.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.10.yarnlock diff --git a/package.json b/package.json index ccce0d9a7..ae01a581f 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,9 @@ "@patternfly/react-styles": "4.7.28", "@patternfly/react-table": "4.20.14", "@patternfly/react-tokens": "4.9.25", - "@redhat-cloud-services/frontend-components": "^2.5.10", - "@redhat-cloud-services/frontend-components-notifications": "^2.2.4", - "@redhat-cloud-services/frontend-components-utilities": "^2.2.9", + "@redhat-cloud-services/frontend-components": "^3.0.6", + "@redhat-cloud-services/frontend-components-notifications": "^3.0.3", + "@redhat-cloud-services/frontend-components-utilities": "^3.0.3", "@redhat-cloud-services/rbac-client": "^1.0.93", "@types/date-fns": "2.6.0", "@types/i18next": "13.0.0", diff --git a/src/api/api.ts b/src/api/api.ts index d6db4157c..788229fff 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1,4 +1,4 @@ -import { authInterceptor as insightsAuthInterceptor } from '@redhat-cloud-services/frontend-components-utilities/files/interceptors'; +import { authInterceptor as insightsAuthInterceptor } from '@redhat-cloud-services/frontend-components-utilities/esm/interceptors'; import axios, { AxiosRequestConfig } from 'axios'; export interface PagedMetaData { diff --git a/yarn.lock b/yarn.lock index 1608ac0db..ae7625097 100644 --- a/yarn.lock +++ b/yarn.lock @@ -771,7 +771,7 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.90.1", "@patternfly/react-core@^4.90.1": +"@patternfly/react-core@4.90.1": version "4.90.1" resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.90.1.tgz#2cb558a23e0c554002dd8847df1cec76dd0dbaa2" integrity sha512-5Yp5udWCuo2DWwmjRqHzhznJZMv5r1pTP5GrAi4dR/jGCowhXTS1RfUlSzWEf/mf/HWDTHv7gWxvrEQD6DhVWA== @@ -784,17 +784,35 @@ tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@4.8.3", "@patternfly/react-icons@^4.8.3": +"@patternfly/react-core@^4.90.1": + version "4.90.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.90.2.tgz#d03346d8f3a8d785e076b93df296ce4fa79d9dbe" + integrity sha512-Ld4HCXYrVZR+ycWKvygmOEDyyMpb/pfZFklJiT/9ktSSSU9SfKwH2XmXotgjwBy1lYUoRYJ58xTpV19duouEoA== + dependencies: + "@patternfly/react-icons" "^4.8.4" + "@patternfly/react-styles" "^4.7.29" + "@patternfly/react-tokens" "^4.9.26" + focus-trap "6.2.2" + react-dropzone "9.0.0" + tippy.js "5.1.2" + tslib "1.13.0" + +"@patternfly/react-icons@4.8.3": version "4.8.3" resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.8.3.tgz#1492ee4929dd5448aeb468a1538867761d3f972d" integrity sha512-BHfeAH6eUqvmAAcbb+2hU/CoNvYyl8kK18e6MiZ0bJtgq6KvPfGpyUYSiQ+JMCSF+W9oNtBSJekvKh1Cfk+/QA== -"@patternfly/react-styles@4.7.28", "@patternfly/react-styles@^4.7.28": +"@patternfly/react-icons@^4.8.3", "@patternfly/react-icons@^4.8.4": + version "4.8.4" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.8.4.tgz#2917088b29dda5843872321ae222fb96302ec6a0" + integrity sha512-nGrZ6F57drim7t5FlFz7YusHVs8xngiayB20oSsJeewppOZ3vJDVhHaiJjsIRMB9PcVOY99QT2wnyiY1eYPVyA== + +"@patternfly/react-styles@4.7.28": version "4.7.28" resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.7.28.tgz#cdf48a84dc90c9091977c6b7a8939379b3c8227b" integrity sha512-yIvbTd/Ii+GV4TalZnnGSuS/EZ4b6LbNuIxDIpcGy1nkcNo/Sui+sVcvHpmYnDYfBq7lyTHXwKcfEMxLOCtRLg== -"@patternfly/react-styles@^4.7.29": +"@patternfly/react-styles@^4.7.28", "@patternfly/react-styles@^4.7.29": version "4.7.29" resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.7.29.tgz#a11cc8a9d4c4a0ac9c6bc298a47477473eaa430c" integrity sha512-eAO9xh2+IQHIBCihmwNuDVCeAWhGXIhbUNJEwZzvevYuH4Pnl0X8YaWoYmM2ZfL8ZdagRTLvjGW+hoZGkUyCBQ== @@ -812,20 +830,20 @@ lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.9.25", "@patternfly/react-tokens@^4.9.25": +"@patternfly/react-tokens@4.9.25": version "4.9.25" resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.9.25.tgz#d467b4e2d5b1a0b9746dd7a611450b945f5ce31f" integrity sha512-qw6+JY5faJLK8pgfymxsUk/9U14E5bEiGCcNH97OzHOP+DelKpbQ3TlfM4A9WDZh9X2x6a9YPus7BYRWBl5XBQ== -"@patternfly/react-tokens@^4.9.26": +"@patternfly/react-tokens@^4.9.25", "@patternfly/react-tokens@^4.9.26": version "4.9.26" resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.9.26.tgz#320759bceef71ff752d79acea278c6cdada9e51f" integrity sha512-SSbY6BaUb7ycXhvdBNk2yzOlteRUHnchHSYPBFvhUk+SqpsjQ7j13/ZTok6pcHXrcj3FaL9f82/ep4eTXPzmWg== -"@redhat-cloud-services/frontend-components-notifications@^2.2.4": - version "2.2.4" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-2.2.4.tgz#0ac2e0afd1ff192478cf0e8496efb4609f1a6eb0" - integrity sha512-FmUf77Z0XP7UaOfiE+a2nn1DjWxnOlo1B6HIOjnRoToHAKSuMEtuxHxMGIv02ru2NL0Pc1GhFLr+IJ+L2BeTaQ== +"@redhat-cloud-services/frontend-components-notifications@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.0.3.tgz#b83ef396d2a7d65889d5554a3346039683d90516" + integrity sha512-H3wLzn05GA5ntLDAxGGneAEtsjcFQoaG+WUz3RPQBEZBnFrd3bcDU42ucXEqH9GaDy/zZf1l0SXbVK/efpLJtQ== dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" @@ -840,10 +858,10 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components-utilities@^2.2.9": - version "2.2.9" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-2.2.9.tgz#ae3fd5623178d037ab55e17de24fee1fabafa673" - integrity sha512-+rtCdi/fi89+DE1RO8Jvq9Vh026u9qStKagGFO+wZUspvDwAxkT3CvsOksQadocwj4J4d9znm8URHSDumBYeSw== +"@redhat-cloud-services/frontend-components-utilities@>=3.0.0", "@redhat-cloud-services/frontend-components-utilities@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.0.3.tgz#160ceccc3eb70215505307dafeb5b4333e4090ce" + integrity sha512-5tV0iFuM15f5Q+TJJp97r0mCaSwffFwlh5Ey7v9MhKjv1AXU1/GCEeRmoN2B1wT1Yh1i1zPKqj423i+y5RzoPA== dependencies: "@sentry/browser" "^5.4.0" awesome-debounce-promise "^2.1.0" @@ -851,12 +869,12 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^2.5.10": - version "2.5.10" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-2.5.10.tgz#644b459066c9ab30730f7251133e464579ec9879" - integrity sha512-/1BW2jwdEyD9p2jF53RPmZhtucdaoB6//sCxBy9PvZnfVMYlT1sf+EAOdj+q7Nd4agfItKnM8Tg3IFkIfpeOUw== +"@redhat-cloud-services/frontend-components@^3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.0.6.tgz#036cd9656a18616d8ed4cff6a56ce5e9c4030984" + integrity sha512-SBl4fskO4BwqiJvsXJBZyxqWECIpgwFOgSD0rpma4lD+d+Fq28gjH+UMgukpGD5tgNJrbmsG/9ZTwqSbt1+1BA== dependencies: - "@redhat-cloud-services/frontend-components-utilities" "*" + "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "0.0.10" "@scalprum/react-core" "0.0.13" sanitize-html "^1.25.0" From 067206037045ab37a03a309b19281027ffcaa07b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 15 Feb 2021 14:11:50 -0500 Subject: [PATCH 036/200] updated frontend-components-utilities import path --- src/api/api.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/api/api.ts b/src/api/api.ts index 788229fff..db7045c57 100644 --- a/src/api/api.ts +++ b/src/api/api.ts @@ -1,4 +1,4 @@ -import { authInterceptor as insightsAuthInterceptor } from '@redhat-cloud-services/frontend-components-utilities/esm/interceptors'; +import { authInterceptor as insightsAuthInterceptor } from '@redhat-cloud-services/frontend-components-utilities/interceptors'; import axios, { AxiosRequestConfig } from 'axios'; export interface PagedMetaData { From ad930ea7ab6f79e930eb05a5160ea71667894530 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 15 Feb 2021 14:59:35 -0500 Subject: [PATCH 037/200] Azure drop down is cut off by sticky explorer table styles https://issues.redhat.com/browse/COST-1027 --- src/pages/explorer/explorerTable.scss | 6 +++--- src/pages/explorer/explorerTable.tsx | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/explorer/explorerTable.scss index 9cfb46cd2..2873e3fce 100644 --- a/src/pages/explorer/explorerTable.scss +++ b/src/pages/explorer/explorerTable.scss @@ -29,21 +29,21 @@ } } -.tableOverride { +.explorerTableOverride { &.pf-c-table { thead th:first-child, tbody td:first-child { background-clip: padding-box; background-color: var(--pf-global--BackgroundColor--light-100); left: 0px; position: sticky; - z-index: 9999; + z-index: 999; } thead th:nth-child(2), tbody td:nth-child(2) { background-clip: padding-box; background-color: var(--pf-global--BackgroundColor--light-100); left: 45px; position: sticky; - z-index: 9999; + z-index: 999; } @media (min-width: 1200px) { thead th:nth-child(2), tbody td:nth-child(2) { diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index c4ad3b586..aaca7b582 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -335,7 +335,7 @@ class ExplorerTableBase extends React.Component { aria-label="explorer-table" canSelectAll={false} cells={columns} - className="tableOverride" + className="explorerTableOverride" rows={isLoading ? loadingRows : rows} sortBy={this.getSortBy()} onSelect={isLoading ? undefined : this.handleOnSelect} From 8b1f9442ef235cae3701b0c15e36ed1e5689fca5 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 16 Feb 2021 13:09:31 -0500 Subject: [PATCH 038/200] Wp5 upgrade plugins cost 1039 (#1855) * upgrade plugins and babel, getting prepared for chrome v2.0 * reverted changes of babel versions * updated manifest file so it falls inline with dependencies --- koku-ui-manifest | 58 ++------ package.json | 8 +- yarn.lock | 335 ++++++----------------------------------------- 3 files changed, 54 insertions(+), 347 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 76c867136..2ffa30288 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -107,7 +107,6 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@npmcli/move-file:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.13.9.yarnlock @@ -199,14 +198,12 @@ mgmt_services/cost-mgmt:koku-ui/@types/react:16.8.22.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/source-list-map:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/stack-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/tapable:1.0.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/tapable:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/testing-library__dom:7.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/testing-library__dom:6.14.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/testing-library__react:9.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/uglify-js:3.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/webpack-sources:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/webpack:4.41.21.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/webpack:4.41.22.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/yargs-parser:15.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/yargs:13.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/yargs:15.0.8.yarnlock @@ -250,7 +247,6 @@ mgmt_services/cost-mgmt:koku-ui/acorn-walk:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:8.0.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/aggregate-error:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/airbnb-prop-types:2.16.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-errors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock @@ -351,7 +347,6 @@ mgmt_services/cost-mgmt:koku-ui/buffer-from:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/buffer-indexof:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bytes:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/cacache:15.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/cache-base:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock @@ -378,7 +373,6 @@ mgmt_services/cost-mgmt:koku-ui/character-reference-invalid:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio:1.0.0-rc.3.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:3.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:2.1.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/chownr:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chrome-trace-event:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ci-info:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cjs-module-lexer:0.6.0.yarnlock @@ -386,7 +380,6 @@ mgmt_services/cost-mgmt:koku-ui/class-utils:0.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/classnames:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/clean-css:4.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/clean-css:4.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/clean-stack:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cliui:6.0.0.yarnlock @@ -427,7 +420,7 @@ mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie-signature:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-descriptor:0.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/copy-webpack-plugin:6.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/copy-webpack-plugin:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/core-js-pure:3.6.5.yarnlock mgmt_services/cost-mgmt:koku-ui/core-js:2.6.11.yarnlock mgmt_services/cost-mgmt:koku-ui/core-js:2.6.11.yarnlock @@ -491,7 +484,6 @@ mgmt_services/cost-mgmt:koku-ui/deep-is:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/deepmerge:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/default-gateway:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/define-properties:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/define-properties:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:0.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/define-property:2.0.2.yarnlock @@ -663,7 +655,6 @@ mgmt_services/cost-mgmt:koku-ui/fill-range:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:7.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/finalhandler:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/find-cache-dir:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/find-cache-dir:3.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock @@ -682,7 +673,6 @@ mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/forwarded:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fresh:0.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/fs-minipass:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fs.realpath:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:2.1.3.yarnlock @@ -752,8 +742,8 @@ mgmt_services/cost-mgmt:koku-ui/html-loader:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier:3.5.21.yarnlock mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-replace-webpack-plugin:2.5.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:4.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-replace-webpack-plugin:2.6.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:3.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:3.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:4.1.0.yarnlock @@ -785,9 +775,7 @@ mgmt_services/cost-mgmt:koku-ui/import-fresh:3.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/import-local:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/import-local:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/imurmurhash:0.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/indent-string:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/indexes-of:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/infer-owner:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inflight:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock @@ -855,7 +843,6 @@ mgmt_services/cost-mgmt:koku-ui/is-path-cwd:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-in-cwd:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-path-inside:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.0.yarnlock @@ -1002,10 +989,8 @@ mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/lru-cache:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-error:1.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/makeerror:1.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/map-cache:0.2.2.yarnlock @@ -1033,22 +1018,14 @@ mgmt_services/cost-mgmt:koku-ui/mime:1.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:2.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mimic-fn:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:0.11.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:1.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/minimalistic-assert:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/minimatch:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/minipass-collect:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/minipass-flush:1.0.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/minipass-pipeline:1.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/minipass:3.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/minipass:3.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/minizlib:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mixin-deep:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock @@ -1079,7 +1056,6 @@ mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/normalize-url:1.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock @@ -1090,7 +1066,6 @@ mgmt_services/cost-mgmt:koku-ui/nwsapi:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/oauth-sign:0.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-copy:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.8.0.yarnlock @@ -1104,7 +1079,6 @@ mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.getownpropertydescriptors:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object.pick:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object.values:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object.values:1.1.1.yarnlock @@ -1127,13 +1101,12 @@ mgmt_services/cost-mgmt:koku-ui/p-finally:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-limit:3.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-limit:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-locate:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-map:2.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-map:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-retry:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:2.2.0.yarnlock @@ -1178,7 +1151,6 @@ mgmt_services/cost-mgmt:koku-ui/pirates:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pkg-dir:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pkg-dir:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pkg-dir:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pkg-dir:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/popper.js:1.16.1.yarnlock mgmt_services/cost-mgmt:koku-ui/portfinder:1.0.28.yarnlock mgmt_services/cost-mgmt:koku-ui/posix-character-classes:0.1.1.yarnlock @@ -1196,7 +1168,6 @@ mgmt_services/cost-mgmt:koku-ui/postcss:7.0.35.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss:7.0.35.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/prepend-http:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/prettier-linter-helpers:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/prettier:1.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/pretty-error:2.1.1.yarnlock @@ -1209,7 +1180,6 @@ mgmt_services/cost-mgmt:koku-ui/pretty-format:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/private:0.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/process-nextick-args:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/progress:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/promise-inflight:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prompts:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/prop-types-exact:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/prop-types-extra:1.1.1.yarnlock @@ -1229,7 +1199,6 @@ mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/query-string:4.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/querystring:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/querystringify:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/raf:3.4.1.yarnlock @@ -1329,7 +1298,6 @@ mgmt_services/cost-mgmt:koku-ui/rimraf:2.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:2.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:2.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rst-selector-parser:2.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rsvp:4.8.5.yarnlock mgmt_services/cost-mgmt:koku-ui/run-parallel:1.1.9.yarnlock @@ -1348,8 +1316,8 @@ mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sane:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sanitize-html:1.27.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/sass-loader:10.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/sass:1.27.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/sass-loader:10.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/sass:1.32.7.yarnlock mgmt_services/cost-mgmt:koku-ui/saxes:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.13.6.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.19.1.yarnlock @@ -1373,7 +1341,6 @@ mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/send:0.17.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/serialize-javascript:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/serialize-javascript:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-index:1.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-static:1.14.1.yarnlock @@ -1400,7 +1367,6 @@ mgmt_services/cost-mgmt:koku-ui/snapdragon-util:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/snapdragon:0.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sockjs-client:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sockjs:0.3.21.yarnlock -mgmt_services/cost-mgmt:koku-ui/sort-keys:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-list-map:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-resolve:0.5.3.yarnlock @@ -1428,7 +1394,6 @@ mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sprintf-js:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/sshpk:1.16.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ssri:8.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/stack-utils:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/state-toggle:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/static-extend:0.1.2.yarnlock @@ -1436,7 +1401,6 @@ mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/stealthy-require:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/strict-uri-encode:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-hash:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/string-length:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock @@ -1474,10 +1438,9 @@ mgmt_services/cost-mgmt:koku-ui/symbol-tree:3.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/tabbable:5.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/table:5.4.6.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/tar:6.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/terminal-link:2.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/terser-webpack-plugin:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/terser:4.8.0.yarnlock @@ -1538,8 +1501,6 @@ mgmt_services/cost-mgmt:koku-ui/unherit:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/unified:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/union-value:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uniq:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/unique-filename:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/unique-slug:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-is:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-remove-position:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:1.1.2.yarnlock @@ -1562,7 +1523,6 @@ mgmt_services/cost-mgmt:koku-ui/use:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/util.promisify:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utils-merge:1.0.1.yarnlock @@ -1626,7 +1586,6 @@ mgmt_services/cost-mgmt:koku-ui/webpack-log:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack:5.21.2.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock @@ -1660,7 +1619,6 @@ mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:3.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/y18n:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:13.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:18.1.3.yarnlock diff --git a/package.json b/package.json index ae01a581f..31e8731bd 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "aphrodite": "2.3.1", "axios": "0.21.1", "babel-loader": "8.1.0", - "copy-webpack-plugin": "6.0.3", + "copy-webpack-plugin": "7.0.0", "cross-env": "5.2.0", "css-loader": "3.6.0", "date-fns": "1.29.0", @@ -64,14 +64,14 @@ "git-revision-webpack-plugin": "3.0.6", "hook-into-props": "^4.0.1", "html-loader": "0.5.5", - "html-replace-webpack-plugin": "2.5.6", - "html-webpack-plugin": "4.3.0", + "html-replace-webpack-plugin": "2.6.0", + "html-webpack-plugin": "^5.1.0", "human-date": "1.4.0", "i18next": "19.8.7", "i18next-xhr-backend": "3.2.2", "js-file-download": "0.4.4", "lodash": "^4.17.19", - "mini-css-extract-plugin": "0.11.2", + "mini-css-extract-plugin": "^1.3.7", "null-loader": "4.0.1", "qs": "6.5.2", "react": "16.8.6", diff --git a/yarn.lock b/yarn.lock index ae7625097..ed65c620b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -727,13 +727,6 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@npmcli/move-file@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.0.1.tgz#de103070dac0f48ce49cf6693c23af59c0f70464" - integrity sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw== - dependencies: - mkdirp "^1.0.4" - "@patternfly/patternfly@4.80.2": version "4.80.2" resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.80.2.tgz#ef17cae939d14789bebc3f9bcc8e92cd2334180d" @@ -1314,7 +1307,7 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/tapable@*", "@types/tapable@^1.0.5": +"@types/tapable@*": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== @@ -1370,18 +1363,6 @@ "@types/webpack-sources" "*" source-map "^0.6.0" -"@types/webpack@^4.41.8": - version "4.41.22" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.22.tgz#ff9758a17c6bd499e459b91e78539848c32d0731" - integrity sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ== - dependencies: - "@types/anymatch" "*" - "@types/node" "*" - "@types/tapable" "*" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - source-map "^0.6.0" - "@types/yargs-parser@*": version "15.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" @@ -1678,14 +1659,6 @@ acorn@^8.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - airbnb-prop-types@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz#b96274cefa1abb14f623f804173ee97c13971dc2" @@ -2275,29 +2248,6 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@^15.0.4: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.0" - tar "^6.0.2" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2465,11 +2415,6 @@ chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" @@ -2509,11 +2454,6 @@ clean-css@4.2.x, clean-css@^4.2.3: dependencies: source-map "~0.6.0" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" @@ -2728,22 +2668,19 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-webpack-plugin@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-6.0.3.tgz#2b3d2bfc6861b96432a65f0149720adbd902040b" - integrity sha512-q5m6Vz4elsuyVEIUXr7wJdIdePWTubsqVbEMvf1WQnHGv0Q+9yPRu7MtYFPt+GBOXRav9lvIINifTQ1vSCs+eA== +copy-webpack-plugin@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-7.0.0.tgz#3506f867ca6e861ee2769d4deaf8fa0d2563ada9" + integrity sha512-SLjQNa5iE3BoCP76ESU9qYo9ZkEWtXoZxDurHoqPchAFRblJ9g96xTeC560UXBMre1Nx6ixIIUfiY3VcjpJw3g== dependencies: - cacache "^15.0.4" fast-glob "^3.2.4" - find-cache-dir "^3.3.1" glob-parent "^5.1.1" globby "^11.0.1" loader-utils "^2.0.0" normalize-path "^3.0.0" - p-limit "^3.0.1" - schema-utils "^2.7.0" - serialize-javascript "^4.0.0" - webpack-sources "^1.4.3" + p-limit "^3.0.2" + schema-utils "^3.0.0" + serialize-javascript "^5.0.1" core-js-pure@^3.0.0: version "3.6.5" @@ -3045,7 +2982,7 @@ default-gateway@^4.2.0: execa "^1.0.0" ip-regex "^2.1.0" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -4199,15 +4136,6 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -4312,13 +4240,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -4696,25 +4617,22 @@ html-parse-stringify2@2.0.1: dependencies: void-elements "^2.0.1" -html-replace-webpack-plugin@2.5.6: - version "2.5.6" - resolved "https://registry.yarnpkg.com/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.5.6.tgz#cc2bc4629fc984967801f9e81b0b1e9907012dd3" - integrity sha512-McyP6qwQQJ01TyyRaVi7uLGXNXHVx5SqC53dPdByzB5JrQHXkzE2qMxQOewqaLl70ITmaDp+HhfJRWcB/7pbwA== +html-replace-webpack-plugin@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/html-replace-webpack-plugin/-/html-replace-webpack-plugin-2.6.0.tgz#506d81e06cb5d6519281ce7c7dde7aeee04620e7" + integrity sha512-BL0DgtqIAef2C8+Dq8v3Ork7FWLPVVkuFkd3DpFB8XxI8hgXiWytvWhGTztSwdiIrPstUPahL5g7W8ts/vuERw== -html-webpack-plugin@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" - integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== +html-webpack-plugin@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz#1c11bbe01ab9d1262c4b601edebcf394364b1f60" + integrity sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g== dependencies: "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.15" + loader-utils "^2.0.0" + lodash "^4.17.20" pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" + tapable "^2.0.0" htmlparser2@^3.3.0, htmlparser2@^3.9.1: version "3.10.1" @@ -4916,21 +4834,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -5238,7 +5146,7 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -6191,13 +6099,6 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - make-dir@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -6206,7 +6107,7 @@ make-dir@^2.0.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.0, make-dir@^3.0.2: +make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -6359,14 +6260,13 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mini-css-extract-plugin@0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.2.tgz#e3af4d5e04fbcaaf11838ab230510073060b37bf" - integrity sha512-h2LknfX4U1kScXxH8xE9LCOqT5B+068EAj36qicMb8l4dqdJoyHcmWmpd+ueyZfgu/POvIn+teoUnTtei2ikug== +mini-css-extract-plugin@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.7.tgz#51848320f736bebccbe9875e38c776c364a4a8eb" + integrity sha512-NDyOUqdfKVIfWTludTcZ6JDOMsIdWgyTEECYbfvZszPpkMRyQLvukqtLr92tfukPQxVZNCKb8TkOilFBvS5RIw== dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" + loader-utils "^2.0.0" + schema-utils "^3.0.0" webpack-sources "^1.1.0" minimalistic-assert@^1.0.0: @@ -6386,42 +6286,6 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -6430,7 +6294,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@1.x: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -6607,16 +6471,6 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6661,7 +6515,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -6729,14 +6583,6 @@ object.fromentries@^2.0.2: function-bind "^1.1.1" has "^1.0.3" -object.getownpropertydescriptors@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -6854,14 +6700,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" - integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== - dependencies: - p-try "^2.0.0" - -p-limit@^3.1.0: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== @@ -6894,13 +6733,6 @@ p-map@^2.0.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - p-retry@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" @@ -7137,7 +6969,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== @@ -7230,11 +7062,6 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -7310,11 +7137,6 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - prompts@^2.0.1: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -7395,14 +7217,6 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" @@ -8002,7 +7816,7 @@ rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -8075,9 +7889,9 @@ sanitize-html@^1.25.0: postcss "^7.0.27" sass-loader@^10.0.2: - version "10.0.3" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.3.tgz#9e2f1bfdd6355f2adde4e4835d838b020bf800b0" - integrity sha512-W4+FV5oUdYy0PnC11ZoPrcAexODgDCa3ngxoy5X5qBhZYoPz9FPjb6Oox8Aa0ZYEyx34k8AQfOVuvqefOSAAUQ== + version "10.1.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.1.1.tgz#4ddd5a3d7638e7949065dd6e9c7c04037f7e663d" + integrity sha512-W6gVDXAd5hR/WHsPicvZdjAWHBcEJ44UahgxcIE196fW2ong0ZHMPO1kZuI5q0VlvMQZh32gpv69PLWQm70qrw== dependencies: klona "^2.0.4" loader-utils "^2.0.0" @@ -8086,9 +7900,9 @@ sass-loader@^10.0.2: semver "^7.3.2" sass@^1.26.10: - version "1.27.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.27.0.tgz#0657ff674206b95ec20dc638a93e179c78f6ada2" - integrity sha512-0gcrER56OkzotK/GGwgg4fPrKuiFlPNitO7eUJ18Bs+/NBlofJfMxmxqpqJxjae9vu0Wq8TZzrSyxZal00WDig== + version "1.32.7" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.7.tgz#632a9df2b85dc4b346977fcaf2d5e6f2b7039fd8" + integrity sha512-C8Z4bjqGWnsYa11o8hpKAuoyFdRhrSHcYjCr+XAWVPSIQqC8mp2f5Dx4em0dKYehPzg5XSekmCjqJnEZbIls9A== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -8196,13 +8010,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -8377,13 +8184,6 @@ sockjs@^0.3.21: uuid "^3.4.0" websocket-driver "^0.7.4" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0, source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8504,13 +8304,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" - integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== - dependencies: - minipass "^3.1.1" - stack-utils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" @@ -8541,11 +8334,6 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - string-hash@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" @@ -8743,28 +8531,16 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -tapable@^1.0.0, tapable@^1.1.3: +tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.1.1, tapable@^2.2.0: +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" integrity sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw== -tar@^6.0.2: - version "6.0.5" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.5.tgz#bde815086e10b39f1dcd298e89d596e1535e200f" - integrity sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -9125,20 +8901,6 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" @@ -9245,14 +9007,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -9727,7 +9481,7 @@ webpack-merge@^5.7.3: clone-deep "^4.0.1" wildcard "^2.0.0" -webpack-sources@^1.1.0, webpack-sources@^1.4.3: +webpack-sources@^1.1.0: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== @@ -9941,11 +9695,6 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@20.x: version "20.2.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.1.tgz#28f3773c546cdd8a69ddae68116b48a5da328e77" From ed4577e910dd57624c89610145de66a65aa0b6b1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 16 Feb 2021 13:50:51 -0500 Subject: [PATCH 039/200] Remove babel from webpack config (#1856) https://issues.redhat.com/browse/COST-934 --- koku-ui-manifest | 33 -------- package.json | 6 -- webpack.config.js | 22 ----- yarn.lock | 200 ++-------------------------------------------- 4 files changed, 6 insertions(+), 255 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 2ffa30288..764623208 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -1,17 +1,11 @@ mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/core:7.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.12.15.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.12.15.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-member-expression-to-functions:7.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-imports:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-transforms:7.11.0.yarnlock @@ -22,27 +16,18 @@ mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-replace-supers:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-simple-access:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.12.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.12.16.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.12.16.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-async-generators:7.8.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-bigint:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-class-properties:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-decorators:7.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-dynamic-import:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-import-meta:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-json-strings:7.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-jsx:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-logical-assignment-operators:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-nullish-coalescing-operator:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-numeric-separator:7.10.4.yarnlock @@ -50,7 +35,6 @@ mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-object-rest-spread:7.8.3.ya mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-optional-catch-binding:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-optional-chaining:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-top-level-await:7.12.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-typescript:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime-corejs2:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime-corejs3:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock @@ -65,22 +49,16 @@ mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@bcoe/v8-coverage:0.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@cnakazawa/watch:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@discoveryjs/json-ext:0.5.2.yarnlock @@ -316,7 +294,6 @@ mgmt_services/cost-mgmt:koku-ui/axios:0.19.2.yarnlock mgmt_services/cost-mgmt:koku-ui/axobject-query:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-eslint:9.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-jest:26.6.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/babel-loader:8.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-plugin-istanbul:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-plugin-jest-hoist:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-preset-current-node-syntax:1.0.1.yarnlock @@ -404,7 +381,6 @@ mgmt_services/cost-mgmt:koku-ui/commander:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/comment-parser:0.7.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/commondir:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/component-emitter:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/compressible:2.0.18.yarnlock mgmt_services/cost-mgmt:koku-ui/compression:1.7.4.yarnlock @@ -416,7 +392,6 @@ mgmt_services/cost-mgmt:koku-ui/content-type:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/convert-source-map:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie-signature:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-descriptor:0.1.1.yarnlock @@ -654,7 +629,6 @@ mgmt_services/cost-mgmt:koku-ui/file-uri-to-path:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:7.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/finalhandler:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/find-cache-dir:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/find-up:2.1.0.yarnlock @@ -931,7 +905,6 @@ mgmt_services/cost-mgmt:koku-ui/json3:3.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsonify:0.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsprim:1.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:2.4.1.yarnlock @@ -960,7 +933,6 @@ mgmt_services/cost-mgmt:koku-ui/loader-runner:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:3.0.0.yarnlock @@ -979,7 +951,6 @@ mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevelnext:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock @@ -989,7 +960,6 @@ mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/make-dir:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/make-error:1.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/makeerror:1.0.11.yarnlock @@ -1028,7 +998,6 @@ mgmt_services/cost-mgmt:koku-ui/mixin-deep:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/mkdirp:0.5.5.yarnlock mgmt_services/cost-mgmt:koku-ui/moo:0.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ms:2.1.1.yarnlock @@ -1325,7 +1294,6 @@ mgmt_services/cost-mgmt:koku-ui/schema-utils:0.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/schema-utils:0.4.7.yarnlock mgmt_services/cost-mgmt:koku-ui/schema-utils:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/schema-utils:2.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/schema-utils:2.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/schema-utils:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/select-hose:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/selfsigned:1.10.8.yarnlock @@ -1334,7 +1302,6 @@ mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock diff --git a/package.json b/package.json index 31e8731bd..9b5645c84 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "verify": "tsc --noEmit" }, "dependencies": { - "@babel/core": "7.2.2", "@fortawesome/free-solid-svg-icons": "5.1.0", "@patternfly/patternfly": "4.80.2", "@patternfly/react-charts": "6.13.9", @@ -55,7 +54,6 @@ "@types/webpack": "4.41.21", "aphrodite": "2.3.1", "axios": "0.21.1", - "babel-loader": "8.1.0", "copy-webpack-plugin": "7.0.0", "cross-env": "5.2.0", "css-loader": "3.6.0", @@ -96,10 +94,6 @@ "xstate": "^4.7.7" }, "devDependencies": { - "@babel/plugin-syntax-decorators": "7.2.0", - "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-syntax-jsx": "7.2.0", - "@babel/plugin-syntax-typescript": "7.2.0", "@testing-library/react": "9.4.0", "@types/enzyme": "3.1.15", "@types/enzyme-adapter-react-16": "1.0.3", diff --git a/webpack.config.js b/webpack.config.js index ed33b89d9..bd95ecdc2 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -67,28 +67,6 @@ module.exports = env => { { loader: 'ts-loader', }, - !isProduction && { - loader: 'babel-loader', - options: { - plugins: [ - // See https://github.com/babel/babel/issues/8049 - [ - '@babel/plugin-syntax-typescript', - { - isTSX: true, - }, - ], - [ - '@babel/plugin-syntax-decorators', - { - legacy: true, - }, - ], - '@babel/plugin-syntax-jsx', - '@babel/plugin-syntax-dynamic-import', - ], - }, - }, ].filter(Boolean), }, { diff --git a/yarn.lock b/yarn.lock index ed65c620b..b0e41d174 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,33 +9,6 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/core@7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" - integrity sha512-59vB0RWt09cAct5EIe58+NzGP4TFSD3Bz//2/ELy3ZeTeKF6VTD1AXlH8BGGbCX0PuobZBsIzO7IAI9PH67eKw== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" - "@babel/helpers" "^7.2.0" - "@babel/parser" "^7.2.2" - "@babel/template" "^7.2.2" - "@babel/traverse" "^7.2.2" - "@babel/types" "^7.2.2" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" @@ -67,15 +40,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.12.13", "@babel/generator@^7.2.2": - version "7.12.15" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.15.tgz#4617b5d0b25cc572474cc1aafee1edeaf9b5368f" - integrity sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ== - dependencies: - "@babel/types" "^7.12.13" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/helper-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" @@ -85,15 +49,6 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" - integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.12.13" - "@babel/helper-get-function-arity@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" @@ -101,13 +56,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - "@babel/helper-member-expression-to-functions@^7.10.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" @@ -172,23 +120,11 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== - "@babel/helpers@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" @@ -198,15 +134,6 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.2.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.13.tgz#3c75e993632e4dadc0274eae219c73eb7645ba47" - integrity sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ== - dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.12.13" - "@babel/types" "^7.12.13" - "@babel/highlight@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" @@ -216,25 +143,11 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" - integrity sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== -"@babel/parser@^7.12.13", "@babel/parser@^7.2.2": - version "7.12.16" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.16.tgz#cc31257419d2c3189d394081635703f549fc1ed4" - integrity sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw== - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -256,20 +169,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-decorators@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" - integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - -"@babel/plugin-syntax-dynamic-import@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" - integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -284,13 +183,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" - integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -340,13 +232,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-typescript@7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.2.0.tgz#55d240536bd314dcbbec70fd949c5cabaed1de29" - integrity sha512-WhKr6yu6yGpGcNMVgIBuI9MkredpVc7Y3YR4UzEZmDztHoL6wV56YBHLhWnjO1EvId1B32HrD3DRFc+zSoKI1g== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/runtime-corejs2@^7.0.0": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.11.2.tgz#700a03945ebad0d31ba6690fc8a6bcc9040faa47" @@ -386,15 +271,6 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/template@^7.12.13", "@babel/template@^7.2.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" @@ -410,21 +286,6 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.12.13", "@babel/traverse@^7.2.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.13.tgz#689f0e4b4c08587ad26622832632735fb8c4e0c0" - integrity sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.12.13" - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -434,15 +295,6 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.12.13", "@babel/types@^7.2.2": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.13.tgz#8be1aa8f2c876da11a9cf650c0ecf656913ad611" - integrity sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ== - dependencies: - "@babel/helper-validator-identifier" "^7.12.11" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2019,17 +1871,6 @@ babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-loader@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - babel-plugin-istanbul@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" @@ -2589,11 +2430,6 @@ comment-parser@^0.7.6: resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.6.tgz#0e743a53c8e646c899a1323db31f6cd337b10f12" integrity sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg== -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2646,7 +2482,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -4127,15 +3963,6 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -5841,13 +5668,6 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" @@ -5994,7 +5814,7 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -6065,7 +5885,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: +lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -6099,14 +5919,6 @@ lower-case@^2.0.1: dependencies: tslib "^1.10.0" -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -6299,7 +6111,7 @@ mkdirp@1.x: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -7946,7 +7758,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.5, schema-utils@^2.7.0: +schema-utils@^2.7.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -7976,7 +7788,7 @@ selfsigned@^1.10.8: dependencies: node-forge "^0.10.0" -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.4.1, semver@^5.5.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== From c2942c583fc5dabb49cc7d331fdf086d0633de7d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 15 Feb 2021 10:00:28 -0500 Subject: [PATCH 040/200] PatternFly milestone update https://issues.redhat.com/browse/COST-1022 --- koku-ui-manifest | 17 +++++ package.json | 13 ++++ .../__snapshots__/warningIcon.test.tsx.snap | 1 - yarn.lock | 73 ++++++++++++++++++- 4 files changed, 99 insertions(+), 5 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 764623208..32807f2d2 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -85,6 +85,7 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.4.yarnlock +<<<<<<< HEAD mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.80.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.13.9.yarnlock @@ -101,6 +102,22 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.25.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.9.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.0.3.yarnlock +======= +mgmt_services/cost-mgmt:koku-ui/@npmcli/move-file:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.87.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.87.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:2.2.4.yarnlock +>>>>>>> b843ab21... PatternFly milestone update mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock diff --git a/package.json b/package.json index 9b5645c84..ce7b06cb7 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.1.0", +<<<<<<< HEAD "@patternfly/patternfly": "4.80.2", "@patternfly/react-charts": "6.13.9", "@patternfly/react-core": "4.90.1", @@ -41,6 +42,18 @@ "@redhat-cloud-services/frontend-components": "^3.0.6", "@redhat-cloud-services/frontend-components-notifications": "^3.0.3", "@redhat-cloud-services/frontend-components-utilities": "^3.0.3", +======= + "@patternfly/patternfly": "4.87.1", + "@patternfly/react-charts": "6.14.0", + "@patternfly/react-core": "4.97.0", + "@patternfly/react-icons": "4.9.0", + "@patternfly/react-styles": "4.8.0", + "@patternfly/react-table": "4.23.0", + "@patternfly/react-tokens": "4.10.0", + "@redhat-cloud-services/frontend-components": "^2.5.10", + "@redhat-cloud-services/frontend-components-notifications": "^2.2.4", + "@redhat-cloud-services/frontend-components-utilities": "^2.2.9", +>>>>>>> b843ab21... PatternFly milestone update "@redhat-cloud-services/rbac-client": "^1.0.93", "@types/date-fns": "2.6.0", "@types/i18next": "13.0.0", diff --git a/src/pages/costModels/components/__snapshots__/warningIcon.test.tsx.snap b/src/pages/costModels/components/__snapshots__/warningIcon.test.tsx.snap index ed948796b..4ccacb895 100644 --- a/src/pages/costModels/components/__snapshots__/warningIcon.test.tsx.snap +++ b/src/pages/costModels/components/__snapshots__/warningIcon.test.tsx.snap @@ -2,7 +2,6 @@ exports[`warning icon 1`] = ` (); +export const fetchPriceListRequest = createAction('priceList/request')(); -export const fetchPriceListSuccess = createStandardAction('priceList/success')(); +export const fetchPriceListSuccess = createAction('priceList/success')(); -export const fetchPriceListFailure = createStandardAction('priceList/failure')(); +export const fetchPriceListFailure = createAction('priceList/failure')(); function isExpired(state: RootState, meta: Meta) { const cachedData = cachedRates(state, meta.providerUuid); diff --git a/src/store/providers/providersActions.ts b/src/store/providers/providersActions.ts index a6df3d461..00e3efb33 100644 --- a/src/store/providers/providersActions.ts +++ b/src/store/providers/providersActions.ts @@ -1,7 +1,7 @@ import { fetchProviders as apiGetProviders } from 'api/providers'; import { Providers, ProviderType } from 'api/providers'; import { AxiosError } from 'axios'; -import { createAction, createStandardAction } from 'typesafe-actions'; +import { createAction } from 'typesafe-actions'; import { getReportId } from './providersCommon'; @@ -9,9 +9,9 @@ interface ProvidersActionMeta { reportId: string; } -export const fetchProvidersRequest = createStandardAction('providers/fetch/request')(); -export const fetchProvidersSuccess = createStandardAction('providers/fetch/success')(); -export const fetchProvidersFailure = createStandardAction('providers/fetch/failure')(); +export const fetchProvidersRequest = createAction('providers/fetch/request')(); +export const fetchProvidersSuccess = createAction('providers/fetch/success')(); +export const fetchProvidersFailure = createAction('providers/fetch/failure')(); export function fetchProviders(reportType: ProviderType, query: string) { return dispatch => { diff --git a/src/store/reports/reportActions.ts b/src/store/reports/reportActions.ts index a69b58df8..4f920654e 100644 --- a/src/store/reports/reportActions.ts +++ b/src/store/reports/reportActions.ts @@ -3,7 +3,7 @@ import { runReport } from 'api/reports/reportUtils'; import { AxiosError } from 'axios'; import { FetchStatus, ThunkAction } from 'store/common'; import { RootState } from 'store/rootReducer'; -import { createStandardAction } from 'typesafe-actions'; +import { createAction } from 'typesafe-actions'; import { getReportId } from './reportCommon'; import { selectReport, selectReportFetchStatus } from './reportSelectors'; @@ -14,9 +14,9 @@ interface ReportActionMeta { reportId: string; } -export const fetchReportRequest = createStandardAction('report/request')(); -export const fetchReportSuccess = createStandardAction('report/success')(); -export const fetchReportFailure = createStandardAction('report/failure')(); +export const fetchReportRequest = createAction('report/request')(); +export const fetchReportSuccess = createAction('report/success')(); +export const fetchReportFailure = createAction('report/failure')(); export function fetchReport(reportPathsType: ReportPathsType, reportType: ReportType, query: string): ThunkAction { return (dispatch, getState) => { diff --git a/src/store/sourceSettings/actions.ts b/src/store/sourceSettings/actions.ts index 4d6c5747b..af30e5a75 100644 --- a/src/store/sourceSettings/actions.ts +++ b/src/store/sourceSettings/actions.ts @@ -1,14 +1,14 @@ import { fetchProviders as apiGetSources, Providers } from 'api/providers'; import { AxiosError, AxiosResponse } from 'axios'; import { Dispatch } from 'redux'; -import { createAsyncAction, createStandardAction } from 'typesafe-actions'; +import { createAsyncAction, createAction } from 'typesafe-actions'; interface FilterQuery { currentFilterType?: string; currentFilterValue?: string; } -export const updateFilterToolbar = createStandardAction('fetch/source/filter')(); +export const updateFilterToolbar = createAction('fetch/source/filter')(); export const { request: fetchSourcesRequest, diff --git a/src/store/tags/tagActions.ts b/src/store/tags/tagActions.ts index e19d91b42..c3c019e38 100644 --- a/src/store/tags/tagActions.ts +++ b/src/store/tags/tagActions.ts @@ -4,7 +4,7 @@ import { AxiosError } from 'axios'; import { ThunkAction } from 'redux-thunk'; import { FetchStatus } from 'store/common'; import { RootState } from 'store/rootReducer'; -import { createStandardAction } from 'typesafe-actions'; +import { createAction } from 'typesafe-actions'; import { getTagId } from './tagCommon'; import { selectTag, selectTagFetchStatus } from './tagSelectors'; @@ -15,9 +15,9 @@ interface TagActionMeta { tagId: string; } -export const fetchTagRequest = createStandardAction('tag/request')(); -export const fetchTagSuccess = createStandardAction('tag/success')(); -export const fetchTagFailure = createStandardAction('tag/failure')(); +export const fetchTagRequest = createAction('tag/request')(); +export const fetchTagSuccess = createAction('tag/success')(); +export const fetchTagFailure = createAction('tag/failure')(); export function fetchTag( tagPathsType: TagPathsType, diff --git a/src/store/ui/uiActions.ts b/src/store/ui/uiActions.ts index 11d3aa3f9..a31da43ee 100644 --- a/src/store/ui/uiActions.ts +++ b/src/store/ui/uiActions.ts @@ -1,7 +1,7 @@ import { createAction } from 'typesafe-actions'; -export const closeProvidersModal = createAction('ui/close_providers_modal'); +export const closeProvidersModal = createAction('ui/close_providers_modal')(); -export const openProvidersModal = createAction('ui/open_providers_modal'); +export const openProvidersModal = createAction('ui/open_providers_modal')(); -export const toggleSidebar = createAction('ui/toggle_sidebar'); +export const toggleSidebar = createAction('ui/toggle_sidebar')(); diff --git a/src/store/userAccess/userAccessActions.ts b/src/store/userAccess/userAccessActions.ts index f6cb977a2..2f823e0f2 100644 --- a/src/store/userAccess/userAccessActions.ts +++ b/src/store/userAccess/userAccessActions.ts @@ -1,7 +1,7 @@ import { fetchUserAccess as apiGetUserAccess } from 'api/userAccess'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { createAction, createStandardAction } from 'typesafe-actions'; +import { createAction } from 'typesafe-actions'; import { getReportId } from './userAccessCommon'; @@ -9,15 +9,9 @@ interface UserAccessActionMeta { reportId: string; } -export const fetchUserAccessRequest = createStandardAction('userAccess/fetch/request')(); -export const fetchUserAccessSuccess = createStandardAction('userAccess/fetch/success')< - UserAccess, - UserAccessActionMeta ->(); -export const fetchUserAccessFailure = createStandardAction('userAccess/fetch/failure')< - AxiosError, - UserAccessActionMeta ->(); +export const fetchUserAccessRequest = createAction('userAccess/fetch/request')(); +export const fetchUserAccessSuccess = createAction('userAccess/fetch/success')(); +export const fetchUserAccessFailure = createAction('userAccess/fetch/failure')(); export function fetchUserAccess(reportType: UserAccessType, query: string) { return dispatch => { diff --git a/yarn.lock b/yarn.lock index c5a7b9052..39ced2e71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8731,10 +8731,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typesafe-actions@4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-4.4.2.tgz#8f817c479d12130b5ebb442032968b2a18929e1a" - integrity sha512-QW61P4cOX8dCNmrfpcUMjvU/MF/sFTC8/PlG9215W1gKDzZUBjRGdyYSO6ZcEUNsn491S2VpryJOHSIVSDqJrg== +typesafe-actions@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/typesafe-actions/-/typesafe-actions-5.1.0.tgz#9afe8b1e6a323af1fd59e6a57b11b7dd6623d2f1" + integrity sha512-bna6Yi1pRznoo6Bz1cE6btB/Yy8Xywytyfrzu/wc+NFW3ZF0I+2iCGImhBsoYYCOWuICtRO4yHcnDlzgo1AdNg== typescript@4.1.5: version "4.1.5" From ab7a008b95e9df5df9d82d97347200b936ed9af3 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 19 Feb 2021 15:09:11 -0500 Subject: [PATCH 086/200] Update ts-loader package https://issues.redhat.com/browse/COST-1069 --- koku-ui-manifest | 3 +-- package.json | 2 +- yarn.lock | 23 +++++++---------------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 3f10fd7ce..2f635910b 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -928,7 +928,6 @@ mgmt_services/cost-mgmt:koku-ui/lines-and-columns:1.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/load-json-file:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/load-json-file:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-runner:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/loader-utils:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loader-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:3.0.0.yarnlock @@ -1425,7 +1424,7 @@ mgmt_services/cost-mgmt:koku-ui/trim-trailing-lines:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/trim:0.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/trough:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-jest:26.5.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ts-loader:7.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/ts-loader:8.0.17.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths-webpack-plugin:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths:3.9.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tsconfig-paths:3.9.0.yarnlock diff --git a/package.json b/package.json index f3b2e70fc..8f023fae4 100644 --- a/package.json +++ b/package.json @@ -111,7 +111,7 @@ "sass-loader": "^11.0.1", "tsconfig-paths-webpack-plugin": "^3.3.0", "ts-jest": "26.5.1", - "ts-loader": "7.0.5", + "ts-loader": "8.0.17", "webpack": "^5.22.0", "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2", diff --git a/yarn.lock b/yarn.lock index 39ced2e71..bb3cc95b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5852,15 +5852,6 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.0.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - loader-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" @@ -8618,16 +8609,16 @@ ts-jest@26.5.1: semver "7.x" yargs-parser "20.x" -ts-loader@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-7.0.5.tgz#789338fb01cb5dc0a33c54e50558b34a73c9c4c5" - integrity sha512-zXypEIT6k3oTc+OZNx/cqElrsbBtYqDknf48OZos0NQ3RTt045fBIU8RRSu+suObBzYB355aIPGOe/3kj9h7Ig== +ts-loader@8.0.17: + version "8.0.17" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc" + integrity sha512-OeVfSshx6ot/TCxRwpBHQ/4lRzfgyTkvi7ghDVrLXOHzTbSK413ROgu/xNqM72i3AFeAIJgQy78FwSMKmOW68w== dependencies: - chalk "^2.3.0" + chalk "^4.1.0" enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" + loader-utils "^2.0.0" micromatch "^4.0.0" - semver "^6.0.0" + semver "^7.3.4" tsconfig-paths-webpack-plugin@^3.3.0: version "3.3.0" From eee6d157af41889f40d187a3d7e93b698ed8cd57 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 19 Feb 2021 15:16:08 -0500 Subject: [PATCH 087/200] Fixed formatting for linter --- src/store/costModels/actions.ts | 2 +- src/store/sourceSettings/actions.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/store/costModels/actions.ts b/src/store/costModels/actions.ts index 696aa47ca..aea818419 100644 --- a/src/store/costModels/actions.ts +++ b/src/store/costModels/actions.ts @@ -12,7 +12,7 @@ import * as H from 'history'; import i18next from 'i18next'; import { Dispatch } from 'redux'; import { ThunkAction } from 'store/common'; -import { createAsyncAction, createAction } from 'typesafe-actions'; +import { createAction, createAsyncAction } from 'typesafe-actions'; interface FilterQuery { currentFilterType?: string; diff --git a/src/store/sourceSettings/actions.ts b/src/store/sourceSettings/actions.ts index af30e5a75..99428c055 100644 --- a/src/store/sourceSettings/actions.ts +++ b/src/store/sourceSettings/actions.ts @@ -1,7 +1,7 @@ import { fetchProviders as apiGetSources, Providers } from 'api/providers'; import { AxiosError, AxiosResponse } from 'axios'; import { Dispatch } from 'redux'; -import { createAsyncAction, createAction } from 'typesafe-actions'; +import { createAction, createAsyncAction } from 'typesafe-actions'; interface FilterQuery { currentFilterType?: string; From abf928e0865c1c400a192adab6ddba45856851c2 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 20 Feb 2021 22:02:54 -0500 Subject: [PATCH 088/200] Historical Cost Explorer row selection https://issues.redhat.com/browse/COST-1073 --- src/pages/explorer/explorerTable.scss | 4 ++-- src/pages/explorer/explorerTable.tsx | 24 +++++++++++++----------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/explorer/explorerTable.scss index 2873e3fce..8c8d150ff 100644 --- a/src/pages/explorer/explorerTable.scss +++ b/src/pages/explorer/explorerTable.scss @@ -36,14 +36,14 @@ background-color: var(--pf-global--BackgroundColor--light-100); left: 0px; position: sticky; - z-index: 999; + z-index: 199; } thead th:nth-child(2), tbody td:nth-child(2) { background-clip: padding-box; background-color: var(--pf-global--BackgroundColor--light-100); left: 45px; position: sticky; - z-index: 999; + z-index: 199; } @media (min-width: 1200px) { thead th:nth-child(2), tbody td:nth-child(2) { diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 9e0be1255..3a9fb35ca 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -124,7 +124,7 @@ class ExplorerTableBase extends React.Component { daily: true, }); - // Fill in missing data + // Fill in missing columns for ( let currentDate = new Date(start_date + 'T00:00:00'); currentDate <= new Date(end_date + 'T00:00:00'); @@ -151,11 +151,12 @@ class ExplorerTableBase extends React.Component { }); } + // Sort by date and fill in missing cells computedItems.map(rowItem => { const cells = []; - let desc; - let label; - let id; + let desc; // First column description (i.e., show ID if different than label) + let name; // For first column resource name + let selectItem; // Save for row selection const items: any = Array.from(rowItem.values()).sort((a: any, b: any) => { if (new Date(a.date) > new Date(b.date)) { @@ -168,14 +169,14 @@ class ExplorerTableBase extends React.Component { }); items.map(item => { - if (!label) { - label = item && item.label && item.label !== null ? item.label : null; + if (!name) { + name = item && item.label && item.label !== null ? item.label : null; } if (!desc) { desc = item.id && item.id !== item.label ?
{item.id}
: null; } - if (!id) { - id = item.id; + if (item.id && !selectItem) { + selectItem = item; } // Add row cells @@ -191,7 +192,7 @@ class ExplorerTableBase extends React.Component { cells.unshift({ title: (
- {label} + {name} {desc}
), @@ -199,8 +200,9 @@ class ExplorerTableBase extends React.Component { rows.push({ cells, - item: items[0], // Any row cell contains the ID needed for row selection - selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === id) !== undefined), + disableSelection: selectItem.label === `no-${groupById}` || selectItem.label === `no-${groupByTagKey}`, + item: selectItem, + selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === selectItem.id) !== undefined), }); }); From 05e90b2fccfa36f1304c548ecaf4a5750494d99d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 20 Feb 2021 22:03:37 -0500 Subject: [PATCH 089/200] Disable "no-project" export selection for all details pages --- src/pages/details/awsDetails/detailsTable.tsx | 1 + src/pages/details/azureDetails/detailsTable.tsx | 1 + src/pages/details/gcpDetails/detailsTable.tsx | 1 + src/pages/details/ocpDetails/detailsTable.tsx | 1 + 4 files changed, 4 insertions(+) diff --git a/src/pages/details/awsDetails/detailsTable.tsx b/src/pages/details/awsDetails/detailsTable.tsx index cf990f71e..ac94478ad 100644 --- a/src/pages/details/awsDetails/detailsTable.tsx +++ b/src/pages/details/awsDetails/detailsTable.tsx @@ -212,6 +212,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], + disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), }); diff --git a/src/pages/details/azureDetails/detailsTable.tsx b/src/pages/details/azureDetails/detailsTable.tsx index aba08a260..a67977a4b 100644 --- a/src/pages/details/azureDetails/detailsTable.tsx +++ b/src/pages/details/azureDetails/detailsTable.tsx @@ -170,6 +170,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], + disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/details/gcpDetails/detailsTable.tsx b/src/pages/details/gcpDetails/detailsTable.tsx index b28356b9b..4c28ba63e 100644 --- a/src/pages/details/gcpDetails/detailsTable.tsx +++ b/src/pages/details/gcpDetails/detailsTable.tsx @@ -170,6 +170,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], + disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), diff --git a/src/pages/details/ocpDetails/detailsTable.tsx b/src/pages/details/ocpDetails/detailsTable.tsx index 74ad861bb..17256b75d 100644 --- a/src/pages/details/ocpDetails/detailsTable.tsx +++ b/src/pages/details/ocpDetails/detailsTable.tsx @@ -195,6 +195,7 @@ class DetailsTableBase extends React.Component { { title:
{cost}
}, { title:
{actions}
}, ], + disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, isOpen: false, item, selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), From 174cb296989e978a4c3bf461bd9a460c8c29c845 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 20 Feb 2021 22:26:11 -0500 Subject: [PATCH 090/200] Fix explorer and AWS first column heading names --- src/locales/en.json | 8 +++-- src/pages/details/awsDetails/detailsTable.tsx | 2 +- src/pages/explorer/explorerTable.scss | 1 + src/pages/explorer/explorerTable.tsx | 35 +++++++++++-------- 4 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 81c9288b7..713c076a4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -35,7 +35,8 @@ "change_column_title": "Month over month change", "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "Names", + "name_column_title": "$t(group_by.values.{{groupBy}}) names", + "org_unit_column_title": "Names", "tag_column_title": "Tag names", "total_cost": "Total cost" }, @@ -481,8 +482,9 @@ "previous_month_to_date": "Previous month to date" }, "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "Names", + "name_column_title": "$t(group_by.values.{{groupBy}}) names", "no_data": "no data", + "org_unit_column_title": "Names", "perspective": { "all_cloud": "All cloud filtered by OpenShift", "aws": "Amazon Web Services", @@ -637,7 +639,7 @@ "change_column_title": "Month over month change", "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "Names", + "name_column_title": "$t(group_by.values.{{groupBy}}) names", "tag_column_title": "Tag names", "total_cost": "Total cost" }, diff --git a/src/pages/details/awsDetails/detailsTable.tsx b/src/pages/details/awsDetails/detailsTable.tsx index ac94478ad..fda4faafe 100644 --- a/src/pages/details/awsDetails/detailsTable.tsx +++ b/src/pages/details/awsDetails/detailsTable.tsx @@ -133,7 +133,7 @@ class DetailsTableBase extends React.Component { groupByTagKey || groupByOrg ? [ { - title: groupByOrg ? t('aws_details.name_column_title') : t('aws_details.tag_column_title'), + title: groupByOrg ? t('aws_details.org_unit_column_title') : t('aws_details.tag_column_title'), }, { title: t('aws_details.change_column_title'), diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/explorer/explorerTable.scss index 8c8d150ff..bd529ab70 100644 --- a/src/pages/explorer/explorerTable.scss +++ b/src/pages/explorer/explorerTable.scss @@ -42,6 +42,7 @@ background-clip: padding-box; background-color: var(--pf-global--BackgroundColor--light-100); left: 45px; + min-width: 175px; position: sticky; z-index: 199; } diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 3a9fb35ca..a14c46286 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -98,25 +98,28 @@ class ExplorerTableBase extends React.Component { return; } - const rows = []; - const columns = []; const groupById = getIdKeyForGroupBy(query.group_by); const groupByOrg = this.getGroupByOrg(); const groupByTagKey = this.getGroupByTagKey(); + const rows = []; // Add first column heading (i.e., name) - if (groupByTagKey || groupByOrg) { - columns.push({ - title: groupByOrg ? t('explorer.name_column_title') : t('explorer.tag_column_title'), - }); - } else { - columns.push({ - orderBy: groupById === 'account' && perspective !== PerspectiveType.gcp ? 'account_alias' : groupById, - title: t('explorer.name_column_title', { groupBy: groupById }), - transforms: [sortable], - cellTransforms: [nowrap], - }); - } + const columns = + groupByTagKey || groupByOrg + ? [ + { + cellTransforms: [nowrap], + title: groupByOrg ? t('explorer.org_unit_column_title') : t('explorer.tag_column_title'), + }, + ] + : [ + { + cellTransforms: [nowrap], + orderBy: groupById === 'account' && perspective !== PerspectiveType.gcp ? 'account_alias' : groupById, + title: t('explorer.name_column_title', { groupBy: groupById }), + transforms: [sortable], + }, + ]; const computedItems = getUnsortedComputedReportItems({ report, @@ -137,8 +140,10 @@ class ExplorerTableBase extends React.Component { const date = getDate(mapIdDate); const month = getMonth(mapIdDate); columns.push({ - title: t('explorer.daily_column_title', { date, month }), cellTransforms: [nowrap], + orderBy: undefined, // TBD... + title: t('explorer.daily_column_title', { date, month }), + transforms: undefined, }); computedItems.map(rowItem => { From d1320137a9bf520e41e0398ec6a7d05d9a391f12 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 20 Feb 2021 23:28:38 -0500 Subject: [PATCH 091/200] Add onPerspectiveClick and handlePerspectiveClick functions --- src/pages/explorer/explorer.tsx | 10 ++++++++-- src/pages/explorer/explorerHeader.tsx | 11 ++++++++--- src/pages/explorer/explorerTable.tsx | 12 ++++++++++-- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index 9b21d7da1..6313cee71 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -113,6 +113,7 @@ class Explorer extends React.Component { this.handleFilterAdded = this.handleFilterAdded.bind(this); this.handleFilterRemoved = this.handleFilterRemoved.bind(this); this.handlePerPageSelect = this.handlePerPageSelect.bind(this); + this.handlePerspectiveClick = this.handlePerspectiveClick.bind(this); this.handleSelected = this.handleSelected.bind(this); this.handleSetPage = this.handleSetPage.bind(this); this.handleSort = this.handleSort.bind(this); @@ -165,6 +166,7 @@ class Explorer extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={getReportPathsType(perspective)} + useDateRange /> ); }; @@ -212,7 +214,6 @@ class Explorer extends React.Component { isLoading={reportFetchStatus === FetchStatus.inProgress} onSelected={this.handleSelected} onSort={this.handleSort} - perspective={perspective} query={query} report={report} selectedItems={selectedItems} @@ -313,6 +314,10 @@ class Explorer extends React.Component { history.replace(filteredQuery); }; + private handlePerspectiveClick = (value: string) => { + this.setState({ isAllSelected: false, selectedItems: [] }); + }; + private handleSelected = (items: ComputedReportItem[], isSelected: boolean = false) => { const { isAllSelected, selectedItems } = this.state; @@ -449,9 +454,10 @@ class Explorer extends React.Component {
{itemsTotal > 0 && (
diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/explorer/explorerHeader.tsx index 69ed0585d..9b4e982af 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/explorer/explorerHeader.tsx @@ -49,9 +49,10 @@ import { interface ExplorerHeaderOwnProps { groupBy?: string; - onGroupByClicked(value: string); onFilterAdded(filterType: string, filterValue: string); onFilterRemoved(filterType: string, filterValue?: string); + onGroupByClicked(value: string); + onPerspectiveClicked(value: string); } interface ExplorerHeaderStateProps { @@ -188,7 +189,7 @@ class ExplorerHeaderBase extends React.Component { }; private handlePerspectiveClick = (value: string) => { - const { history, query } = this.props; + const { history, onPerspectiveClicked, query } = this.props; const newQuery = { ...JSON.parse(JSON.stringify(query)), @@ -198,7 +199,11 @@ class ExplorerHeaderBase extends React.Component { perspective: value, }; history.replace(getRouteForQuery(history, newQuery, true)); - this.setState({ currentPerspective: value }); + this.setState({ currentPerspective: value }, () => { + if (onPerspectiveClicked) { + onPerspectiveClicked(value); + } + }); }; public render() { diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index a14c46286..93a1af64a 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -19,7 +19,13 @@ import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/comput import { formatCurrency } from 'utils/formatValue'; import { styles } from './explorerTable.styles'; -import { DateRangeType, getDateRange, getDateRangeDefault, PerspectiveType } from './explorerUtils'; +import { + DateRangeType, + getDateRange, + getDateRangeDefault, + getPerspectiveDefault, + PerspectiveType, +} from './explorerUtils'; interface ExplorerTableOwnProps { computedReportItemType?: ComputedReportItemType; @@ -28,7 +34,6 @@ interface ExplorerTableOwnProps { isLoading?: boolean; onSelected(items: ComputedReportItem[], isSelected: boolean); onSort(value: string, isSortAscending: boolean); - perspective: PerspectiveType; query: AwsQuery; report: AwsReport; selectedItems?: ComputedReportItem[]; @@ -37,6 +42,7 @@ interface ExplorerTableOwnProps { interface ExplorerTableStateProps { dateRange: DateRangeType; end_date?: string; + perspective: PerspectiveType; start_date?: string; } @@ -362,12 +368,14 @@ class ExplorerTableBase extends React.Component { // eslint-disable-next-line @typescript-eslint/no-unused-vars const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); + const perspective = getPerspectiveDefault(queryFromRoute); const dateRange = getDateRangeDefault(queryFromRoute); const { end_date, start_date } = getDateRange(queryFromRoute); return { dateRange, end_date, + perspective, start_date, }; }); From 22300c9491c5e59a83dad4abadf316cd1b807ee6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sat, 20 Feb 2021 23:29:22 -0500 Subject: [PATCH 092/200] Modify export to use date range if available https://issues.redhat.com/browse/COST-1072 --- .../details/components/export/exportModal.tsx | 82 +++++++++++-------- .../components/export/exportSubmit.tsx | 29 ++++--- 2 files changed, 65 insertions(+), 46 deletions(-) diff --git a/src/pages/details/components/export/exportModal.tsx b/src/pages/details/components/export/exportModal.tsx index 7da7402b8..e3082a471 100644 --- a/src/pages/details/components/export/exportModal.tsx +++ b/src/pages/details/components/export/exportModal.tsx @@ -26,6 +26,11 @@ export interface ExportModalOwnProps extends WithTranslation { query?: Query; queryString?: string; reportPathsType: ReportPathsType; + useDateRange?: boolean; // resolution and timeScope filters are not valid with date range +} + +interface ExportModalStateProps { + // TBD... } interface ExportModalDispatchProps { @@ -37,7 +42,7 @@ interface ExportModalState { resolution: string; } -type ExportModalProps = ExportModalOwnProps & ExportModalDispatchProps & WithTranslation; +type ExportModalProps = ExportModalOwnProps & ExportModalDispatchProps & ExportModalStateProps & WithTranslation; const resolutionOptions: { label: string; @@ -88,7 +93,7 @@ export class ExportModalBase extends React.Component,
- - - {resolutionOptions.map((option, index) => ( - - ))} - - - - - {timeScopeOptions.map((option, index) => ( - - ))} - - + {!useDateRange && ( + <> + + + {resolutionOptions.map((option, index) => ( + + ))} + + + + + {timeScopeOptions.map((option, index) => ( + + ))} + + + + )}
    {sortedItems.map((groupItem, index) => { diff --git a/src/pages/details/components/export/exportSubmit.tsx b/src/pages/details/components/export/exportSubmit.tsx index ed3840811..a9d59b3b0 100644 --- a/src/pages/details/components/export/exportSubmit.tsx +++ b/src/pages/details/components/export/exportSubmit.tsx @@ -22,24 +22,29 @@ export interface ExportSubmitOwnProps extends WithTranslation { reportPathsType: ReportPathsType; resolution: string; timeScope: number; + useDateRange?: boolean; // resolution and timeScope filters are not valid with date range } interface ExportSubmitStateProps { - queryString: string; - report: Export; - reportError: AxiosError; - reportFetchStatus?: FetchStatus; + // TBD... } interface ExportSubmitDispatchProps { exportReport?: typeof exportActions.exportReport; } +interface ExportSubmitStateProps { + queryString: string; + report: Export; + reportError: AxiosError; + reportFetchStatus?: FetchStatus; +} + interface ExportSubmitState { fetchReportClicked: boolean; } -type ExportSubmitProps = ExportSubmitOwnProps & ExportSubmitStateProps & ExportSubmitDispatchProps & WithTranslation; +type ExportSubmitProps = ExportSubmitOwnProps & ExportSubmitDispatchProps & ExportSubmitStateProps & WithTranslation; const reportType = ReportType.cost; @@ -125,18 +130,22 @@ export class ExportSubmitBase extends React.Component { } const mapStateToProps = createMapStateToProps((state, props) => { - const { groupBy, isAllItems, items, query, reportPathsType, resolution, timeScope = -1 } = props; + const { groupBy, isAllItems, items, query, reportPathsType, resolution, timeScope = -1, useDateRange } = props; const getQueryString = () => { const newQuery: Query = { ...JSON.parse(JSON.stringify(query)), + filter: { + limit: undefined, + offset: undefined, + resolution: !useDateRange ? resolution : undefined, + time_scope_value: !useDateRange ? timeScope : undefined, + }, filter_by: {}, order_by: undefined, + perspective: undefined, + dateRange: undefined, }; - newQuery.filter.limit = undefined; - newQuery.filter.offset = undefined; - newQuery.filter.resolution = resolution as any; - newQuery.filter.time_scope_value = timeScope; // Store filter_by as an array so we can add to it below if (query.filter_by) { From dd780153e2a2de1ef429497d49a0b49286de3762 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 00:01:22 -0500 Subject: [PATCH 093/200] Replace useDateRange with showAggregate prop to clean up export code --- src/pages/details/awsDetails/awsDetails.tsx | 1 + src/pages/details/azureDetails/azureDetails.tsx | 1 + src/pages/details/components/actions/actions.tsx | 1 + src/pages/details/components/export/exportModal.tsx | 11 +++++------ src/pages/details/components/export/exportSubmit.tsx | 7 +++---- src/pages/details/gcpDetails/gcpDetails.tsx | 1 + src/pages/details/ocpDetails/ocpDetails.tsx | 1 + src/pages/explorer/explorer.tsx | 1 - 8 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/pages/details/awsDetails/awsDetails.tsx b/src/pages/details/awsDetails/awsDetails.tsx index d6ac1f1f6..f33ae2d21 100644 --- a/src/pages/details/awsDetails/awsDetails.tsx +++ b/src/pages/details/awsDetails/awsDetails.tsx @@ -144,6 +144,7 @@ class AwsDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} + showAggregate /> ); }; diff --git a/src/pages/details/azureDetails/azureDetails.tsx b/src/pages/details/azureDetails/azureDetails.tsx index 21af0968c..bb2a3e8f3 100644 --- a/src/pages/details/azureDetails/azureDetails.tsx +++ b/src/pages/details/azureDetails/azureDetails.tsx @@ -144,6 +144,7 @@ class AzureDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} + showAggregate /> ); }; diff --git a/src/pages/details/components/actions/actions.tsx b/src/pages/details/components/actions/actions.tsx index 909fa6b4b..38b39beb8 100644 --- a/src/pages/details/components/actions/actions.tsx +++ b/src/pages/details/components/actions/actions.tsx @@ -64,6 +64,7 @@ class DetailsActionsBase extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} + showAggregate /> ); }; diff --git a/src/pages/details/components/export/exportModal.tsx b/src/pages/details/components/export/exportModal.tsx index e3082a471..be4600c5e 100644 --- a/src/pages/details/components/export/exportModal.tsx +++ b/src/pages/details/components/export/exportModal.tsx @@ -26,7 +26,7 @@ export interface ExportModalOwnProps extends WithTranslation { query?: Query; queryString?: string; reportPathsType: ReportPathsType; - useDateRange?: boolean; // resolution and timeScope filters are not valid with date range + showAggregate?: boolean; // resolution and timeScope filters are not valid with date range } interface ExportModalStateProps { @@ -93,7 +93,7 @@ export class ExportModalBase extends React.Component,
- {!useDateRange && ( + {showAggregate && ( <> diff --git a/src/pages/details/components/export/exportSubmit.tsx b/src/pages/details/components/export/exportSubmit.tsx index a9d59b3b0..5dbf46639 100644 --- a/src/pages/details/components/export/exportSubmit.tsx +++ b/src/pages/details/components/export/exportSubmit.tsx @@ -22,7 +22,6 @@ export interface ExportSubmitOwnProps extends WithTranslation { reportPathsType: ReportPathsType; resolution: string; timeScope: number; - useDateRange?: boolean; // resolution and timeScope filters are not valid with date range } interface ExportSubmitStateProps { @@ -130,7 +129,7 @@ export class ExportSubmitBase extends React.Component { } const mapStateToProps = createMapStateToProps((state, props) => { - const { groupBy, isAllItems, items, query, reportPathsType, resolution, timeScope = -1, useDateRange } = props; + const { groupBy, isAllItems, items, query, reportPathsType, resolution, timeScope } = props; const getQueryString = () => { const newQuery: Query = { @@ -138,8 +137,8 @@ const mapStateToProps = createMapStateToProps { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} + showAggregate /> ); }; diff --git a/src/pages/details/ocpDetails/ocpDetails.tsx b/src/pages/details/ocpDetails/ocpDetails.tsx index 56b90fe0c..fd1527e08 100644 --- a/src/pages/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/details/ocpDetails/ocpDetails.tsx @@ -144,6 +144,7 @@ class OcpDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} + showAggregate /> ); }; diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index 6313cee71..cd585d313 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -166,7 +166,6 @@ class Explorer extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={getReportPathsType(perspective)} - useDateRange /> ); }; From 60eb1c45b82a65241ce00c5b6f4a8aeab9ff9c65 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 00:02:51 -0500 Subject: [PATCH 094/200] Fix lint warning fo unused variable --- src/pages/explorer/explorer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index cd585d313..feca12ec6 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -313,7 +313,7 @@ class Explorer extends React.Component { history.replace(filteredQuery); }; - private handlePerspectiveClick = (value: string) => { + private handlePerspectiveClick = () => { this.setState({ isAllSelected: false, selectedItems: [] }); }; From da5f0f52cd8567c69acbbc172da219c4de00870c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 15:19:02 -0500 Subject: [PATCH 095/200] Move common functions to detailsUtils --- src/pages/details/common/detailsUtils.ts | 14 +++++++++- src/pages/explorer/explorerTable.tsx | 33 +++--------------------- 2 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/pages/details/common/detailsUtils.ts b/src/pages/details/common/detailsUtils.ts index 1beae46b8..17eb2b5dc 100644 --- a/src/pages/details/common/detailsUtils.ts +++ b/src/pages/details/common/detailsUtils.ts @@ -1,4 +1,16 @@ -import { Query, tagPrefix } from 'api/queries/query'; +import { orgUnitIdKey, Query, tagPrefix } from 'api/queries/query'; + +export const getGroupByOrg = (query: Query) => { + let groupByOrg; + + for (const groupBy of Object.keys(query.group_by)) { + if (groupBy === orgUnitIdKey) { + groupByOrg = query.group_by[orgUnitIdKey]; + break; + } + } + return groupByOrg; +}; export const getGroupByTagKey = (query: Query) => { let groupByTagKey; diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 93a1af64a..6e1a2f832 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -4,12 +4,12 @@ import { Bullseye, EmptyState, EmptyStateBody, EmptyStateIcon, Spinner } from '@ import { CalculatorIcon } from '@patternfly/react-icons/dist/js/icons/calculator-icon'; import { nowrap, sortable, SortByDirection, Table, TableBody, TableHeader } from '@patternfly/react-table'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; -import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; import { parseQuery, Query } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/details/common/detailsUtils'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -105,8 +105,8 @@ class ExplorerTableBase extends React.Component { } const groupById = getIdKeyForGroupBy(query.group_by); - const groupByOrg = this.getGroupByOrg(); - const groupByTagKey = this.getGroupByTagKey(); + const groupByOrg = getGroupByOrg(query); + const groupByTagKey = getGroupByTagKey(query); const rows = []; // Add first column heading (i.e., name) @@ -259,33 +259,6 @@ class ExplorerTableBase extends React.Component { ); }; - private getGroupByOrg = () => { - const { query } = this.props; - let groupByOrg; - - for (const groupBy of Object.keys(query.group_by)) { - if (groupBy === orgUnitIdKey) { - groupByOrg = query.group_by[orgUnitIdKey]; - break; - } - } - return groupByOrg; - }; - - private getGroupByTagKey = () => { - const { query } = this.props; - let groupByTagKey; - - for (const groupBy of Object.keys(query.group_by)) { - const tagIndex = groupBy.indexOf(tagPrefix); - if (tagIndex !== -1) { - groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; - break; - } - } - return groupByTagKey; - }; - public getSortBy = () => { const { query } = this.props; const { columns } = this.state; From 705ec431ff712ddc84ea7a3dcfd19f85b6607dcc Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 15:19:29 -0500 Subject: [PATCH 096/200] Ensure explorer table column headings are not truncated --- src/pages/explorer/explorerTable.scss | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/explorer/explorerTable.scss index bd529ab70..27733f843 100644 --- a/src/pages/explorer/explorerTable.scss +++ b/src/pages/explorer/explorerTable.scss @@ -31,6 +31,9 @@ .explorerTableOverride { &.pf-c-table { + thead th + th + th { + min-width: 100px; + } thead th:first-child, tbody td:first-child { background-clip: padding-box; background-color: var(--pf-global--BackgroundColor--light-100); From 944fa4c64fb3e55c8798786550f851ff695779ab Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 15:20:01 -0500 Subject: [PATCH 097/200] Remove resolution from base query since it's not valid with date ranges --- src/pages/explorer/explorerUtils.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/explorer/explorerUtils.ts b/src/pages/explorer/explorerUtils.ts index aa30a0406..40a36267c 100644 --- a/src/pages/explorer/explorerUtils.ts +++ b/src/pages/explorer/explorerUtils.ts @@ -38,7 +38,6 @@ export const baseQuery: Query = { filter: { limit: 10, offset: 0, - resolution: 'daily', }, filter_by: {}, group_by: { From 07aa16759f1b3c63084570c15ce06d3e084e10ed Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 15:21:09 -0500 Subject: [PATCH 098/200] Ensure explorer obtains computed report items, same as table, using daily scope --- src/pages/explorer/explorer.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index feca12ec6..504a6b699 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -7,7 +7,7 @@ import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { Report } from 'api/reports/report'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; +import { addQueryFilter, getGroupByOrg, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; import { ExportModal } from 'pages/details/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; @@ -141,11 +141,13 @@ class Explorer extends React.Component { const { query, report } = this.props; const groupById = getIdKeyForGroupBy(query.group_by); + const groupByOrg = getGroupByOrg(query); const groupByTagKey = getGroupByTagKey(query); return getUnsortedComputedReportItems({ report, - idKey: (groupByTagKey as any) || groupById, + idKey: groupByTagKey ? groupByTagKey : groupByOrg ? 'org_entities' : groupById, + daily: true, }); }; From 1d201f316600088eb8107aafbb89cc05128082ec Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Sun, 21 Feb 2021 15:22:01 -0500 Subject: [PATCH 099/200] Update computed report items to account for AWS org units grouped by services and regions https://issues.redhat.com/browse/COST-1074 --- .../computedReport/getComputedReportItems.ts | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/utils/computedReport/getComputedReportItems.ts b/src/utils/computedReport/getComputedReportItems.ts index 9364568ef..91437ad65 100644 --- a/src/utils/computedReport/getComputedReportItems.ts +++ b/src/utils/computedReport/getComputedReportItems.ts @@ -116,7 +116,7 @@ function getUsageData(val, item?: any) { export function getUnsortedComputedReportItems({ daily = false, report, - idKey, + idKey, // Note: The report uses org_entities, while group_by uses org_unit_id }: ComputedReportItemsParams) { if (!report) { return []; @@ -124,19 +124,29 @@ export function getUnsortedComputedReportItems const itemMap = new Map(); + let orgUnitId; // Org unit ID + let type; // Org unit type const visitDataPoint = (dataPoint: ReportData) => { + // Org units workaround when filtering with group_by service or region + if (idKey === 'org_entities') { + if (!orgUnitId) { + orgUnitId = dataPoint.id; + } + if (!type) { + type = dataPoint.type; + } + } + if (dataPoint && dataPoint.values) { - const type = dataPoint.type; dataPoint.values.forEach((val: any) => { + let id = idKey === 'org_entities' ? orgUnitId : val[idKey]; + if (!id) { + id = val.date; // Note: There is no longer val.id, except with org units + } + // Ensure unique map IDs -- https://github.com/project-koku/koku-ui/issues/706 const idSuffix = idKey !== 'date' && idKey !== 'cluster' && val.cluster ? `-${val.cluster}` : ''; - - // org_unit_id workaround for storage and instance-type APIs - let id = idKey === 'org_entities' ? val.org_unit_id : val[idKey]; - if (id === undefined) { - id = val.date; // Note: There is no longer val.id - } const mapId = `${id}${idSuffix}`; // 'clusters' will contain either the cluster alias or default cluster ID @@ -150,8 +160,8 @@ export function getUnsortedComputedReportItems Date: Sun, 21 Feb 2021 15:55:25 -0500 Subject: [PATCH 100/200] Removed daily scope, so a flattened computed items array can be used with selected items --- src/pages/explorer/explorer.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index 504a6b699..9cfe1a10e 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -144,11 +144,12 @@ class Explorer extends React.Component { const groupByOrg = getGroupByOrg(query); const groupByTagKey = getGroupByTagKey(query); - return getUnsortedComputedReportItems({ + const computedItems = getUnsortedComputedReportItems({ report, idKey: groupByTagKey ? groupByTagKey : groupByOrg ? 'org_entities' : groupById, - daily: true, + daily: false, // Don't use daily here, so we can use a flattened data structure with row selection }); + return computedItems; }; private getExportModal = (computedItems: ComputedReportItem[]) => { From 7f79d080fce01a72b88593aba7267942c1518eea Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 22 Feb 2021 11:47:39 -0500 Subject: [PATCH 101/200] Fixed: (#1869) * Fixed: "Daily usage comparison ({{units}})" [Found: 12] FOUND IN KEY: aws_dashboard.storage_trend_title FOUND IN KEY: azure_dashboard.storage_trend_title FOUND IN KEY: azure_cloud_dashboard.compute_trend_title FOUND IN KEY: ocp_cloud_dashboard.storage_trend_title FOUND IN KEY: azure_cloud_dashboard.storage_trend_title FOUND IN KEY: azure_dashboard.compute_trend_title FOUND IN KEY: aws_cloud_dashboard.compute_trend_title FOUND IN KEY: aws_dashboard.compute_trend_title FOUND IN KEY: aws_cloud_dashboard.storage_trend_title FOUND IN KEY: gcp_dashboard.storage_trend_title FOUND IN KEY: ocp_cloud_dashboard.compute_trend_title FOUND IN KEY: gcp_dashboard.compute_trend_title * moved daily_usage_comparison key under chart --- src/locales/en.json | 13 +------------ .../awsCloudDashboard/awsCloudDashboardWidgets.ts | 4 ++-- .../dashboard/awsDashboard/awsDashboardWidgets.ts | 4 ++-- .../azureCloudDashboardWidgets.ts | 4 ++-- .../azureDashboard/azureDashboardWidgets.ts | 4 ++-- .../dashboard/gcpDashboard/gcpDashboardWidgets.ts | 4 ++-- .../ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 4 ++-- 7 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 713c076a4..2bc6535fc 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,7 +1,6 @@ { "aws_cloud_dashboard": { "compute_title": "Compute (EC2) instances usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "Amazon Web Services filtered by OpenShift cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", @@ -12,12 +11,10 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "aws_dashboard": { "compute_title": "Compute (EC2) instances usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "Amazon Web Services cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", @@ -28,7 +25,6 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "aws_details": { @@ -42,7 +38,6 @@ }, "azure_cloud_dashboard": { "compute_title": "Virtual machines usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "Microsoft Azure filtered by OpenShift cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", @@ -53,12 +48,10 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "azure_dashboard": { "compute_title": "Virtual machines usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "Microsoft Azure cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", @@ -69,7 +62,6 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "azure_details": { @@ -159,6 +151,7 @@ "cost_supplementary_legend_label_no_data": "Supplementary cost (no data)", "cost_supplementary_legend_label_plural": "Supplementary cost ({{startDate}}-{{endDate}} $t(months_abbr.{{month}}))", "cost_supplementary_legend_tooltip": "Supplementary cost ($t(months_abbr.{{month}}))", + "daily_usage_comparison": "Daily usage comparison ({{units}})", "date": "{{date}}-$t(months_abbr.{{month}})", "date_range": "{{startDate}} $t(months_abbr.{{month}}) {{year}}", "date_range_plural": "{{startDate}}-{{endDate}} $t(months_abbr.{{month}}) {{year}}", @@ -621,7 +614,6 @@ "for_date_plural": "{{value}} for {{startDate}}-{{endDate}} $t(months_abbr.{{month}})", "gcp_dashboard": { "compute_title": "Compute instances usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "Google Cloud Platform Services cost", "cost_trend_title": "Google Cloud Platform Services cumulative cost comparison ({{units}})", @@ -632,7 +624,6 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "gcp_details": { @@ -802,7 +793,6 @@ }, "ocp_cloud_dashboard": { "compute_title": "Compute services usage", - "compute_trend_title": "Daily usage comparison ({{units}})", "cost_label": "Cost", "cost_title": "All cloud filtered by OpenShift cost", "cost_trend_title": "All cloud filtered by OpenShift cumulative cost comparison ({{units}})", @@ -813,7 +803,6 @@ "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", - "storage_trend_title": "Daily usage comparison ({{units}})", "usage_label": "Usage" }, "ocp_dashboard": { diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index d6c9c37fd..778d30587 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -43,7 +43,7 @@ export const computeWidget: AwsCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'aws_cloud_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -190,7 +190,7 @@ export const storageWidget: AwsCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'aws_cloud_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 9ea41966e..461d8adf6 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -44,7 +44,7 @@ export const computeWidget: AwsDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'aws_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -194,7 +194,7 @@ export const storageWidget: AwsDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'aws_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 42d11815f..1f1209b8d 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -156,7 +156,7 @@ export const storageWidget: AzureCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'azure_cloud_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -202,7 +202,7 @@ export const virtualMachineWidget: AzureCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'azure_cloud_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index 6f41cd01a..c3273a4ac 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -160,7 +160,7 @@ export const storageWidget: AzureDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'azure_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -206,7 +206,7 @@ export const virtualMachineWidget: AzureDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'azure_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index ebbc0312e..e3999a096 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -45,7 +45,7 @@ export const computeWidget: GcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'gcp_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -197,7 +197,7 @@ export const storageWidget: GcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'gcp_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index d4be64bc4..4b0f8f936 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -76,7 +76,7 @@ export const computeWidget: OcpCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_cloud_dashboard.compute_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, chartType: DashboardChartType.trend, @@ -160,7 +160,7 @@ export const storageWidget: OcpCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_cloud_dashboard.storage_trend_title', + titleKey: 'chart.daily_usage_comparison', type: ChartType.daily, }, chartType: DashboardChartType.trend, From e4d63eb80df3f7b28e3ec9d6ba0d08d5a30f775e Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 22 Feb 2021 13:17:11 -0500 Subject: [PATCH 102/200] Modified export to show resolution, replaced showAggregate with showTimeScope https://issues.redhat.com/browse/COST-1072 --- src/pages/details/awsDetails/awsDetails.tsx | 2 +- .../details/azureDetails/azureDetails.tsx | 2 +- .../details/components/actions/actions.tsx | 2 +- .../details/components/export/exportModal.tsx | 80 +++++++++---------- src/pages/details/gcpDetails/gcpDetails.tsx | 2 +- src/pages/details/ocpDetails/ocpDetails.tsx | 2 +- 6 files changed, 44 insertions(+), 46 deletions(-) diff --git a/src/pages/details/awsDetails/awsDetails.tsx b/src/pages/details/awsDetails/awsDetails.tsx index f33ae2d21..ade13cd61 100644 --- a/src/pages/details/awsDetails/awsDetails.tsx +++ b/src/pages/details/awsDetails/awsDetails.tsx @@ -144,7 +144,7 @@ class AwsDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showAggregate + showTimeScope /> ); }; diff --git a/src/pages/details/azureDetails/azureDetails.tsx b/src/pages/details/azureDetails/azureDetails.tsx index bb2a3e8f3..a5002d6ac 100644 --- a/src/pages/details/azureDetails/azureDetails.tsx +++ b/src/pages/details/azureDetails/azureDetails.tsx @@ -144,7 +144,7 @@ class AzureDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showAggregate + showTimeScope /> ); }; diff --git a/src/pages/details/components/actions/actions.tsx b/src/pages/details/components/actions/actions.tsx index 38b39beb8..b74126a14 100644 --- a/src/pages/details/components/actions/actions.tsx +++ b/src/pages/details/components/actions/actions.tsx @@ -64,7 +64,7 @@ class DetailsActionsBase extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showAggregate + showTimeScope /> ); }; diff --git a/src/pages/details/components/export/exportModal.tsx b/src/pages/details/components/export/exportModal.tsx index be4600c5e..6b6588e05 100644 --- a/src/pages/details/components/export/exportModal.tsx +++ b/src/pages/details/components/export/exportModal.tsx @@ -26,7 +26,7 @@ export interface ExportModalOwnProps extends WithTranslation { query?: Query; queryString?: string; reportPathsType: ReportPathsType; - showAggregate?: boolean; // resolution and timeScope filters are not valid with date range + showTimeScope?: boolean; // timeScope filters are not valid with date range } interface ExportModalStateProps { @@ -93,7 +93,7 @@ export class ExportModalBase extends React.Component,
- {showAggregate && ( - <> - - - {resolutionOptions.map((option, index) => ( - - ))} - - - - - {timeScopeOptions.map((option, index) => ( - - ))} - - - + + + {resolutionOptions.map((option, index) => ( + + ))} + + + {showTimeScope && ( + + + {timeScopeOptions.map((option, index) => ( + + ))} + + )}
    diff --git a/src/pages/details/gcpDetails/gcpDetails.tsx b/src/pages/details/gcpDetails/gcpDetails.tsx index 3c1671531..c3aa5c365 100644 --- a/src/pages/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/details/gcpDetails/gcpDetails.tsx @@ -144,7 +144,7 @@ class GcpDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showAggregate + showTimeScope /> ); }; diff --git a/src/pages/details/ocpDetails/ocpDetails.tsx b/src/pages/details/ocpDetails/ocpDetails.tsx index fd1527e08..93a5d144e 100644 --- a/src/pages/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/details/ocpDetails/ocpDetails.tsx @@ -144,7 +144,7 @@ class OcpDetails extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={reportPathsType} - showAggregate + showTimeScope /> ); }; From ac86071222d2cbb2511f8e95e26658de46417366 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 22 Feb 2021 18:05:29 -0500 Subject: [PATCH 103/200] Moved breakdown store to common directory --- .../awsCostOverview/awsCostOverview.test.ts | 0 .../awsCostOverview/awsCostOverviewCommon.ts | 2 +- .../awsCostOverview/awsCostOverviewReducer.ts | 0 .../awsCostOverviewSelectors.ts | 0 .../awsCostOverview/awsCostOverviewWidgets.ts | 2 +- .../costOverview/awsCostOverview/index.ts | 0 .../azureCostOverview.test.ts | 0 .../azureCostOverviewCommon.ts | 2 +- .../azureCostOverviewReducer.ts | 0 .../azureCostOverviewSelectors.ts | 0 .../azureCostOverviewWidgets.ts | 4 ++-- .../costOverview/azureCostOverview/index.ts | 0 .../costOverview/common/costOverviewCommon.ts | 0 .../gcpCostOverview/gcpCostOverview.test.ts | 0 .../gcpCostOverview/gcpCostOverviewCommon.ts | 2 +- .../gcpCostOverview/gcpCostOverviewReducer.ts | 0 .../gcpCostOverviewSelectors.ts | 0 .../gcpCostOverview/gcpCostOverviewWidgets.ts | 2 +- .../costOverview/gcpCostOverview/index.ts | 0 .../costOverview/ocpCostOverview/index.ts | 0 .../ocpCostOverview/ocpCostOverview.test.ts | 0 .../ocpCostOverview/ocpCostOverviewCommon.ts | 2 +- .../ocpCostOverview/ocpCostOverviewReducer.ts | 0 .../ocpCostOverviewSelectors.ts | 0 .../ocpCostOverview/ocpCostOverviewWidgets.ts | 2 +- .../awsHistoricalData.test.ts | 0 .../awsHistoricalDataCommon.ts | 2 +- .../awsHistoricalDataReducer.ts | 0 .../awsHistoricalDataSelectors.ts | 0 .../awsHistoricalDataWidgets.ts | 2 +- .../historicalData/awsHistoricalData/index.ts | 0 .../azureHistoricalData.test.ts | 0 .../azureHistoricalDataCommon.ts | 2 +- .../azureHistoricalDataReducer.ts | 0 .../azureHistoricalDataSelectors.ts | 0 .../azureHistoricalDataWidgets.ts | 2 +- .../azureHistoricalData/index.ts | 0 .../common/historicalDataCommon.ts | 0 .../gcpHistoricalData.test.ts | 0 .../gcpHistoricalDataCommon.ts | 2 +- .../gcpHistoricalDataReducer.ts | 0 .../gcpHistoricalDataSelectors.ts | 0 .../gcpHistoricalDataWidgets.ts | 2 +- .../historicalData/gcpHistoricalData/index.ts | 0 .../historicalData/ocpHistoricalData/index.ts | 0 .../ocpHistoricalData.test.ts | 0 .../ocpHistoricalDataCommon.ts | 2 +- .../ocpHistoricalDataReducer.ts | 0 .../ocpHistoricalDataSelectors.ts | 0 .../ocpHistoricalDataWidgets.ts | 2 +- src/store/rootReducer.ts | 19 +++++++++++-------- 51 files changed, 28 insertions(+), 25 deletions(-) rename src/store/{ => breakdown}/costOverview/awsCostOverview/awsCostOverview.test.ts (100%) rename src/store/{ => breakdown}/costOverview/awsCostOverview/awsCostOverviewCommon.ts (65%) rename src/store/{ => breakdown}/costOverview/awsCostOverview/awsCostOverviewReducer.ts (100%) rename src/store/{ => breakdown}/costOverview/awsCostOverview/awsCostOverviewSelectors.ts (100%) rename src/store/{ => breakdown}/costOverview/awsCostOverview/awsCostOverviewWidgets.ts (93%) rename src/store/{ => breakdown}/costOverview/awsCostOverview/index.ts (100%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/azureCostOverview.test.ts (100%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/azureCostOverviewCommon.ts (66%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/azureCostOverviewReducer.ts (100%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/azureCostOverviewSelectors.ts (100%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/azureCostOverviewWidgets.ts (87%) rename src/store/{ => breakdown}/costOverview/azureCostOverview/index.ts (100%) rename src/store/{ => breakdown}/costOverview/common/costOverviewCommon.ts (100%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/gcpCostOverview.test.ts (100%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts (65%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts (100%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/gcpCostOverviewSelectors.ts (100%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts (93%) rename src/store/{ => breakdown}/costOverview/gcpCostOverview/index.ts (100%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/index.ts (100%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/ocpCostOverview.test.ts (100%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts (65%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/ocpCostOverviewReducer.ts (100%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/ocpCostOverviewSelectors.ts (100%) rename src/store/{ => breakdown}/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts (93%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/awsHistoricalData.test.ts (100%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts (65%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/awsHistoricalDataReducer.ts (100%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/awsHistoricalDataSelectors.ts (100%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts (88%) rename src/store/{ => breakdown}/historicalData/awsHistoricalData/index.ts (100%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/azureHistoricalData.test.ts (100%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts (65%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/azureHistoricalDataReducer.ts (100%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/azureHistoricalDataSelectors.ts (100%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts (88%) rename src/store/{ => breakdown}/historicalData/azureHistoricalData/index.ts (100%) rename src/store/{ => breakdown}/historicalData/common/historicalDataCommon.ts (100%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/gcpHistoricalData.test.ts (100%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts (65%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/gcpHistoricalDataReducer.ts (100%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/gcpHistoricalDataSelectors.ts (100%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts (88%) rename src/store/{ => breakdown}/historicalData/gcpHistoricalData/index.ts (100%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/index.ts (100%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/ocpHistoricalData.test.ts (100%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts (65%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/ocpHistoricalDataReducer.ts (100%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/ocpHistoricalDataSelectors.ts (100%) rename src/store/{ => breakdown}/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts (87%) diff --git a/src/store/costOverview/awsCostOverview/awsCostOverview.test.ts b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverview.test.ts similarity index 100% rename from src/store/costOverview/awsCostOverview/awsCostOverview.test.ts rename to src/store/breakdown/costOverview/awsCostOverview/awsCostOverview.test.ts diff --git a/src/store/costOverview/awsCostOverview/awsCostOverviewCommon.ts b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewCommon.ts similarity index 65% rename from src/store/costOverview/awsCostOverview/awsCostOverviewCommon.ts rename to src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewCommon.ts index 4a01bcd93..e299f6f44 100644 --- a/src/store/costOverview/awsCostOverview/awsCostOverviewCommon.ts +++ b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewCommon.ts @@ -1,4 +1,4 @@ -import { CostOverviewWidget } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidget } from 'store/breakdown/costOverview/common/costOverviewCommon'; export const awsCostOverviewStateKey = 'awsCostOverview'; diff --git a/src/store/costOverview/awsCostOverview/awsCostOverviewReducer.ts b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewReducer.ts similarity index 100% rename from src/store/costOverview/awsCostOverview/awsCostOverviewReducer.ts rename to src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewReducer.ts diff --git a/src/store/costOverview/awsCostOverview/awsCostOverviewSelectors.ts b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewSelectors.ts similarity index 100% rename from src/store/costOverview/awsCostOverview/awsCostOverviewSelectors.ts rename to src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewSelectors.ts diff --git a/src/store/costOverview/awsCostOverview/awsCostOverviewWidgets.ts b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewWidgets.ts similarity index 93% rename from src/store/costOverview/awsCostOverview/awsCostOverviewWidgets.ts rename to src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewWidgets.ts index 2ff7f35a8..e2d4d3d2e 100644 --- a/src/store/costOverview/awsCostOverview/awsCostOverviewWidgets.ts +++ b/src/store/breakdown/costOverview/awsCostOverview/awsCostOverviewWidgets.ts @@ -1,6 +1,6 @@ import { tagPrefix } from 'api/queries/query'; import { ReportPathsType, ReportType } from 'api/reports/report'; -import { CostOverviewWidgetType } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; import { AwsCostOverviewWidget } from './awsCostOverviewCommon'; diff --git a/src/store/costOverview/awsCostOverview/index.ts b/src/store/breakdown/costOverview/awsCostOverview/index.ts similarity index 100% rename from src/store/costOverview/awsCostOverview/index.ts rename to src/store/breakdown/costOverview/awsCostOverview/index.ts diff --git a/src/store/costOverview/azureCostOverview/azureCostOverview.test.ts b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverview.test.ts similarity index 100% rename from src/store/costOverview/azureCostOverview/azureCostOverview.test.ts rename to src/store/breakdown/costOverview/azureCostOverview/azureCostOverview.test.ts diff --git a/src/store/costOverview/azureCostOverview/azureCostOverviewCommon.ts b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewCommon.ts similarity index 66% rename from src/store/costOverview/azureCostOverview/azureCostOverviewCommon.ts rename to src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewCommon.ts index 1f5b07167..6949c0ef2 100644 --- a/src/store/costOverview/azureCostOverview/azureCostOverviewCommon.ts +++ b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewCommon.ts @@ -1,4 +1,4 @@ -import { CostOverviewWidget } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidget } from 'store/breakdown/costOverview/common/costOverviewCommon'; export const azureCostOverviewStateKey = 'azureCostOverview'; diff --git a/src/store/costOverview/azureCostOverview/azureCostOverviewReducer.ts b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewReducer.ts similarity index 100% rename from src/store/costOverview/azureCostOverview/azureCostOverviewReducer.ts rename to src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewReducer.ts diff --git a/src/store/costOverview/azureCostOverview/azureCostOverviewSelectors.ts b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewSelectors.ts similarity index 100% rename from src/store/costOverview/azureCostOverview/azureCostOverviewSelectors.ts rename to src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewSelectors.ts diff --git a/src/store/costOverview/azureCostOverview/azureCostOverviewWidgets.ts b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewWidgets.ts similarity index 87% rename from src/store/costOverview/azureCostOverview/azureCostOverviewWidgets.ts rename to src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewWidgets.ts index e4efbeb16..ae53db79b 100644 --- a/src/store/costOverview/azureCostOverview/azureCostOverviewWidgets.ts +++ b/src/store/breakdown/costOverview/azureCostOverview/azureCostOverviewWidgets.ts @@ -1,7 +1,7 @@ import { tagPrefix } from 'api/queries/query'; import { ReportPathsType, ReportType } from 'api/reports/report'; -import { AzureCostOverviewWidget } from 'store/costOverview/azureCostOverview'; -import { CostOverviewWidgetType } from 'store/costOverview/common/costOverviewCommon'; +import { AzureCostOverviewWidget } from 'store/breakdown/costOverview/azureCostOverview'; +import { CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; let currrentId = 0; const getId = () => currrentId++; diff --git a/src/store/costOverview/azureCostOverview/index.ts b/src/store/breakdown/costOverview/azureCostOverview/index.ts similarity index 100% rename from src/store/costOverview/azureCostOverview/index.ts rename to src/store/breakdown/costOverview/azureCostOverview/index.ts diff --git a/src/store/costOverview/common/costOverviewCommon.ts b/src/store/breakdown/costOverview/common/costOverviewCommon.ts similarity index 100% rename from src/store/costOverview/common/costOverviewCommon.ts rename to src/store/breakdown/costOverview/common/costOverviewCommon.ts diff --git a/src/store/costOverview/gcpCostOverview/gcpCostOverview.test.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts similarity index 100% rename from src/store/costOverview/gcpCostOverview/gcpCostOverview.test.ts rename to src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts diff --git a/src/store/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts similarity index 65% rename from src/store/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts rename to src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts index f132de4a4..515027108 100644 --- a/src/store/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts +++ b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewCommon.ts @@ -1,4 +1,4 @@ -import { CostOverviewWidget } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidget } from 'store/breakdown/costOverview/common/costOverviewCommon'; export const gcpCostOverviewStateKey = 'gcpCostOverview'; diff --git a/src/store/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts similarity index 100% rename from src/store/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts rename to src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts diff --git a/src/store/costOverview/gcpCostOverview/gcpCostOverviewSelectors.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewSelectors.ts similarity index 100% rename from src/store/costOverview/gcpCostOverview/gcpCostOverviewSelectors.ts rename to src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewSelectors.ts diff --git a/src/store/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts similarity index 93% rename from src/store/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts rename to src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts index 465af1ee8..7c55d6057 100644 --- a/src/store/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts +++ b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts @@ -1,6 +1,6 @@ import { tagPrefix } from 'api/queries/query'; import { ReportPathsType, ReportType } from 'api/reports/report'; -import { CostOverviewWidgetType } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; import { GcpCostOverviewWidget } from './gcpCostOverviewCommon'; diff --git a/src/store/costOverview/gcpCostOverview/index.ts b/src/store/breakdown/costOverview/gcpCostOverview/index.ts similarity index 100% rename from src/store/costOverview/gcpCostOverview/index.ts rename to src/store/breakdown/costOverview/gcpCostOverview/index.ts diff --git a/src/store/costOverview/ocpCostOverview/index.ts b/src/store/breakdown/costOverview/ocpCostOverview/index.ts similarity index 100% rename from src/store/costOverview/ocpCostOverview/index.ts rename to src/store/breakdown/costOverview/ocpCostOverview/index.ts diff --git a/src/store/costOverview/ocpCostOverview/ocpCostOverview.test.ts b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverview.test.ts similarity index 100% rename from src/store/costOverview/ocpCostOverview/ocpCostOverview.test.ts rename to src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverview.test.ts diff --git a/src/store/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts similarity index 65% rename from src/store/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts rename to src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts index f27b77482..16f584f4b 100644 --- a/src/store/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts +++ b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewCommon.ts @@ -1,4 +1,4 @@ -import { CostOverviewWidget } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidget } from 'store/breakdown/costOverview/common/costOverviewCommon'; export const ocpCostOverviewStateKey = 'ocpCostOverview'; diff --git a/src/store/costOverview/ocpCostOverview/ocpCostOverviewReducer.ts b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewReducer.ts similarity index 100% rename from src/store/costOverview/ocpCostOverview/ocpCostOverviewReducer.ts rename to src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewReducer.ts diff --git a/src/store/costOverview/ocpCostOverview/ocpCostOverviewSelectors.ts b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewSelectors.ts similarity index 100% rename from src/store/costOverview/ocpCostOverview/ocpCostOverviewSelectors.ts rename to src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewSelectors.ts diff --git a/src/store/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts similarity index 93% rename from src/store/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts rename to src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts index 09e40e280..587131a1b 100644 --- a/src/store/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts +++ b/src/store/breakdown/costOverview/ocpCostOverview/ocpCostOverviewWidgets.ts @@ -1,5 +1,5 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; -import { CostOverviewWidgetType } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; import { OcpCostOverviewWidget } from './ocpCostOverviewCommon'; diff --git a/src/store/historicalData/awsHistoricalData/awsHistoricalData.test.ts b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalData.test.ts similarity index 100% rename from src/store/historicalData/awsHistoricalData/awsHistoricalData.test.ts rename to src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalData.test.ts diff --git a/src/store/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts similarity index 65% rename from src/store/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts rename to src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts index 4cb1a24f9..be1bd827c 100644 --- a/src/store/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts +++ b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataCommon.ts @@ -1,4 +1,4 @@ -import { HistoricalDataWidget } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidget } from 'store/breakdown/historicalData/common/historicalDataCommon'; export const awsHistoricalDataStateKey = 'awsHistoricalData'; diff --git a/src/store/historicalData/awsHistoricalData/awsHistoricalDataReducer.ts b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataReducer.ts similarity index 100% rename from src/store/historicalData/awsHistoricalData/awsHistoricalDataReducer.ts rename to src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataReducer.ts diff --git a/src/store/historicalData/awsHistoricalData/awsHistoricalDataSelectors.ts b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataSelectors.ts similarity index 100% rename from src/store/historicalData/awsHistoricalData/awsHistoricalDataSelectors.ts rename to src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataSelectors.ts diff --git a/src/store/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts similarity index 88% rename from src/store/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts rename to src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts index d410b1b62..cef0cf38b 100644 --- a/src/store/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts +++ b/src/store/breakdown/historicalData/awsHistoricalData/awsHistoricalDataWidgets.ts @@ -1,5 +1,5 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; -import { HistoricalDataWidgetType } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidgetType } from 'store/breakdown/historicalData/common/historicalDataCommon'; import { AwsHistoricalDataWidget } from './awsHistoricalDataCommon'; diff --git a/src/store/historicalData/awsHistoricalData/index.ts b/src/store/breakdown/historicalData/awsHistoricalData/index.ts similarity index 100% rename from src/store/historicalData/awsHistoricalData/index.ts rename to src/store/breakdown/historicalData/awsHistoricalData/index.ts diff --git a/src/store/historicalData/azureHistoricalData/azureHistoricalData.test.ts b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalData.test.ts similarity index 100% rename from src/store/historicalData/azureHistoricalData/azureHistoricalData.test.ts rename to src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalData.test.ts diff --git a/src/store/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts similarity index 65% rename from src/store/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts rename to src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts index cb12fd770..8dba20786 100644 --- a/src/store/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts +++ b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataCommon.ts @@ -1,4 +1,4 @@ -import { HistoricalDataWidget } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidget } from 'store/breakdown/historicalData/common/historicalDataCommon'; export const azureHistoricalDataStateKey = 'azureHistoricalData'; diff --git a/src/store/historicalData/azureHistoricalData/azureHistoricalDataReducer.ts b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataReducer.ts similarity index 100% rename from src/store/historicalData/azureHistoricalData/azureHistoricalDataReducer.ts rename to src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataReducer.ts diff --git a/src/store/historicalData/azureHistoricalData/azureHistoricalDataSelectors.ts b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataSelectors.ts similarity index 100% rename from src/store/historicalData/azureHistoricalData/azureHistoricalDataSelectors.ts rename to src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataSelectors.ts diff --git a/src/store/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts similarity index 88% rename from src/store/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts rename to src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts index b350c419d..9bcc9964a 100644 --- a/src/store/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts +++ b/src/store/breakdown/historicalData/azureHistoricalData/azureHistoricalDataWidgets.ts @@ -1,5 +1,5 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; -import { HistoricalDataWidgetType } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidgetType } from 'store/breakdown/historicalData/common/historicalDataCommon'; import { AzureHistoricalDataWidget } from './azureHistoricalDataCommon'; diff --git a/src/store/historicalData/azureHistoricalData/index.ts b/src/store/breakdown/historicalData/azureHistoricalData/index.ts similarity index 100% rename from src/store/historicalData/azureHistoricalData/index.ts rename to src/store/breakdown/historicalData/azureHistoricalData/index.ts diff --git a/src/store/historicalData/common/historicalDataCommon.ts b/src/store/breakdown/historicalData/common/historicalDataCommon.ts similarity index 100% rename from src/store/historicalData/common/historicalDataCommon.ts rename to src/store/breakdown/historicalData/common/historicalDataCommon.ts diff --git a/src/store/historicalData/gcpHistoricalData/gcpHistoricalData.test.ts b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalData.test.ts similarity index 100% rename from src/store/historicalData/gcpHistoricalData/gcpHistoricalData.test.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalData.test.ts diff --git a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts similarity index 65% rename from src/store/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts index e58addf9e..fdcf76c03 100644 --- a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts +++ b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataCommon.ts @@ -1,4 +1,4 @@ -import { HistoricalDataWidget } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidget } from 'store/breakdown/historicalData/common/historicalDataCommon'; export const gcpHistoricalDataStateKey = 'gcpHistoricalData'; diff --git a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataReducer.ts b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataReducer.ts similarity index 100% rename from src/store/historicalData/gcpHistoricalData/gcpHistoricalDataReducer.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataReducer.ts diff --git a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataSelectors.ts b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataSelectors.ts similarity index 100% rename from src/store/historicalData/gcpHistoricalData/gcpHistoricalDataSelectors.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataSelectors.ts diff --git a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts similarity index 88% rename from src/store/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts index 980cce676..51d162e16 100644 --- a/src/store/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts +++ b/src/store/breakdown/historicalData/gcpHistoricalData/gcpHistoricalDataWidgets.ts @@ -1,5 +1,5 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; -import { HistoricalDataWidgetType } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidgetType } from 'store/breakdown/historicalData/common/historicalDataCommon'; import { GcpHistoricalDataWidget } from './gcpHistoricalDataCommon'; diff --git a/src/store/historicalData/gcpHistoricalData/index.ts b/src/store/breakdown/historicalData/gcpHistoricalData/index.ts similarity index 100% rename from src/store/historicalData/gcpHistoricalData/index.ts rename to src/store/breakdown/historicalData/gcpHistoricalData/index.ts diff --git a/src/store/historicalData/ocpHistoricalData/index.ts b/src/store/breakdown/historicalData/ocpHistoricalData/index.ts similarity index 100% rename from src/store/historicalData/ocpHistoricalData/index.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/index.ts diff --git a/src/store/historicalData/ocpHistoricalData/ocpHistoricalData.test.ts b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalData.test.ts similarity index 100% rename from src/store/historicalData/ocpHistoricalData/ocpHistoricalData.test.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalData.test.ts diff --git a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts similarity index 65% rename from src/store/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts index 7307dd8db..1fd41a3e0 100644 --- a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts +++ b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataCommon.ts @@ -1,4 +1,4 @@ -import { HistoricalDataWidget } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidget } from 'store/breakdown/historicalData/common/historicalDataCommon'; export const ocpHistoricalDataStateKey = 'ocpHistoricalData'; diff --git a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataReducer.ts b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataReducer.ts similarity index 100% rename from src/store/historicalData/ocpHistoricalData/ocpHistoricalDataReducer.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataReducer.ts diff --git a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataSelectors.ts b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataSelectors.ts similarity index 100% rename from src/store/historicalData/ocpHistoricalData/ocpHistoricalDataSelectors.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataSelectors.ts diff --git a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts similarity index 87% rename from src/store/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts rename to src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts index a410413ec..0d535b0bb 100644 --- a/src/store/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts +++ b/src/store/breakdown/historicalData/ocpHistoricalData/ocpHistoricalDataWidgets.ts @@ -1,5 +1,5 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; -import { HistoricalDataWidgetType } from 'store/historicalData/common/historicalDataCommon'; +import { HistoricalDataWidgetType } from 'store/breakdown/historicalData/common/historicalDataCommon'; import { OcpHistoricalDataWidget } from './ocpHistoricalDataCommon'; diff --git a/src/store/rootReducer.ts b/src/store/rootReducer.ts index 7cccf2254..440e0ae3f 100644 --- a/src/store/rootReducer.ts +++ b/src/store/rootReducer.ts @@ -1,10 +1,17 @@ import { notifications } from '@redhat-cloud-services/frontend-components-notifications'; import { combineReducers } from 'redux'; +import { awsCostOverviewReducer, awsCostOverviewStateKey } from 'store/breakdown/costOverview/awsCostOverview'; +import { azureCostOverviewReducer, azureCostOverviewStateKey } from 'store/breakdown/costOverview/azureCostOverview'; +import { gcpCostOverviewReducer, gcpCostOverviewStateKey } from 'store/breakdown/costOverview/gcpCostOverview'; +import { ocpCostOverviewReducer, ocpCostOverviewStateKey } from 'store/breakdown/costOverview/ocpCostOverview'; +import { awsHistoricalDataReducer, awsHistoricalDataStateKey } from 'store/breakdown/historicalData/awsHistoricalData'; +import { + azureHistoricalDataReducer, + azureHistoricalDataStateKey, +} from 'store/breakdown/historicalData/azureHistoricalData'; +import { gcpHistoricalDataReducer, gcpHistoricalDataStateKey } from 'store/breakdown/historicalData/gcpHistoricalData'; +import { ocpHistoricalDataReducer, ocpHistoricalDataStateKey } from 'store/breakdown/historicalData/ocpHistoricalData'; import { costModelsReducer, costModelsStateKey } from 'store/costModels'; -import { awsCostOverviewReducer, awsCostOverviewStateKey } from 'store/costOverview/awsCostOverview'; -import { azureCostOverviewReducer, azureCostOverviewStateKey } from 'store/costOverview/azureCostOverview'; -import { gcpCostOverviewReducer, gcpCostOverviewStateKey } from 'store/costOverview/gcpCostOverview'; -import { ocpCostOverviewReducer, ocpCostOverviewStateKey } from 'store/costOverview/ocpCostOverview'; import { awsCloudDashboardReducer, awsCloudDashboardStateKey } from 'store/dashboard/awsCloudDashboard'; import { awsDashboardReducer, awsDashboardStateKey } from 'store/dashboard/awsDashboard'; import { azureCloudDashboardReducer, azureCloudDashboardStateKey } from 'store/dashboard/azureCloudDashboard'; @@ -19,10 +26,6 @@ import { import { ocpUsageDashboardReducer, ocpUsageDashboardStateKey } from 'store/dashboard/ocpUsageDashboard'; import { exportReducer, exportStateKey } from 'store/exports'; import { forecastReducer, forecastStateKey } from 'store/forecasts'; -import { awsHistoricalDataReducer, awsHistoricalDataStateKey } from 'store/historicalData/awsHistoricalData'; -import { azureHistoricalDataReducer, azureHistoricalDataStateKey } from 'store/historicalData/azureHistoricalData'; -import { gcpHistoricalDataReducer, gcpHistoricalDataStateKey } from 'store/historicalData/gcpHistoricalData'; -import { ocpHistoricalDataReducer, ocpHistoricalDataStateKey } from 'store/historicalData/ocpHistoricalData'; import { orgReducer, orgStateKey } from 'store/orgs'; import { priceListReducer, priceListStateKey } from 'store/priceList'; import { reportReducer, reportStateKey } from 'store/reports'; From a388bee0784462e3fa87d45549d5f0c3bfb3d1df Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 22 Feb 2021 18:06:25 -0500 Subject: [PATCH 104/200] Moved components used by explorer to common directory --- .../components/dataToolbar/dataToolbar.scss | 0 .../dataToolbar/dataToolbar.styles.ts | 0 .../components/dataToolbar/dataToolbar.tsx | 0 .../components/export/exportModal.styles.ts | 0 .../components/export/exportModal.tsx | 0 .../components/export/exportSubmit.tsx | 0 .../components/groupBy/groupBy.styles.ts | 0 .../components/groupBy/groupBy.tsx | 0 .../components/groupBy/groupByOrg.tsx | 0 .../components/groupBy/groupByTag.tsx | 0 .../perspective}/perspective.styles.ts | 0 .../perspective}/perspective.tsx | 0 .../details/awsBreakdown/awsBreakdown.tsx | 2 +- .../details/awsBreakdown/costOverview.tsx | 2 +- .../details/awsBreakdown/historicalData.tsx | 2 +- src/pages/details/awsDetails/awsDetails.tsx | 5 +-- .../details/awsDetails/detailsHeader.tsx | 2 +- .../details/awsDetails/detailsToolbar.tsx | 2 +- .../details/azureBreakdown/azureBreakdown.tsx | 2 +- .../details/azureBreakdown/costOverview.tsx | 2 +- .../details/azureBreakdown/historicalData.tsx | 2 +- .../details/azureDetails/azureDetails.tsx | 5 +-- .../details/azureDetails/detailsHeader.tsx | 2 +- .../details/azureDetails/detailsToolbar.tsx | 2 +- .../details/components/actions/actions.tsx | 2 +- .../costOverview/costOverviewBase.tsx | 2 +- .../historicalData/historicalDataBase.tsx | 5 ++- .../details/components/utils/groupBy.tsx | 11 ------ .../details/gcpBreakdown/costOverview.tsx | 2 +- .../details/gcpBreakdown/gcpBreakdown.tsx | 2 +- .../details/gcpBreakdown/historicalData.tsx | 2 +- .../details/gcpDetails/detailsHeader.tsx | 2 +- .../details/gcpDetails/detailsToolbar.tsx | 2 +- src/pages/details/gcpDetails/gcpDetails.tsx | 5 +-- .../details/ocpBreakdown/costOverview.tsx | 2 +- .../details/ocpBreakdown/historicalData.tsx | 2 +- .../details/ocpBreakdown/ocpBreakdown.tsx | 2 +- .../details/ocpDetails/detailsHeader.tsx | 2 +- .../details/ocpDetails/detailsToolbar.tsx | 2 +- src/pages/details/ocpDetails/ocpDetails.tsx | 5 +-- src/pages/explorer/explorer.tsx | 5 +-- src/pages/explorer/explorerFilter.tsx | 2 +- src/pages/explorer/explorerHeader.tsx | 4 +-- src/pages/explorer/explorerTable.tsx | 2 +- src/pages/explorer/explorerToolbar.tsx | 2 +- src/pages/overview/overview.tsx | 2 +- src/pages/utils/groupBy.ts | 36 +++++++++++++++++++ .../common/detailsUtils.ts => utils/query.ts} | 27 +------------- 48 files changed, 84 insertions(+), 76 deletions(-) rename src/pages/{details => }/components/dataToolbar/dataToolbar.scss (100%) rename src/pages/{details => }/components/dataToolbar/dataToolbar.styles.ts (100%) rename src/pages/{details => }/components/dataToolbar/dataToolbar.tsx (100%) rename src/pages/{details => }/components/export/exportModal.styles.ts (100%) rename src/pages/{details => }/components/export/exportModal.tsx (100%) rename src/pages/{details => }/components/export/exportSubmit.tsx (100%) rename src/pages/{details => }/components/groupBy/groupBy.styles.ts (100%) rename src/pages/{details => }/components/groupBy/groupBy.tsx (100%) rename src/pages/{details => }/components/groupBy/groupByOrg.tsx (100%) rename src/pages/{details => }/components/groupBy/groupByTag.tsx (100%) rename src/pages/{overview => components/perspective}/perspective.styles.ts (100%) rename src/pages/{overview => components/perspective}/perspective.tsx (100%) delete mode 100644 src/pages/details/components/utils/groupBy.tsx create mode 100644 src/pages/utils/groupBy.ts rename src/pages/{details/common/detailsUtils.ts => utils/query.ts} (71%) diff --git a/src/pages/details/components/dataToolbar/dataToolbar.scss b/src/pages/components/dataToolbar/dataToolbar.scss similarity index 100% rename from src/pages/details/components/dataToolbar/dataToolbar.scss rename to src/pages/components/dataToolbar/dataToolbar.scss diff --git a/src/pages/details/components/dataToolbar/dataToolbar.styles.ts b/src/pages/components/dataToolbar/dataToolbar.styles.ts similarity index 100% rename from src/pages/details/components/dataToolbar/dataToolbar.styles.ts rename to src/pages/components/dataToolbar/dataToolbar.styles.ts diff --git a/src/pages/details/components/dataToolbar/dataToolbar.tsx b/src/pages/components/dataToolbar/dataToolbar.tsx similarity index 100% rename from src/pages/details/components/dataToolbar/dataToolbar.tsx rename to src/pages/components/dataToolbar/dataToolbar.tsx diff --git a/src/pages/details/components/export/exportModal.styles.ts b/src/pages/components/export/exportModal.styles.ts similarity index 100% rename from src/pages/details/components/export/exportModal.styles.ts rename to src/pages/components/export/exportModal.styles.ts diff --git a/src/pages/details/components/export/exportModal.tsx b/src/pages/components/export/exportModal.tsx similarity index 100% rename from src/pages/details/components/export/exportModal.tsx rename to src/pages/components/export/exportModal.tsx diff --git a/src/pages/details/components/export/exportSubmit.tsx b/src/pages/components/export/exportSubmit.tsx similarity index 100% rename from src/pages/details/components/export/exportSubmit.tsx rename to src/pages/components/export/exportSubmit.tsx diff --git a/src/pages/details/components/groupBy/groupBy.styles.ts b/src/pages/components/groupBy/groupBy.styles.ts similarity index 100% rename from src/pages/details/components/groupBy/groupBy.styles.ts rename to src/pages/components/groupBy/groupBy.styles.ts diff --git a/src/pages/details/components/groupBy/groupBy.tsx b/src/pages/components/groupBy/groupBy.tsx similarity index 100% rename from src/pages/details/components/groupBy/groupBy.tsx rename to src/pages/components/groupBy/groupBy.tsx diff --git a/src/pages/details/components/groupBy/groupByOrg.tsx b/src/pages/components/groupBy/groupByOrg.tsx similarity index 100% rename from src/pages/details/components/groupBy/groupByOrg.tsx rename to src/pages/components/groupBy/groupByOrg.tsx diff --git a/src/pages/details/components/groupBy/groupByTag.tsx b/src/pages/components/groupBy/groupByTag.tsx similarity index 100% rename from src/pages/details/components/groupBy/groupByTag.tsx rename to src/pages/components/groupBy/groupByTag.tsx diff --git a/src/pages/overview/perspective.styles.ts b/src/pages/components/perspective/perspective.styles.ts similarity index 100% rename from src/pages/overview/perspective.styles.ts rename to src/pages/components/perspective/perspective.styles.ts diff --git a/src/pages/overview/perspective.tsx b/src/pages/components/perspective/perspective.tsx similarity index 100% rename from src/pages/overview/perspective.tsx rename to src/pages/components/perspective/perspective.tsx diff --git a/src/pages/details/awsBreakdown/awsBreakdown.tsx b/src/pages/details/awsBreakdown/awsBreakdown.tsx index 7350c650a..796d3d0b8 100644 --- a/src/pages/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/details/awsBreakdown/awsBreakdown.tsx @@ -6,7 +6,7 @@ import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/details/components/utils/groupBy'; +import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsBreakdown/costOverview.tsx b/src/pages/details/awsBreakdown/costOverview.tsx index 9edfc03f8..e09b2009b 100644 --- a/src/pages/details/awsBreakdown/costOverview.tsx +++ b/src/pages/details/awsBreakdown/costOverview.tsx @@ -1,8 +1,8 @@ import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { awsCostOverviewSelectors } from 'store/breakdown/costOverview/awsCostOverview'; import { createMapStateToProps } from 'store/common'; -import { awsCostOverviewSelectors } from 'store/costOverview/awsCostOverview'; interface CostOverviewStateProps { widgets: number[]; diff --git a/src/pages/details/awsBreakdown/historicalData.tsx b/src/pages/details/awsBreakdown/historicalData.tsx index 03b4576ff..2ac8f342d 100644 --- a/src/pages/details/awsBreakdown/historicalData.tsx +++ b/src/pages/details/awsBreakdown/historicalData.tsx @@ -1,8 +1,8 @@ import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { awsHistoricalDataSelectors } from 'store/breakdown/historicalData/awsHistoricalData'; import { createMapStateToProps } from 'store/common'; -import { awsHistoricalDataSelectors } from 'store/historicalData/awsHistoricalData'; interface HistoricalDataStateProps { widgets: number[]; diff --git a/src/pages/details/awsDetails/awsDetails.tsx b/src/pages/details/awsDetails/awsDetails.tsx index ade13cd61..22453f063 100644 --- a/src/pages/details/awsDetails/awsDetails.tsx +++ b/src/pages/details/awsDetails/awsDetails.tsx @@ -6,12 +6,13 @@ import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { getGroupByTagKey } from 'pages/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsDetails/detailsHeader.tsx b/src/pages/details/awsDetails/detailsHeader.tsx index b42a0b0cf..db48057a9 100644 --- a/src/pages/details/awsDetails/detailsHeader.tsx +++ b/src/pages/details/awsDetails/detailsHeader.tsx @@ -6,7 +6,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AwsReport } from 'api/reports/awsReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/details/components/groupBy/groupBy'; +import { GroupBy } from 'pages/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsDetails/detailsToolbar.tsx b/src/pages/details/awsDetails/detailsToolbar.tsx index 1d86d7501..1b72a6c0d 100644 --- a/src/pages/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/details/awsDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { orgUnitIdKey, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureBreakdown/azureBreakdown.tsx b/src/pages/details/azureBreakdown/azureBreakdown.tsx index 7a2b5da25..7893dcab5 100644 --- a/src/pages/details/azureBreakdown/azureBreakdown.tsx +++ b/src/pages/details/azureBreakdown/azureBreakdown.tsx @@ -6,7 +6,7 @@ import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/details/components/utils/groupBy'; +import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureBreakdown/costOverview.tsx b/src/pages/details/azureBreakdown/costOverview.tsx index 05833425d..dff563d50 100644 --- a/src/pages/details/azureBreakdown/costOverview.tsx +++ b/src/pages/details/azureBreakdown/costOverview.tsx @@ -1,8 +1,8 @@ import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { azureCostOverviewSelectors } from 'store/breakdown/costOverview/azureCostOverview'; import { createMapStateToProps } from 'store/common'; -import { azureCostOverviewSelectors } from 'store/costOverview/azureCostOverview'; interface CostOverviewStateProps { widgets: number[]; diff --git a/src/pages/details/azureBreakdown/historicalData.tsx b/src/pages/details/azureBreakdown/historicalData.tsx index b5abfee7e..5e1f5cb92 100644 --- a/src/pages/details/azureBreakdown/historicalData.tsx +++ b/src/pages/details/azureBreakdown/historicalData.tsx @@ -1,8 +1,8 @@ import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { azureHistoricalDataSelectors } from 'store/breakdown/historicalData/azureHistoricalData'; import { createMapStateToProps } from 'store/common'; -import { azureHistoricalDataSelectors } from 'store/historicalData/azureHistoricalData'; interface HistoricalDataStateProps { widgets: number[]; diff --git a/src/pages/details/azureDetails/azureDetails.tsx b/src/pages/details/azureDetails/azureDetails.tsx index a5002d6ac..8cb0effe6 100644 --- a/src/pages/details/azureDetails/azureDetails.tsx +++ b/src/pages/details/azureDetails/azureDetails.tsx @@ -6,11 +6,12 @@ import { tagPrefix } from 'api/queries/query'; import { AzureReport } from 'api/reports/azureReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { getGroupByTagKey } from 'pages/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureDetails/detailsHeader.tsx b/src/pages/details/azureDetails/detailsHeader.tsx index f9d9592c3..d9cdfcbbe 100644 --- a/src/pages/details/azureDetails/detailsHeader.tsx +++ b/src/pages/details/azureDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AzureReport } from 'api/reports/azureReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/details/components/groupBy/groupBy'; +import { GroupBy } from 'pages/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureDetails/detailsToolbar.tsx b/src/pages/details/azureDetails/detailsToolbar.tsx index 828c856ee..56d081711 100644 --- a/src/pages/details/azureDetails/detailsToolbar.tsx +++ b/src/pages/details/azureDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { AzureQuery, getQuery } from 'api/queries/azureQuery'; import { tagKey } from 'api/queries/query'; import { AzureTag } from 'api/tags/azureTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/components/actions/actions.tsx b/src/pages/details/components/actions/actions.tsx index b74126a14..edfce60df 100644 --- a/src/pages/details/components/actions/actions.tsx +++ b/src/pages/details/components/actions/actions.tsx @@ -3,7 +3,7 @@ import { ProviderType } from 'api/providers'; import { Query } from 'api/queries/query'; import { tagPrefix } from 'api/queries/query'; import { ReportPathsType } from 'api/reports/report'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/components/costOverview/costOverviewBase.tsx b/src/pages/details/components/costOverview/costOverviewBase.tsx index 6a30429ac..a02aeaa71 100644 --- a/src/pages/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/details/components/costOverview/costOverviewBase.tsx @@ -19,7 +19,7 @@ import { UsageChart } from 'pages/details/components/usageChart/usageChart'; import { styles } from 'pages/details/ocpDetails/detailsHeader.styles'; import React from 'react'; import { WithTranslation } from 'react-i18next'; -import { CostOverviewWidget, CostOverviewWidgetType } from 'store/costOverview/common/costOverviewCommon'; +import { CostOverviewWidget, CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; interface CostOverviewOwnProps { filterBy: string | number; diff --git a/src/pages/details/components/historicalData/historicalDataBase.tsx b/src/pages/details/components/historicalData/historicalDataBase.tsx index c2b2a5ee4..90f5d81c6 100644 --- a/src/pages/details/components/historicalData/historicalDataBase.tsx +++ b/src/pages/details/components/historicalData/historicalDataBase.tsx @@ -2,7 +2,10 @@ import { Card, CardBody, CardTitle, Grid, GridItem, Title } from '@patternfly/re import { Query } from 'api/queries/query'; import React from 'react'; import { WithTranslation } from 'react-i18next'; -import { HistoricalDataWidget, HistoricalDataWidgetType } from 'store/historicalData/common/historicalDataCommon'; +import { + HistoricalDataWidget, + HistoricalDataWidgetType, +} from 'store/breakdown/historicalData/common/historicalDataCommon'; import { HistoricalDataCostChart } from './historicalDataCostChart'; import { HistoricalDataTrendChart } from './historicalDataTrendChart'; diff --git a/src/pages/details/components/utils/groupBy.tsx b/src/pages/details/components/utils/groupBy.tsx deleted file mode 100644 index 30761adac..000000000 --- a/src/pages/details/components/utils/groupBy.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { orgUnitIdKey, Query } from 'api/queries/query'; - -export const getGroupById = (query: Query) => { - const groupBys = query && query.group_by ? Object.keys(query.group_by) : []; - return groupBys.find(key => key !== orgUnitIdKey); -}; - -export const getGroupByValue = (query: Query) => { - const groupById = getGroupById(query); - return groupById ? query.group_by[groupById] : undefined; -}; diff --git a/src/pages/details/gcpBreakdown/costOverview.tsx b/src/pages/details/gcpBreakdown/costOverview.tsx index 5961a9337..7ea722527 100644 --- a/src/pages/details/gcpBreakdown/costOverview.tsx +++ b/src/pages/details/gcpBreakdown/costOverview.tsx @@ -1,8 +1,8 @@ import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { gcpCostOverviewSelectors } from 'store/breakdown/costOverview/gcpCostOverview'; import { createMapStateToProps } from 'store/common'; -import { gcpCostOverviewSelectors } from 'store/costOverview/gcpCostOverview'; interface CostOverviewStateProps { widgets: number[]; diff --git a/src/pages/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/details/gcpBreakdown/gcpBreakdown.tsx index 895211c8d..cc2696d7a 100644 --- a/src/pages/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/details/gcpBreakdown/gcpBreakdown.tsx @@ -6,7 +6,7 @@ import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/details/components/utils/groupBy'; +import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpBreakdown/historicalData.tsx b/src/pages/details/gcpBreakdown/historicalData.tsx index 404d34903..edbbcee11 100644 --- a/src/pages/details/gcpBreakdown/historicalData.tsx +++ b/src/pages/details/gcpBreakdown/historicalData.tsx @@ -1,8 +1,8 @@ import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { gcpHistoricalDataSelectors } from 'store/breakdown/historicalData/gcpHistoricalData'; import { createMapStateToProps } from 'store/common'; -import { gcpHistoricalDataSelectors } from 'store/historicalData/gcpHistoricalData'; interface HistoricalDataStateProps { widgets: number[]; diff --git a/src/pages/details/gcpDetails/detailsHeader.tsx b/src/pages/details/gcpDetails/detailsHeader.tsx index e184f8922..d5b2efe0b 100644 --- a/src/pages/details/gcpDetails/detailsHeader.tsx +++ b/src/pages/details/gcpDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { GcpReport } from 'api/reports/gcpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/details/components/groupBy/groupBy'; +import { GroupBy } from 'pages/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpDetails/detailsToolbar.tsx b/src/pages/details/gcpDetails/detailsToolbar.tsx index c923ba4f7..006fdf6e2 100644 --- a/src/pages/details/gcpDetails/detailsToolbar.tsx +++ b/src/pages/details/gcpDetails/detailsToolbar.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { GcpQuery, getQuery } from 'api/queries/gcpQuery'; import { tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpDetails/gcpDetails.tsx b/src/pages/details/gcpDetails/gcpDetails.tsx index c3aa5c365..a8969cef0 100644 --- a/src/pages/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/details/gcpDetails/gcpDetails.tsx @@ -6,11 +6,12 @@ import { tagPrefix } from 'api/queries/query'; import { GcpReport } from 'api/reports/gcpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { getGroupByTagKey } from 'pages/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpBreakdown/costOverview.tsx b/src/pages/details/ocpBreakdown/costOverview.tsx index 39dd682e4..154cfa8a9 100644 --- a/src/pages/details/ocpBreakdown/costOverview.tsx +++ b/src/pages/details/ocpBreakdown/costOverview.tsx @@ -1,8 +1,8 @@ import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { ocpCostOverviewSelectors } from 'store/breakdown/costOverview/ocpCostOverview'; import { createMapStateToProps } from 'store/common'; -import { ocpCostOverviewSelectors } from 'store/costOverview/ocpCostOverview'; interface CostOverviewStateProps { widgets: number[]; diff --git a/src/pages/details/ocpBreakdown/historicalData.tsx b/src/pages/details/ocpBreakdown/historicalData.tsx index f5820002e..a8b67dae1 100644 --- a/src/pages/details/ocpBreakdown/historicalData.tsx +++ b/src/pages/details/ocpBreakdown/historicalData.tsx @@ -1,8 +1,8 @@ import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; +import { ocpHistoricalDataSelectors } from 'store/breakdown/historicalData/ocpHistoricalData'; import { createMapStateToProps } from 'store/common'; -import { ocpHistoricalDataSelectors } from 'store/historicalData/ocpHistoricalData'; interface HistoricalDataStateProps { widgets: number[]; diff --git a/src/pages/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/details/ocpBreakdown/ocpBreakdown.tsx index aa0710d9e..3497956cc 100644 --- a/src/pages/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/details/ocpBreakdown/ocpBreakdown.tsx @@ -6,7 +6,7 @@ import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/details/components/utils/groupBy'; +import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/detailsHeader.tsx b/src/pages/details/ocpDetails/detailsHeader.tsx index 9e7c3f151..dcec66231 100644 --- a/src/pages/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/details/ocpDetails/detailsHeader.tsx @@ -7,7 +7,7 @@ import { OcpReport } from 'api/reports/ocpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { GroupBy } from 'pages/details/components/groupBy/groupBy'; +import { GroupBy } from 'pages/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/detailsToolbar.tsx b/src/pages/details/ocpDetails/detailsToolbar.tsx index d44a5c7d0..dc62ac14d 100644 --- a/src/pages/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/details/ocpDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { getQuery, OcpQuery } from 'api/queries/ocpQuery'; import { tagKey } from 'api/queries/query'; import { OcpTag } from 'api/tags/ocpTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/ocpDetails.tsx b/src/pages/details/ocpDetails/ocpDetails.tsx index 93a5d144e..12cf9dffa 100644 --- a/src/pages/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/details/ocpDetails/ocpDetails.tsx @@ -6,11 +6,12 @@ import { tagPrefix } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { getGroupByTagKey } from 'pages/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorer.tsx b/src/pages/explorer/explorer.tsx index 9cfe1a10e..d08994824 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/explorer/explorer.tsx @@ -7,12 +7,13 @@ import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { Report } from 'api/reports/report'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { addQueryFilter, getGroupByOrg, getGroupByTagKey, removeQueryFilter } from 'pages/details/common/detailsUtils'; -import { ExportModal } from 'pages/details/components/export/exportModal'; +import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerFilter.tsx b/src/pages/explorer/explorerFilter.tsx index 5ded9f986..334e0f682 100644 --- a/src/pages/explorer/explorerFilter.tsx +++ b/src/pages/explorer/explorerFilter.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/explorer/explorerHeader.tsx index 9b4e982af..0e7889972 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/explorer/explorerHeader.tsx @@ -5,8 +5,8 @@ import { getQuery, parseQuery, Query } from 'api/queries/query'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/details/components/groupBy/groupBy'; -import { Perspective } from 'pages/overview/perspective'; +import { GroupBy } from 'pages/components/groupBy/groupBy'; +import { Perspective } from 'pages/components/perspective/perspective'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/explorer/explorerTable.tsx index 6e1a2f832..1627e1056 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/explorer/explorerTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/details/common/detailsUtils'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerToolbar.tsx b/src/pages/explorer/explorerToolbar.tsx index 2953dc331..a3174ec0e 100644 --- a/src/pages/explorer/explorerToolbar.tsx +++ b/src/pages/explorer/explorerToolbar.tsx @@ -1,5 +1,5 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; -import { DataToolbar } from 'pages/details/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/overview/overview.tsx b/src/pages/overview/overview.tsx index c9851df16..c0c50538d 100644 --- a/src/pages/overview/overview.tsx +++ b/src/pages/overview/overview.tsx @@ -7,6 +7,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; +import { Perspective } from 'pages/components/perspective/perspective'; import AwsCloudDashboard from 'pages/dashboard/awsCloudDashboard/awsCloudDashboard'; import AwsDashboard from 'pages/dashboard/awsDashboard/awsDashboard'; import AzureCloudDashboard from 'pages/dashboard/azureCloudDashboard/azureCloudDashboard'; @@ -34,7 +35,6 @@ import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; import NoData from '../state/noData/noData'; import { styles } from './overview.styles'; -import { Perspective } from './perspective'; // eslint-disable-next-line no-shadow const enum InfrastructurePerspective { diff --git a/src/pages/utils/groupBy.ts b/src/pages/utils/groupBy.ts new file mode 100644 index 000000000..52cbeb89c --- /dev/null +++ b/src/pages/utils/groupBy.ts @@ -0,0 +1,36 @@ +import { orgUnitIdKey, Query, tagPrefix } from 'api/queries/query'; + +export const getGroupById = (query: Query) => { + const groupBys = query && query.group_by ? Object.keys(query.group_by) : []; + return groupBys.find(key => key !== orgUnitIdKey); +}; + +export const getGroupByValue = (query: Query) => { + const groupById = getGroupById(query); + return groupById ? query.group_by[groupById] : undefined; +}; + +export const getGroupByOrg = (query: Query) => { + let groupByOrg; + + for (const groupBy of Object.keys(query.group_by)) { + if (groupBy === orgUnitIdKey) { + groupByOrg = query.group_by[orgUnitIdKey]; + break; + } + } + return groupByOrg; +}; + +export const getGroupByTagKey = (query: Query) => { + let groupByTagKey; + + for (const groupBy of Object.keys(query.group_by)) { + const tagIndex = groupBy.indexOf(tagPrefix); + if (tagIndex !== -1) { + groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; + break; + } + } + return groupByTagKey; +}; diff --git a/src/pages/details/common/detailsUtils.ts b/src/pages/utils/query.ts similarity index 71% rename from src/pages/details/common/detailsUtils.ts rename to src/pages/utils/query.ts index 17eb2b5dc..801f508d8 100644 --- a/src/pages/details/common/detailsUtils.ts +++ b/src/pages/utils/query.ts @@ -1,29 +1,4 @@ -import { orgUnitIdKey, Query, tagPrefix } from 'api/queries/query'; - -export const getGroupByOrg = (query: Query) => { - let groupByOrg; - - for (const groupBy of Object.keys(query.group_by)) { - if (groupBy === orgUnitIdKey) { - groupByOrg = query.group_by[orgUnitIdKey]; - break; - } - } - return groupByOrg; -}; - -export const getGroupByTagKey = (query: Query) => { - let groupByTagKey; - - for (const groupBy of Object.keys(query.group_by)) { - const tagIndex = groupBy.indexOf(tagPrefix); - if (tagIndex !== -1) { - groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; - break; - } - } - return groupByTagKey; -}; +import { Query } from 'api/queries/query'; export const addQueryFilter = (query: Query, filterType: string, filterValue: string) => { const newQuery = { ...JSON.parse(JSON.stringify(query)) }; From f815606381856d3efe763229a1a9efd83f3acca6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 22 Feb 2021 18:22:19 -0500 Subject: [PATCH 105/200] Move common view components together --- .../costModels/costModel/sourcesToolbar.tsx | 3 +- .../components/dataToolbar/dataToolbar.scss | 0 .../dataToolbar/dataToolbar.styles.ts | 0 .../components/dataToolbar/dataToolbar.tsx | 0 .../components/export/exportModal.styles.ts | 0 .../components/export/exportModal.tsx | 0 .../components/export/exportSubmit.tsx | 0 .../components/groupBy/groupBy.styles.ts | 0 .../{ => view}/components/groupBy/groupBy.tsx | 2 +- .../components/groupBy/groupByOrg.tsx | 0 .../components/groupBy/groupByTag.tsx | 0 .../perspective/perspective.styles.ts | 0 .../components/perspective/perspective.tsx | 0 .../awsCloudDashboard/awsCloudDashboard.tsx | 2 +- .../awsCloudDashboardWidget.styles.ts | 0 .../awsCloudDashboardWidget.tsx | 2 +- .../dashboard/awsCloudDashboard/index.ts | 0 .../dashboard/awsDashboard/awsDashboard.tsx | 2 +- .../awsDashboard/awsDashboardWidget.test.tsx | 0 .../awsDashboard/awsDashboardWidget.tsx | 2 +- .../dashboard/awsDashboard/index.ts | 0 .../azureCloudDashboard.tsx | 2 +- .../azureCloudDashboardWidget.tsx | 2 +- .../dashboard/azureCloudDashboard/index.ts | 0 .../azureDashboard/azureDashboard.tsx | 2 +- .../azureDashboardWidget.test.tsx | 0 .../azureDashboard/azureDashboardWidget.tsx | 2 +- .../dashboard/azureDashboard/index.ts | 0 .../dashboardWidget.test.tsx.snap | 0 .../dashboard/components/chartComparison.tsx | 0 .../dashboard/components/dashboardBase.tsx | 0 .../components/dashboardWidget.styles.ts | 0 .../components/dashboardWidget.test.tsx | 2 +- .../components/dashboardWidgetBase.tsx | 0 .../dashboard/gcpDashboard/gcpDashboard.tsx | 2 +- .../gcpDashboard/gcpDashboardWidget.test.tsx | 0 .../gcpDashboard/gcpDashboardWidget.tsx | 2 +- .../dashboard/gcpDashboard/index.ts | 0 .../dashboard/ocpCloudDashboard/index.ts | 0 .../ocpCloudDashboard/ocpCloudDashboard.tsx | 2 +- .../ocpCloudDashboardWidget.test.tsx | 0 .../ocpCloudDashboardWidget.tsx | 2 +- .../dashboard/ocpDashboard/index.ts | 0 .../dashboard/ocpDashboard/ocpDashboard.tsx | 2 +- .../ocpDashboard/ocpDashboardWidget.styles.ts | 0 .../ocpDashboard/ocpDashboardWidget.test.tsx | 0 .../ocpDashboard/ocpDashboardWidget.tsx | 2 +- .../ocpSupplementaryDashboard/index.ts | 0 .../ocpSupplementaryDashboard.tsx | 2 +- .../ocpSupplementaryDashboardWidget.tsx | 2 +- .../dashboard/ocpUsageDashboard/index.ts | 0 .../ocpUsageDashboard/ocpUsageDashboard.tsx | 2 +- .../ocpUsageDashboardWidget.tsx | 2 +- .../details/awsBreakdown/awsBreakdown.tsx | 4 +-- .../details/awsBreakdown/costOverview.tsx | 2 +- .../details/awsBreakdown/historicalData.tsx | 2 +- .../{ => view}/details/awsBreakdown/index.ts | 0 .../details/awsDetails/awsDetails.styles.ts | 0 .../details/awsDetails/awsDetails.tsx | 6 ++-- .../details/awsDetails/awsDetailsTable.scss | 0 .../awsDetails/detailsHeader.styles.ts | 0 .../details/awsDetails/detailsHeader.tsx | 2 +- .../details/awsDetails/detailsTable.styles.ts | 0 .../details/awsDetails/detailsTable.tsx | 2 +- .../details/awsDetails/detailsToolbar.tsx | 2 +- .../{ => view}/details/awsDetails/index.ts | 0 .../details/azureBreakdown/azureBreakdown.tsx | 4 +-- .../details/azureBreakdown/costOverview.tsx | 2 +- .../details/azureBreakdown/historicalData.tsx | 2 +- .../details/azureBreakdown/index.ts | 0 .../azureDetails/azureDetails.styles.ts | 0 .../details/azureDetails/azureDetails.tsx | 8 +++--- .../azureDetails/azureDetailsTable.scss | 0 .../azureDetails/detailsHeader.styles.ts | 0 .../details/azureDetails/detailsHeader.tsx | 2 +- .../azureDetails/detailsTable.styles.ts | 0 .../details/azureDetails/detailsTable.tsx | 2 +- .../details/azureDetails/detailsToolbar.tsx | 2 +- .../{ => view}/details/azureDetails/index.ts | 0 .../details/components/actions/actions.tsx | 2 +- .../components/breakdown/breakdown.styles.ts | 0 .../components/breakdown/breakdownBase.tsx | 2 +- .../components/breakdown/breakdownHeader.scss | 0 .../breakdown/breakdownHeader.styles.ts | 0 .../components/breakdown/breakdownHeader.tsx | 2 +- .../components/cluster/cluster.styles.ts | 0 .../details/components/cluster/cluster.tsx | 0 .../components/cluster/clusterModal.scss | 0 .../components/cluster/clusterModal.styles.ts | 0 .../components/cluster/clusterModal.tsx | 0 .../components/cluster/clusterView.tsx | 0 .../components/costChart/costChart.styles.ts | 0 .../components/costChart/costChart.tsx | 0 .../costOverview/costOverviewBase.tsx | 10 +++---- .../historicalData/historicalChart.styles.ts | 0 .../historicalData/historicalDataBase.tsx | 0 .../historicalDataCostChart.tsx | 0 .../historicalDataTrendChart.tsx | 0 .../historicalDataUsageChart.tsx | 0 .../priceList/noRatesState.styles.ts | 0 .../components/priceList/noRatesState.tsx | 0 .../components/priceList/priceListTable.tsx | 0 .../components/summary/summary.styles.ts | 0 .../components/summary/summaryCard.styles.ts | 0 .../components/summary/summaryCard.tsx | 2 +- .../components/summary/summaryModal.scss | 0 .../components/summary/summaryModal.styles.ts | 0 .../components/summary/summaryModal.tsx | 0 .../components/summary/summaryModalView.tsx | 0 .../components/summary/summaryView.tsx | 0 .../details/components/tag/tag.styles.ts | 0 .../{ => view}/details/components/tag/tag.tsx | 0 .../details/components/tag/tagLink.tsx | 0 .../details/components/tag/tagModal.styles.ts | 0 .../details/components/tag/tagModal.tsx | 0 .../details/components/tag/tagView.tsx | 0 .../usageChart/usageChart.styles.ts | 0 .../components/usageChart/usageChart.tsx | 0 .../details/gcpBreakdown/costOverview.tsx | 2 +- .../details/gcpBreakdown/gcpBreakdown.tsx | 4 +-- .../details/gcpBreakdown/historicalData.tsx | 2 +- .../{ => view}/details/gcpBreakdown/index.ts | 0 .../gcpDetails/detailsHeader.styles.ts | 0 .../details/gcpDetails/detailsHeader.tsx | 2 +- .../details/gcpDetails/detailsTable.styles.ts | 0 .../details/gcpDetails/detailsTable.tsx | 2 +- .../details/gcpDetails/detailsToolbar.tsx | 2 +- .../details/gcpDetails/gcpDetails.styles.ts | 0 .../details/gcpDetails/gcpDetails.tsx | 8 +++--- .../details/gcpDetails/gcpDetailsTable.scss | 0 .../{ => view}/details/gcpDetails/index.ts | 0 .../details/ocpBreakdown/costOverview.tsx | 2 +- .../details/ocpBreakdown/historicalData.tsx | 2 +- .../{ => view}/details/ocpBreakdown/index.ts | 0 .../details/ocpBreakdown/ocpBreakdown.tsx | 4 +-- .../ocpDetails/detailsHeader.styles.ts | 0 .../details/ocpDetails/detailsHeader.tsx | 2 +- .../details/ocpDetails/detailsTable.scss | 0 .../details/ocpDetails/detailsTable.styles.ts | 0 .../details/ocpDetails/detailsTable.tsx | 2 +- .../details/ocpDetails/detailsToolbar.tsx | 2 +- .../{ => view}/details/ocpDetails/index.ts | 0 .../details/ocpDetails/ocpDetails.styles.ts | 0 .../details/ocpDetails/ocpDetails.tsx | 8 +++--- src/pages/{ => view}/explorer/dateRange.tsx | 0 .../{ => view}/explorer/explorer.styles.ts | 0 src/pages/{ => view}/explorer/explorer.tsx | 6 ++-- .../explorer/explorerChart.styles.ts | 0 .../{ => view}/explorer/explorerChart.tsx | 0 .../explorer/explorerFilter.styles.ts | 0 .../{ => view}/explorer/explorerFilter.tsx | 2 +- .../explorer/explorerHeader.styles.ts | 0 .../{ => view}/explorer/explorerHeader.tsx | 4 +-- .../{ => view}/explorer/explorerTable.scss | 0 .../explorer/explorerTable.styles.ts | 0 .../{ => view}/explorer/explorerTable.tsx | 2 +- .../{ => view}/explorer/explorerToolbar.tsx | 2 +- .../{ => view}/explorer/explorerUtils.ts | 0 src/pages/{ => view}/explorer/index.ts | 0 src/pages/{ => view}/overview/index.ts | 0 src/pages/{ => view}/overview/overview.scss | 0 .../{ => view}/overview/overview.styles.ts | 0 src/pages/{ => view}/overview/overview.tsx | 22 +++++++-------- src/pages/{ => view}/utils/groupBy.ts | 0 src/pages/{ => view}/utils/query.ts | 0 src/routes.tsx | 28 ++++++++++--------- .../awsCloudDashboardWidgets.ts | 2 +- .../gcpDashboard/gcpDashboardWidgets.ts | 2 +- 168 files changed, 109 insertions(+), 108 deletions(-) rename src/pages/{ => view}/components/dataToolbar/dataToolbar.scss (100%) rename src/pages/{ => view}/components/dataToolbar/dataToolbar.styles.ts (100%) rename src/pages/{ => view}/components/dataToolbar/dataToolbar.tsx (100%) rename src/pages/{ => view}/components/export/exportModal.styles.ts (100%) rename src/pages/{ => view}/components/export/exportModal.tsx (100%) rename src/pages/{ => view}/components/export/exportSubmit.tsx (100%) rename src/pages/{ => view}/components/groupBy/groupBy.styles.ts (100%) rename src/pages/{ => view}/components/groupBy/groupBy.tsx (99%) rename src/pages/{ => view}/components/groupBy/groupByOrg.tsx (100%) rename src/pages/{ => view}/components/groupBy/groupByTag.tsx (100%) rename src/pages/{ => view}/components/perspective/perspective.styles.ts (100%) rename src/pages/{ => view}/components/perspective/perspective.tsx (100%) rename src/pages/{ => view}/dashboard/awsCloudDashboard/awsCloudDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts (100%) rename src/pages/{ => view}/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/awsCloudDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/awsDashboard/awsDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/awsDashboard/awsDashboardWidget.test.tsx (100%) rename src/pages/{ => view}/dashboard/awsDashboard/awsDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/awsDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/azureCloudDashboard/azureCloudDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx (98%) rename src/pages/{ => view}/dashboard/azureCloudDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/azureDashboard/azureDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/azureDashboard/azureDashboardWidget.test.tsx (100%) rename src/pages/{ => view}/dashboard/azureDashboard/azureDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/azureDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap (100%) rename src/pages/{ => view}/dashboard/components/chartComparison.tsx (100%) rename src/pages/{ => view}/dashboard/components/dashboardBase.tsx (100%) rename src/pages/{ => view}/dashboard/components/dashboardWidget.styles.ts (100%) rename src/pages/{ => view}/dashboard/components/dashboardWidget.test.tsx (97%) rename src/pages/{ => view}/dashboard/components/dashboardWidgetBase.tsx (100%) rename src/pages/{ => view}/dashboard/gcpDashboard/gcpDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx (100%) rename src/pages/{ => view}/dashboard/gcpDashboard/gcpDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/gcpDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/ocpCloudDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx (100%) rename src/pages/{ => view}/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/ocpDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/ocpDashboard/ocpDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts (100%) rename src/pages/{ => view}/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx (100%) rename src/pages/{ => view}/dashboard/ocpDashboard/ocpDashboardWidget.tsx (97%) rename src/pages/{ => view}/dashboard/ocpSupplementaryDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx (93%) rename src/pages/{ => view}/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx (98%) rename src/pages/{ => view}/dashboard/ocpUsageDashboard/index.ts (100%) rename src/pages/{ => view}/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx (92%) rename src/pages/{ => view}/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx (97%) rename src/pages/{ => view}/details/awsBreakdown/awsBreakdown.tsx (96%) rename src/pages/{ => view}/details/awsBreakdown/costOverview.tsx (89%) rename src/pages/{ => view}/details/awsBreakdown/historicalData.tsx (88%) rename src/pages/{ => view}/details/awsBreakdown/index.ts (100%) rename src/pages/{ => view}/details/awsDetails/awsDetails.styles.ts (100%) rename src/pages/{ => view}/details/awsDetails/awsDetails.tsx (98%) rename src/pages/{ => view}/details/awsDetails/awsDetailsTable.scss (100%) rename src/pages/{ => view}/details/awsDetails/detailsHeader.styles.ts (100%) rename src/pages/{ => view}/details/awsDetails/detailsHeader.tsx (98%) rename src/pages/{ => view}/details/awsDetails/detailsTable.styles.ts (100%) rename src/pages/{ => view}/details/awsDetails/detailsTable.tsx (99%) rename src/pages/{ => view}/details/awsDetails/detailsToolbar.tsx (98%) rename src/pages/{ => view}/details/awsDetails/index.ts (100%) rename src/pages/{ => view}/details/azureBreakdown/azureBreakdown.tsx (95%) rename src/pages/{ => view}/details/azureBreakdown/costOverview.tsx (89%) rename src/pages/{ => view}/details/azureBreakdown/historicalData.tsx (89%) rename src/pages/{ => view}/details/azureBreakdown/index.ts (100%) rename src/pages/{ => view}/details/azureDetails/azureDetails.styles.ts (100%) rename src/pages/{ => view}/details/azureDetails/azureDetails.tsx (98%) rename src/pages/{ => view}/details/azureDetails/azureDetailsTable.scss (100%) rename src/pages/{ => view}/details/azureDetails/detailsHeader.styles.ts (100%) rename src/pages/{ => view}/details/azureDetails/detailsHeader.tsx (98%) rename src/pages/{ => view}/details/azureDetails/detailsTable.styles.ts (100%) rename src/pages/{ => view}/details/azureDetails/detailsTable.tsx (99%) rename src/pages/{ => view}/details/azureDetails/detailsToolbar.tsx (98%) rename src/pages/{ => view}/details/azureDetails/index.ts (100%) rename src/pages/{ => view}/details/components/actions/actions.tsx (98%) rename src/pages/{ => view}/details/components/breakdown/breakdown.styles.ts (100%) rename src/pages/{ => view}/details/components/breakdown/breakdownBase.tsx (99%) rename src/pages/{ => view}/details/components/breakdown/breakdownHeader.scss (100%) rename src/pages/{ => view}/details/components/breakdown/breakdownHeader.styles.ts (100%) rename src/pages/{ => view}/details/components/breakdown/breakdownHeader.tsx (98%) rename src/pages/{ => view}/details/components/cluster/cluster.styles.ts (100%) rename src/pages/{ => view}/details/components/cluster/cluster.tsx (100%) rename src/pages/{ => view}/details/components/cluster/clusterModal.scss (100%) rename src/pages/{ => view}/details/components/cluster/clusterModal.styles.ts (100%) rename src/pages/{ => view}/details/components/cluster/clusterModal.tsx (100%) rename src/pages/{ => view}/details/components/cluster/clusterView.tsx (100%) rename src/pages/{ => view}/details/components/costChart/costChart.styles.ts (100%) rename src/pages/{ => view}/details/components/costChart/costChart.tsx (100%) rename src/pages/{ => view}/details/components/costOverview/costOverviewBase.tsx (95%) rename src/pages/{ => view}/details/components/historicalData/historicalChart.styles.ts (100%) rename src/pages/{ => view}/details/components/historicalData/historicalDataBase.tsx (100%) rename src/pages/{ => view}/details/components/historicalData/historicalDataCostChart.tsx (100%) rename src/pages/{ => view}/details/components/historicalData/historicalDataTrendChart.tsx (100%) rename src/pages/{ => view}/details/components/historicalData/historicalDataUsageChart.tsx (100%) rename src/pages/{ => view}/details/components/priceList/noRatesState.styles.ts (100%) rename src/pages/{ => view}/details/components/priceList/noRatesState.tsx (100%) rename src/pages/{ => view}/details/components/priceList/priceListTable.tsx (100%) rename src/pages/{ => view}/details/components/summary/summary.styles.ts (100%) rename src/pages/{ => view}/details/components/summary/summaryCard.styles.ts (100%) rename src/pages/{ => view}/details/components/summary/summaryCard.tsx (98%) rename src/pages/{ => view}/details/components/summary/summaryModal.scss (100%) rename src/pages/{ => view}/details/components/summary/summaryModal.styles.ts (100%) rename src/pages/{ => view}/details/components/summary/summaryModal.tsx (100%) rename src/pages/{ => view}/details/components/summary/summaryModalView.tsx (100%) rename src/pages/{ => view}/details/components/summary/summaryView.tsx (100%) rename src/pages/{ => view}/details/components/tag/tag.styles.ts (100%) rename src/pages/{ => view}/details/components/tag/tag.tsx (100%) rename src/pages/{ => view}/details/components/tag/tagLink.tsx (100%) rename src/pages/{ => view}/details/components/tag/tagModal.styles.ts (100%) rename src/pages/{ => view}/details/components/tag/tagModal.tsx (100%) rename src/pages/{ => view}/details/components/tag/tagView.tsx (100%) rename src/pages/{ => view}/details/components/usageChart/usageChart.styles.ts (100%) rename src/pages/{ => view}/details/components/usageChart/usageChart.tsx (100%) rename src/pages/{ => view}/details/gcpBreakdown/costOverview.tsx (89%) rename src/pages/{ => view}/details/gcpBreakdown/gcpBreakdown.tsx (96%) rename src/pages/{ => view}/details/gcpBreakdown/historicalData.tsx (88%) rename src/pages/{ => view}/details/gcpBreakdown/index.ts (100%) rename src/pages/{ => view}/details/gcpDetails/detailsHeader.styles.ts (100%) rename src/pages/{ => view}/details/gcpDetails/detailsHeader.tsx (98%) rename src/pages/{ => view}/details/gcpDetails/detailsTable.styles.ts (100%) rename src/pages/{ => view}/details/gcpDetails/detailsTable.tsx (99%) rename src/pages/{ => view}/details/gcpDetails/detailsToolbar.tsx (98%) rename src/pages/{ => view}/details/gcpDetails/gcpDetails.styles.ts (100%) rename src/pages/{ => view}/details/gcpDetails/gcpDetails.tsx (98%) rename src/pages/{ => view}/details/gcpDetails/gcpDetailsTable.scss (100%) rename src/pages/{ => view}/details/gcpDetails/index.ts (100%) rename src/pages/{ => view}/details/ocpBreakdown/costOverview.tsx (89%) rename src/pages/{ => view}/details/ocpBreakdown/historicalData.tsx (88%) rename src/pages/{ => view}/details/ocpBreakdown/index.ts (100%) rename src/pages/{ => view}/details/ocpBreakdown/ocpBreakdown.tsx (95%) rename src/pages/{ => view}/details/ocpDetails/detailsHeader.styles.ts (100%) rename src/pages/{ => view}/details/ocpDetails/detailsHeader.tsx (99%) rename src/pages/{ => view}/details/ocpDetails/detailsTable.scss (100%) rename src/pages/{ => view}/details/ocpDetails/detailsTable.styles.ts (100%) rename src/pages/{ => view}/details/ocpDetails/detailsTable.tsx (99%) rename src/pages/{ => view}/details/ocpDetails/detailsToolbar.tsx (98%) rename src/pages/{ => view}/details/ocpDetails/index.ts (100%) rename src/pages/{ => view}/details/ocpDetails/ocpDetails.styles.ts (100%) rename src/pages/{ => view}/details/ocpDetails/ocpDetails.tsx (98%) rename src/pages/{ => view}/explorer/dateRange.tsx (100%) rename src/pages/{ => view}/explorer/explorer.styles.ts (100%) rename src/pages/{ => view}/explorer/explorer.tsx (98%) rename src/pages/{ => view}/explorer/explorerChart.styles.ts (100%) rename src/pages/{ => view}/explorer/explorerChart.tsx (100%) rename src/pages/{ => view}/explorer/explorerFilter.styles.ts (100%) rename src/pages/{ => view}/explorer/explorerFilter.tsx (98%) rename src/pages/{ => view}/explorer/explorerHeader.styles.ts (100%) rename src/pages/{ => view}/explorer/explorerHeader.tsx (98%) rename src/pages/{ => view}/explorer/explorerTable.scss (100%) rename src/pages/{ => view}/explorer/explorerTable.styles.ts (100%) rename src/pages/{ => view}/explorer/explorerTable.tsx (99%) rename src/pages/{ => view}/explorer/explorerToolbar.tsx (96%) rename src/pages/{ => view}/explorer/explorerUtils.ts (100%) rename src/pages/{ => view}/explorer/index.ts (100%) rename src/pages/{ => view}/overview/index.ts (100%) rename src/pages/{ => view}/overview/overview.scss (100%) rename src/pages/{ => view}/overview/overview.styles.ts (100%) rename src/pages/{ => view}/overview/overview.tsx (95%) rename src/pages/{ => view}/utils/groupBy.ts (100%) rename src/pages/{ => view}/utils/query.ts (100%) diff --git a/src/pages/costModels/costModel/sourcesToolbar.tsx b/src/pages/costModels/costModel/sourcesToolbar.tsx index 33680e1e2..d4c5e7d09 100644 --- a/src/pages/costModels/costModel/sourcesToolbar.tsx +++ b/src/pages/costModels/costModel/sourcesToolbar.tsx @@ -12,10 +12,9 @@ import { ToolbarItem, } from '@patternfly/react-core'; import { SearchIcon } from '@patternfly/react-icons/dist/js/icons/search-icon'; +import { ReadOnlyTooltip } from 'pages/costModels/components/readOnlyTooltip'; import React from 'react'; -import { ReadOnlyTooltip } from '../components/readOnlyTooltip'; - interface SearchInputProps { id: string; value: string; diff --git a/src/pages/components/dataToolbar/dataToolbar.scss b/src/pages/view/components/dataToolbar/dataToolbar.scss similarity index 100% rename from src/pages/components/dataToolbar/dataToolbar.scss rename to src/pages/view/components/dataToolbar/dataToolbar.scss diff --git a/src/pages/components/dataToolbar/dataToolbar.styles.ts b/src/pages/view/components/dataToolbar/dataToolbar.styles.ts similarity index 100% rename from src/pages/components/dataToolbar/dataToolbar.styles.ts rename to src/pages/view/components/dataToolbar/dataToolbar.styles.ts diff --git a/src/pages/components/dataToolbar/dataToolbar.tsx b/src/pages/view/components/dataToolbar/dataToolbar.tsx similarity index 100% rename from src/pages/components/dataToolbar/dataToolbar.tsx rename to src/pages/view/components/dataToolbar/dataToolbar.tsx diff --git a/src/pages/components/export/exportModal.styles.ts b/src/pages/view/components/export/exportModal.styles.ts similarity index 100% rename from src/pages/components/export/exportModal.styles.ts rename to src/pages/view/components/export/exportModal.styles.ts diff --git a/src/pages/components/export/exportModal.tsx b/src/pages/view/components/export/exportModal.tsx similarity index 100% rename from src/pages/components/export/exportModal.tsx rename to src/pages/view/components/export/exportModal.tsx diff --git a/src/pages/components/export/exportSubmit.tsx b/src/pages/view/components/export/exportSubmit.tsx similarity index 100% rename from src/pages/components/export/exportSubmit.tsx rename to src/pages/view/components/export/exportSubmit.tsx diff --git a/src/pages/components/groupBy/groupBy.styles.ts b/src/pages/view/components/groupBy/groupBy.styles.ts similarity index 100% rename from src/pages/components/groupBy/groupBy.styles.ts rename to src/pages/view/components/groupBy/groupBy.styles.ts diff --git a/src/pages/components/groupBy/groupBy.tsx b/src/pages/view/components/groupBy/groupBy.tsx similarity index 99% rename from src/pages/components/groupBy/groupBy.tsx rename to src/pages/view/components/groupBy/groupBy.tsx index e7f6b3121..6e95aea8b 100644 --- a/src/pages/components/groupBy/groupBy.tsx +++ b/src/pages/view/components/groupBy/groupBy.tsx @@ -2,7 +2,7 @@ import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey, tagPrefix } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { PerspectiveType } from 'pages/explorer/explorerUtils'; +import { PerspectiveType } from 'pages/view/explorer/explorerUtils'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/components/groupBy/groupByOrg.tsx b/src/pages/view/components/groupBy/groupByOrg.tsx similarity index 100% rename from src/pages/components/groupBy/groupByOrg.tsx rename to src/pages/view/components/groupBy/groupByOrg.tsx diff --git a/src/pages/components/groupBy/groupByTag.tsx b/src/pages/view/components/groupBy/groupByTag.tsx similarity index 100% rename from src/pages/components/groupBy/groupByTag.tsx rename to src/pages/view/components/groupBy/groupByTag.tsx diff --git a/src/pages/components/perspective/perspective.styles.ts b/src/pages/view/components/perspective/perspective.styles.ts similarity index 100% rename from src/pages/components/perspective/perspective.styles.ts rename to src/pages/view/components/perspective/perspective.styles.ts diff --git a/src/pages/components/perspective/perspective.tsx b/src/pages/view/components/perspective/perspective.tsx similarity index 100% rename from src/pages/components/perspective/perspective.tsx rename to src/pages/view/components/perspective/perspective.tsx diff --git a/src/pages/dashboard/awsCloudDashboard/awsCloudDashboard.tsx b/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx similarity index 92% rename from src/pages/dashboard/awsCloudDashboard/awsCloudDashboard.tsx rename to src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx index e14ef8745..576d0996b 100644 --- a/src/pages/dashboard/awsCloudDashboard/awsCloudDashboard.tsx +++ b/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts b/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts similarity index 100% rename from src/pages/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts rename to src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts diff --git a/src/pages/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx b/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx rename to src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx index 6060f5cc4..33b0cddb3 100644 --- a/src/pages/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx +++ b/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/awsCloudDashboard/index.ts b/src/pages/view/dashboard/awsCloudDashboard/index.ts similarity index 100% rename from src/pages/dashboard/awsCloudDashboard/index.ts rename to src/pages/view/dashboard/awsCloudDashboard/index.ts diff --git a/src/pages/dashboard/awsDashboard/awsDashboard.tsx b/src/pages/view/dashboard/awsDashboard/awsDashboard.tsx similarity index 92% rename from src/pages/dashboard/awsDashboard/awsDashboard.tsx rename to src/pages/view/dashboard/awsDashboard/awsDashboard.tsx index 390bc18fc..6f2d24c5a 100644 --- a/src/pages/dashboard/awsDashboard/awsDashboard.tsx +++ b/src/pages/view/dashboard/awsDashboard/awsDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/awsDashboard/awsDashboardWidget.test.tsx b/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.test.tsx similarity index 100% rename from src/pages/dashboard/awsDashboard/awsDashboardWidget.test.tsx rename to src/pages/view/dashboard/awsDashboard/awsDashboardWidget.test.tsx diff --git a/src/pages/dashboard/awsDashboard/awsDashboardWidget.tsx b/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/awsDashboard/awsDashboardWidget.tsx rename to src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx index 1303ac5d5..8c45cf6ee 100644 --- a/src/pages/dashboard/awsDashboard/awsDashboardWidget.tsx +++ b/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/awsDashboard/index.ts b/src/pages/view/dashboard/awsDashboard/index.ts similarity index 100% rename from src/pages/dashboard/awsDashboard/index.ts rename to src/pages/view/dashboard/awsDashboard/index.ts diff --git a/src/pages/dashboard/azureCloudDashboard/azureCloudDashboard.tsx b/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx similarity index 92% rename from src/pages/dashboard/azureCloudDashboard/azureCloudDashboard.tsx rename to src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx index 2586e94bd..a78a80cfb 100644 --- a/src/pages/dashboard/azureCloudDashboard/azureCloudDashboard.tsx +++ b/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx b/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx similarity index 98% rename from src/pages/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx rename to src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx index cb7f43314..f287d6cdc 100644 --- a/src/pages/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx +++ b/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/azureCloudDashboard/index.ts b/src/pages/view/dashboard/azureCloudDashboard/index.ts similarity index 100% rename from src/pages/dashboard/azureCloudDashboard/index.ts rename to src/pages/view/dashboard/azureCloudDashboard/index.ts diff --git a/src/pages/dashboard/azureDashboard/azureDashboard.tsx b/src/pages/view/dashboard/azureDashboard/azureDashboard.tsx similarity index 92% rename from src/pages/dashboard/azureDashboard/azureDashboard.tsx rename to src/pages/view/dashboard/azureDashboard/azureDashboard.tsx index 842055624..38f2c6f6b 100644 --- a/src/pages/dashboard/azureDashboard/azureDashboard.tsx +++ b/src/pages/view/dashboard/azureDashboard/azureDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/azureDashboard/azureDashboardWidget.test.tsx b/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.test.tsx similarity index 100% rename from src/pages/dashboard/azureDashboard/azureDashboardWidget.test.tsx rename to src/pages/view/dashboard/azureDashboard/azureDashboardWidget.test.tsx diff --git a/src/pages/dashboard/azureDashboard/azureDashboardWidget.tsx b/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/azureDashboard/azureDashboardWidget.tsx rename to src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx index 293c9c59a..9bff20ea2 100644 --- a/src/pages/dashboard/azureDashboard/azureDashboardWidget.tsx +++ b/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/azureDashboard/index.ts b/src/pages/view/dashboard/azureDashboard/index.ts similarity index 100% rename from src/pages/dashboard/azureDashboard/index.ts rename to src/pages/view/dashboard/azureDashboard/index.ts diff --git a/src/pages/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap b/src/pages/view/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap similarity index 100% rename from src/pages/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap rename to src/pages/view/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap diff --git a/src/pages/dashboard/components/chartComparison.tsx b/src/pages/view/dashboard/components/chartComparison.tsx similarity index 100% rename from src/pages/dashboard/components/chartComparison.tsx rename to src/pages/view/dashboard/components/chartComparison.tsx diff --git a/src/pages/dashboard/components/dashboardBase.tsx b/src/pages/view/dashboard/components/dashboardBase.tsx similarity index 100% rename from src/pages/dashboard/components/dashboardBase.tsx rename to src/pages/view/dashboard/components/dashboardBase.tsx diff --git a/src/pages/dashboard/components/dashboardWidget.styles.ts b/src/pages/view/dashboard/components/dashboardWidget.styles.ts similarity index 100% rename from src/pages/dashboard/components/dashboardWidget.styles.ts rename to src/pages/view/dashboard/components/dashboardWidget.styles.ts diff --git a/src/pages/dashboard/components/dashboardWidget.test.tsx b/src/pages/view/dashboard/components/dashboardWidget.test.tsx similarity index 97% rename from src/pages/dashboard/components/dashboardWidget.test.tsx rename to src/pages/view/dashboard/components/dashboardWidget.test.tsx index 8443d0ad4..961e1165b 100644 --- a/src/pages/dashboard/components/dashboardWidget.test.tsx +++ b/src/pages/view/dashboard/components/dashboardWidget.test.tsx @@ -3,7 +3,7 @@ jest.mock('date-fns').mock('date-fns/format'); import { ChartType } from 'components/charts/common/chartDatumUtils'; import { format, getDate, getMonth, startOfMonth } from 'date-fns'; import { shallow } from 'enzyme'; -import { DashboardWidgetBase, DashboardWidgetProps } from 'pages/dashboard/components/dashboardWidgetBase'; +import { DashboardWidgetBase, DashboardWidgetProps } from 'pages/view/dashboard/components/dashboardWidgetBase'; import React from 'react'; import { FetchStatus } from 'store/common'; import { mockDate } from 'testUtils'; diff --git a/src/pages/dashboard/components/dashboardWidgetBase.tsx b/src/pages/view/dashboard/components/dashboardWidgetBase.tsx similarity index 100% rename from src/pages/dashboard/components/dashboardWidgetBase.tsx rename to src/pages/view/dashboard/components/dashboardWidgetBase.tsx diff --git a/src/pages/dashboard/gcpDashboard/gcpDashboard.tsx b/src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx similarity index 92% rename from src/pages/dashboard/gcpDashboard/gcpDashboard.tsx rename to src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx index 7cf4111d8..8e2b8d2bd 100644 --- a/src/pages/dashboard/gcpDashboard/gcpDashboard.tsx +++ b/src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx b/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx similarity index 100% rename from src/pages/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx rename to src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx diff --git a/src/pages/dashboard/gcpDashboard/gcpDashboardWidget.tsx b/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/gcpDashboard/gcpDashboardWidget.tsx rename to src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx index c6d83d39f..6dcdcc116 100644 --- a/src/pages/dashboard/gcpDashboard/gcpDashboardWidget.tsx +++ b/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/gcpDashboard/index.ts b/src/pages/view/dashboard/gcpDashboard/index.ts similarity index 100% rename from src/pages/dashboard/gcpDashboard/index.ts rename to src/pages/view/dashboard/gcpDashboard/index.ts diff --git a/src/pages/dashboard/ocpCloudDashboard/index.ts b/src/pages/view/dashboard/ocpCloudDashboard/index.ts similarity index 100% rename from src/pages/dashboard/ocpCloudDashboard/index.ts rename to src/pages/view/dashboard/ocpCloudDashboard/index.ts diff --git a/src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx b/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx similarity index 92% rename from src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx rename to src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx index db36a1864..bcef6895c 100644 --- a/src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx +++ b/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx b/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx similarity index 100% rename from src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx rename to src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx diff --git a/src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx b/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx rename to src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx index 6ef8918e1..faf499948 100644 --- a/src/pages/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx +++ b/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpDashboard/index.ts b/src/pages/view/dashboard/ocpDashboard/index.ts similarity index 100% rename from src/pages/dashboard/ocpDashboard/index.ts rename to src/pages/view/dashboard/ocpDashboard/index.ts diff --git a/src/pages/dashboard/ocpDashboard/ocpDashboard.tsx b/src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx similarity index 92% rename from src/pages/dashboard/ocpDashboard/ocpDashboard.tsx rename to src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx index 442f13b16..3d1478a38 100644 --- a/src/pages/dashboard/ocpDashboard/ocpDashboard.tsx +++ b/src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts b/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts similarity index 100% rename from src/pages/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts rename to src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts diff --git a/src/pages/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx b/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx similarity index 100% rename from src/pages/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx rename to src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx diff --git a/src/pages/dashboard/ocpDashboard/ocpDashboardWidget.tsx b/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/ocpDashboard/ocpDashboardWidget.tsx rename to src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx index daa548d50..cf3aae864 100644 --- a/src/pages/dashboard/ocpDashboard/ocpDashboardWidget.tsx +++ b/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpSupplementaryDashboard/index.ts b/src/pages/view/dashboard/ocpSupplementaryDashboard/index.ts similarity index 100% rename from src/pages/dashboard/ocpSupplementaryDashboard/index.ts rename to src/pages/view/dashboard/ocpSupplementaryDashboard/index.ts diff --git a/src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx b/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx similarity index 93% rename from src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx rename to src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx index 5e5fd29dd..a1e70cf6e 100644 --- a/src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx +++ b/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx b/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx similarity index 98% rename from src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx rename to src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx index d49ed8274..019d71e21 100644 --- a/src/pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx +++ b/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpUsageDashboard/index.ts b/src/pages/view/dashboard/ocpUsageDashboard/index.ts similarity index 100% rename from src/pages/dashboard/ocpUsageDashboard/index.ts rename to src/pages/view/dashboard/ocpUsageDashboard/index.ts diff --git a/src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx b/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx similarity index 92% rename from src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx rename to src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx index 345a2b533..b0bb6e39c 100644 --- a/src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx +++ b/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx b/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx similarity index 97% rename from src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx rename to src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx index 6bf8f695b..74d6d3c2d 100644 --- a/src/pages/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx +++ b/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/dashboard/components/dashboardWidgetBase'; +} from 'pages/view/dashboard/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/details/awsBreakdown/awsBreakdown.tsx b/src/pages/view/details/awsBreakdown/awsBreakdown.tsx similarity index 96% rename from src/pages/details/awsBreakdown/awsBreakdown.tsx rename to src/pages/view/details/awsBreakdown/awsBreakdown.tsx index 796d3d0b8..08f879372 100644 --- a/src/pages/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/view/details/awsBreakdown/awsBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, breakdownTitleKey, orgUnitIdKey, Query } from 'api/qu import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; +import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsBreakdown/costOverview.tsx b/src/pages/view/details/awsBreakdown/costOverview.tsx similarity index 89% rename from src/pages/details/awsBreakdown/costOverview.tsx rename to src/pages/view/details/awsBreakdown/costOverview.tsx index e09b2009b..3e6d40ce1 100644 --- a/src/pages/details/awsBreakdown/costOverview.tsx +++ b/src/pages/view/details/awsBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { awsCostOverviewSelectors } from 'store/breakdown/costOverview/awsCostOverview'; diff --git a/src/pages/details/awsBreakdown/historicalData.tsx b/src/pages/view/details/awsBreakdown/historicalData.tsx similarity index 88% rename from src/pages/details/awsBreakdown/historicalData.tsx rename to src/pages/view/details/awsBreakdown/historicalData.tsx index 2ac8f342d..56850950c 100644 --- a/src/pages/details/awsBreakdown/historicalData.tsx +++ b/src/pages/view/details/awsBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { awsHistoricalDataSelectors } from 'store/breakdown/historicalData/awsHistoricalData'; diff --git a/src/pages/details/awsBreakdown/index.ts b/src/pages/view/details/awsBreakdown/index.ts similarity index 100% rename from src/pages/details/awsBreakdown/index.ts rename to src/pages/view/details/awsBreakdown/index.ts diff --git a/src/pages/details/awsDetails/awsDetails.styles.ts b/src/pages/view/details/awsDetails/awsDetails.styles.ts similarity index 100% rename from src/pages/details/awsDetails/awsDetails.styles.ts rename to src/pages/view/details/awsDetails/awsDetails.styles.ts diff --git a/src/pages/details/awsDetails/awsDetails.tsx b/src/pages/view/details/awsDetails/awsDetails.tsx similarity index 98% rename from src/pages/details/awsDetails/awsDetails.tsx rename to src/pages/view/details/awsDetails/awsDetails.tsx index 22453f063..42dfbace7 100644 --- a/src/pages/details/awsDetails/awsDetails.tsx +++ b/src/pages/view/details/awsDetails/awsDetails.tsx @@ -6,13 +6,13 @@ import { orgUnitIdKey, tagPrefix } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { getGroupByTagKey } from 'pages/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; +import { ExportModal } from 'pages/view/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsDetails/awsDetailsTable.scss b/src/pages/view/details/awsDetails/awsDetailsTable.scss similarity index 100% rename from src/pages/details/awsDetails/awsDetailsTable.scss rename to src/pages/view/details/awsDetails/awsDetailsTable.scss diff --git a/src/pages/details/awsDetails/detailsHeader.styles.ts b/src/pages/view/details/awsDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/details/awsDetails/detailsHeader.styles.ts rename to src/pages/view/details/awsDetails/detailsHeader.styles.ts diff --git a/src/pages/details/awsDetails/detailsHeader.tsx b/src/pages/view/details/awsDetails/detailsHeader.tsx similarity index 98% rename from src/pages/details/awsDetails/detailsHeader.tsx rename to src/pages/view/details/awsDetails/detailsHeader.tsx index db48057a9..8b67bf95f 100644 --- a/src/pages/details/awsDetails/detailsHeader.tsx +++ b/src/pages/view/details/awsDetails/detailsHeader.tsx @@ -6,7 +6,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AwsReport } from 'api/reports/awsReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/components/groupBy/groupBy'; +import { GroupBy } from 'pages/view/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsDetails/detailsTable.styles.ts b/src/pages/view/details/awsDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/details/awsDetails/detailsTable.styles.ts rename to src/pages/view/details/awsDetails/detailsTable.styles.ts diff --git a/src/pages/details/awsDetails/detailsTable.tsx b/src/pages/view/details/awsDetails/detailsTable.tsx similarity index 99% rename from src/pages/details/awsDetails/detailsTable.tsx rename to src/pages/view/details/awsDetails/detailsTable.tsx index fda4faafe..5570befcf 100644 --- a/src/pages/details/awsDetails/detailsTable.tsx +++ b/src/pages/view/details/awsDetails/detailsTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/details/components/actions/actions'; +import { Actions } from 'pages/view/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/details/awsDetails/detailsToolbar.tsx b/src/pages/view/details/awsDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/details/awsDetails/detailsToolbar.tsx rename to src/pages/view/details/awsDetails/detailsToolbar.tsx index 1b72a6c0d..6b622727b 100644 --- a/src/pages/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/view/details/awsDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { orgUnitIdKey, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/awsDetails/index.ts b/src/pages/view/details/awsDetails/index.ts similarity index 100% rename from src/pages/details/awsDetails/index.ts rename to src/pages/view/details/awsDetails/index.ts diff --git a/src/pages/details/azureBreakdown/azureBreakdown.tsx b/src/pages/view/details/azureBreakdown/azureBreakdown.tsx similarity index 95% rename from src/pages/details/azureBreakdown/azureBreakdown.tsx rename to src/pages/view/details/azureBreakdown/azureBreakdown.tsx index 7893dcab5..ae8daef00 100644 --- a/src/pages/details/azureBreakdown/azureBreakdown.tsx +++ b/src/pages/view/details/azureBreakdown/azureBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; +import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureBreakdown/costOverview.tsx b/src/pages/view/details/azureBreakdown/costOverview.tsx similarity index 89% rename from src/pages/details/azureBreakdown/costOverview.tsx rename to src/pages/view/details/azureBreakdown/costOverview.tsx index dff563d50..fb763a2db 100644 --- a/src/pages/details/azureBreakdown/costOverview.tsx +++ b/src/pages/view/details/azureBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { azureCostOverviewSelectors } from 'store/breakdown/costOverview/azureCostOverview'; diff --git a/src/pages/details/azureBreakdown/historicalData.tsx b/src/pages/view/details/azureBreakdown/historicalData.tsx similarity index 89% rename from src/pages/details/azureBreakdown/historicalData.tsx rename to src/pages/view/details/azureBreakdown/historicalData.tsx index 5e1f5cb92..37999f379 100644 --- a/src/pages/details/azureBreakdown/historicalData.tsx +++ b/src/pages/view/details/azureBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { azureHistoricalDataSelectors } from 'store/breakdown/historicalData/azureHistoricalData'; diff --git a/src/pages/details/azureBreakdown/index.ts b/src/pages/view/details/azureBreakdown/index.ts similarity index 100% rename from src/pages/details/azureBreakdown/index.ts rename to src/pages/view/details/azureBreakdown/index.ts diff --git a/src/pages/details/azureDetails/azureDetails.styles.ts b/src/pages/view/details/azureDetails/azureDetails.styles.ts similarity index 100% rename from src/pages/details/azureDetails/azureDetails.styles.ts rename to src/pages/view/details/azureDetails/azureDetails.styles.ts diff --git a/src/pages/details/azureDetails/azureDetails.tsx b/src/pages/view/details/azureDetails/azureDetails.tsx similarity index 98% rename from src/pages/details/azureDetails/azureDetails.tsx rename to src/pages/view/details/azureDetails/azureDetails.tsx index 8cb0effe6..cea85472b 100644 --- a/src/pages/details/azureDetails/azureDetails.tsx +++ b/src/pages/view/details/azureDetails/azureDetails.tsx @@ -6,12 +6,13 @@ import { tagPrefix } from 'api/queries/query'; import { AzureReport } from 'api/reports/azureReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { getGroupByTagKey } from 'pages/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; +import { ExportModal } from 'pages/view/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -22,7 +23,6 @@ import { reportActions, reportSelectors } from 'store/reports'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedAzureReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; -import NoData from '../../state/noData'; import { styles } from './azureDetails.styles'; import { DetailsHeader } from './detailsHeader'; import { DetailsTable } from './detailsTable'; diff --git a/src/pages/details/azureDetails/azureDetailsTable.scss b/src/pages/view/details/azureDetails/azureDetailsTable.scss similarity index 100% rename from src/pages/details/azureDetails/azureDetailsTable.scss rename to src/pages/view/details/azureDetails/azureDetailsTable.scss diff --git a/src/pages/details/azureDetails/detailsHeader.styles.ts b/src/pages/view/details/azureDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/details/azureDetails/detailsHeader.styles.ts rename to src/pages/view/details/azureDetails/detailsHeader.styles.ts diff --git a/src/pages/details/azureDetails/detailsHeader.tsx b/src/pages/view/details/azureDetails/detailsHeader.tsx similarity index 98% rename from src/pages/details/azureDetails/detailsHeader.tsx rename to src/pages/view/details/azureDetails/detailsHeader.tsx index d9cdfcbbe..61d99603f 100644 --- a/src/pages/details/azureDetails/detailsHeader.tsx +++ b/src/pages/view/details/azureDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AzureReport } from 'api/reports/azureReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/components/groupBy/groupBy'; +import { GroupBy } from 'pages/view/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureDetails/detailsTable.styles.ts b/src/pages/view/details/azureDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/details/azureDetails/detailsTable.styles.ts rename to src/pages/view/details/azureDetails/detailsTable.styles.ts diff --git a/src/pages/details/azureDetails/detailsTable.tsx b/src/pages/view/details/azureDetails/detailsTable.tsx similarity index 99% rename from src/pages/details/azureDetails/detailsTable.tsx rename to src/pages/view/details/azureDetails/detailsTable.tsx index a67977a4b..fb8ba9484 100644 --- a/src/pages/details/azureDetails/detailsTable.tsx +++ b/src/pages/view/details/azureDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { AzureReport } from 'api/reports/azureReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/details/components/actions/actions'; +import { Actions } from 'pages/view/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/details/azureDetails/detailsToolbar.tsx b/src/pages/view/details/azureDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/details/azureDetails/detailsToolbar.tsx rename to src/pages/view/details/azureDetails/detailsToolbar.tsx index 56d081711..94db65f76 100644 --- a/src/pages/details/azureDetails/detailsToolbar.tsx +++ b/src/pages/view/details/azureDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { AzureQuery, getQuery } from 'api/queries/azureQuery'; import { tagKey } from 'api/queries/query'; import { AzureTag } from 'api/tags/azureTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/azureDetails/index.ts b/src/pages/view/details/azureDetails/index.ts similarity index 100% rename from src/pages/details/azureDetails/index.ts rename to src/pages/view/details/azureDetails/index.ts diff --git a/src/pages/details/components/actions/actions.tsx b/src/pages/view/details/components/actions/actions.tsx similarity index 98% rename from src/pages/details/components/actions/actions.tsx rename to src/pages/view/details/components/actions/actions.tsx index edfce60df..d5ab4985a 100644 --- a/src/pages/details/components/actions/actions.tsx +++ b/src/pages/view/details/components/actions/actions.tsx @@ -3,7 +3,7 @@ import { ProviderType } from 'api/providers'; import { Query } from 'api/queries/query'; import { tagPrefix } from 'api/queries/query'; import { ReportPathsType } from 'api/reports/report'; -import { ExportModal } from 'pages/components/export/exportModal'; +import { ExportModal } from 'pages/view/components/export/exportModal'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/components/breakdown/breakdown.styles.ts b/src/pages/view/details/components/breakdown/breakdown.styles.ts similarity index 100% rename from src/pages/details/components/breakdown/breakdown.styles.ts rename to src/pages/view/details/components/breakdown/breakdown.styles.ts diff --git a/src/pages/details/components/breakdown/breakdownBase.tsx b/src/pages/view/details/components/breakdown/breakdownBase.tsx similarity index 99% rename from src/pages/details/components/breakdown/breakdownBase.tsx rename to src/pages/view/details/components/breakdown/breakdownBase.tsx index d9d87a41a..7fd211cb0 100644 --- a/src/pages/details/components/breakdown/breakdownBase.tsx +++ b/src/pages/view/details/components/breakdown/breakdownBase.tsx @@ -5,6 +5,7 @@ import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import React from 'react'; @@ -13,7 +14,6 @@ import { RouteComponentProps } from 'react-router-dom'; import { FetchStatus } from 'store/common'; import { reportActions } from 'store/reports'; -import NoData from '../../../state/noData'; import { styles } from './breakdown.styles'; import { BreakdownHeader } from './breakdownHeader'; diff --git a/src/pages/details/components/breakdown/breakdownHeader.scss b/src/pages/view/details/components/breakdown/breakdownHeader.scss similarity index 100% rename from src/pages/details/components/breakdown/breakdownHeader.scss rename to src/pages/view/details/components/breakdown/breakdownHeader.scss diff --git a/src/pages/details/components/breakdown/breakdownHeader.styles.ts b/src/pages/view/details/components/breakdown/breakdownHeader.styles.ts similarity index 100% rename from src/pages/details/components/breakdown/breakdownHeader.styles.ts rename to src/pages/view/details/components/breakdown/breakdownHeader.styles.ts diff --git a/src/pages/details/components/breakdown/breakdownHeader.tsx b/src/pages/view/details/components/breakdown/breakdownHeader.tsx similarity index 98% rename from src/pages/details/components/breakdown/breakdownHeader.tsx rename to src/pages/view/details/components/breakdown/breakdownHeader.tsx index 21e4f5529..5c1fe7b11 100644 --- a/src/pages/details/components/breakdown/breakdownHeader.tsx +++ b/src/pages/view/details/components/breakdown/breakdownHeader.tsx @@ -5,7 +5,7 @@ import { AngleLeftIcon } from '@patternfly/react-icons/dist/js/icons/angle-left- import { breakdownDescKey, breakdownTitleKey, getQueryRoute, orgUnitIdKey, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; -import { TagLink } from 'pages/details/components/tag/tagLink'; +import { TagLink } from 'pages/view/details/components/tag/tagLink'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/details/components/cluster/cluster.styles.ts b/src/pages/view/details/components/cluster/cluster.styles.ts similarity index 100% rename from src/pages/details/components/cluster/cluster.styles.ts rename to src/pages/view/details/components/cluster/cluster.styles.ts diff --git a/src/pages/details/components/cluster/cluster.tsx b/src/pages/view/details/components/cluster/cluster.tsx similarity index 100% rename from src/pages/details/components/cluster/cluster.tsx rename to src/pages/view/details/components/cluster/cluster.tsx diff --git a/src/pages/details/components/cluster/clusterModal.scss b/src/pages/view/details/components/cluster/clusterModal.scss similarity index 100% rename from src/pages/details/components/cluster/clusterModal.scss rename to src/pages/view/details/components/cluster/clusterModal.scss diff --git a/src/pages/details/components/cluster/clusterModal.styles.ts b/src/pages/view/details/components/cluster/clusterModal.styles.ts similarity index 100% rename from src/pages/details/components/cluster/clusterModal.styles.ts rename to src/pages/view/details/components/cluster/clusterModal.styles.ts diff --git a/src/pages/details/components/cluster/clusterModal.tsx b/src/pages/view/details/components/cluster/clusterModal.tsx similarity index 100% rename from src/pages/details/components/cluster/clusterModal.tsx rename to src/pages/view/details/components/cluster/clusterModal.tsx diff --git a/src/pages/details/components/cluster/clusterView.tsx b/src/pages/view/details/components/cluster/clusterView.tsx similarity index 100% rename from src/pages/details/components/cluster/clusterView.tsx rename to src/pages/view/details/components/cluster/clusterView.tsx diff --git a/src/pages/details/components/costChart/costChart.styles.ts b/src/pages/view/details/components/costChart/costChart.styles.ts similarity index 100% rename from src/pages/details/components/costChart/costChart.styles.ts rename to src/pages/view/details/components/costChart/costChart.styles.ts diff --git a/src/pages/details/components/costChart/costChart.tsx b/src/pages/view/details/components/costChart/costChart.tsx similarity index 100% rename from src/pages/details/components/costChart/costChart.tsx rename to src/pages/view/details/components/costChart/costChart.tsx diff --git a/src/pages/details/components/costOverview/costOverviewBase.tsx b/src/pages/view/details/components/costOverview/costOverviewBase.tsx similarity index 95% rename from src/pages/details/components/costOverview/costOverviewBase.tsx rename to src/pages/view/details/components/costOverview/costOverviewBase.tsx index a02aeaa71..2b33421cb 100644 --- a/src/pages/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/view/details/components/costOverview/costOverviewBase.tsx @@ -12,11 +12,11 @@ import { import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons'; import { orgUnitIdKey, Query, tagPrefix } from 'api/queries/query'; import { Report } from 'api/reports/report'; -import { Cluster } from 'pages/details/components/cluster/cluster'; -import { CostChart } from 'pages/details/components/costChart/costChart'; -import { SummaryCard } from 'pages/details/components/summary/summaryCard'; -import { UsageChart } from 'pages/details/components/usageChart/usageChart'; -import { styles } from 'pages/details/ocpDetails/detailsHeader.styles'; +import { Cluster } from 'pages/view/details/components/cluster/cluster'; +import { CostChart } from 'pages/view/details/components/costChart/costChart'; +import { SummaryCard } from 'pages/view/details/components/summary/summaryCard'; +import { UsageChart } from 'pages/view/details/components/usageChart/usageChart'; +import { styles } from 'pages/view/details/ocpDetails/detailsHeader.styles'; import React from 'react'; import { WithTranslation } from 'react-i18next'; import { CostOverviewWidget, CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; diff --git a/src/pages/details/components/historicalData/historicalChart.styles.ts b/src/pages/view/details/components/historicalData/historicalChart.styles.ts similarity index 100% rename from src/pages/details/components/historicalData/historicalChart.styles.ts rename to src/pages/view/details/components/historicalData/historicalChart.styles.ts diff --git a/src/pages/details/components/historicalData/historicalDataBase.tsx b/src/pages/view/details/components/historicalData/historicalDataBase.tsx similarity index 100% rename from src/pages/details/components/historicalData/historicalDataBase.tsx rename to src/pages/view/details/components/historicalData/historicalDataBase.tsx diff --git a/src/pages/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/view/details/components/historicalData/historicalDataCostChart.tsx similarity index 100% rename from src/pages/details/components/historicalData/historicalDataCostChart.tsx rename to src/pages/view/details/components/historicalData/historicalDataCostChart.tsx diff --git a/src/pages/details/components/historicalData/historicalDataTrendChart.tsx b/src/pages/view/details/components/historicalData/historicalDataTrendChart.tsx similarity index 100% rename from src/pages/details/components/historicalData/historicalDataTrendChart.tsx rename to src/pages/view/details/components/historicalData/historicalDataTrendChart.tsx diff --git a/src/pages/details/components/historicalData/historicalDataUsageChart.tsx b/src/pages/view/details/components/historicalData/historicalDataUsageChart.tsx similarity index 100% rename from src/pages/details/components/historicalData/historicalDataUsageChart.tsx rename to src/pages/view/details/components/historicalData/historicalDataUsageChart.tsx diff --git a/src/pages/details/components/priceList/noRatesState.styles.ts b/src/pages/view/details/components/priceList/noRatesState.styles.ts similarity index 100% rename from src/pages/details/components/priceList/noRatesState.styles.ts rename to src/pages/view/details/components/priceList/noRatesState.styles.ts diff --git a/src/pages/details/components/priceList/noRatesState.tsx b/src/pages/view/details/components/priceList/noRatesState.tsx similarity index 100% rename from src/pages/details/components/priceList/noRatesState.tsx rename to src/pages/view/details/components/priceList/noRatesState.tsx diff --git a/src/pages/details/components/priceList/priceListTable.tsx b/src/pages/view/details/components/priceList/priceListTable.tsx similarity index 100% rename from src/pages/details/components/priceList/priceListTable.tsx rename to src/pages/view/details/components/priceList/priceListTable.tsx diff --git a/src/pages/details/components/summary/summary.styles.ts b/src/pages/view/details/components/summary/summary.styles.ts similarity index 100% rename from src/pages/details/components/summary/summary.styles.ts rename to src/pages/view/details/components/summary/summary.styles.ts diff --git a/src/pages/details/components/summary/summaryCard.styles.ts b/src/pages/view/details/components/summary/summaryCard.styles.ts similarity index 100% rename from src/pages/details/components/summary/summaryCard.styles.ts rename to src/pages/view/details/components/summary/summaryCard.styles.ts diff --git a/src/pages/details/components/summary/summaryCard.tsx b/src/pages/view/details/components/summary/summaryCard.tsx similarity index 98% rename from src/pages/details/components/summary/summaryCard.tsx rename to src/pages/view/details/components/summary/summaryCard.tsx index 1ab8a8c28..8f8e4dc97 100644 --- a/src/pages/details/components/summary/summaryCard.tsx +++ b/src/pages/view/details/components/summary/summaryCard.tsx @@ -13,7 +13,7 @@ import { getQuery, orgUnitIdKey, Query } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { ReportSummaryItem, ReportSummaryItems } from 'components/reports/reportSummary'; -import { SummaryModal } from 'pages/details/components/summary/summaryModal'; +import { SummaryModal } from 'pages/view/details/components/summary/summaryModal'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/components/summary/summaryModal.scss b/src/pages/view/details/components/summary/summaryModal.scss similarity index 100% rename from src/pages/details/components/summary/summaryModal.scss rename to src/pages/view/details/components/summary/summaryModal.scss diff --git a/src/pages/details/components/summary/summaryModal.styles.ts b/src/pages/view/details/components/summary/summaryModal.styles.ts similarity index 100% rename from src/pages/details/components/summary/summaryModal.styles.ts rename to src/pages/view/details/components/summary/summaryModal.styles.ts diff --git a/src/pages/details/components/summary/summaryModal.tsx b/src/pages/view/details/components/summary/summaryModal.tsx similarity index 100% rename from src/pages/details/components/summary/summaryModal.tsx rename to src/pages/view/details/components/summary/summaryModal.tsx diff --git a/src/pages/details/components/summary/summaryModalView.tsx b/src/pages/view/details/components/summary/summaryModalView.tsx similarity index 100% rename from src/pages/details/components/summary/summaryModalView.tsx rename to src/pages/view/details/components/summary/summaryModalView.tsx diff --git a/src/pages/details/components/summary/summaryView.tsx b/src/pages/view/details/components/summary/summaryView.tsx similarity index 100% rename from src/pages/details/components/summary/summaryView.tsx rename to src/pages/view/details/components/summary/summaryView.tsx diff --git a/src/pages/details/components/tag/tag.styles.ts b/src/pages/view/details/components/tag/tag.styles.ts similarity index 100% rename from src/pages/details/components/tag/tag.styles.ts rename to src/pages/view/details/components/tag/tag.styles.ts diff --git a/src/pages/details/components/tag/tag.tsx b/src/pages/view/details/components/tag/tag.tsx similarity index 100% rename from src/pages/details/components/tag/tag.tsx rename to src/pages/view/details/components/tag/tag.tsx diff --git a/src/pages/details/components/tag/tagLink.tsx b/src/pages/view/details/components/tag/tagLink.tsx similarity index 100% rename from src/pages/details/components/tag/tagLink.tsx rename to src/pages/view/details/components/tag/tagLink.tsx diff --git a/src/pages/details/components/tag/tagModal.styles.ts b/src/pages/view/details/components/tag/tagModal.styles.ts similarity index 100% rename from src/pages/details/components/tag/tagModal.styles.ts rename to src/pages/view/details/components/tag/tagModal.styles.ts diff --git a/src/pages/details/components/tag/tagModal.tsx b/src/pages/view/details/components/tag/tagModal.tsx similarity index 100% rename from src/pages/details/components/tag/tagModal.tsx rename to src/pages/view/details/components/tag/tagModal.tsx diff --git a/src/pages/details/components/tag/tagView.tsx b/src/pages/view/details/components/tag/tagView.tsx similarity index 100% rename from src/pages/details/components/tag/tagView.tsx rename to src/pages/view/details/components/tag/tagView.tsx diff --git a/src/pages/details/components/usageChart/usageChart.styles.ts b/src/pages/view/details/components/usageChart/usageChart.styles.ts similarity index 100% rename from src/pages/details/components/usageChart/usageChart.styles.ts rename to src/pages/view/details/components/usageChart/usageChart.styles.ts diff --git a/src/pages/details/components/usageChart/usageChart.tsx b/src/pages/view/details/components/usageChart/usageChart.tsx similarity index 100% rename from src/pages/details/components/usageChart/usageChart.tsx rename to src/pages/view/details/components/usageChart/usageChart.tsx diff --git a/src/pages/details/gcpBreakdown/costOverview.tsx b/src/pages/view/details/gcpBreakdown/costOverview.tsx similarity index 89% rename from src/pages/details/gcpBreakdown/costOverview.tsx rename to src/pages/view/details/gcpBreakdown/costOverview.tsx index 7ea722527..3d34adbda 100644 --- a/src/pages/details/gcpBreakdown/costOverview.tsx +++ b/src/pages/view/details/gcpBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { gcpCostOverviewSelectors } from 'store/breakdown/costOverview/gcpCostOverview'; diff --git a/src/pages/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx similarity index 96% rename from src/pages/details/gcpBreakdown/gcpBreakdown.tsx rename to src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx index cc2696d7a..f8e1e3d63 100644 --- a/src/pages/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, breakdownTitleKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; +import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpBreakdown/historicalData.tsx b/src/pages/view/details/gcpBreakdown/historicalData.tsx similarity index 88% rename from src/pages/details/gcpBreakdown/historicalData.tsx rename to src/pages/view/details/gcpBreakdown/historicalData.tsx index edbbcee11..b21784cc4 100644 --- a/src/pages/details/gcpBreakdown/historicalData.tsx +++ b/src/pages/view/details/gcpBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { gcpHistoricalDataSelectors } from 'store/breakdown/historicalData/gcpHistoricalData'; diff --git a/src/pages/details/gcpBreakdown/index.ts b/src/pages/view/details/gcpBreakdown/index.ts similarity index 100% rename from src/pages/details/gcpBreakdown/index.ts rename to src/pages/view/details/gcpBreakdown/index.ts diff --git a/src/pages/details/gcpDetails/detailsHeader.styles.ts b/src/pages/view/details/gcpDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/details/gcpDetails/detailsHeader.styles.ts rename to src/pages/view/details/gcpDetails/detailsHeader.styles.ts diff --git a/src/pages/details/gcpDetails/detailsHeader.tsx b/src/pages/view/details/gcpDetails/detailsHeader.tsx similarity index 98% rename from src/pages/details/gcpDetails/detailsHeader.tsx rename to src/pages/view/details/gcpDetails/detailsHeader.tsx index d5b2efe0b..f00df947e 100644 --- a/src/pages/details/gcpDetails/detailsHeader.tsx +++ b/src/pages/view/details/gcpDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { GcpReport } from 'api/reports/gcpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/components/groupBy/groupBy'; +import { GroupBy } from 'pages/view/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpDetails/detailsTable.styles.ts b/src/pages/view/details/gcpDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/details/gcpDetails/detailsTable.styles.ts rename to src/pages/view/details/gcpDetails/detailsTable.styles.ts diff --git a/src/pages/details/gcpDetails/detailsTable.tsx b/src/pages/view/details/gcpDetails/detailsTable.tsx similarity index 99% rename from src/pages/details/gcpDetails/detailsTable.tsx rename to src/pages/view/details/gcpDetails/detailsTable.tsx index 4c28ba63e..a0b468fe8 100644 --- a/src/pages/details/gcpDetails/detailsTable.tsx +++ b/src/pages/view/details/gcpDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { GcpReport } from 'api/reports/gcpReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/details/components/actions/actions'; +import { Actions } from 'pages/view/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/details/gcpDetails/detailsToolbar.tsx b/src/pages/view/details/gcpDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/details/gcpDetails/detailsToolbar.tsx rename to src/pages/view/details/gcpDetails/detailsToolbar.tsx index 006fdf6e2..ddeb262e0 100644 --- a/src/pages/details/gcpDetails/detailsToolbar.tsx +++ b/src/pages/view/details/gcpDetails/detailsToolbar.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { GcpQuery, getQuery } from 'api/queries/gcpQuery'; import { tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/gcpDetails/gcpDetails.styles.ts b/src/pages/view/details/gcpDetails/gcpDetails.styles.ts similarity index 100% rename from src/pages/details/gcpDetails/gcpDetails.styles.ts rename to src/pages/view/details/gcpDetails/gcpDetails.styles.ts diff --git a/src/pages/details/gcpDetails/gcpDetails.tsx b/src/pages/view/details/gcpDetails/gcpDetails.tsx similarity index 98% rename from src/pages/details/gcpDetails/gcpDetails.tsx rename to src/pages/view/details/gcpDetails/gcpDetails.tsx index a8969cef0..a2f627de5 100644 --- a/src/pages/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/view/details/gcpDetails/gcpDetails.tsx @@ -6,12 +6,13 @@ import { tagPrefix } from 'api/queries/query'; import { GcpReport } from 'api/reports/gcpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { getGroupByTagKey } from 'pages/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; +import { ExportModal } from 'pages/view/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -22,7 +23,6 @@ import { reportActions, reportSelectors } from 'store/reports'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedGcpReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; -import NoData from '../../state/noData'; import { DetailsHeader } from './detailsHeader'; import { DetailsTable } from './detailsTable'; import { DetailsToolbar } from './detailsToolbar'; diff --git a/src/pages/details/gcpDetails/gcpDetailsTable.scss b/src/pages/view/details/gcpDetails/gcpDetailsTable.scss similarity index 100% rename from src/pages/details/gcpDetails/gcpDetailsTable.scss rename to src/pages/view/details/gcpDetails/gcpDetailsTable.scss diff --git a/src/pages/details/gcpDetails/index.ts b/src/pages/view/details/gcpDetails/index.ts similarity index 100% rename from src/pages/details/gcpDetails/index.ts rename to src/pages/view/details/gcpDetails/index.ts diff --git a/src/pages/details/ocpBreakdown/costOverview.tsx b/src/pages/view/details/ocpBreakdown/costOverview.tsx similarity index 89% rename from src/pages/details/ocpBreakdown/costOverview.tsx rename to src/pages/view/details/ocpBreakdown/costOverview.tsx index 154cfa8a9..72e7c84f8 100644 --- a/src/pages/details/ocpBreakdown/costOverview.tsx +++ b/src/pages/view/details/ocpBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { ocpCostOverviewSelectors } from 'store/breakdown/costOverview/ocpCostOverview'; diff --git a/src/pages/details/ocpBreakdown/historicalData.tsx b/src/pages/view/details/ocpBreakdown/historicalData.tsx similarity index 88% rename from src/pages/details/ocpBreakdown/historicalData.tsx rename to src/pages/view/details/ocpBreakdown/historicalData.tsx index a8b67dae1..7aa4912d7 100644 --- a/src/pages/details/ocpBreakdown/historicalData.tsx +++ b/src/pages/view/details/ocpBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { ocpHistoricalDataSelectors } from 'store/breakdown/historicalData/ocpHistoricalData'; diff --git a/src/pages/details/ocpBreakdown/index.ts b/src/pages/view/details/ocpBreakdown/index.ts similarity index 100% rename from src/pages/details/ocpBreakdown/index.ts rename to src/pages/view/details/ocpBreakdown/index.ts diff --git a/src/pages/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx similarity index 95% rename from src/pages/details/ocpBreakdown/ocpBreakdown.tsx rename to src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx index 3497956cc..c5cd9c0ea 100644 --- a/src/pages/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/utils/groupBy'; +import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/detailsHeader.styles.ts b/src/pages/view/details/ocpDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/details/ocpDetails/detailsHeader.styles.ts rename to src/pages/view/details/ocpDetails/detailsHeader.styles.ts diff --git a/src/pages/details/ocpDetails/detailsHeader.tsx b/src/pages/view/details/ocpDetails/detailsHeader.tsx similarity index 99% rename from src/pages/details/ocpDetails/detailsHeader.tsx rename to src/pages/view/details/ocpDetails/detailsHeader.tsx index dcec66231..5abab9f3e 100644 --- a/src/pages/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/view/details/ocpDetails/detailsHeader.tsx @@ -7,7 +7,7 @@ import { OcpReport } from 'api/reports/ocpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { GroupBy } from 'pages/components/groupBy/groupBy'; +import { GroupBy } from 'pages/view/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/detailsTable.scss b/src/pages/view/details/ocpDetails/detailsTable.scss similarity index 100% rename from src/pages/details/ocpDetails/detailsTable.scss rename to src/pages/view/details/ocpDetails/detailsTable.scss diff --git a/src/pages/details/ocpDetails/detailsTable.styles.ts b/src/pages/view/details/ocpDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/details/ocpDetails/detailsTable.styles.ts rename to src/pages/view/details/ocpDetails/detailsTable.styles.ts diff --git a/src/pages/details/ocpDetails/detailsTable.tsx b/src/pages/view/details/ocpDetails/detailsTable.tsx similarity index 99% rename from src/pages/details/ocpDetails/detailsTable.tsx rename to src/pages/view/details/ocpDetails/detailsTable.tsx index 17256b75d..bd2246433 100644 --- a/src/pages/details/ocpDetails/detailsTable.tsx +++ b/src/pages/view/details/ocpDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/details/components/actions/actions'; +import { Actions } from 'pages/view/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/details/ocpDetails/detailsToolbar.tsx b/src/pages/view/details/ocpDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/details/ocpDetails/detailsToolbar.tsx rename to src/pages/view/details/ocpDetails/detailsToolbar.tsx index dc62ac14d..718a7577b 100644 --- a/src/pages/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/view/details/ocpDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { getQuery, OcpQuery } from 'api/queries/ocpQuery'; import { tagKey } from 'api/queries/query'; import { OcpTag } from 'api/tags/ocpTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/details/ocpDetails/index.ts b/src/pages/view/details/ocpDetails/index.ts similarity index 100% rename from src/pages/details/ocpDetails/index.ts rename to src/pages/view/details/ocpDetails/index.ts diff --git a/src/pages/details/ocpDetails/ocpDetails.styles.ts b/src/pages/view/details/ocpDetails/ocpDetails.styles.ts similarity index 100% rename from src/pages/details/ocpDetails/ocpDetails.styles.ts rename to src/pages/view/details/ocpDetails/ocpDetails.styles.ts diff --git a/src/pages/details/ocpDetails/ocpDetails.tsx b/src/pages/view/details/ocpDetails/ocpDetails.tsx similarity index 98% rename from src/pages/details/ocpDetails/ocpDetails.tsx rename to src/pages/view/details/ocpDetails/ocpDetails.tsx index 12cf9dffa..b85fc37b0 100644 --- a/src/pages/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/view/details/ocpDetails/ocpDetails.tsx @@ -6,12 +6,13 @@ import { tagPrefix } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; -import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { getGroupByTagKey } from 'pages/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; +import { ExportModal } from 'pages/view/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -22,7 +23,6 @@ import { reportActions, reportSelectors } from 'store/reports'; import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedOcpReportItems'; import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; -import NoData from '../../state/noData'; import { DetailsHeader } from './detailsHeader'; import { DetailsTable } from './detailsTable'; import { DetailsToolbar } from './detailsToolbar'; diff --git a/src/pages/explorer/dateRange.tsx b/src/pages/view/explorer/dateRange.tsx similarity index 100% rename from src/pages/explorer/dateRange.tsx rename to src/pages/view/explorer/dateRange.tsx diff --git a/src/pages/explorer/explorer.styles.ts b/src/pages/view/explorer/explorer.styles.ts similarity index 100% rename from src/pages/explorer/explorer.styles.ts rename to src/pages/view/explorer/explorer.styles.ts diff --git a/src/pages/explorer/explorer.tsx b/src/pages/view/explorer/explorer.tsx similarity index 98% rename from src/pages/explorer/explorer.tsx rename to src/pages/view/explorer/explorer.tsx index d08994824..db5d68b78 100644 --- a/src/pages/explorer/explorer.tsx +++ b/src/pages/view/explorer/explorer.tsx @@ -7,13 +7,13 @@ import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { Report } from 'api/reports/report'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { ExportModal } from 'pages/components/export/exportModal'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/utils/query'; +import { ExportModal } from 'pages/view/components/export/exportModal'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerChart.styles.ts b/src/pages/view/explorer/explorerChart.styles.ts similarity index 100% rename from src/pages/explorer/explorerChart.styles.ts rename to src/pages/view/explorer/explorerChart.styles.ts diff --git a/src/pages/explorer/explorerChart.tsx b/src/pages/view/explorer/explorerChart.tsx similarity index 100% rename from src/pages/explorer/explorerChart.tsx rename to src/pages/view/explorer/explorerChart.tsx diff --git a/src/pages/explorer/explorerFilter.styles.ts b/src/pages/view/explorer/explorerFilter.styles.ts similarity index 100% rename from src/pages/explorer/explorerFilter.styles.ts rename to src/pages/view/explorer/explorerFilter.styles.ts diff --git a/src/pages/explorer/explorerFilter.tsx b/src/pages/view/explorer/explorerFilter.tsx similarity index 98% rename from src/pages/explorer/explorerFilter.tsx rename to src/pages/view/explorer/explorerFilter.tsx index 334e0f682..be8a72aa8 100644 --- a/src/pages/explorer/explorerFilter.tsx +++ b/src/pages/view/explorer/explorerFilter.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerHeader.styles.ts b/src/pages/view/explorer/explorerHeader.styles.ts similarity index 100% rename from src/pages/explorer/explorerHeader.styles.ts rename to src/pages/view/explorer/explorerHeader.styles.ts diff --git a/src/pages/explorer/explorerHeader.tsx b/src/pages/view/explorer/explorerHeader.tsx similarity index 98% rename from src/pages/explorer/explorerHeader.tsx rename to src/pages/view/explorer/explorerHeader.tsx index 0e7889972..0d59c1b6d 100644 --- a/src/pages/explorer/explorerHeader.tsx +++ b/src/pages/view/explorer/explorerHeader.tsx @@ -5,8 +5,8 @@ import { getQuery, parseQuery, Query } from 'api/queries/query'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/components/groupBy/groupBy'; -import { Perspective } from 'pages/components/perspective/perspective'; +import { GroupBy } from 'pages/view/components/groupBy/groupBy'; +import { Perspective } from 'pages/view/components/perspective/perspective'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerTable.scss b/src/pages/view/explorer/explorerTable.scss similarity index 100% rename from src/pages/explorer/explorerTable.scss rename to src/pages/view/explorer/explorerTable.scss diff --git a/src/pages/explorer/explorerTable.styles.ts b/src/pages/view/explorer/explorerTable.styles.ts similarity index 100% rename from src/pages/explorer/explorerTable.styles.ts rename to src/pages/view/explorer/explorerTable.styles.ts diff --git a/src/pages/explorer/explorerTable.tsx b/src/pages/view/explorer/explorerTable.tsx similarity index 99% rename from src/pages/explorer/explorerTable.tsx rename to src/pages/view/explorer/explorerTable.tsx index 1627e1056..eee284bc3 100644 --- a/src/pages/explorer/explorerTable.tsx +++ b/src/pages/view/explorer/explorerTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/utils/groupBy'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/view/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerToolbar.tsx b/src/pages/view/explorer/explorerToolbar.tsx similarity index 96% rename from src/pages/explorer/explorerToolbar.tsx rename to src/pages/view/explorer/explorerToolbar.tsx index a3174ec0e..10cae0254 100644 --- a/src/pages/explorer/explorerToolbar.tsx +++ b/src/pages/view/explorer/explorerToolbar.tsx @@ -1,5 +1,5 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; -import { DataToolbar } from 'pages/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/explorer/explorerUtils.ts b/src/pages/view/explorer/explorerUtils.ts similarity index 100% rename from src/pages/explorer/explorerUtils.ts rename to src/pages/view/explorer/explorerUtils.ts diff --git a/src/pages/explorer/index.ts b/src/pages/view/explorer/index.ts similarity index 100% rename from src/pages/explorer/index.ts rename to src/pages/view/explorer/index.ts diff --git a/src/pages/overview/index.ts b/src/pages/view/overview/index.ts similarity index 100% rename from src/pages/overview/index.ts rename to src/pages/view/overview/index.ts diff --git a/src/pages/overview/overview.scss b/src/pages/view/overview/overview.scss similarity index 100% rename from src/pages/overview/overview.scss rename to src/pages/view/overview/overview.scss diff --git a/src/pages/overview/overview.styles.ts b/src/pages/view/overview/overview.styles.ts similarity index 100% rename from src/pages/overview/overview.styles.ts rename to src/pages/view/overview/overview.styles.ts diff --git a/src/pages/overview/overview.tsx b/src/pages/view/overview/overview.tsx similarity index 95% rename from src/pages/overview/overview.tsx rename to src/pages/view/overview/overview.tsx index c0c50538d..e86f33007 100644 --- a/src/pages/overview/overview.tsx +++ b/src/pages/view/overview/overview.tsx @@ -7,18 +7,19 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { Perspective } from 'pages/components/perspective/perspective'; -import AwsCloudDashboard from 'pages/dashboard/awsCloudDashboard/awsCloudDashboard'; -import AwsDashboard from 'pages/dashboard/awsDashboard/awsDashboard'; -import AzureCloudDashboard from 'pages/dashboard/azureCloudDashboard/azureCloudDashboard'; -import AzureDashboard from 'pages/dashboard/azureDashboard/azureDashboard'; -import GcpDashboard from 'pages/dashboard/gcpDashboard/gcpDashboard'; -import OcpCloudDashboard from 'pages/dashboard/ocpCloudDashboard/ocpCloudDashboard'; -import OcpDashboard from 'pages/dashboard/ocpDashboard/ocpDashboard'; -import OcpSupplementaryDashboard from 'pages/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard'; -import OcpUsageDashboard from 'pages/dashboard/ocpUsageDashboard/ocpUsageDashboard'; import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData/noData'; import NoProviders from 'pages/state/noProviders'; +import { Perspective } from 'pages/view/components/perspective/perspective'; +import AwsCloudDashboard from 'pages/view/dashboard/awsCloudDashboard/awsCloudDashboard'; +import AwsDashboard from 'pages/view/dashboard/awsDashboard/awsDashboard'; +import AzureCloudDashboard from 'pages/view/dashboard/azureCloudDashboard/azureCloudDashboard'; +import AzureDashboard from 'pages/view/dashboard/azureDashboard/azureDashboard'; +import GcpDashboard from 'pages/view/dashboard/gcpDashboard/gcpDashboard'; +import OcpCloudDashboard from 'pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard'; +import OcpDashboard from 'pages/view/dashboard/ocpDashboard/ocpDashboard'; +import OcpSupplementaryDashboard from 'pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard'; +import OcpUsageDashboard from 'pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -33,7 +34,6 @@ import { } from 'store/providers'; import { allUserAccessQuery, userAccessSelectors } from 'store/userAccess'; -import NoData from '../state/noData/noData'; import { styles } from './overview.styles'; // eslint-disable-next-line no-shadow diff --git a/src/pages/utils/groupBy.ts b/src/pages/view/utils/groupBy.ts similarity index 100% rename from src/pages/utils/groupBy.ts rename to src/pages/view/utils/groupBy.ts diff --git a/src/pages/utils/query.ts b/src/pages/view/utils/query.ts similarity index 100% rename from src/pages/utils/query.ts rename to src/pages/view/utils/query.ts diff --git a/src/routes.tsx b/src/routes.tsx index 0939de077..2f429469e 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -3,22 +3,24 @@ import { permissionsComponent } from 'components/async/permissionsComponent/perm import React from 'react'; import { Route, Switch } from 'react-router-dom'; -const NotFound = asyncComponent(() => import(/* webpackChunkName: "notFound" */ './pages/state/notFound')); -const AwsBreakdown = asyncComponent(() => import(/* webpackChunkName: "aws" */ './pages/details/awsBreakdown')); -const AwsDetails = asyncComponent(() => import(/* webpackChunkName: "aws" */ './pages/details/awsDetails')); -const AzureBreakdown = asyncComponent(() => import(/* webpackChunkName: "azure" */ './pages/details/azureBreakdown')); -const AzureDetails = asyncComponent(() => import(/* webpackChunkName: "azure" */ './pages/details/azureDetails')); -const Explorer = asyncComponent(() => import(/* webpackChunkName: "azure" */ './pages/explorer')); -const GcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "gcp" */ './pages/details/gcpBreakdown')); -const GcpDetails = asyncComponent(() => import(/* webpackChunkName: "gcp" */ './pages/details/gcpDetails')); -const OcpDetails = asyncComponent(() => import(/* webpackChunkName: "ocp" */ './pages/details/ocpDetails')); -const OcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "ocp" */ './pages/details/ocpBreakdown')); -const Overview = asyncComponent(() => import(/* webpackChunkName: "overview" */ './pages/overview')); +const NotFound = asyncComponent(() => import(/* webpackChunkName: "notFound" */ 'pages/state/notFound')); +const AwsBreakdown = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/view/details/awsBreakdown')); +const AwsDetails = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/view/details/awsDetails')); +const AzureBreakdown = asyncComponent( + () => import(/* webpackChunkName: "azure" */ 'pages/view/details/azureBreakdown') +); +const AzureDetails = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/view/details/azureDetails')); +const Explorer = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/view/explorer/explorer')); +const GcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/view/details/gcpBreakdown')); +const GcpDetails = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/view/details/gcpDetails')); +const OcpDetails = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/view/details/ocpDetails')); +const OcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/view/details/ocpBreakdown')); +const Overview = asyncComponent(() => import(/* webpackChunkName: "overview" */ 'pages/view/overview')); const CostModelsDetails = asyncComponent( - () => import(/* webpackChunkName: "costModels" */ './pages/costModels/costModelsDetails') + () => import(/* webpackChunkName: "costModels" */ 'pages/costModels/costModelsDetails') ); // import(/* webpackChunkName: "costModels" */ './pages/costModels/costModelList') -const CostModel = asyncComponent(() => import(/* webpackChunkName: "costModel" */ './pages/costModels/costModel')); +const CostModel = asyncComponent(() => import(/* webpackChunkName: "costModel" */ 'pages/costModels/costModel')); // For syncing with permissions const paths = { diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index 778d30587..9d0ec8805 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -1,3 +1,4 @@ +import { ForecastPathsType, ForecastType } from 'api/forecasts/forecast'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, @@ -7,7 +8,6 @@ import { } from 'components/charts/common/chartDatumUtils'; import { DashboardChartType } from 'store/dashboard/common/dashboardCommon'; -import { ForecastPathsType, ForecastType } from '../../../api/forecasts/forecast'; import { AwsCloudDashboardTab, AwsCloudDashboardWidget } from './awsCloudDashboardCommon'; let currrentId = 0; diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index e3999a096..b45c78007 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -1,3 +1,4 @@ +import { ForecastPathsType, ForecastType } from 'api/forecasts/forecast'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, @@ -8,7 +9,6 @@ import { import { paths } from 'routes'; import { DashboardChartType } from 'store/dashboard/common/dashboardCommon'; -import { ForecastPathsType, ForecastType } from '../../../api/forecasts/forecast'; import { GcpDashboardTab, GcpDashboardWidget } from './gcpDashboardCommon'; let currrentId = 0; From 190fbf10ea00f698779d09432b568f3cb0bbc1fe Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 22 Feb 2021 19:47:26 -0500 Subject: [PATCH 106/200] Renamed views directory and moved dashboard to overview directory --- .../components/dataToolbar/dataToolbar.scss | 0 .../dataToolbar/dataToolbar.styles.ts | 0 .../components/dataToolbar/dataToolbar.tsx | 0 .../components/export/exportModal.styles.ts | 0 .../components/export/exportModal.tsx | 0 .../components/export/exportSubmit.tsx | 0 .../components/groupBy/groupBy.styles.ts | 0 .../components/groupBy/groupBy.tsx | 2 +- .../components/groupBy/groupByOrg.tsx | 0 .../components/groupBy/groupByTag.tsx | 0 .../perspective/perspective.styles.ts | 0 .../components/perspective/perspective.tsx | 0 .../details/awsBreakdown/awsBreakdown.tsx | 4 ++-- .../details/awsBreakdown/costOverview.tsx | 2 +- .../details/awsBreakdown/historicalData.tsx | 2 +- .../details/awsBreakdown/index.ts | 0 .../details/awsDetails/awsDetails.styles.ts | 0 .../details/awsDetails/awsDetails.tsx | 6 +++--- .../details/awsDetails/awsDetailsTable.scss | 0 .../awsDetails/detailsHeader.styles.ts | 0 .../details/awsDetails/detailsHeader.tsx | 2 +- .../details/awsDetails/detailsTable.styles.ts | 0 .../details/awsDetails/detailsTable.tsx | 2 +- .../details/awsDetails/detailsToolbar.tsx | 2 +- .../details/awsDetails/index.ts | 0 .../details/azureBreakdown/azureBreakdown.tsx | 4 ++-- .../details/azureBreakdown/costOverview.tsx | 2 +- .../details/azureBreakdown/historicalData.tsx | 2 +- .../details/azureBreakdown/index.ts | 0 .../azureDetails/azureDetails.styles.ts | 0 .../details/azureDetails/azureDetails.tsx | 6 +++--- .../azureDetails/azureDetailsTable.scss | 0 .../azureDetails/detailsHeader.styles.ts | 0 .../details/azureDetails/detailsHeader.tsx | 2 +- .../azureDetails/detailsTable.styles.ts | 0 .../details/azureDetails/detailsTable.tsx | 2 +- .../details/azureDetails/detailsToolbar.tsx | 2 +- .../details/azureDetails/index.ts | 0 .../details/components/actions/actions.tsx | 2 +- .../components/breakdown/breakdown.styles.ts | 0 .../components/breakdown/breakdownBase.tsx | 0 .../components/breakdown/breakdownHeader.scss | 0 .../breakdown/breakdownHeader.styles.ts | 0 .../components/breakdown/breakdownHeader.tsx | 2 +- .../components/cluster/cluster.styles.ts | 0 .../details/components/cluster/cluster.tsx | 0 .../components/cluster/clusterModal.scss | 0 .../components/cluster/clusterModal.styles.ts | 0 .../components/cluster/clusterModal.tsx | 0 .../components/cluster/clusterView.tsx | 0 .../components/costChart/costChart.styles.ts | 0 .../components/costChart/costChart.tsx | 0 .../costOverview/costOverviewBase.tsx | 10 +++++----- .../historicalData/historicalChart.styles.ts | 0 .../historicalData/historicalDataBase.tsx | 0 .../historicalDataCostChart.tsx | 0 .../historicalDataTrendChart.tsx | 0 .../historicalDataUsageChart.tsx | 0 .../priceList/noRatesState.styles.ts | 0 .../components/priceList/noRatesState.tsx | 0 .../components/priceList/priceListTable.tsx | 0 .../components/summary/summary.styles.ts | 0 .../components/summary/summaryCard.styles.ts | 0 .../components/summary/summaryCard.tsx | 2 +- .../components/summary/summaryModal.scss | 0 .../components/summary/summaryModal.styles.ts | 0 .../components/summary/summaryModal.tsx | 0 .../components/summary/summaryModalView.tsx | 0 .../components/summary/summaryView.tsx | 0 .../details/components/tag/tag.styles.ts | 0 .../details/components/tag/tag.tsx | 0 .../details/components/tag/tagLink.tsx | 0 .../details/components/tag/tagModal.styles.ts | 0 .../details/components/tag/tagModal.tsx | 0 .../details/components/tag/tagView.tsx | 0 .../usageChart/usageChart.styles.ts | 0 .../components/usageChart/usageChart.tsx | 0 .../details/gcpBreakdown/costOverview.tsx | 2 +- .../details/gcpBreakdown/gcpBreakdown.tsx | 4 ++-- .../details/gcpBreakdown/historicalData.tsx | 2 +- .../details/gcpBreakdown/index.ts | 0 .../gcpDetails/detailsHeader.styles.ts | 0 .../details/gcpDetails/detailsHeader.tsx | 2 +- .../details/gcpDetails/detailsTable.styles.ts | 0 .../details/gcpDetails/detailsTable.tsx | 2 +- .../details/gcpDetails/detailsToolbar.tsx | 2 +- .../details/gcpDetails/gcpDetails.styles.ts | 0 .../details/gcpDetails/gcpDetails.tsx | 6 +++--- .../details/gcpDetails/gcpDetailsTable.scss | 0 .../details/gcpDetails/index.ts | 0 .../details/ocpBreakdown/costOverview.tsx | 2 +- .../details/ocpBreakdown/historicalData.tsx | 2 +- .../details/ocpBreakdown/index.ts | 0 .../details/ocpBreakdown/ocpBreakdown.tsx | 4 ++-- .../ocpDetails/detailsHeader.styles.ts | 0 .../details/ocpDetails/detailsHeader.tsx | 2 +- .../details/ocpDetails/detailsTable.scss | 0 .../details/ocpDetails/detailsTable.styles.ts | 0 .../details/ocpDetails/detailsTable.tsx | 2 +- .../details/ocpDetails/detailsToolbar.tsx | 2 +- .../details/ocpDetails/index.ts | 0 .../details/ocpDetails/ocpDetails.styles.ts | 0 .../details/ocpDetails/ocpDetails.tsx | 6 +++--- .../{view => views}/explorer/dateRange.tsx | 0 .../explorer/explorer.styles.ts | 0 .../{view => views}/explorer/explorer.tsx | 6 +++--- .../explorer/explorerChart.styles.ts | 0 .../explorer/explorerChart.tsx | 0 .../explorer/explorerFilter.styles.ts | 0 .../explorer/explorerFilter.tsx | 2 +- .../explorer/explorerHeader.styles.ts | 0 .../explorer/explorerHeader.tsx | 4 ++-- .../explorer/explorerTable.scss | 0 .../explorer/explorerTable.styles.ts | 0 .../explorer/explorerTable.tsx | 2 +- .../explorer/explorerToolbar.tsx | 2 +- .../{view => views}/explorer/explorerUtils.ts | 0 src/pages/{view => views}/explorer/index.ts | 0 .../awsCloudDashboard/awsCloudDashboard.tsx | 2 +- .../awsCloudDashboardWidget.styles.ts | 0 .../awsCloudDashboardWidget.tsx | 2 +- .../overview}/awsCloudDashboard/index.ts | 0 .../overview}/awsDashboard/awsDashboard.tsx | 2 +- .../awsDashboard/awsDashboardWidget.test.tsx | 0 .../awsDashboard/awsDashboardWidget.tsx | 2 +- .../overview}/awsDashboard/index.ts | 0 .../azureCloudDashboard.tsx | 2 +- .../azureCloudDashboardWidget.tsx | 2 +- .../overview}/azureCloudDashboard/index.ts | 0 .../azureDashboard/azureDashboard.tsx | 2 +- .../azureDashboardWidget.test.tsx | 0 .../azureDashboard/azureDashboardWidget.tsx | 2 +- .../overview}/azureDashboard/index.ts | 0 .../dashboardWidget.test.tsx.snap | 0 .../overview}/components/chartComparison.tsx | 0 .../overview}/components/dashboardBase.tsx | 0 .../components/dashboardWidget.styles.ts | 0 .../components/dashboardWidget.test.tsx | 2 +- .../components/dashboardWidgetBase.tsx | 0 .../overview}/gcpDashboard/gcpDashboard.tsx | 2 +- .../gcpDashboard/gcpDashboardWidget.test.tsx | 0 .../gcpDashboard/gcpDashboardWidget.tsx | 2 +- .../overview}/gcpDashboard/index.ts | 0 src/pages/{view => views}/overview/index.ts | 0 .../overview}/ocpCloudDashboard/index.ts | 0 .../ocpCloudDashboard/ocpCloudDashboard.tsx | 2 +- .../ocpCloudDashboardWidget.test.tsx | 0 .../ocpCloudDashboardWidget.tsx | 2 +- .../overview}/ocpDashboard/index.ts | 0 .../overview}/ocpDashboard/ocpDashboard.tsx | 2 +- .../ocpDashboard/ocpDashboardWidget.styles.ts | 0 .../ocpDashboard/ocpDashboardWidget.test.tsx | 0 .../ocpDashboard/ocpDashboardWidget.tsx | 2 +- .../ocpSupplementaryDashboard/index.ts | 0 .../ocpSupplementaryDashboard.tsx | 2 +- .../ocpSupplementaryDashboardWidget.tsx | 2 +- .../overview}/ocpUsageDashboard/index.ts | 0 .../ocpUsageDashboard/ocpUsageDashboard.tsx | 2 +- .../ocpUsageDashboardWidget.tsx | 2 +- .../{view => views}/overview/overview.scss | 0 .../overview/overview.styles.ts | 0 .../{view => views}/overview/overview.tsx | 20 +++++++++---------- src/pages/{view => views}/utils/groupBy.ts | 0 src/pages/{view => views}/utils/query.ts | 0 src/routes.tsx | 20 +++++++++---------- 165 files changed, 96 insertions(+), 96 deletions(-) rename src/pages/{view => views}/components/dataToolbar/dataToolbar.scss (100%) rename src/pages/{view => views}/components/dataToolbar/dataToolbar.styles.ts (100%) rename src/pages/{view => views}/components/dataToolbar/dataToolbar.tsx (100%) rename src/pages/{view => views}/components/export/exportModal.styles.ts (100%) rename src/pages/{view => views}/components/export/exportModal.tsx (100%) rename src/pages/{view => views}/components/export/exportSubmit.tsx (100%) rename src/pages/{view => views}/components/groupBy/groupBy.styles.ts (100%) rename src/pages/{view => views}/components/groupBy/groupBy.tsx (99%) rename src/pages/{view => views}/components/groupBy/groupByOrg.tsx (100%) rename src/pages/{view => views}/components/groupBy/groupByTag.tsx (100%) rename src/pages/{view => views}/components/perspective/perspective.styles.ts (100%) rename src/pages/{view => views}/components/perspective/perspective.tsx (100%) rename src/pages/{view => views}/details/awsBreakdown/awsBreakdown.tsx (96%) rename src/pages/{view => views}/details/awsBreakdown/costOverview.tsx (89%) rename src/pages/{view => views}/details/awsBreakdown/historicalData.tsx (88%) rename src/pages/{view => views}/details/awsBreakdown/index.ts (100%) rename src/pages/{view => views}/details/awsDetails/awsDetails.styles.ts (100%) rename src/pages/{view => views}/details/awsDetails/awsDetails.tsx (98%) rename src/pages/{view => views}/details/awsDetails/awsDetailsTable.scss (100%) rename src/pages/{view => views}/details/awsDetails/detailsHeader.styles.ts (100%) rename src/pages/{view => views}/details/awsDetails/detailsHeader.tsx (98%) rename src/pages/{view => views}/details/awsDetails/detailsTable.styles.ts (100%) rename src/pages/{view => views}/details/awsDetails/detailsTable.tsx (99%) rename src/pages/{view => views}/details/awsDetails/detailsToolbar.tsx (98%) rename src/pages/{view => views}/details/awsDetails/index.ts (100%) rename src/pages/{view => views}/details/azureBreakdown/azureBreakdown.tsx (95%) rename src/pages/{view => views}/details/azureBreakdown/costOverview.tsx (89%) rename src/pages/{view => views}/details/azureBreakdown/historicalData.tsx (88%) rename src/pages/{view => views}/details/azureBreakdown/index.ts (100%) rename src/pages/{view => views}/details/azureDetails/azureDetails.styles.ts (100%) rename src/pages/{view => views}/details/azureDetails/azureDetails.tsx (98%) rename src/pages/{view => views}/details/azureDetails/azureDetailsTable.scss (100%) rename src/pages/{view => views}/details/azureDetails/detailsHeader.styles.ts (100%) rename src/pages/{view => views}/details/azureDetails/detailsHeader.tsx (98%) rename src/pages/{view => views}/details/azureDetails/detailsTable.styles.ts (100%) rename src/pages/{view => views}/details/azureDetails/detailsTable.tsx (99%) rename src/pages/{view => views}/details/azureDetails/detailsToolbar.tsx (98%) rename src/pages/{view => views}/details/azureDetails/index.ts (100%) rename src/pages/{view => views}/details/components/actions/actions.tsx (98%) rename src/pages/{view => views}/details/components/breakdown/breakdown.styles.ts (100%) rename src/pages/{view => views}/details/components/breakdown/breakdownBase.tsx (100%) rename src/pages/{view => views}/details/components/breakdown/breakdownHeader.scss (100%) rename src/pages/{view => views}/details/components/breakdown/breakdownHeader.styles.ts (100%) rename src/pages/{view => views}/details/components/breakdown/breakdownHeader.tsx (98%) rename src/pages/{view => views}/details/components/cluster/cluster.styles.ts (100%) rename src/pages/{view => views}/details/components/cluster/cluster.tsx (100%) rename src/pages/{view => views}/details/components/cluster/clusterModal.scss (100%) rename src/pages/{view => views}/details/components/cluster/clusterModal.styles.ts (100%) rename src/pages/{view => views}/details/components/cluster/clusterModal.tsx (100%) rename src/pages/{view => views}/details/components/cluster/clusterView.tsx (100%) rename src/pages/{view => views}/details/components/costChart/costChart.styles.ts (100%) rename src/pages/{view => views}/details/components/costChart/costChart.tsx (100%) rename src/pages/{view => views}/details/components/costOverview/costOverviewBase.tsx (94%) rename src/pages/{view => views}/details/components/historicalData/historicalChart.styles.ts (100%) rename src/pages/{view => views}/details/components/historicalData/historicalDataBase.tsx (100%) rename src/pages/{view => views}/details/components/historicalData/historicalDataCostChart.tsx (100%) rename src/pages/{view => views}/details/components/historicalData/historicalDataTrendChart.tsx (100%) rename src/pages/{view => views}/details/components/historicalData/historicalDataUsageChart.tsx (100%) rename src/pages/{view => views}/details/components/priceList/noRatesState.styles.ts (100%) rename src/pages/{view => views}/details/components/priceList/noRatesState.tsx (100%) rename src/pages/{view => views}/details/components/priceList/priceListTable.tsx (100%) rename src/pages/{view => views}/details/components/summary/summary.styles.ts (100%) rename src/pages/{view => views}/details/components/summary/summaryCard.styles.ts (100%) rename src/pages/{view => views}/details/components/summary/summaryCard.tsx (98%) rename src/pages/{view => views}/details/components/summary/summaryModal.scss (100%) rename src/pages/{view => views}/details/components/summary/summaryModal.styles.ts (100%) rename src/pages/{view => views}/details/components/summary/summaryModal.tsx (100%) rename src/pages/{view => views}/details/components/summary/summaryModalView.tsx (100%) rename src/pages/{view => views}/details/components/summary/summaryView.tsx (100%) rename src/pages/{view => views}/details/components/tag/tag.styles.ts (100%) rename src/pages/{view => views}/details/components/tag/tag.tsx (100%) rename src/pages/{view => views}/details/components/tag/tagLink.tsx (100%) rename src/pages/{view => views}/details/components/tag/tagModal.styles.ts (100%) rename src/pages/{view => views}/details/components/tag/tagModal.tsx (100%) rename src/pages/{view => views}/details/components/tag/tagView.tsx (100%) rename src/pages/{view => views}/details/components/usageChart/usageChart.styles.ts (100%) rename src/pages/{view => views}/details/components/usageChart/usageChart.tsx (100%) rename src/pages/{view => views}/details/gcpBreakdown/costOverview.tsx (89%) rename src/pages/{view => views}/details/gcpBreakdown/gcpBreakdown.tsx (95%) rename src/pages/{view => views}/details/gcpBreakdown/historicalData.tsx (88%) rename src/pages/{view => views}/details/gcpBreakdown/index.ts (100%) rename src/pages/{view => views}/details/gcpDetails/detailsHeader.styles.ts (100%) rename src/pages/{view => views}/details/gcpDetails/detailsHeader.tsx (98%) rename src/pages/{view => views}/details/gcpDetails/detailsTable.styles.ts (100%) rename src/pages/{view => views}/details/gcpDetails/detailsTable.tsx (99%) rename src/pages/{view => views}/details/gcpDetails/detailsToolbar.tsx (98%) rename src/pages/{view => views}/details/gcpDetails/gcpDetails.styles.ts (100%) rename src/pages/{view => views}/details/gcpDetails/gcpDetails.tsx (98%) rename src/pages/{view => views}/details/gcpDetails/gcpDetailsTable.scss (100%) rename src/pages/{view => views}/details/gcpDetails/index.ts (100%) rename src/pages/{view => views}/details/ocpBreakdown/costOverview.tsx (89%) rename src/pages/{view => views}/details/ocpBreakdown/historicalData.tsx (88%) rename src/pages/{view => views}/details/ocpBreakdown/index.ts (100%) rename src/pages/{view => views}/details/ocpBreakdown/ocpBreakdown.tsx (95%) rename src/pages/{view => views}/details/ocpDetails/detailsHeader.styles.ts (100%) rename src/pages/{view => views}/details/ocpDetails/detailsHeader.tsx (99%) rename src/pages/{view => views}/details/ocpDetails/detailsTable.scss (100%) rename src/pages/{view => views}/details/ocpDetails/detailsTable.styles.ts (100%) rename src/pages/{view => views}/details/ocpDetails/detailsTable.tsx (99%) rename src/pages/{view => views}/details/ocpDetails/detailsToolbar.tsx (98%) rename src/pages/{view => views}/details/ocpDetails/index.ts (100%) rename src/pages/{view => views}/details/ocpDetails/ocpDetails.styles.ts (100%) rename src/pages/{view => views}/details/ocpDetails/ocpDetails.tsx (98%) rename src/pages/{view => views}/explorer/dateRange.tsx (100%) rename src/pages/{view => views}/explorer/explorer.styles.ts (100%) rename src/pages/{view => views}/explorer/explorer.tsx (98%) rename src/pages/{view => views}/explorer/explorerChart.styles.ts (100%) rename src/pages/{view => views}/explorer/explorerChart.tsx (100%) rename src/pages/{view => views}/explorer/explorerFilter.styles.ts (100%) rename src/pages/{view => views}/explorer/explorerFilter.tsx (98%) rename src/pages/{view => views}/explorer/explorerHeader.styles.ts (100%) rename src/pages/{view => views}/explorer/explorerHeader.tsx (98%) rename src/pages/{view => views}/explorer/explorerTable.scss (100%) rename src/pages/{view => views}/explorer/explorerTable.styles.ts (100%) rename src/pages/{view => views}/explorer/explorerTable.tsx (99%) rename src/pages/{view => views}/explorer/explorerToolbar.tsx (96%) rename src/pages/{view => views}/explorer/explorerUtils.ts (100%) rename src/pages/{view => views}/explorer/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/awsCloudDashboard/awsCloudDashboard.tsx (94%) rename src/pages/{view/dashboard => views/overview}/awsCloudDashboard/awsCloudDashboardWidget.styles.ts (100%) rename src/pages/{view/dashboard => views/overview}/awsCloudDashboard/awsCloudDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/awsCloudDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/awsDashboard/awsDashboard.tsx (93%) rename src/pages/{view/dashboard => views/overview}/awsDashboard/awsDashboardWidget.test.tsx (100%) rename src/pages/{view/dashboard => views/overview}/awsDashboard/awsDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/awsDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/azureCloudDashboard/azureCloudDashboard.tsx (94%) rename src/pages/{view/dashboard => views/overview}/azureCloudDashboard/azureCloudDashboardWidget.tsx (98%) rename src/pages/{view/dashboard => views/overview}/azureCloudDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/azureDashboard/azureDashboard.tsx (93%) rename src/pages/{view/dashboard => views/overview}/azureDashboard/azureDashboardWidget.test.tsx (100%) rename src/pages/{view/dashboard => views/overview}/azureDashboard/azureDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/azureDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/components/__snapshots__/dashboardWidget.test.tsx.snap (100%) rename src/pages/{view/dashboard => views/overview}/components/chartComparison.tsx (100%) rename src/pages/{view/dashboard => views/overview}/components/dashboardBase.tsx (100%) rename src/pages/{view/dashboard => views/overview}/components/dashboardWidget.styles.ts (100%) rename src/pages/{view/dashboard => views/overview}/components/dashboardWidget.test.tsx (97%) rename src/pages/{view/dashboard => views/overview}/components/dashboardWidgetBase.tsx (100%) rename src/pages/{view/dashboard => views/overview}/gcpDashboard/gcpDashboard.tsx (93%) rename src/pages/{view/dashboard => views/overview}/gcpDashboard/gcpDashboardWidget.test.tsx (100%) rename src/pages/{view/dashboard => views/overview}/gcpDashboard/gcpDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/gcpDashboard/index.ts (100%) rename src/pages/{view => views}/overview/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpCloudDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpCloudDashboard/ocpCloudDashboard.tsx (94%) rename src/pages/{view/dashboard => views/overview}/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx (100%) rename src/pages/{view/dashboard => views/overview}/ocpCloudDashboard/ocpCloudDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/ocpDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpDashboard/ocpDashboard.tsx (93%) rename src/pages/{view/dashboard => views/overview}/ocpDashboard/ocpDashboardWidget.styles.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpDashboard/ocpDashboardWidget.test.tsx (100%) rename src/pages/{view/dashboard => views/overview}/ocpDashboard/ocpDashboardWidget.tsx (97%) rename src/pages/{view/dashboard => views/overview}/ocpSupplementaryDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx (94%) rename src/pages/{view/dashboard => views/overview}/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx (98%) rename src/pages/{view/dashboard => views/overview}/ocpUsageDashboard/index.ts (100%) rename src/pages/{view/dashboard => views/overview}/ocpUsageDashboard/ocpUsageDashboard.tsx (94%) rename src/pages/{view/dashboard => views/overview}/ocpUsageDashboard/ocpUsageDashboardWidget.tsx (97%) rename src/pages/{view => views}/overview/overview.scss (100%) rename src/pages/{view => views}/overview/overview.styles.ts (100%) rename src/pages/{view => views}/overview/overview.tsx (96%) rename src/pages/{view => views}/utils/groupBy.ts (100%) rename src/pages/{view => views}/utils/query.ts (100%) diff --git a/src/pages/view/components/dataToolbar/dataToolbar.scss b/src/pages/views/components/dataToolbar/dataToolbar.scss similarity index 100% rename from src/pages/view/components/dataToolbar/dataToolbar.scss rename to src/pages/views/components/dataToolbar/dataToolbar.scss diff --git a/src/pages/view/components/dataToolbar/dataToolbar.styles.ts b/src/pages/views/components/dataToolbar/dataToolbar.styles.ts similarity index 100% rename from src/pages/view/components/dataToolbar/dataToolbar.styles.ts rename to src/pages/views/components/dataToolbar/dataToolbar.styles.ts diff --git a/src/pages/view/components/dataToolbar/dataToolbar.tsx b/src/pages/views/components/dataToolbar/dataToolbar.tsx similarity index 100% rename from src/pages/view/components/dataToolbar/dataToolbar.tsx rename to src/pages/views/components/dataToolbar/dataToolbar.tsx diff --git a/src/pages/view/components/export/exportModal.styles.ts b/src/pages/views/components/export/exportModal.styles.ts similarity index 100% rename from src/pages/view/components/export/exportModal.styles.ts rename to src/pages/views/components/export/exportModal.styles.ts diff --git a/src/pages/view/components/export/exportModal.tsx b/src/pages/views/components/export/exportModal.tsx similarity index 100% rename from src/pages/view/components/export/exportModal.tsx rename to src/pages/views/components/export/exportModal.tsx diff --git a/src/pages/view/components/export/exportSubmit.tsx b/src/pages/views/components/export/exportSubmit.tsx similarity index 100% rename from src/pages/view/components/export/exportSubmit.tsx rename to src/pages/views/components/export/exportSubmit.tsx diff --git a/src/pages/view/components/groupBy/groupBy.styles.ts b/src/pages/views/components/groupBy/groupBy.styles.ts similarity index 100% rename from src/pages/view/components/groupBy/groupBy.styles.ts rename to src/pages/views/components/groupBy/groupBy.styles.ts diff --git a/src/pages/view/components/groupBy/groupBy.tsx b/src/pages/views/components/groupBy/groupBy.tsx similarity index 99% rename from src/pages/view/components/groupBy/groupBy.tsx rename to src/pages/views/components/groupBy/groupBy.tsx index 6e95aea8b..7a426e8e8 100644 --- a/src/pages/view/components/groupBy/groupBy.tsx +++ b/src/pages/views/components/groupBy/groupBy.tsx @@ -2,7 +2,7 @@ import { Dropdown, DropdownItem, DropdownToggle } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey, tagPrefix } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { PerspectiveType } from 'pages/view/explorer/explorerUtils'; +import { PerspectiveType } from 'pages/views/explorer/explorerUtils'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/components/groupBy/groupByOrg.tsx b/src/pages/views/components/groupBy/groupByOrg.tsx similarity index 100% rename from src/pages/view/components/groupBy/groupByOrg.tsx rename to src/pages/views/components/groupBy/groupByOrg.tsx diff --git a/src/pages/view/components/groupBy/groupByTag.tsx b/src/pages/views/components/groupBy/groupByTag.tsx similarity index 100% rename from src/pages/view/components/groupBy/groupByTag.tsx rename to src/pages/views/components/groupBy/groupByTag.tsx diff --git a/src/pages/view/components/perspective/perspective.styles.ts b/src/pages/views/components/perspective/perspective.styles.ts similarity index 100% rename from src/pages/view/components/perspective/perspective.styles.ts rename to src/pages/views/components/perspective/perspective.styles.ts diff --git a/src/pages/view/components/perspective/perspective.tsx b/src/pages/views/components/perspective/perspective.tsx similarity index 100% rename from src/pages/view/components/perspective/perspective.tsx rename to src/pages/views/components/perspective/perspective.tsx diff --git a/src/pages/view/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx similarity index 96% rename from src/pages/view/details/awsBreakdown/awsBreakdown.tsx rename to src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 08f879372..30352ba9d 100644 --- a/src/pages/view/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, breakdownTitleKey, orgUnitIdKey, Query } from 'api/qu import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; +import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/awsBreakdown/costOverview.tsx b/src/pages/views/details/awsBreakdown/costOverview.tsx similarity index 89% rename from src/pages/view/details/awsBreakdown/costOverview.tsx rename to src/pages/views/details/awsBreakdown/costOverview.tsx index 3e6d40ce1..30e38b18e 100644 --- a/src/pages/view/details/awsBreakdown/costOverview.tsx +++ b/src/pages/views/details/awsBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/views/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { awsCostOverviewSelectors } from 'store/breakdown/costOverview/awsCostOverview'; diff --git a/src/pages/view/details/awsBreakdown/historicalData.tsx b/src/pages/views/details/awsBreakdown/historicalData.tsx similarity index 88% rename from src/pages/view/details/awsBreakdown/historicalData.tsx rename to src/pages/views/details/awsBreakdown/historicalData.tsx index 56850950c..0afcefd80 100644 --- a/src/pages/view/details/awsBreakdown/historicalData.tsx +++ b/src/pages/views/details/awsBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/views/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { awsHistoricalDataSelectors } from 'store/breakdown/historicalData/awsHistoricalData'; diff --git a/src/pages/view/details/awsBreakdown/index.ts b/src/pages/views/details/awsBreakdown/index.ts similarity index 100% rename from src/pages/view/details/awsBreakdown/index.ts rename to src/pages/views/details/awsBreakdown/index.ts diff --git a/src/pages/view/details/awsDetails/awsDetails.styles.ts b/src/pages/views/details/awsDetails/awsDetails.styles.ts similarity index 100% rename from src/pages/view/details/awsDetails/awsDetails.styles.ts rename to src/pages/views/details/awsDetails/awsDetails.styles.ts diff --git a/src/pages/view/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx similarity index 98% rename from src/pages/view/details/awsDetails/awsDetails.tsx rename to src/pages/views/details/awsDetails/awsDetails.tsx index 42dfbace7..ff9043d83 100644 --- a/src/pages/view/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -10,9 +10,9 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { ExportModal } from 'pages/view/components/export/exportModal'; -import { getGroupByTagKey } from 'pages/view/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/awsDetails/awsDetailsTable.scss b/src/pages/views/details/awsDetails/awsDetailsTable.scss similarity index 100% rename from src/pages/view/details/awsDetails/awsDetailsTable.scss rename to src/pages/views/details/awsDetails/awsDetailsTable.scss diff --git a/src/pages/view/details/awsDetails/detailsHeader.styles.ts b/src/pages/views/details/awsDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/view/details/awsDetails/detailsHeader.styles.ts rename to src/pages/views/details/awsDetails/detailsHeader.styles.ts diff --git a/src/pages/view/details/awsDetails/detailsHeader.tsx b/src/pages/views/details/awsDetails/detailsHeader.tsx similarity index 98% rename from src/pages/view/details/awsDetails/detailsHeader.tsx rename to src/pages/views/details/awsDetails/detailsHeader.tsx index 8b67bf95f..c2b973059 100644 --- a/src/pages/view/details/awsDetails/detailsHeader.tsx +++ b/src/pages/views/details/awsDetails/detailsHeader.tsx @@ -6,7 +6,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AwsReport } from 'api/reports/awsReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/view/components/groupBy/groupBy'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/awsDetails/detailsTable.styles.ts b/src/pages/views/details/awsDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/view/details/awsDetails/detailsTable.styles.ts rename to src/pages/views/details/awsDetails/detailsTable.styles.ts diff --git a/src/pages/view/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx similarity index 99% rename from src/pages/view/details/awsDetails/detailsTable.tsx rename to src/pages/views/details/awsDetails/detailsTable.tsx index 5570befcf..99e767eb7 100644 --- a/src/pages/view/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/view/details/components/actions/actions'; +import { Actions } from 'pages/views/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/view/details/awsDetails/detailsToolbar.tsx b/src/pages/views/details/awsDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/view/details/awsDetails/detailsToolbar.tsx rename to src/pages/views/details/awsDetails/detailsToolbar.tsx index 6b622727b..8881b6f6b 100644 --- a/src/pages/view/details/awsDetails/detailsToolbar.tsx +++ b/src/pages/views/details/awsDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { AwsQuery, getQuery } from 'api/queries/awsQuery'; import { orgUnitIdKey, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/awsDetails/index.ts b/src/pages/views/details/awsDetails/index.ts similarity index 100% rename from src/pages/view/details/awsDetails/index.ts rename to src/pages/views/details/awsDetails/index.ts diff --git a/src/pages/view/details/azureBreakdown/azureBreakdown.tsx b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx similarity index 95% rename from src/pages/view/details/azureBreakdown/azureBreakdown.tsx rename to src/pages/views/details/azureBreakdown/azureBreakdown.tsx index ae8daef00..41d65bbe4 100644 --- a/src/pages/view/details/azureBreakdown/azureBreakdown.tsx +++ b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; +import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/azureBreakdown/costOverview.tsx b/src/pages/views/details/azureBreakdown/costOverview.tsx similarity index 89% rename from src/pages/view/details/azureBreakdown/costOverview.tsx rename to src/pages/views/details/azureBreakdown/costOverview.tsx index fb763a2db..c2a7774c3 100644 --- a/src/pages/view/details/azureBreakdown/costOverview.tsx +++ b/src/pages/views/details/azureBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/views/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { azureCostOverviewSelectors } from 'store/breakdown/costOverview/azureCostOverview'; diff --git a/src/pages/view/details/azureBreakdown/historicalData.tsx b/src/pages/views/details/azureBreakdown/historicalData.tsx similarity index 88% rename from src/pages/view/details/azureBreakdown/historicalData.tsx rename to src/pages/views/details/azureBreakdown/historicalData.tsx index 37999f379..ddfe9a911 100644 --- a/src/pages/view/details/azureBreakdown/historicalData.tsx +++ b/src/pages/views/details/azureBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/views/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { azureHistoricalDataSelectors } from 'store/breakdown/historicalData/azureHistoricalData'; diff --git a/src/pages/view/details/azureBreakdown/index.ts b/src/pages/views/details/azureBreakdown/index.ts similarity index 100% rename from src/pages/view/details/azureBreakdown/index.ts rename to src/pages/views/details/azureBreakdown/index.ts diff --git a/src/pages/view/details/azureDetails/azureDetails.styles.ts b/src/pages/views/details/azureDetails/azureDetails.styles.ts similarity index 100% rename from src/pages/view/details/azureDetails/azureDetails.styles.ts rename to src/pages/views/details/azureDetails/azureDetails.styles.ts diff --git a/src/pages/view/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx similarity index 98% rename from src/pages/view/details/azureDetails/azureDetails.tsx rename to src/pages/views/details/azureDetails/azureDetails.tsx index cea85472b..16d269206 100644 --- a/src/pages/view/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -10,9 +10,9 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { ExportModal } from 'pages/view/components/export/exportModal'; -import { getGroupByTagKey } from 'pages/view/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/azureDetails/azureDetailsTable.scss b/src/pages/views/details/azureDetails/azureDetailsTable.scss similarity index 100% rename from src/pages/view/details/azureDetails/azureDetailsTable.scss rename to src/pages/views/details/azureDetails/azureDetailsTable.scss diff --git a/src/pages/view/details/azureDetails/detailsHeader.styles.ts b/src/pages/views/details/azureDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/view/details/azureDetails/detailsHeader.styles.ts rename to src/pages/views/details/azureDetails/detailsHeader.styles.ts diff --git a/src/pages/view/details/azureDetails/detailsHeader.tsx b/src/pages/views/details/azureDetails/detailsHeader.tsx similarity index 98% rename from src/pages/view/details/azureDetails/detailsHeader.tsx rename to src/pages/views/details/azureDetails/detailsHeader.tsx index 61d99603f..b062e2ec2 100644 --- a/src/pages/view/details/azureDetails/detailsHeader.tsx +++ b/src/pages/views/details/azureDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { AzureReport } from 'api/reports/azureReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/view/components/groupBy/groupBy'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/azureDetails/detailsTable.styles.ts b/src/pages/views/details/azureDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/view/details/azureDetails/detailsTable.styles.ts rename to src/pages/views/details/azureDetails/detailsTable.styles.ts diff --git a/src/pages/view/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx similarity index 99% rename from src/pages/view/details/azureDetails/detailsTable.tsx rename to src/pages/views/details/azureDetails/detailsTable.tsx index fb8ba9484..7318d3ce8 100644 --- a/src/pages/view/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { AzureReport } from 'api/reports/azureReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/view/details/components/actions/actions'; +import { Actions } from 'pages/views/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/view/details/azureDetails/detailsToolbar.tsx b/src/pages/views/details/azureDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/view/details/azureDetails/detailsToolbar.tsx rename to src/pages/views/details/azureDetails/detailsToolbar.tsx index 94db65f76..253974433 100644 --- a/src/pages/view/details/azureDetails/detailsToolbar.tsx +++ b/src/pages/views/details/azureDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { AzureQuery, getQuery } from 'api/queries/azureQuery'; import { tagKey } from 'api/queries/query'; import { AzureTag } from 'api/tags/azureTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/azureDetails/index.ts b/src/pages/views/details/azureDetails/index.ts similarity index 100% rename from src/pages/view/details/azureDetails/index.ts rename to src/pages/views/details/azureDetails/index.ts diff --git a/src/pages/view/details/components/actions/actions.tsx b/src/pages/views/details/components/actions/actions.tsx similarity index 98% rename from src/pages/view/details/components/actions/actions.tsx rename to src/pages/views/details/components/actions/actions.tsx index d5ab4985a..a4671ef86 100644 --- a/src/pages/view/details/components/actions/actions.tsx +++ b/src/pages/views/details/components/actions/actions.tsx @@ -3,7 +3,7 @@ import { ProviderType } from 'api/providers'; import { Query } from 'api/queries/query'; import { tagPrefix } from 'api/queries/query'; import { ReportPathsType } from 'api/reports/report'; -import { ExportModal } from 'pages/view/components/export/exportModal'; +import { ExportModal } from 'pages/views/components/export/exportModal'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/components/breakdown/breakdown.styles.ts b/src/pages/views/details/components/breakdown/breakdown.styles.ts similarity index 100% rename from src/pages/view/details/components/breakdown/breakdown.styles.ts rename to src/pages/views/details/components/breakdown/breakdown.styles.ts diff --git a/src/pages/view/details/components/breakdown/breakdownBase.tsx b/src/pages/views/details/components/breakdown/breakdownBase.tsx similarity index 100% rename from src/pages/view/details/components/breakdown/breakdownBase.tsx rename to src/pages/views/details/components/breakdown/breakdownBase.tsx diff --git a/src/pages/view/details/components/breakdown/breakdownHeader.scss b/src/pages/views/details/components/breakdown/breakdownHeader.scss similarity index 100% rename from src/pages/view/details/components/breakdown/breakdownHeader.scss rename to src/pages/views/details/components/breakdown/breakdownHeader.scss diff --git a/src/pages/view/details/components/breakdown/breakdownHeader.styles.ts b/src/pages/views/details/components/breakdown/breakdownHeader.styles.ts similarity index 100% rename from src/pages/view/details/components/breakdown/breakdownHeader.styles.ts rename to src/pages/views/details/components/breakdown/breakdownHeader.styles.ts diff --git a/src/pages/view/details/components/breakdown/breakdownHeader.tsx b/src/pages/views/details/components/breakdown/breakdownHeader.tsx similarity index 98% rename from src/pages/view/details/components/breakdown/breakdownHeader.tsx rename to src/pages/views/details/components/breakdown/breakdownHeader.tsx index 5c1fe7b11..3f40c374c 100644 --- a/src/pages/view/details/components/breakdown/breakdownHeader.tsx +++ b/src/pages/views/details/components/breakdown/breakdownHeader.tsx @@ -5,7 +5,7 @@ import { AngleLeftIcon } from '@patternfly/react-icons/dist/js/icons/angle-left- import { breakdownDescKey, breakdownTitleKey, getQueryRoute, orgUnitIdKey, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; -import { TagLink } from 'pages/view/details/components/tag/tagLink'; +import { TagLink } from 'pages/views/details/components/tag/tagLink'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/view/details/components/cluster/cluster.styles.ts b/src/pages/views/details/components/cluster/cluster.styles.ts similarity index 100% rename from src/pages/view/details/components/cluster/cluster.styles.ts rename to src/pages/views/details/components/cluster/cluster.styles.ts diff --git a/src/pages/view/details/components/cluster/cluster.tsx b/src/pages/views/details/components/cluster/cluster.tsx similarity index 100% rename from src/pages/view/details/components/cluster/cluster.tsx rename to src/pages/views/details/components/cluster/cluster.tsx diff --git a/src/pages/view/details/components/cluster/clusterModal.scss b/src/pages/views/details/components/cluster/clusterModal.scss similarity index 100% rename from src/pages/view/details/components/cluster/clusterModal.scss rename to src/pages/views/details/components/cluster/clusterModal.scss diff --git a/src/pages/view/details/components/cluster/clusterModal.styles.ts b/src/pages/views/details/components/cluster/clusterModal.styles.ts similarity index 100% rename from src/pages/view/details/components/cluster/clusterModal.styles.ts rename to src/pages/views/details/components/cluster/clusterModal.styles.ts diff --git a/src/pages/view/details/components/cluster/clusterModal.tsx b/src/pages/views/details/components/cluster/clusterModal.tsx similarity index 100% rename from src/pages/view/details/components/cluster/clusterModal.tsx rename to src/pages/views/details/components/cluster/clusterModal.tsx diff --git a/src/pages/view/details/components/cluster/clusterView.tsx b/src/pages/views/details/components/cluster/clusterView.tsx similarity index 100% rename from src/pages/view/details/components/cluster/clusterView.tsx rename to src/pages/views/details/components/cluster/clusterView.tsx diff --git a/src/pages/view/details/components/costChart/costChart.styles.ts b/src/pages/views/details/components/costChart/costChart.styles.ts similarity index 100% rename from src/pages/view/details/components/costChart/costChart.styles.ts rename to src/pages/views/details/components/costChart/costChart.styles.ts diff --git a/src/pages/view/details/components/costChart/costChart.tsx b/src/pages/views/details/components/costChart/costChart.tsx similarity index 100% rename from src/pages/view/details/components/costChart/costChart.tsx rename to src/pages/views/details/components/costChart/costChart.tsx diff --git a/src/pages/view/details/components/costOverview/costOverviewBase.tsx b/src/pages/views/details/components/costOverview/costOverviewBase.tsx similarity index 94% rename from src/pages/view/details/components/costOverview/costOverviewBase.tsx rename to src/pages/views/details/components/costOverview/costOverviewBase.tsx index 2b33421cb..aaf75d724 100644 --- a/src/pages/view/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/views/details/components/costOverview/costOverviewBase.tsx @@ -12,11 +12,11 @@ import { import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons'; import { orgUnitIdKey, Query, tagPrefix } from 'api/queries/query'; import { Report } from 'api/reports/report'; -import { Cluster } from 'pages/view/details/components/cluster/cluster'; -import { CostChart } from 'pages/view/details/components/costChart/costChart'; -import { SummaryCard } from 'pages/view/details/components/summary/summaryCard'; -import { UsageChart } from 'pages/view/details/components/usageChart/usageChart'; -import { styles } from 'pages/view/details/ocpDetails/detailsHeader.styles'; +import { Cluster } from 'pages/views/details/components/cluster/cluster'; +import { CostChart } from 'pages/views/details/components/costChart/costChart'; +import { SummaryCard } from 'pages/views/details/components/summary/summaryCard'; +import { UsageChart } from 'pages/views/details/components/usageChart/usageChart'; +import { styles } from 'pages/views/details/ocpDetails/detailsHeader.styles'; import React from 'react'; import { WithTranslation } from 'react-i18next'; import { CostOverviewWidget, CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; diff --git a/src/pages/view/details/components/historicalData/historicalChart.styles.ts b/src/pages/views/details/components/historicalData/historicalChart.styles.ts similarity index 100% rename from src/pages/view/details/components/historicalData/historicalChart.styles.ts rename to src/pages/views/details/components/historicalData/historicalChart.styles.ts diff --git a/src/pages/view/details/components/historicalData/historicalDataBase.tsx b/src/pages/views/details/components/historicalData/historicalDataBase.tsx similarity index 100% rename from src/pages/view/details/components/historicalData/historicalDataBase.tsx rename to src/pages/views/details/components/historicalData/historicalDataBase.tsx diff --git a/src/pages/view/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx similarity index 100% rename from src/pages/view/details/components/historicalData/historicalDataCostChart.tsx rename to src/pages/views/details/components/historicalData/historicalDataCostChart.tsx diff --git a/src/pages/view/details/components/historicalData/historicalDataTrendChart.tsx b/src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx similarity index 100% rename from src/pages/view/details/components/historicalData/historicalDataTrendChart.tsx rename to src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx diff --git a/src/pages/view/details/components/historicalData/historicalDataUsageChart.tsx b/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx similarity index 100% rename from src/pages/view/details/components/historicalData/historicalDataUsageChart.tsx rename to src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx diff --git a/src/pages/view/details/components/priceList/noRatesState.styles.ts b/src/pages/views/details/components/priceList/noRatesState.styles.ts similarity index 100% rename from src/pages/view/details/components/priceList/noRatesState.styles.ts rename to src/pages/views/details/components/priceList/noRatesState.styles.ts diff --git a/src/pages/view/details/components/priceList/noRatesState.tsx b/src/pages/views/details/components/priceList/noRatesState.tsx similarity index 100% rename from src/pages/view/details/components/priceList/noRatesState.tsx rename to src/pages/views/details/components/priceList/noRatesState.tsx diff --git a/src/pages/view/details/components/priceList/priceListTable.tsx b/src/pages/views/details/components/priceList/priceListTable.tsx similarity index 100% rename from src/pages/view/details/components/priceList/priceListTable.tsx rename to src/pages/views/details/components/priceList/priceListTable.tsx diff --git a/src/pages/view/details/components/summary/summary.styles.ts b/src/pages/views/details/components/summary/summary.styles.ts similarity index 100% rename from src/pages/view/details/components/summary/summary.styles.ts rename to src/pages/views/details/components/summary/summary.styles.ts diff --git a/src/pages/view/details/components/summary/summaryCard.styles.ts b/src/pages/views/details/components/summary/summaryCard.styles.ts similarity index 100% rename from src/pages/view/details/components/summary/summaryCard.styles.ts rename to src/pages/views/details/components/summary/summaryCard.styles.ts diff --git a/src/pages/view/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx similarity index 98% rename from src/pages/view/details/components/summary/summaryCard.tsx rename to src/pages/views/details/components/summary/summaryCard.tsx index 8f8e4dc97..210794601 100644 --- a/src/pages/view/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -13,7 +13,7 @@ import { getQuery, orgUnitIdKey, Query } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { ReportSummaryItem, ReportSummaryItems } from 'components/reports/reportSummary'; -import { SummaryModal } from 'pages/view/details/components/summary/summaryModal'; +import { SummaryModal } from 'pages/views/details/components/summary/summaryModal'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/components/summary/summaryModal.scss b/src/pages/views/details/components/summary/summaryModal.scss similarity index 100% rename from src/pages/view/details/components/summary/summaryModal.scss rename to src/pages/views/details/components/summary/summaryModal.scss diff --git a/src/pages/view/details/components/summary/summaryModal.styles.ts b/src/pages/views/details/components/summary/summaryModal.styles.ts similarity index 100% rename from src/pages/view/details/components/summary/summaryModal.styles.ts rename to src/pages/views/details/components/summary/summaryModal.styles.ts diff --git a/src/pages/view/details/components/summary/summaryModal.tsx b/src/pages/views/details/components/summary/summaryModal.tsx similarity index 100% rename from src/pages/view/details/components/summary/summaryModal.tsx rename to src/pages/views/details/components/summary/summaryModal.tsx diff --git a/src/pages/view/details/components/summary/summaryModalView.tsx b/src/pages/views/details/components/summary/summaryModalView.tsx similarity index 100% rename from src/pages/view/details/components/summary/summaryModalView.tsx rename to src/pages/views/details/components/summary/summaryModalView.tsx diff --git a/src/pages/view/details/components/summary/summaryView.tsx b/src/pages/views/details/components/summary/summaryView.tsx similarity index 100% rename from src/pages/view/details/components/summary/summaryView.tsx rename to src/pages/views/details/components/summary/summaryView.tsx diff --git a/src/pages/view/details/components/tag/tag.styles.ts b/src/pages/views/details/components/tag/tag.styles.ts similarity index 100% rename from src/pages/view/details/components/tag/tag.styles.ts rename to src/pages/views/details/components/tag/tag.styles.ts diff --git a/src/pages/view/details/components/tag/tag.tsx b/src/pages/views/details/components/tag/tag.tsx similarity index 100% rename from src/pages/view/details/components/tag/tag.tsx rename to src/pages/views/details/components/tag/tag.tsx diff --git a/src/pages/view/details/components/tag/tagLink.tsx b/src/pages/views/details/components/tag/tagLink.tsx similarity index 100% rename from src/pages/view/details/components/tag/tagLink.tsx rename to src/pages/views/details/components/tag/tagLink.tsx diff --git a/src/pages/view/details/components/tag/tagModal.styles.ts b/src/pages/views/details/components/tag/tagModal.styles.ts similarity index 100% rename from src/pages/view/details/components/tag/tagModal.styles.ts rename to src/pages/views/details/components/tag/tagModal.styles.ts diff --git a/src/pages/view/details/components/tag/tagModal.tsx b/src/pages/views/details/components/tag/tagModal.tsx similarity index 100% rename from src/pages/view/details/components/tag/tagModal.tsx rename to src/pages/views/details/components/tag/tagModal.tsx diff --git a/src/pages/view/details/components/tag/tagView.tsx b/src/pages/views/details/components/tag/tagView.tsx similarity index 100% rename from src/pages/view/details/components/tag/tagView.tsx rename to src/pages/views/details/components/tag/tagView.tsx diff --git a/src/pages/view/details/components/usageChart/usageChart.styles.ts b/src/pages/views/details/components/usageChart/usageChart.styles.ts similarity index 100% rename from src/pages/view/details/components/usageChart/usageChart.styles.ts rename to src/pages/views/details/components/usageChart/usageChart.styles.ts diff --git a/src/pages/view/details/components/usageChart/usageChart.tsx b/src/pages/views/details/components/usageChart/usageChart.tsx similarity index 100% rename from src/pages/view/details/components/usageChart/usageChart.tsx rename to src/pages/views/details/components/usageChart/usageChart.tsx diff --git a/src/pages/view/details/gcpBreakdown/costOverview.tsx b/src/pages/views/details/gcpBreakdown/costOverview.tsx similarity index 89% rename from src/pages/view/details/gcpBreakdown/costOverview.tsx rename to src/pages/views/details/gcpBreakdown/costOverview.tsx index 3d34adbda..e86781193 100644 --- a/src/pages/view/details/gcpBreakdown/costOverview.tsx +++ b/src/pages/views/details/gcpBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/views/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { gcpCostOverviewSelectors } from 'store/breakdown/costOverview/gcpCostOverview'; diff --git a/src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx similarity index 95% rename from src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx rename to src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx index f8e1e3d63..88bded220 100644 --- a/src/pages/view/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, breakdownTitleKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; +import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/gcpBreakdown/historicalData.tsx b/src/pages/views/details/gcpBreakdown/historicalData.tsx similarity index 88% rename from src/pages/view/details/gcpBreakdown/historicalData.tsx rename to src/pages/views/details/gcpBreakdown/historicalData.tsx index b21784cc4..a7f348d2b 100644 --- a/src/pages/view/details/gcpBreakdown/historicalData.tsx +++ b/src/pages/views/details/gcpBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/views/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { gcpHistoricalDataSelectors } from 'store/breakdown/historicalData/gcpHistoricalData'; diff --git a/src/pages/view/details/gcpBreakdown/index.ts b/src/pages/views/details/gcpBreakdown/index.ts similarity index 100% rename from src/pages/view/details/gcpBreakdown/index.ts rename to src/pages/views/details/gcpBreakdown/index.ts diff --git a/src/pages/view/details/gcpDetails/detailsHeader.styles.ts b/src/pages/views/details/gcpDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/view/details/gcpDetails/detailsHeader.styles.ts rename to src/pages/views/details/gcpDetails/detailsHeader.styles.ts diff --git a/src/pages/view/details/gcpDetails/detailsHeader.tsx b/src/pages/views/details/gcpDetails/detailsHeader.tsx similarity index 98% rename from src/pages/view/details/gcpDetails/detailsHeader.tsx rename to src/pages/views/details/gcpDetails/detailsHeader.tsx index f00df947e..62a79032a 100644 --- a/src/pages/view/details/gcpDetails/detailsHeader.tsx +++ b/src/pages/views/details/gcpDetails/detailsHeader.tsx @@ -5,7 +5,7 @@ import { getProvidersQuery } from 'api/queries/providersQuery'; import { GcpReport } from 'api/reports/gcpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/view/components/groupBy/groupBy'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/gcpDetails/detailsTable.styles.ts b/src/pages/views/details/gcpDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/view/details/gcpDetails/detailsTable.styles.ts rename to src/pages/views/details/gcpDetails/detailsTable.styles.ts diff --git a/src/pages/view/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx similarity index 99% rename from src/pages/view/details/gcpDetails/detailsTable.tsx rename to src/pages/views/details/gcpDetails/detailsTable.tsx index a0b468fe8..8b84873c3 100644 --- a/src/pages/view/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { GcpReport } from 'api/reports/gcpReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/view/details/components/actions/actions'; +import { Actions } from 'pages/views/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/view/details/gcpDetails/detailsToolbar.tsx b/src/pages/views/details/gcpDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/view/details/gcpDetails/detailsToolbar.tsx rename to src/pages/views/details/gcpDetails/detailsToolbar.tsx index ddeb262e0..e7b727052 100644 --- a/src/pages/view/details/gcpDetails/detailsToolbar.tsx +++ b/src/pages/views/details/gcpDetails/detailsToolbar.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { GcpQuery, getQuery } from 'api/queries/gcpQuery'; import { tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/gcpDetails/gcpDetails.styles.ts b/src/pages/views/details/gcpDetails/gcpDetails.styles.ts similarity index 100% rename from src/pages/view/details/gcpDetails/gcpDetails.styles.ts rename to src/pages/views/details/gcpDetails/gcpDetails.styles.ts diff --git a/src/pages/view/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx similarity index 98% rename from src/pages/view/details/gcpDetails/gcpDetails.tsx rename to src/pages/views/details/gcpDetails/gcpDetails.tsx index a2f627de5..e44263cfa 100644 --- a/src/pages/view/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -10,9 +10,9 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { ExportModal } from 'pages/view/components/export/exportModal'; -import { getGroupByTagKey } from 'pages/view/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/gcpDetails/gcpDetailsTable.scss b/src/pages/views/details/gcpDetails/gcpDetailsTable.scss similarity index 100% rename from src/pages/view/details/gcpDetails/gcpDetailsTable.scss rename to src/pages/views/details/gcpDetails/gcpDetailsTable.scss diff --git a/src/pages/view/details/gcpDetails/index.ts b/src/pages/views/details/gcpDetails/index.ts similarity index 100% rename from src/pages/view/details/gcpDetails/index.ts rename to src/pages/views/details/gcpDetails/index.ts diff --git a/src/pages/view/details/ocpBreakdown/costOverview.tsx b/src/pages/views/details/ocpBreakdown/costOverview.tsx similarity index 89% rename from src/pages/view/details/ocpBreakdown/costOverview.tsx rename to src/pages/views/details/ocpBreakdown/costOverview.tsx index 72e7c84f8..e6ae7cb03 100644 --- a/src/pages/view/details/ocpBreakdown/costOverview.tsx +++ b/src/pages/views/details/ocpBreakdown/costOverview.tsx @@ -1,4 +1,4 @@ -import { CostOverviewBase } from 'pages/view/details/components/costOverview/costOverviewBase'; +import { CostOverviewBase } from 'pages/views/details/components/costOverview/costOverviewBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { ocpCostOverviewSelectors } from 'store/breakdown/costOverview/ocpCostOverview'; diff --git a/src/pages/view/details/ocpBreakdown/historicalData.tsx b/src/pages/views/details/ocpBreakdown/historicalData.tsx similarity index 88% rename from src/pages/view/details/ocpBreakdown/historicalData.tsx rename to src/pages/views/details/ocpBreakdown/historicalData.tsx index 7aa4912d7..596387462 100644 --- a/src/pages/view/details/ocpBreakdown/historicalData.tsx +++ b/src/pages/views/details/ocpBreakdown/historicalData.tsx @@ -1,4 +1,4 @@ -import { HistoricalDataBase } from 'pages/view/details/components/historicalData/historicalDataBase'; +import { HistoricalDataBase } from 'pages/views/details/components/historicalData/historicalDataBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { ocpHistoricalDataSelectors } from 'store/breakdown/historicalData/ocpHistoricalData'; diff --git a/src/pages/view/details/ocpBreakdown/index.ts b/src/pages/views/details/ocpBreakdown/index.ts similarity index 100% rename from src/pages/view/details/ocpBreakdown/index.ts rename to src/pages/views/details/ocpBreakdown/index.ts diff --git a/src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx similarity index 95% rename from src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx rename to src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx index c5cd9c0ea..1f903829a 100644 --- a/src/pages/view/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx @@ -5,8 +5,8 @@ import { breakdownDescKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; -import BreakdownBase from 'pages/view/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/view/utils/groupBy'; +import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/ocpDetails/detailsHeader.styles.ts b/src/pages/views/details/ocpDetails/detailsHeader.styles.ts similarity index 100% rename from src/pages/view/details/ocpDetails/detailsHeader.styles.ts rename to src/pages/views/details/ocpDetails/detailsHeader.styles.ts diff --git a/src/pages/view/details/ocpDetails/detailsHeader.tsx b/src/pages/views/details/ocpDetails/detailsHeader.tsx similarity index 99% rename from src/pages/view/details/ocpDetails/detailsHeader.tsx rename to src/pages/views/details/ocpDetails/detailsHeader.tsx index 5abab9f3e..9018c08d7 100644 --- a/src/pages/view/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/views/details/ocpDetails/detailsHeader.tsx @@ -7,7 +7,7 @@ import { OcpReport } from 'api/reports/ocpReports'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { GroupBy } from 'pages/view/components/groupBy/groupBy'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/ocpDetails/detailsTable.scss b/src/pages/views/details/ocpDetails/detailsTable.scss similarity index 100% rename from src/pages/view/details/ocpDetails/detailsTable.scss rename to src/pages/views/details/ocpDetails/detailsTable.scss diff --git a/src/pages/view/details/ocpDetails/detailsTable.styles.ts b/src/pages/views/details/ocpDetails/detailsTable.styles.ts similarity index 100% rename from src/pages/view/details/ocpDetails/detailsTable.styles.ts rename to src/pages/views/details/ocpDetails/detailsTable.styles.ts diff --git a/src/pages/view/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx similarity index 99% rename from src/pages/view/details/ocpDetails/detailsTable.tsx rename to src/pages/views/details/ocpDetails/detailsTable.tsx index bd2246433..897acd134 100644 --- a/src/pages/view/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -10,7 +10,7 @@ import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; -import { Actions } from 'pages/view/details/components/actions/actions'; +import { Actions } from 'pages/views/details/components/actions/actions'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; diff --git a/src/pages/view/details/ocpDetails/detailsToolbar.tsx b/src/pages/views/details/ocpDetails/detailsToolbar.tsx similarity index 98% rename from src/pages/view/details/ocpDetails/detailsToolbar.tsx rename to src/pages/views/details/ocpDetails/detailsToolbar.tsx index 718a7577b..e1ab51ea9 100644 --- a/src/pages/view/details/ocpDetails/detailsToolbar.tsx +++ b/src/pages/views/details/ocpDetails/detailsToolbar.tsx @@ -3,7 +3,7 @@ import { getQuery, OcpQuery } from 'api/queries/ocpQuery'; import { tagKey } from 'api/queries/query'; import { OcpTag } from 'api/tags/ocpTags'; import { TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/details/ocpDetails/index.ts b/src/pages/views/details/ocpDetails/index.ts similarity index 100% rename from src/pages/view/details/ocpDetails/index.ts rename to src/pages/views/details/ocpDetails/index.ts diff --git a/src/pages/view/details/ocpDetails/ocpDetails.styles.ts b/src/pages/views/details/ocpDetails/ocpDetails.styles.ts similarity index 100% rename from src/pages/view/details/ocpDetails/ocpDetails.styles.ts rename to src/pages/views/details/ocpDetails/ocpDetails.styles.ts diff --git a/src/pages/view/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx similarity index 98% rename from src/pages/view/details/ocpDetails/ocpDetails.tsx rename to src/pages/views/details/ocpDetails/ocpDetails.tsx index b85fc37b0..cc8cd09b1 100644 --- a/src/pages/view/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -10,9 +10,9 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { ExportModal } from 'pages/view/components/export/exportModal'; -import { getGroupByTagKey } from 'pages/view/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/dateRange.tsx b/src/pages/views/explorer/dateRange.tsx similarity index 100% rename from src/pages/view/explorer/dateRange.tsx rename to src/pages/views/explorer/dateRange.tsx diff --git a/src/pages/view/explorer/explorer.styles.ts b/src/pages/views/explorer/explorer.styles.ts similarity index 100% rename from src/pages/view/explorer/explorer.styles.ts rename to src/pages/views/explorer/explorer.styles.ts diff --git a/src/pages/view/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx similarity index 98% rename from src/pages/view/explorer/explorer.tsx rename to src/pages/views/explorer/explorer.tsx index db5d68b78..c62a35808 100644 --- a/src/pages/view/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -11,9 +11,9 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; -import { ExportModal } from 'pages/view/components/export/exportModal'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/view/utils/groupBy'; -import { addQueryFilter, removeQueryFilter } from 'pages/view/utils/query'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/explorerChart.styles.ts b/src/pages/views/explorer/explorerChart.styles.ts similarity index 100% rename from src/pages/view/explorer/explorerChart.styles.ts rename to src/pages/views/explorer/explorerChart.styles.ts diff --git a/src/pages/view/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx similarity index 100% rename from src/pages/view/explorer/explorerChart.tsx rename to src/pages/views/explorer/explorerChart.tsx diff --git a/src/pages/view/explorer/explorerFilter.styles.ts b/src/pages/views/explorer/explorerFilter.styles.ts similarity index 100% rename from src/pages/view/explorer/explorerFilter.styles.ts rename to src/pages/views/explorer/explorerFilter.styles.ts diff --git a/src/pages/view/explorer/explorerFilter.tsx b/src/pages/views/explorer/explorerFilter.tsx similarity index 98% rename from src/pages/view/explorer/explorerFilter.tsx rename to src/pages/views/explorer/explorerFilter.tsx index be8a72aa8..b2a373f79 100644 --- a/src/pages/view/explorer/explorerFilter.tsx +++ b/src/pages/views/explorer/explorerFilter.tsx @@ -2,7 +2,7 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; import { Org, OrgPathsType, OrgType } from 'api/orgs/org'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagKey } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/explorerHeader.styles.ts b/src/pages/views/explorer/explorerHeader.styles.ts similarity index 100% rename from src/pages/view/explorer/explorerHeader.styles.ts rename to src/pages/views/explorer/explorerHeader.styles.ts diff --git a/src/pages/view/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx similarity index 98% rename from src/pages/view/explorer/explorerHeader.tsx rename to src/pages/views/explorer/explorerHeader.tsx index 0d59c1b6d..a3381a773 100644 --- a/src/pages/view/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -5,8 +5,8 @@ import { getQuery, parseQuery, Query } from 'api/queries/query'; import { getUserAccessQuery } from 'api/queries/userAccessQuery'; import { UserAccess, UserAccessType } from 'api/userAccess'; import { AxiosError } from 'axios'; -import { GroupBy } from 'pages/view/components/groupBy/groupBy'; -import { Perspective } from 'pages/view/components/perspective/perspective'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; +import { Perspective } from 'pages/views/components/perspective/perspective'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/explorerTable.scss b/src/pages/views/explorer/explorerTable.scss similarity index 100% rename from src/pages/view/explorer/explorerTable.scss rename to src/pages/views/explorer/explorerTable.scss diff --git a/src/pages/view/explorer/explorerTable.styles.ts b/src/pages/views/explorer/explorerTable.styles.ts similarity index 100% rename from src/pages/view/explorer/explorerTable.styles.ts rename to src/pages/views/explorer/explorerTable.styles.ts diff --git a/src/pages/view/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx similarity index 99% rename from src/pages/view/explorer/explorerTable.tsx rename to src/pages/views/explorer/explorerTable.tsx index eee284bc3..507c05ee6 100644 --- a/src/pages/view/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/view/utils/groupBy'; +import { getGroupByOrg, getGroupByTagKey } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/explorerToolbar.tsx b/src/pages/views/explorer/explorerToolbar.tsx similarity index 96% rename from src/pages/view/explorer/explorerToolbar.tsx rename to src/pages/views/explorer/explorerToolbar.tsx index 10cae0254..44016c399 100644 --- a/src/pages/view/explorer/explorerToolbar.tsx +++ b/src/pages/views/explorer/explorerToolbar.tsx @@ -1,5 +1,5 @@ import { ToolbarChipGroup } from '@patternfly/react-core'; -import { DataToolbar } from 'pages/view/components/dataToolbar/dataToolbar'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts similarity index 100% rename from src/pages/view/explorer/explorerUtils.ts rename to src/pages/views/explorer/explorerUtils.ts diff --git a/src/pages/view/explorer/index.ts b/src/pages/views/explorer/index.ts similarity index 100% rename from src/pages/view/explorer/index.ts rename to src/pages/views/explorer/index.ts diff --git a/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx b/src/pages/views/overview/awsCloudDashboard/awsCloudDashboard.tsx similarity index 94% rename from src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx rename to src/pages/views/overview/awsCloudDashboard/awsCloudDashboard.tsx index 576d0996b..933ae7b0f 100644 --- a/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboard.tsx +++ b/src/pages/views/overview/awsCloudDashboard/awsCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts b/src/pages/views/overview/awsCloudDashboard/awsCloudDashboardWidget.styles.ts similarity index 100% rename from src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.styles.ts rename to src/pages/views/overview/awsCloudDashboard/awsCloudDashboardWidget.styles.ts diff --git a/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx b/src/pages/views/overview/awsCloudDashboard/awsCloudDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx rename to src/pages/views/overview/awsCloudDashboard/awsCloudDashboardWidget.tsx index 33b0cddb3..a188b31d5 100644 --- a/src/pages/view/dashboard/awsCloudDashboard/awsCloudDashboardWidget.tsx +++ b/src/pages/views/overview/awsCloudDashboard/awsCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/awsCloudDashboard/index.ts b/src/pages/views/overview/awsCloudDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/awsCloudDashboard/index.ts rename to src/pages/views/overview/awsCloudDashboard/index.ts diff --git a/src/pages/view/dashboard/awsDashboard/awsDashboard.tsx b/src/pages/views/overview/awsDashboard/awsDashboard.tsx similarity index 93% rename from src/pages/view/dashboard/awsDashboard/awsDashboard.tsx rename to src/pages/views/overview/awsDashboard/awsDashboard.tsx index 6f2d24c5a..8547e72c7 100644 --- a/src/pages/view/dashboard/awsDashboard/awsDashboard.tsx +++ b/src/pages/views/overview/awsDashboard/awsDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.test.tsx b/src/pages/views/overview/awsDashboard/awsDashboardWidget.test.tsx similarity index 100% rename from src/pages/view/dashboard/awsDashboard/awsDashboardWidget.test.tsx rename to src/pages/views/overview/awsDashboard/awsDashboardWidget.test.tsx diff --git a/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx b/src/pages/views/overview/awsDashboard/awsDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx rename to src/pages/views/overview/awsDashboard/awsDashboardWidget.tsx index 8c45cf6ee..d6647a7df 100644 --- a/src/pages/view/dashboard/awsDashboard/awsDashboardWidget.tsx +++ b/src/pages/views/overview/awsDashboard/awsDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/awsDashboard/index.ts b/src/pages/views/overview/awsDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/awsDashboard/index.ts rename to src/pages/views/overview/awsDashboard/index.ts diff --git a/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx b/src/pages/views/overview/azureCloudDashboard/azureCloudDashboard.tsx similarity index 94% rename from src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx rename to src/pages/views/overview/azureCloudDashboard/azureCloudDashboard.tsx index a78a80cfb..3a32002f7 100644 --- a/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboard.tsx +++ b/src/pages/views/overview/azureCloudDashboard/azureCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx b/src/pages/views/overview/azureCloudDashboard/azureCloudDashboardWidget.tsx similarity index 98% rename from src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx rename to src/pages/views/overview/azureCloudDashboard/azureCloudDashboardWidget.tsx index f287d6cdc..9a9de2475 100644 --- a/src/pages/view/dashboard/azureCloudDashboard/azureCloudDashboardWidget.tsx +++ b/src/pages/views/overview/azureCloudDashboard/azureCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/azureCloudDashboard/index.ts b/src/pages/views/overview/azureCloudDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/azureCloudDashboard/index.ts rename to src/pages/views/overview/azureCloudDashboard/index.ts diff --git a/src/pages/view/dashboard/azureDashboard/azureDashboard.tsx b/src/pages/views/overview/azureDashboard/azureDashboard.tsx similarity index 93% rename from src/pages/view/dashboard/azureDashboard/azureDashboard.tsx rename to src/pages/views/overview/azureDashboard/azureDashboard.tsx index 38f2c6f6b..533d14a6e 100644 --- a/src/pages/view/dashboard/azureDashboard/azureDashboard.tsx +++ b/src/pages/views/overview/azureDashboard/azureDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.test.tsx b/src/pages/views/overview/azureDashboard/azureDashboardWidget.test.tsx similarity index 100% rename from src/pages/view/dashboard/azureDashboard/azureDashboardWidget.test.tsx rename to src/pages/views/overview/azureDashboard/azureDashboardWidget.test.tsx diff --git a/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx b/src/pages/views/overview/azureDashboard/azureDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx rename to src/pages/views/overview/azureDashboard/azureDashboardWidget.tsx index 9bff20ea2..dbbf828f6 100644 --- a/src/pages/view/dashboard/azureDashboard/azureDashboardWidget.tsx +++ b/src/pages/views/overview/azureDashboard/azureDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/azureDashboard/index.ts b/src/pages/views/overview/azureDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/azureDashboard/index.ts rename to src/pages/views/overview/azureDashboard/index.ts diff --git a/src/pages/view/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap b/src/pages/views/overview/components/__snapshots__/dashboardWidget.test.tsx.snap similarity index 100% rename from src/pages/view/dashboard/components/__snapshots__/dashboardWidget.test.tsx.snap rename to src/pages/views/overview/components/__snapshots__/dashboardWidget.test.tsx.snap diff --git a/src/pages/view/dashboard/components/chartComparison.tsx b/src/pages/views/overview/components/chartComparison.tsx similarity index 100% rename from src/pages/view/dashboard/components/chartComparison.tsx rename to src/pages/views/overview/components/chartComparison.tsx diff --git a/src/pages/view/dashboard/components/dashboardBase.tsx b/src/pages/views/overview/components/dashboardBase.tsx similarity index 100% rename from src/pages/view/dashboard/components/dashboardBase.tsx rename to src/pages/views/overview/components/dashboardBase.tsx diff --git a/src/pages/view/dashboard/components/dashboardWidget.styles.ts b/src/pages/views/overview/components/dashboardWidget.styles.ts similarity index 100% rename from src/pages/view/dashboard/components/dashboardWidget.styles.ts rename to src/pages/views/overview/components/dashboardWidget.styles.ts diff --git a/src/pages/view/dashboard/components/dashboardWidget.test.tsx b/src/pages/views/overview/components/dashboardWidget.test.tsx similarity index 97% rename from src/pages/view/dashboard/components/dashboardWidget.test.tsx rename to src/pages/views/overview/components/dashboardWidget.test.tsx index 961e1165b..0cb381220 100644 --- a/src/pages/view/dashboard/components/dashboardWidget.test.tsx +++ b/src/pages/views/overview/components/dashboardWidget.test.tsx @@ -3,7 +3,7 @@ jest.mock('date-fns').mock('date-fns/format'); import { ChartType } from 'components/charts/common/chartDatumUtils'; import { format, getDate, getMonth, startOfMonth } from 'date-fns'; import { shallow } from 'enzyme'; -import { DashboardWidgetBase, DashboardWidgetProps } from 'pages/view/dashboard/components/dashboardWidgetBase'; +import { DashboardWidgetBase, DashboardWidgetProps } from 'pages/views/overview/components/dashboardWidgetBase'; import React from 'react'; import { FetchStatus } from 'store/common'; import { mockDate } from 'testUtils'; diff --git a/src/pages/view/dashboard/components/dashboardWidgetBase.tsx b/src/pages/views/overview/components/dashboardWidgetBase.tsx similarity index 100% rename from src/pages/view/dashboard/components/dashboardWidgetBase.tsx rename to src/pages/views/overview/components/dashboardWidgetBase.tsx diff --git a/src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx b/src/pages/views/overview/gcpDashboard/gcpDashboard.tsx similarity index 93% rename from src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx rename to src/pages/views/overview/gcpDashboard/gcpDashboard.tsx index 8e2b8d2bd..45dbd6bf0 100644 --- a/src/pages/view/dashboard/gcpDashboard/gcpDashboard.tsx +++ b/src/pages/views/overview/gcpDashboard/gcpDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx b/src/pages/views/overview/gcpDashboard/gcpDashboardWidget.test.tsx similarity index 100% rename from src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.test.tsx rename to src/pages/views/overview/gcpDashboard/gcpDashboardWidget.test.tsx diff --git a/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx b/src/pages/views/overview/gcpDashboard/gcpDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx rename to src/pages/views/overview/gcpDashboard/gcpDashboardWidget.tsx index 6dcdcc116..faaafd075 100644 --- a/src/pages/view/dashboard/gcpDashboard/gcpDashboardWidget.tsx +++ b/src/pages/views/overview/gcpDashboard/gcpDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/gcpDashboard/index.ts b/src/pages/views/overview/gcpDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/gcpDashboard/index.ts rename to src/pages/views/overview/gcpDashboard/index.ts diff --git a/src/pages/view/overview/index.ts b/src/pages/views/overview/index.ts similarity index 100% rename from src/pages/view/overview/index.ts rename to src/pages/views/overview/index.ts diff --git a/src/pages/view/dashboard/ocpCloudDashboard/index.ts b/src/pages/views/overview/ocpCloudDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/ocpCloudDashboard/index.ts rename to src/pages/views/overview/ocpCloudDashboard/index.ts diff --git a/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx b/src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboard.tsx similarity index 94% rename from src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx rename to src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboard.tsx index bcef6895c..1c9b0b305 100644 --- a/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard.tsx +++ b/src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx b/src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx similarity index 100% rename from src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx rename to src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboardWidget.test.tsx diff --git a/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx b/src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx rename to src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboardWidget.tsx index faf499948..75d8a601f 100644 --- a/src/pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboardWidget.tsx +++ b/src/pages/views/overview/ocpCloudDashboard/ocpCloudDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpDashboard/index.ts b/src/pages/views/overview/ocpDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/ocpDashboard/index.ts rename to src/pages/views/overview/ocpDashboard/index.ts diff --git a/src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx b/src/pages/views/overview/ocpDashboard/ocpDashboard.tsx similarity index 93% rename from src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx rename to src/pages/views/overview/ocpDashboard/ocpDashboard.tsx index 3d1478a38..8f5be7b1e 100644 --- a/src/pages/view/dashboard/ocpDashboard/ocpDashboard.tsx +++ b/src/pages/views/overview/ocpDashboard/ocpDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts b/src/pages/views/overview/ocpDashboard/ocpDashboardWidget.styles.ts similarity index 100% rename from src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.styles.ts rename to src/pages/views/overview/ocpDashboard/ocpDashboardWidget.styles.ts diff --git a/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx b/src/pages/views/overview/ocpDashboard/ocpDashboardWidget.test.tsx similarity index 100% rename from src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.test.tsx rename to src/pages/views/overview/ocpDashboard/ocpDashboardWidget.test.tsx diff --git a/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx b/src/pages/views/overview/ocpDashboard/ocpDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx rename to src/pages/views/overview/ocpDashboard/ocpDashboardWidget.tsx index cf3aae864..d2ab1c91d 100644 --- a/src/pages/view/dashboard/ocpDashboard/ocpDashboardWidget.tsx +++ b/src/pages/views/overview/ocpDashboard/ocpDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpSupplementaryDashboard/index.ts b/src/pages/views/overview/ocpSupplementaryDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/ocpSupplementaryDashboard/index.ts rename to src/pages/views/overview/ocpSupplementaryDashboard/index.ts diff --git a/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx b/src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx similarity index 94% rename from src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx rename to src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx index a1e70cf6e..17d552c0f 100644 --- a/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx +++ b/src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx b/src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx similarity index 98% rename from src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx rename to src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx index 019d71e21..0fdca5e88 100644 --- a/src/pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx +++ b/src/pages/views/overview/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpUsageDashboard/index.ts b/src/pages/views/overview/ocpUsageDashboard/index.ts similarity index 100% rename from src/pages/view/dashboard/ocpUsageDashboard/index.ts rename to src/pages/views/overview/ocpUsageDashboard/index.ts diff --git a/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx b/src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboard.tsx similarity index 94% rename from src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx rename to src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboard.tsx index b0bb6e39c..1e2218467 100644 --- a/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard.tsx +++ b/src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboard.tsx @@ -1,4 +1,4 @@ -import { DashboardBase } from 'pages/view/dashboard/components/dashboardBase'; +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx b/src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboardWidget.tsx similarity index 97% rename from src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx rename to src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboardWidget.tsx index 74d6d3c2d..1b5a0de44 100644 --- a/src/pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboardWidget.tsx +++ b/src/pages/views/overview/ocpUsageDashboard/ocpUsageDashboardWidget.tsx @@ -2,7 +2,7 @@ import { DashboardWidgetBase, DashboardWidgetOwnProps, DashboardWidgetStateProps, -} from 'pages/view/dashboard/components/dashboardWidgetBase'; +} from 'pages/views/overview/components/dashboardWidgetBase'; import { withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps } from 'store/common'; diff --git a/src/pages/view/overview/overview.scss b/src/pages/views/overview/overview.scss similarity index 100% rename from src/pages/view/overview/overview.scss rename to src/pages/views/overview/overview.scss diff --git a/src/pages/view/overview/overview.styles.ts b/src/pages/views/overview/overview.styles.ts similarity index 100% rename from src/pages/view/overview/overview.styles.ts rename to src/pages/views/overview/overview.styles.ts diff --git a/src/pages/view/overview/overview.tsx b/src/pages/views/overview/overview.tsx similarity index 96% rename from src/pages/view/overview/overview.tsx rename to src/pages/views/overview/overview.tsx index e86f33007..19e29692d 100644 --- a/src/pages/view/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -10,16 +10,16 @@ import { AxiosError } from 'axios'; import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData/noData'; import NoProviders from 'pages/state/noProviders'; -import { Perspective } from 'pages/view/components/perspective/perspective'; -import AwsCloudDashboard from 'pages/view/dashboard/awsCloudDashboard/awsCloudDashboard'; -import AwsDashboard from 'pages/view/dashboard/awsDashboard/awsDashboard'; -import AzureCloudDashboard from 'pages/view/dashboard/azureCloudDashboard/azureCloudDashboard'; -import AzureDashboard from 'pages/view/dashboard/azureDashboard/azureDashboard'; -import GcpDashboard from 'pages/view/dashboard/gcpDashboard/gcpDashboard'; -import OcpCloudDashboard from 'pages/view/dashboard/ocpCloudDashboard/ocpCloudDashboard'; -import OcpDashboard from 'pages/view/dashboard/ocpDashboard/ocpDashboard'; -import OcpSupplementaryDashboard from 'pages/view/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboard'; -import OcpUsageDashboard from 'pages/view/dashboard/ocpUsageDashboard/ocpUsageDashboard'; +import { Perspective } from 'pages/views/components/perspective/perspective'; +import AwsCloudDashboard from 'pages/views/overview/awsCloudDashboard'; +import AwsDashboard from 'pages/views/overview/awsDashboard'; +import AzureCloudDashboard from 'pages/views/overview/azureCloudDashboard'; +import AzureDashboard from 'pages/views/overview/azureDashboard'; +import GcpDashboard from 'pages/views/overview/gcpDashboard'; +import OcpCloudDashboard from 'pages/views/overview/ocpCloudDashboard'; +import OcpDashboard from 'pages/views/overview/ocpDashboard'; +import OcpSupplementaryDashboard from 'pages/views/overview/ocpSupplementaryDashboard'; +import OcpUsageDashboard from 'pages/views/overview/ocpUsageDashboard'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; diff --git a/src/pages/view/utils/groupBy.ts b/src/pages/views/utils/groupBy.ts similarity index 100% rename from src/pages/view/utils/groupBy.ts rename to src/pages/views/utils/groupBy.ts diff --git a/src/pages/view/utils/query.ts b/src/pages/views/utils/query.ts similarity index 100% rename from src/pages/view/utils/query.ts rename to src/pages/views/utils/query.ts diff --git a/src/routes.tsx b/src/routes.tsx index 2f429469e..af3c76da2 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -4,18 +4,18 @@ import React from 'react'; import { Route, Switch } from 'react-router-dom'; const NotFound = asyncComponent(() => import(/* webpackChunkName: "notFound" */ 'pages/state/notFound')); -const AwsBreakdown = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/view/details/awsBreakdown')); -const AwsDetails = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/view/details/awsDetails')); +const AwsBreakdown = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/views/details/awsBreakdown')); +const AwsDetails = asyncComponent(() => import(/* webpackChunkName: "aws" */ 'pages/views/details/awsDetails')); const AzureBreakdown = asyncComponent( - () => import(/* webpackChunkName: "azure" */ 'pages/view/details/azureBreakdown') + () => import(/* webpackChunkName: "azure" */ 'pages/views/details/azureBreakdown') ); -const AzureDetails = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/view/details/azureDetails')); -const Explorer = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/view/explorer/explorer')); -const GcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/view/details/gcpBreakdown')); -const GcpDetails = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/view/details/gcpDetails')); -const OcpDetails = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/view/details/ocpDetails')); -const OcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/view/details/ocpBreakdown')); -const Overview = asyncComponent(() => import(/* webpackChunkName: "overview" */ 'pages/view/overview')); +const AzureDetails = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/views/details/azureDetails')); +const Explorer = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/views/explorer/explorer')); +const GcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/views/details/gcpBreakdown')); +const GcpDetails = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/views/details/gcpDetails')); +const OcpDetails = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/views/details/ocpDetails')); +const OcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/views/details/ocpBreakdown')); +const Overview = asyncComponent(() => import(/* webpackChunkName: "overview" */ 'pages/views/overview')); const CostModelsDetails = asyncComponent( () => import(/* webpackChunkName: "costModels" */ 'pages/costModels/costModelsDetails') ); From b3a23c805e5f7a47d8d678925335b8b3629cdccb Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 22 Feb 2021 19:58:22 -0500 Subject: [PATCH 107/200] fix for GCP compute and storage widget labels and tooltips (#1871) * fix for GCP compute and storage widget labels and tooltips * moved hour in case statements --- src/components/charts/common/chartDatumUtils.ts | 2 ++ src/locales/en.json | 4 ++++ src/utils/formatValue.ts | 4 ++++ 3 files changed, 10 insertions(+) diff --git a/src/components/charts/common/chartDatumUtils.ts b/src/components/charts/common/chartDatumUtils.ts index b8636ce1b..e97b60efb 100644 --- a/src/components/charts/common/chartDatumUtils.ts +++ b/src/components/charts/common/chartDatumUtils.ts @@ -410,10 +410,12 @@ export function getTooltipContent(formatValue) { const lookup = unitLookupKey(unit); switch (lookup) { case 'core-hours': + case 'hour': case 'hrs': case 'gb': case 'gb-hours': case 'gb-mo': + case 'gibibyte month': case 'vm-hours': return i18next.t(`unit_tooltips.${lookup}`, { value: `${formatValue(value, unit, options)}`, diff --git a/src/locales/en.json b/src/locales/en.json index 2bc6535fc..1054d4bba 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -994,6 +994,8 @@ "gb": "{{value}} GB", "gb-hours": "{{value}} GB-hours", "gb-mo": "{{value}} GB-month", + "gibibyte month": "{{value}} GiB-month", + "hour": "{{value}} hours", "hrs": "{{value}} hours", "usd": "{{value}}", "vm-hours": "{{value}} VM-hours" @@ -1004,6 +1006,8 @@ "gb": "GB", "gb-hours": "GB-hours", "gb-mo": "GB-month", + "gibibyte month": "GiB-month", + "hour": "hours", "hours": "hours", "hrs": "hours", "tag-mo": "Tag-month", diff --git a/src/utils/formatValue.ts b/src/utils/formatValue.ts index 2a5936a64..c2064d3b2 100644 --- a/src/utils/formatValue.ts +++ b/src/utils/formatValue.ts @@ -11,7 +11,9 @@ export const unitLookupKey = unit => { case 'gb': case 'gb-hours': case 'gb-mo': + case 'gibibyte month': case 'core-hours': + case 'hour': case 'hrs': case 'tag-mo': case 'vm-hours': @@ -31,10 +33,12 @@ export const formatValue: ValueFormatter = (value: number, unit: string, options case 'gb': case 'gb-hours': case 'gb-mo': + case 'gibibyte month': case 'tag-mo': case 'vm-hours': return formatUsageGb(fValue, lookup, options); case 'core-hours': + case 'hour': case 'hrs': return formatUsageHrs(fValue, lookup, options); default: From e259c7935e6118195b346b8caca53173f32cb010 Mon Sep 17 00:00:00 2001 From: Doug Donahue Date: Tue, 23 Feb 2021 07:59:03 -0500 Subject: [PATCH 108/200] fixed typo in i18n key --- src/locales/en.json | 2 +- src/pages/views/explorer/explorerUtils.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 1054d4bba..ad82cadfb 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -470,7 +470,7 @@ "daily_column_title": "{{date}}-$t(months_abbr.{{month}})", "date_range": { "current_month_to_date": "Current month to date", - "last_sixy_days": "Last 60 days", + "last_sixty_days": "Last 60 days", "last_thirty_days": "Last 30 days", "previous_month_to_date": "Previous month to date" }, diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 40a36267c..339709a58 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -18,7 +18,7 @@ export const enum DateRangeType { currentMonthToDate = 'current_month_to_date', // Current month (Jan 1 - Jan 18) previousMonthToDate = 'previous_month_to_date', // Previous and current month (Dec 1 - Jan 18) lastThirtyDays = 'last_thirty_days', // Last 30 days (Dec 18 - Jan 17) - lastSixtyDays = 'last_sixy_days', // Last 60 days (Nov 18 - Jan 17) + lastSixtyDays = 'last_sixty_days', // Last 60 days (Nov 18 - Jan 17) } // eslint-disable-next-line no-shadow @@ -55,7 +55,7 @@ export const dateRangeOptions: { { label: 'explorer.date_range.current_month_to_date', value: 'current_month_to_date' }, { label: 'explorer.date_range.previous_month_to_date', value: 'previous_month_to_date' }, { label: 'explorer.date_range.last_thirty_days', value: 'last_thirty_days' }, - { label: 'explorer.date_range.last_sixy_days', value: 'last_sixy_days' }, + { label: 'explorer.date_range.last_sixty_days', value: 'last_sixty_days' }, ]; export const groupByAwsOptions: { From a499a8196b2191b7b93be4640ed345ab564af69a Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 23 Feb 2021 10:26:45 -0500 Subject: [PATCH 109/200] Fixed SourceMap warnings in dev mode. --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index b097d5c09..56c25c1ea 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -74,7 +74,7 @@ module.exports = (_env, argv) => { return { stats: stats, mode: isProduction ? 'production' : 'development', - devtool: isProduction ? 'source-map' : 'eval', + devtool: 'source-map', // isProduction ? 'source-map' : 'eval', entry, output: { path: distDir, From 0037fd6af5562a6a628e74d6a3364fdf7a2766dd Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 23 Feb 2021 12:15:10 -0500 Subject: [PATCH 110/200] Gcp page breakdwn cost 1023 (#1877) * fixes for gcp details views(adding project card) * updated gcp cost overview test --- .../gcpCostOverview/gcpCostOverview.test.ts | 9 ++++++++- .../gcpCostOverview/gcpCostOverviewReducer.ts | 17 +++++++++++++++-- .../gcpCostOverview/gcpCostOverviewWidgets.ts | 17 ++++++++++++++--- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts index 4d2f0ce77..0dfd0dad1 100644 --- a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts +++ b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverview.test.ts @@ -6,7 +6,13 @@ import { reportActions } from 'store/reports'; import { gcpCostOverviewStateKey } from './gcpCostOverviewCommon'; import { gcpCostOverviewReducer } from './gcpCostOverviewReducer'; import * as selectors from './gcpCostOverviewSelectors'; -import { accountSummaryWidget, costWidget, regionSummaryWidget, serviceSummaryWidget } from './gcpCostOverviewWidgets'; +import { + accountSummaryWidget, + costWidget, + projectSummaryWidget, + regionSummaryWidget, + serviceSummaryWidget, +} from './gcpCostOverviewWidgets'; const createGcpCostOverviewStore = createMockStoreCreator({ [gcpCostOverviewStateKey]: gcpCostOverviewReducer, @@ -24,6 +30,7 @@ test('default state', () => { expect(selectors.selectCurrentWidgets(state)).toEqual([ costWidget.id, accountSummaryWidget.id, + projectSummaryWidget.id, serviceSummaryWidget.id, regionSummaryWidget.id, ]); diff --git a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts index e57390ff7..78e48315b 100644 --- a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts +++ b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewReducer.ts @@ -1,5 +1,11 @@ import { GcpCostOverviewWidget } from './gcpCostOverviewCommon'; -import { accountSummaryWidget, costWidget, regionSummaryWidget, serviceSummaryWidget } from './gcpCostOverviewWidgets'; +import { + accountSummaryWidget, + costWidget, + projectSummaryWidget, + regionSummaryWidget, + serviceSummaryWidget, +} from './gcpCostOverviewWidgets'; export type GcpCostOverviewState = Readonly<{ widgets: Record; @@ -7,10 +13,17 @@ export type GcpCostOverviewState = Readonly<{ }>; export const defaultState: GcpCostOverviewState = { - currentWidgets: [costWidget.id, accountSummaryWidget.id, serviceSummaryWidget.id, regionSummaryWidget.id], + currentWidgets: [ + costWidget.id, + accountSummaryWidget.id, + projectSummaryWidget.id, + serviceSummaryWidget.id, + regionSummaryWidget.id, + ], widgets: { [costWidget.id]: costWidget, [accountSummaryWidget.id]: accountSummaryWidget, + [projectSummaryWidget.id]: projectSummaryWidget, [serviceSummaryWidget.id]: serviceSummaryWidget, [regionSummaryWidget.id]: regionSummaryWidget, }, diff --git a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts index 7c55d6057..808c5f892 100644 --- a/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts +++ b/src/store/breakdown/costOverview/gcpCostOverview/gcpCostOverviewWidgets.ts @@ -18,7 +18,18 @@ export const accountSummaryWidget: GcpCostOverviewWidget = { id: getId(), reportSummary: { reportGroupBy: 'account', - showWidgetOnGroupBy: ['region', 'service', tagPrefix], + showWidgetOnGroupBy: ['project', 'region', 'service', tagPrefix], + }, + reportPathsType: ReportPathsType.gcp, + reportType: ReportType.cost, + type: CostOverviewWidgetType.reportSummary, +}; + +export const projectSummaryWidget: GcpCostOverviewWidget = { + id: getId(), + reportSummary: { + reportGroupBy: 'project', + showWidgetOnGroupBy: ['account', 'region', 'service', tagPrefix], }, reportPathsType: ReportPathsType.gcp, reportType: ReportType.cost, @@ -29,7 +40,7 @@ export const regionSummaryWidget: GcpCostOverviewWidget = { id: getId(), reportSummary: { reportGroupBy: 'region', - showWidgetOnGroupBy: ['account', 'service', tagPrefix], + showWidgetOnGroupBy: ['account', 'project', 'service', tagPrefix], }, reportPathsType: ReportPathsType.gcp, reportType: ReportType.cost, @@ -40,7 +51,7 @@ export const serviceSummaryWidget: GcpCostOverviewWidget = { id: getId(), reportSummary: { reportGroupBy: 'service', - showWidgetOnGroupBy: ['region', 'account', tagPrefix], + showWidgetOnGroupBy: ['project', 'region', 'account', tagPrefix], }, reportPathsType: ReportPathsType.gcp, reportType: ReportType.cost, From fa2219610f68ef3ba6a309206030421ff5a15eef Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 23 Feb 2021 12:56:01 -0500 Subject: [PATCH 111/200] remove duplicate "Cost" i18n keys and create one chart.cost key (#1875) * remove duplicate "Cost" i18n keys and create one chart.cost key * missed one... * moved "cost" i18n key to top level --- src/locales/en.json | 12 +----------- src/pages/views/details/awsDetails/detailsTable.tsx | 4 ++-- .../views/details/azureDetails/detailsTable.tsx | 4 ++-- src/pages/views/details/gcpDetails/detailsTable.tsx | 4 ++-- src/pages/views/details/ocpDetails/detailsHeader.tsx | 2 +- src/pages/views/details/ocpDetails/detailsTable.tsx | 4 ++-- .../awsCloudDashboard/awsCloudDashboardWidgets.ts | 10 +++++----- .../dashboard/awsDashboard/awsDashboardWidgets.ts | 8 ++++---- .../azureCloudDashboardWidgets.ts | 8 ++++---- .../azureDashboard/azureDashboardWidgets.ts | 8 ++++---- .../dashboard/gcpDashboard/gcpDashboardWidgets.ts | 8 ++++---- .../ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 8 ++++---- 12 files changed, 35 insertions(+), 45 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index ad82cadfb..05a3659ef 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,7 +1,6 @@ { "aws_cloud_dashboard": { "compute_title": "Compute (EC2) instances usage", - "cost_label": "Cost", "cost_title": "Amazon Web Services filtered by OpenShift cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -15,7 +14,6 @@ }, "aws_dashboard": { "compute_title": "Compute (EC2) instances usage", - "cost_label": "Cost", "cost_title": "Amazon Web Services cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -29,7 +27,6 @@ }, "aws_details": { "change_column_title": "Month over month change", - "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "name_column_title": "$t(group_by.values.{{groupBy}}) names", "org_unit_column_title": "Names", @@ -38,7 +35,6 @@ }, "azure_cloud_dashboard": { "compute_title": "Virtual machines usage", - "cost_label": "Cost", "cost_title": "Microsoft Azure filtered by OpenShift cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -52,7 +48,6 @@ }, "azure_dashboard": { "compute_title": "Virtual machines usage", - "cost_label": "Cost", "cost_title": "Microsoft Azure cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -66,7 +61,6 @@ }, "azure_details": { "change_column_title": "Month over month change", - "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "name_column_title": "$t(group_by.values.{{groupBy}}) names", "tag_column_title": "Tag names", @@ -171,6 +165,7 @@ "usage_legend_label_plural": "Usage ({{startDate}}-{{endDate}} $t(months_abbr.{{month}}))", "usage_legend_tooltip": "Usage ($t(months_abbr.{{month}}))" }, + "cost": "Cost", "cost_management": "Cost Management", "cost_models": { "add_rate_form": { @@ -614,7 +609,6 @@ "for_date_plural": "{{value}} for {{startDate}}-{{endDate}} $t(months_abbr.{{month}})", "gcp_dashboard": { "compute_title": "Compute instances usage", - "cost_label": "Cost", "cost_title": "Google Cloud Platform Services cost", "cost_trend_title": "Google Cloud Platform Services cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -628,7 +622,6 @@ }, "gcp_details": { "change_column_title": "Month over month change", - "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "name_column_title": "$t(group_by.values.{{groupBy}}) names", "tag_column_title": "Tag names", @@ -793,7 +786,6 @@ }, "ocp_cloud_dashboard": { "compute_title": "Compute services usage", - "cost_label": "Cost", "cost_title": "All cloud filtered by OpenShift cost", "cost_trend_title": "All cloud filtered by OpenShift cumulative cost comparison ({{units}})", "cumulative_cost_label": "Cumulative cost", @@ -821,7 +813,6 @@ }, "ocp_details": { "change_column_title": "Month over month change", - "cost_column_title": "Cost", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "infrastructure_cost_column_title": "Infrastructure cost", "infrastructure_cost_desc": "The cost based on raw usage data from the underlying infrastructure.", @@ -833,7 +824,6 @@ "supplementary_cost_title": "Supplementary cost", "tag_column_title": "Tag names", "title": "OpenShift details", - "total_cost": "Cost", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost: {{infrastructureCost}} and supplementary cost: {{supplementaryCost}}" }, "ocp_supplementary_dashboard": { diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index 99e767eb7..e0fc0915d 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -140,7 +140,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('aws_details.cost_column_title', { total }), + title: t('cost', { total }), transforms: [sortable], }, { @@ -158,7 +158,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('aws_details.cost_column_title'), + title: t('cost'), transforms: [sortable], }, { diff --git a/src/pages/views/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx index 7318d3ce8..1c2c38e44 100644 --- a/src/pages/views/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -111,7 +111,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('azure_details.cost_column_title', { total }), + title: t('cost', { total }), transforms: [sortable], }, { @@ -129,7 +129,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('azure_details.cost_column_title'), + title: t('cost'), transforms: [sortable], }, { diff --git a/src/pages/views/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx index 8b84873c3..b5bb7136e 100644 --- a/src/pages/views/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -111,7 +111,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('gcp_details.cost_column_title', { total }), + title: t('cost', { total }), transforms: [sortable], }, { @@ -129,7 +129,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('gcp_details.cost_column_title'), + title: t('cost'), transforms: [sortable], }, { diff --git a/src/pages/views/details/ocpDetails/detailsHeader.tsx b/src/pages/views/details/ocpDetails/detailsHeader.tsx index 9018c08d7..5d91b4071 100644 --- a/src/pages/views/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/views/details/ocpDetails/detailsHeader.tsx @@ -117,7 +117,7 @@ class DetailsHeaderBase extends React.Component {
    - {t('ocp_details.total_cost')} + {t('cost')} { }, { orderBy: 'cost', - title: t('ocp_details.cost_column_title', { total }), + title: t('cost', { total }), transforms: [sortable], }, { @@ -150,7 +150,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'cost', - title: t('ocp_details.cost_column_title'), + title: t('cost'), transforms: [sortable], }, { diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index 9d0ec8805..23dc8af29 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -19,7 +19,7 @@ export const computeWidget: AwsCloudDashboardWidget = { reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.instanceType, details: { - costKey: 'aws_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -66,7 +66,7 @@ export const costSummaryWidget: AwsCloudDashboardWidget = { reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.cost, details: { - costKey: 'aws_cloud_dashboard.cumulative_cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -98,7 +98,7 @@ export const databaseWidget: AwsCloudDashboardWidget = { reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.database, details: { - costKey: 'aws_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -135,7 +135,7 @@ export const networkWidget: AwsCloudDashboardWidget = { reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.network, details: { - costKey: 'aws_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -172,7 +172,7 @@ export const storageWidget: AwsCloudDashboardWidget = { reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.storage, details: { - costKey: 'aws_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 461d8adf6..57530f672 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -20,7 +20,7 @@ export const computeWidget: AwsDashboardWidget = { reportPathsType: ReportPathsType.aws, reportType: ReportType.instanceType, details: { - costKey: 'aws_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -102,7 +102,7 @@ export const databaseWidget: AwsDashboardWidget = { reportPathsType: ReportPathsType.aws, reportType: ReportType.database, details: { - costKey: 'aws_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -139,7 +139,7 @@ export const networkWidget: AwsDashboardWidget = { reportPathsType: ReportPathsType.aws, reportType: ReportType.network, details: { - costKey: 'aws_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -176,7 +176,7 @@ export const storageWidget: AwsDashboardWidget = { reportPathsType: ReportPathsType.aws, reportType: ReportType.storage, details: { - costKey: 'aws_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 1f1209b8d..1c20c51a9 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -57,7 +57,7 @@ export const databaseWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.database, details: { - costKey: 'azure_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -94,7 +94,7 @@ export const networkWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.network, details: { - costKey: 'azure_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -131,7 +131,7 @@ export const storageWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.storage, details: { - costKey: 'azure_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -177,7 +177,7 @@ export const virtualMachineWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.instanceType, details: { - costKey: 'azure_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index c3273a4ac..8e575e5cc 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -61,7 +61,7 @@ export const databaseWidget: AzureDashboardWidget = { reportPathsType: ReportPathsType.azure, reportType: ReportType.database, details: { - costKey: 'azure_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -98,7 +98,7 @@ export const networkWidget: AzureDashboardWidget = { reportPathsType: ReportPathsType.azure, reportType: ReportType.network, details: { - costKey: 'azure_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -135,7 +135,7 @@ export const storageWidget: AzureDashboardWidget = { reportPathsType: ReportPathsType.azure, reportType: ReportType.storage, details: { - costKey: 'azure_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -181,7 +181,7 @@ export const virtualMachineWidget: AzureDashboardWidget = { reportPathsType: ReportPathsType.azure, reportType: ReportType.instanceType, details: { - costKey: 'azure_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index b45c78007..b5dbbd6ac 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -21,7 +21,7 @@ export const computeWidget: GcpDashboardWidget = { reportPathsType: ReportPathsType.gcp, reportType: ReportType.instanceType, details: { - costKey: 'gcp_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -103,7 +103,7 @@ export const databaseWidget: GcpDashboardWidget = { reportPathsType: ReportPathsType.gcp, reportType: ReportType.database, details: { - costKey: 'gcp_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -140,7 +140,7 @@ export const networkWidget: GcpDashboardWidget = { reportPathsType: ReportPathsType.gcp, reportType: ReportType.network, details: { - costKey: 'gcp_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -179,7 +179,7 @@ export const storageWidget: GcpDashboardWidget = { reportPathsType: ReportPathsType.gcp, reportType: ReportType.storage, details: { - costKey: 'gcp_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index 4b0f8f936..1dd9af7b5 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -55,7 +55,7 @@ export const computeWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.instanceType, details: { - costKey: 'ocp_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -88,7 +88,7 @@ export const databaseWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.database, details: { - costKey: 'ocp_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -115,7 +115,7 @@ export const networkWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.network, details: { - costKey: 'ocp_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, @@ -142,7 +142,7 @@ export const storageWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.storage, details: { - costKey: 'ocp_cloud_dashboard.cost_label', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, From f35da2cb9581c33ba2adf92c10dd1ee22f138d8b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 23 Feb 2021 14:24:59 -0500 Subject: [PATCH 112/200] Export should default to daily resolution for explorer --- src/pages/views/components/export/exportModal.tsx | 3 ++- src/pages/views/explorer/explorer.tsx | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/views/components/export/exportModal.tsx b/src/pages/views/components/export/exportModal.tsx index 6b6588e05..e5de12f65 100644 --- a/src/pages/views/components/export/exportModal.tsx +++ b/src/pages/views/components/export/exportModal.tsx @@ -26,6 +26,7 @@ export interface ExportModalOwnProps extends WithTranslation { query?: Query; queryString?: string; reportPathsType: ReportPathsType; + resolution?: 'daily' | 'monthly'; // Default resolution showTimeScope?: boolean; // timeScope filters are not valid with date range } @@ -63,7 +64,7 @@ const timeScopeOptions: { export class ExportModalBase extends React.Component { protected defaultState: ExportModalState = { timeScope: -1, - resolution: 'monthly', + resolution: this.props.resolution || 'monthly', }; public state: ExportModalState = { ...this.defaultState }; diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index c62a35808..c5cc0498c 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -170,6 +170,7 @@ class Explorer extends React.Component { onClose={this.handleExportModalClose} query={query} reportPathsType={getReportPathsType(perspective)} + resolution="daily" /> ); }; From 505e1e4fc991b984bd10df7cb8094177f02acb4c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 23 Feb 2021 14:41:06 -0500 Subject: [PATCH 113/200] Rename the group_by dropdown label --- src/locales/en.json | 4 ++-- src/pages/views/components/groupBy/groupBy.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 05a3659ef..f6b57e88b 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -630,6 +630,7 @@ "group_by": { "all": "All $t(group_by.values.{{groupBy}}, { 'count': 5 })", "details": "$t(group_by.values.{{groupBy}}, { 'count': 3 })", + "label": "Group by", "org_unit_aria_label": "Organizational units", "org_unit_placeholder": "Choose unit", "tag": "Tag", @@ -689,8 +690,7 @@ "subscription_guid_plural": "Accounts", "tag": "Tag", "tag_plural": "Tags" - }, - "view": "View by" + } }, "inactive_sources": { "go_to_sources": "Go to Sources for more information", diff --git a/src/pages/views/components/groupBy/groupBy.tsx b/src/pages/views/components/groupBy/groupBy.tsx index 7a426e8e8..12938c95b 100644 --- a/src/pages/views/components/groupBy/groupBy.tsx +++ b/src/pages/views/components/groupBy/groupBy.tsx @@ -215,7 +215,7 @@ class GroupByBase extends React.Component { return (
    - + Date: Tue, 23 Feb 2021 15:05:17 -0500 Subject: [PATCH 114/200] Update date range option labels to match mocks --- src/locales/en.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index f6b57e88b..76c8a382d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -464,10 +464,10 @@ "explorer": { "daily_column_title": "{{date}}-$t(months_abbr.{{month}})", "date_range": { - "current_month_to_date": "Current month to date", + "current_month_to_date": "Month to date", "last_sixty_days": "Last 60 days", "last_thirty_days": "Last 30 days", - "previous_month_to_date": "Previous month to date" + "previous_month_to_date": "Previous month and month to date" }, "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "name_column_title": "$t(group_by.values.{{groupBy}}) names", From 3c1bc059bc5957265c660c42ff4f321e1a0317e0 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 23 Feb 2021 15:36:43 -0500 Subject: [PATCH 115/200] combined duplicate keys to single key (#1878) "cumulative_cost": "Cumulative cost", --- src/locales/en.json | 10 +--------- .../dashboard/awsDashboard/awsDashboardWidgets.ts | 2 +- .../azureCloudDashboard/azureCloudDashboardWidgets.ts | 2 +- .../dashboard/azureDashboard/azureDashboardWidgets.ts | 2 +- .../dashboard/gcpDashboard/gcpDashboardWidgets.ts | 2 +- .../ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 2 +- .../dashboard/ocpDashboard/ocpDashboardWidgets.ts | 2 +- .../ocpSupplementaryDashboardWidgets.ts | 2 +- .../ocpUsageDashboard/ocpUsageDashboardWidgets.ts | 2 +- 9 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 05a3659ef..615bcfc46 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -3,7 +3,6 @@ "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services filtered by OpenShift cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -16,7 +15,6 @@ "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -37,7 +35,6 @@ "compute_title": "Virtual machines usage", "cost_title": "Microsoft Azure filtered by OpenShift cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -50,7 +47,6 @@ "compute_title": "Virtual machines usage", "cost_title": "Microsoft Azure cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -370,6 +366,7 @@ "warning_source": "This source is assigned to {{ cost_model }} cost model. You will have to unassigned it first", "warning_sources": "Cannot assign cost model to a source that is already assigned to another one" }, + "cumulative_cost": "Cumulative cost", "dashboard": { "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", "widget_subtitle": "{{startDate}} $t(months.{{month}})", @@ -611,7 +608,6 @@ "compute_title": "Compute instances usage", "cost_title": "Google Cloud Platform Services cost", "cost_trend_title": "Google Cloud Platform Services cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "Google Cloud Platform Services daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -788,7 +784,6 @@ "compute_title": "Compute services usage", "cost_title": "All cloud filtered by OpenShift cost", "cost_trend_title": "All cloud filtered by OpenShift cumulative cost comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "All cloud filtered by OpenShift daily cost comparison ({{units}})", "database_title": "Database services cost", "database_trend_title": "Cumulative cost comparison ({{units}})", @@ -802,7 +797,6 @@ "cost_trend_title": "All OpenShift cumulative cost comparison ({{units}})", "cpu_title": "CPU usage and requests", "cpu_trend_title": "Daily usage and requests comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})", "memory_title": "Memory usage and requests", "memory_trend_title": "Daily usage and requests comparison ({{units}})", @@ -831,7 +825,6 @@ "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", "cpu_title": "CPU usage and requests", "cpu_trend_title": "Daily usage and requests comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})", "memory_title": "Memory usage and requests", "memory_trend_title": "Daily usage and requests comparison ({{units}})", @@ -845,7 +838,6 @@ "cost_trend_title": "Metering cumulative cost comparison ({{units}})", "cpu_title": "OpenShift CPU usage and requests", "cpu_trend_title": "Daily usage and requests comparison ({{units}})", - "cumulative_cost_label": "Cumulative cost", "memory_title": "OpenShift memory usage and requests", "memory_trend_title": "Daily usage and requests comparison ({{units}})", "requests_label": "Requests", diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 57530f672..ef6de96e6 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -69,7 +69,7 @@ export const costSummaryWidget: AwsDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'aws', - costKey: 'aws_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 1c20c51a9..645ee88d1 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.cost, details: { - costKey: 'azure_cloud_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index 8e575e5cc..4e7b9b450 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -24,7 +24,7 @@ export const costSummaryWidget: AzureDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'aws', - costKey: 'azure_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index b5dbbd6ac..4eab4648d 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -70,7 +70,7 @@ export const costSummaryWidget: GcpDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'gcp', - costKey: 'gcp_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index 1dd9af7b5..37d74bb70 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.cost, details: { - costKey: 'ocp_cloud_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 4501014b1..749d3b07a 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -24,7 +24,7 @@ export const costSummaryWidget: OcpDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'ocp', - costKey: 'ocp_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index 3a8595dff..cc4df06eb 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: OcpSupplementaryDashboardWidget = { reportPathsType: ReportPathsType.ocp, reportType: ReportType.cost, details: { - costKey: 'ocp_supplementary_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts index b0bdcac3a..7ed0208c1 100644 --- a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts +++ b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts @@ -17,7 +17,7 @@ export const costSummaryWidget: OcpUsageDashboardWidget = { reportPathsType: ReportPathsType.ocpUsage, reportType: ReportType.cost, details: { - costKey: 'ocp_usage_dashboard.cumulative_cost_label', + costKey: 'cumulative_cost', formatOptions: { fractionDigits: 2, }, From e8935e018898ab7ebc5ec30e4397152b9170dd56 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 23 Feb 2021 18:37:31 -0500 Subject: [PATCH 116/200] Historical Cost Explorer y-axis labels (#1880) * Historical Cost Explorer y-axis labels https://issues.redhat.com/browse/COST-1087 * Renamed unit_currency in en.json as currency_abbreviations --- src/components/charts/common/chartUtils.ts | 1 + .../historicalExplorerChart.tsx | 45 ++++++++++++++----- src/locales/en.json | 6 +++ src/utils/formatValue.ts | 44 ++++++++++++++++++ 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/src/components/charts/common/chartUtils.ts b/src/components/charts/common/chartUtils.ts index 959192105..9de16e126 100644 --- a/src/components/charts/common/chartUtils.ts +++ b/src/components/charts/common/chartUtils.ts @@ -7,6 +7,7 @@ import { getMaxMinValues, getTooltipContent } from './chartDatumUtils'; export interface ChartData { childName?: string; + units?: string; } export interface ChartLegendItem { diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 2f01e5b60..55aeabf2b 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -25,7 +25,7 @@ import { } from 'components/charts/common/chartUtils'; import i18next from 'i18next'; import React from 'react'; -import { FormatOptions, ValueFormatter } from 'utils/formatValue'; +import { formatCurrencyAbbreviation, FormatOptions, ValueFormatter } from 'utils/formatValue'; import { noop } from 'utils/noop'; import { chartStyles } from './historicalExplorerChart.styles'; @@ -51,6 +51,7 @@ interface State { hiddenSeries: Set; series?: ChartSeries[]; width: number; + units?: string; } class HistoricalExplorerChart extends React.Component { @@ -208,7 +209,8 @@ class HistoricalExplorerChart extends React.Component
    diff --git a/src/locales/en.json b/src/locales/en.json index 0307ef864..e24d0df1c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -367,6 +367,12 @@ "warning_sources": "Cannot assign cost model to a source that is already assigned to another one" }, "cumulative_cost": "Cumulative cost", + "currency_abbreviations": { + "billion": "B", + "million": "M", + "thousand": "K", + "trillion": "T" + }, "dashboard": { "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", "widget_subtitle": "{{startDate}} $t(months.{{month}})", diff --git a/src/utils/formatValue.ts b/src/utils/formatValue.ts index c2064d3b2..59af350df 100644 --- a/src/utils/formatValue.ts +++ b/src/utils/formatValue.ts @@ -1,3 +1,5 @@ +import i18next from 'i18next'; + export interface FormatOptions { fractionDigits?: number; } @@ -66,6 +68,48 @@ export const formatCurrency: ValueFormatter = (value, unit, { fractionDigits = 2 }); }; +export const formatCurrencyAbbreviation: ValueFormatter = (value, unit, { fractionDigits = 2 } = {}) => { + let fValue = value; + if (!value) { + fValue = 0; + } + + // Derived from https://stackoverflow.com/questions/37799955/how-can-i-format-big-numbers-with-tolocalestring + const abbreviationFormats = [ + { val: 1e12, symbol: 'currency_abbreviations.trillion' }, + { val: 1e9, symbol: 'currency_abbreviations.billion' }, + { val: 1e6, symbol: 'currency_abbreviations.million' }, + { val: 1e3, symbol: 'currency_abbreviations.thousand' }, + ]; + + // Find the proper format to use + let format; + if (abbreviationFormats != null) { + format = abbreviationFormats.find(f => fValue >= f.val); + } + + // Apply format and insert symbol next to the numeric portion of the formatted string + if (format != null) { + const { val, symbol } = format; + const formatted = (fValue / val).toLocaleString('en', { + style: 'currency', + currency: unit || 'USD', + minimumFractionDigits: 0, + maximumFractionDigits: fractionDigits, + }); + const parts = formatted.match(/([\D]*)([\d.,]+)([\D]*)/); + return `${parts[1]}${parts[2]}${i18next.t(symbol)}${parts[3]}`; + } + + // If no format was found, format value without abbreviation + return fValue.toLocaleString('en', { + style: 'currency', + currency: unit || 'USD', + minimumFractionDigits: 0, + maximumFractionDigits: fractionDigits, + }); +}; + export const formatUsageGb: ValueFormatter = (value, _unit, { fractionDigits = 0 } = {}) => { return value.toLocaleString('en', { minimumFractionDigits: fractionDigits, From fa1a6c3e7c6f604d034a9c8da13ee9fa6b8d223f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 23 Feb 2021 18:38:46 -0500 Subject: [PATCH 117/200] Added currency abbreviation for Quadrillion --- src/locales/en.json | 3 ++- src/utils/formatValue.ts | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/locales/en.json b/src/locales/en.json index e24d0df1c..cca563e4a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -370,8 +370,9 @@ "currency_abbreviations": { "billion": "B", "million": "M", + "quadrillion": "q", "thousand": "K", - "trillion": "T" + "trillion": "t" }, "dashboard": { "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", diff --git a/src/utils/formatValue.ts b/src/utils/formatValue.ts index 59af350df..847c3ab27 100644 --- a/src/utils/formatValue.ts +++ b/src/utils/formatValue.ts @@ -76,6 +76,7 @@ export const formatCurrencyAbbreviation: ValueFormatter = (value, unit, { fracti // Derived from https://stackoverflow.com/questions/37799955/how-can-i-format-big-numbers-with-tolocalestring const abbreviationFormats = [ + { val: 1e15, symbol: 'currency_abbreviations.quadrillion' }, { val: 1e12, symbol: 'currency_abbreviations.trillion' }, { val: 1e9, symbol: 'currency_abbreviations.billion' }, { val: 1e6, symbol: 'currency_abbreviations.million' }, From bc758059ac1a4afa32b69ce60bc39e836dcaefab Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 24 Feb 2021 08:43:36 -0500 Subject: [PATCH 118/200] Modified the default domain range (#1882) --- .../charts/historicalExplorerChart/historicalExplorerChart.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx index 55aeabf2b..034ab5c70 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx @@ -308,7 +308,7 @@ class HistoricalExplorerChart extends React.Component Date: Wed, 24 Feb 2021 11:08:14 -0500 Subject: [PATCH 119/200] Overview cost lbl mismatch cost 1086 (#1884) * changed labels to use "cost" * remove "cumulative_cost" i18n key, no longer being used > yarn i18n:key:check:notfound cumulative_cost [NOT FOUND] --- src/locales/en.json | 1 - src/store/dashboard/awsDashboard/awsDashboardWidgets.ts | 2 +- .../dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts | 2 +- src/store/dashboard/azureDashboard/azureDashboardWidgets.ts | 2 +- src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts | 2 +- .../dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 2 +- src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts | 2 +- .../ocpSupplementaryDashboardWidgets.ts | 2 +- .../dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts | 2 +- 9 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index cca563e4a..97b65f120 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -366,7 +366,6 @@ "warning_source": "This source is assigned to {{ cost_model }} cost model. You will have to unassigned it first", "warning_sources": "Cannot assign cost model to a source that is already assigned to another one" }, - "cumulative_cost": "Cumulative cost", "currency_abbreviations": { "billion": "B", "million": "M", diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index ef6de96e6..8298445bd 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -69,7 +69,7 @@ export const costSummaryWidget: AwsDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'aws', - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 645ee88d1..1e48cf1fb 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: AzureCloudDashboardWidget = { reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.cost, details: { - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index 4e7b9b450..5de1f5b26 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -24,7 +24,7 @@ export const costSummaryWidget: AzureDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'aws', - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index 4eab4648d..c4c12a6dc 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -70,7 +70,7 @@ export const costSummaryWidget: GcpDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'gcp', - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index 37d74bb70..dd9edabf4 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: OcpCloudDashboardWidget = { reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.cost, details: { - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 749d3b07a..19a79f7f0 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -24,7 +24,7 @@ export const costSummaryWidget: OcpDashboardWidget = { details: { adjustContainerHeight: true, appNavId: 'ocp', - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index cc4df06eb..0ceb0298e 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -21,7 +21,7 @@ export const costSummaryWidget: OcpSupplementaryDashboardWidget = { reportPathsType: ReportPathsType.ocp, reportType: ReportType.cost, details: { - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, diff --git a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts index 7ed0208c1..974c92b48 100644 --- a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts +++ b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts @@ -17,7 +17,7 @@ export const costSummaryWidget: OcpUsageDashboardWidget = { reportPathsType: ReportPathsType.ocpUsage, reportType: ReportType.cost, details: { - costKey: 'cumulative_cost', + costKey: 'cost', formatOptions: { fractionDigits: 2, }, From 567aa447f642c1a9e49a9d76cf21aab7733e7b5b Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Wed, 24 Feb 2021 12:03:30 -0500 Subject: [PATCH 120/200] consolidate i18n keys into one key, value pair (#1883) * consolidate i18n keys into one key, value pair "Cumulative cost comparison ({{units}})" [Found: 12] FOUND IN KEY: aws_dashboard.network_trend_title FOUND IN KEY: azure_dashboard.network_trend_title FOUND IN KEY: azure_dashboard.database_trend_title FOUND IN KEY: gcp_dashboard.network_trend_title FOUND IN KEY: aws_cloud_dashboard.network_trend_title FOUND IN KEY: gcp_dashboard.database_trend_title FOUND IN KEY: ocp_cloud_dashboard.network_trend_title FOUND IN KEY: ocp_cloud_dashboard.database_trend_title FOUND IN KEY: azure_cloud_dashboard.database_trend_title FOUND IN KEY: aws_cloud_dashboard.database_trend_title FOUND IN KEY: azure_cloud_dashboard.network_trend_title FOUND IN KEY: aws_dashboard.database_trend_title * remove key "cumulitive_cost" --- src/locales/en.json | 12 +----------- .../awsCloudDashboard/awsCloudDashboardWidgets.ts | 8 ++++---- .../dashboard/awsDashboard/awsDashboardWidgets.ts | 8 ++++---- .../azureCloudDashboardWidgets.ts | 8 ++++---- .../azureDashboard/azureDashboardWidgets.ts | 8 ++++---- .../dashboard/gcpDashboard/gcpDashboardWidgets.ts | 8 ++++---- .../ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 8 ++++---- 7 files changed, 25 insertions(+), 35 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 97b65f120..09a91b922 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -5,9 +5,7 @@ "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -17,9 +15,7 @@ "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -37,9 +33,7 @@ "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -49,9 +43,7 @@ "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -374,6 +366,7 @@ "trillion": "t" }, "dashboard": { + "cumulative_cost_comparison": "Cumulative cost comparison ({{units}})", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", "widget_subtitle": "{{startDate}} $t(months.{{month}})", "widget_subtitle_plural": "{{startDate}}-{{endDate}} $t(months.{{month}})" @@ -616,9 +609,7 @@ "cost_trend_title": "Google Cloud Platform Services cumulative cost comparison ({{units}})", "daily_cost_trend_title": "Google Cloud Platform Services daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -792,7 +783,6 @@ "cost_trend_title": "All cloud filtered by OpenShift cumulative cost comparison ({{units}})", "daily_cost_trend_title": "All cloud filtered by OpenShift daily cost comparison ({{units}})", "database_title": "Database services cost", - "database_trend_title": "Cumulative cost comparison ({{units}})", "network_title": "Network services cost", "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index 23dc8af29..0ac7ac845 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -43,7 +43,7 @@ export const computeWidget: AwsCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -114,7 +114,7 @@ export const databaseWidget: AwsCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'aws_cloud_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -151,7 +151,7 @@ export const networkWidget: AwsCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'aws_cloud_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -190,7 +190,7 @@ export const storageWidget: AwsCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 8298445bd..939e643b4 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -44,7 +44,7 @@ export const computeWidget: AwsDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -118,7 +118,7 @@ export const databaseWidget: AwsDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'aws_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -155,7 +155,7 @@ export const networkWidget: AwsDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'aws_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -194,7 +194,7 @@ export const storageWidget: AwsDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 1e48cf1fb..5351b9e0f 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -73,7 +73,7 @@ export const databaseWidget: AzureCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'azure_cloud_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -110,7 +110,7 @@ export const networkWidget: AzureCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'azure_cloud_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -156,7 +156,7 @@ export const storageWidget: AzureCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -202,7 +202,7 @@ export const virtualMachineWidget: AzureCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index 5de1f5b26..8a1f12e26 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -77,7 +77,7 @@ export const databaseWidget: AzureDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'azure_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -114,7 +114,7 @@ export const networkWidget: AzureDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'azure_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -160,7 +160,7 @@ export const storageWidget: AzureDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -206,7 +206,7 @@ export const virtualMachineWidget: AzureDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index c4c12a6dc..83d338fb4 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -45,7 +45,7 @@ export const computeWidget: GcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { @@ -119,7 +119,7 @@ export const databaseWidget: GcpDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'gcp_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -158,7 +158,7 @@ export const networkWidget: GcpDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'gcp_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -197,7 +197,7 @@ export const storageWidget: GcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index dd9edabf4..835b27365 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -76,7 +76,7 @@ export const computeWidget: OcpCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, chartType: DashboardChartType.trend, @@ -103,7 +103,7 @@ export const databaseWidget: OcpCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'ocp_cloud_dashboard.database_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, chartType: DashboardChartType.trend, @@ -130,7 +130,7 @@ export const networkWidget: OcpCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'ocp_cloud_dashboard.network_trend_title', + titleKey: 'chart.cumulative_cost_comparison', type: ChartType.rolling, }, chartType: DashboardChartType.trend, @@ -160,7 +160,7 @@ export const storageWidget: OcpCloudDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'chart.daily_usage_comparison', + titleKey: 'dashboard.daily_usage_comparison', type: ChartType.daily, }, chartType: DashboardChartType.trend, From 611f4663b15cb1ce6009ab72f841e9a32f25d859 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Thu, 25 Feb 2021 09:11:25 -0500 Subject: [PATCH 121/200] combined duplicates keys to one key value pair: 'ocp.daily_usage_request_comparison' (#1885) --- src/locales/en.json | 18 ++++++------------ .../ocpDashboard/ocpDashboardWidgets.ts | 6 +++--- .../ocpSupplementaryDashboardWidgets.ts | 6 +++--- .../ocpUsageDashboardWidgets.ts | 6 +++--- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 09a91b922..e0486b4b8 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -777,6 +777,9 @@ "desc": "Sorry, no rates related to cluster {{cluster}} were set.", "title": "No rates found" }, + "ocp": { + "daily_usage_request_comparison": "Daily usage and requests comparison ({{units}})" + }, "ocp_cloud_dashboard": { "compute_title": "Compute services usage", "cost_title": "All cloud filtered by OpenShift cost", @@ -792,14 +795,11 @@ "cost_title": "All OpenShift cost", "cost_trend_title": "All OpenShift cumulative cost comparison ({{units}})", "cpu_title": "CPU usage and requests", - "cpu_trend_title": "Daily usage and requests comparison ({{units}})", "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})", "memory_title": "Memory usage and requests", - "memory_trend_title": "Daily usage and requests comparison ({{units}})", "requests_label": "Requests", "usage_label": "Usage", - "volume_title": "Volume usage and requests", - "volume_trend_title": "Daily usage and requests comparison ({{units}})" + "volume_title": "Volume usage and requests" }, "ocp_details": { "change_column_title": "Month over month change", @@ -820,26 +820,20 @@ "cost_title": "OpenShift supplementary cost", "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", "cpu_title": "CPU usage and requests", - "cpu_trend_title": "Daily usage and requests comparison ({{units}})", "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})", "memory_title": "Memory usage and requests", - "memory_trend_title": "Daily usage and requests comparison ({{units}})", "requests_label": "Requests", "usage_label": "Usage", - "volume_title": "Volume usage and requests", - "volume_trend_title": "Daily usage and requests comparison ({{units}})" + "volume_title": "Volume usage and requests" }, "ocp_usage_dashboard": { "cost_title": "OpenShift usage cost", "cost_trend_title": "Metering cumulative cost comparison ({{units}})", "cpu_title": "OpenShift CPU usage and requests", - "cpu_trend_title": "Daily usage and requests comparison ({{units}})", "memory_title": "OpenShift memory usage and requests", - "memory_trend_title": "Daily usage and requests comparison ({{units}})", "requests_label": "Requests", "usage_label": "Usage", - "volume_title": "OpenShift volume usage and requests", - "volume_trend_title": "Daily usage and requests comparison ({{units}})" + "volume_title": "OpenShift volume usage and requests" }, "onboarding": { "type_label": "Type", diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 19a79f7f0..f2207f8c3 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -79,7 +79,7 @@ export const cpuWidget: OcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_dashboard.cpu_trend_title', + titleKey: 'daily_usage_request_comparison', type: ChartType.daily, }, topItems: { @@ -116,7 +116,7 @@ export const memoryWidget: OcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_dashboard.memory_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, topItems: { @@ -153,7 +153,7 @@ export const volumeWidget: OcpDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_dashboard.volume_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index 0ceb0298e..3b11ba6cb 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -74,7 +74,7 @@ export const cpuWidget: OcpSupplementaryDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_supplementary_dashboard.cpu_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, topItems: { @@ -114,7 +114,7 @@ export const memoryWidget: OcpSupplementaryDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_supplementary_dashboard.memory_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, topItems: { @@ -154,7 +154,7 @@ export const volumeWidget: OcpSupplementaryDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_supplementary_dashboard.volume_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, topItems: { diff --git a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts index 974c92b48..cc4c29754 100644 --- a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts +++ b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts @@ -65,7 +65,7 @@ export const cpuWidget: OcpUsageDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_usage_dashboard.cpu_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, chartType: DashboardChartType.usage, @@ -97,7 +97,7 @@ export const memoryWidget: OcpUsageDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_usage_dashboard.memory_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, chartType: DashboardChartType.usage, @@ -129,7 +129,7 @@ export const volumeWidget: OcpUsageDashboardWidget = { formatOptions: { fractionDigits: 2, }, - titleKey: 'ocp_usage_dashboard.volume_trend_title', + titleKey: 'ocp.daily_usage_request_comparison', type: ChartType.daily, }, chartType: DashboardChartType.usage, From 969164b383b509970fa791a57d3213c9140553a9 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 1 Mar 2021 10:24:56 -0500 Subject: [PATCH 122/200] combined OCP specific duplicate i18n keys (cleanup) (#1886) * combined OCP specific duplicate i18n keys (cleanup) * re-order keys due (linting rules) --- src/locales/en.json | 17 +++++++---------- .../views/details/ocpDetails/detailsHeader.tsx | 4 ++-- .../views/details/ocpDetails/detailsTable.tsx | 8 ++++---- .../ocpDashboard/ocpDashboardWidgets.ts | 12 ++++++------ .../ocpSupplementaryDashboardWidgets.ts | 6 +++--- 5 files changed, 22 insertions(+), 25 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index e0486b4b8..deac64a2f 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -778,7 +778,11 @@ "title": "No rates found" }, "ocp": { - "daily_usage_request_comparison": "Daily usage and requests comparison ({{units}})" + "cpu_usage_and_requests": "CPU usage and requests", + "daily_usage_request_comparison": "Daily usage and requests comparison ({{units}})", + "memory_usage_and_requests": "Memory usage and requests", + "requests": "Requests", + "volume_usage_and_requests": "Volume usage and requests" }, "ocp_cloud_dashboard": { "compute_title": "Compute services usage", @@ -794,24 +798,20 @@ "ocp_dashboard": { "cost_title": "All OpenShift cost", "cost_trend_title": "All OpenShift cumulative cost comparison ({{units}})", - "cpu_title": "CPU usage and requests", "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})", "memory_title": "Memory usage and requests", - "requests_label": "Requests", "usage_label": "Usage", "volume_title": "Volume usage and requests" }, "ocp_details": { "change_column_title": "Month over month change", "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "infrastructure_cost_column_title": "Infrastructure cost", + "infrastructure_cost": "Infrastructure cost", "infrastructure_cost_desc": "The cost based on raw usage data from the underlying infrastructure.", - "infrastructure_cost_title": "Infrastructure cost", "name_column_title": "$t(group_by.values.{{groupBy}}) names", "supplementary_aria_label": "A description of infrastructure and supplementary cost", - "supplementary_cost_column_title": "Supplementary cost", + "supplementary_cost": "Supplementary cost", "supplementary_cost_desc": "All costs not directly attributed to the infrastructure. These costs are determined by applying a price list within a cost model to OpenShift cluster metrics.", - "supplementary_cost_title": "Supplementary cost", "tag_column_title": "Tag names", "title": "OpenShift details", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost: {{infrastructureCost}} and supplementary cost: {{supplementaryCost}}" @@ -819,10 +819,8 @@ "ocp_supplementary_dashboard": { "cost_title": "OpenShift supplementary cost", "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", - "cpu_title": "CPU usage and requests", "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})", "memory_title": "Memory usage and requests", - "requests_label": "Requests", "usage_label": "Usage", "volume_title": "Volume usage and requests" }, @@ -831,7 +829,6 @@ "cost_trend_title": "Metering cumulative cost comparison ({{units}})", "cpu_title": "OpenShift CPU usage and requests", "memory_title": "OpenShift memory usage and requests", - "requests_label": "Requests", "usage_label": "Usage", "volume_title": "OpenShift volume usage and requests" }, diff --git a/src/pages/views/details/ocpDetails/detailsHeader.tsx b/src/pages/views/details/ocpDetails/detailsHeader.tsx index 5d91b4071..096c32907 100644 --- a/src/pages/views/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/views/details/ocpDetails/detailsHeader.tsx @@ -124,10 +124,10 @@ class DetailsHeaderBase extends React.Component { enableFlip bodyContent={ <> -

    {t('ocp_details.supplementary_cost_title')}

    +

    {t('ocp_details.supplementary_cost')}

    {t('ocp_details.supplementary_cost_desc')}


    -

    {t('ocp_details.infrastructure_cost_title')}

    +

    {t('ocp_details.infrastructure_cost')}

    {t('ocp_details.infrastructure_cost_desc')}

    } diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index bce15d05f..242ada040 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -111,10 +111,10 @@ class DetailsTableBase extends React.Component { title: t('ocp_details.change_column_title'), }, { - title: t('ocp_details.infrastructure_cost_column_title'), + title: t('ocp_details.infrastructure_cost'), }, { - title: t('ocp_details.supplementary_cost_column_title'), + title: t('ocp_details.supplementary_cost'), }, { orderBy: 'cost', @@ -136,14 +136,14 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'infrastructure_cost', - title: t('ocp_details.infrastructure_cost_column_title'), + title: t('ocp.details_infrastructure_cost'), // Sort by infrastructure_cost is not supported -- https://github.com/project-koku/koku/issues/796 // transforms: [sortable], }, { orderBy: 'supplementary_cost', - title: t('ocp_details.supplementary_cost_column_title'), + title: t('ocp_details.supplementary_cost'), // Sort by supplementary_cost is not supported -- https://github.com/project-koku/koku/issues/796 // transforms: [sortable], diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index f2207f8c3..63c577617 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -55,7 +55,7 @@ export const costSummaryWidget: OcpDashboardWidget = { export const cpuWidget: OcpDashboardWidget = { id: getId(), - titleKey: 'ocp_dashboard.cpu_title', + titleKey: 'ocp.cpu_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.cpu, details: { @@ -65,7 +65,7 @@ export const cpuWidget: OcpDashboardWidget = { requestFormatOptions: { fractionDigits: 0, }, - requestKey: 'ocp_dashboard.requests_label', + requestKey: 'ocp.requests', showUnits: true, showUsageFirst: true, usageFormatOptions: { @@ -92,7 +92,7 @@ export const cpuWidget: OcpDashboardWidget = { export const memoryWidget: OcpDashboardWidget = { id: getId(), - titleKey: 'ocp_dashboard.memory_title', + titleKey: 'ocp.memory_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.memory, details: { @@ -102,7 +102,7 @@ export const memoryWidget: OcpDashboardWidget = { requestFormatOptions: { fractionDigits: 0, }, - requestKey: 'ocp_dashboard.requests_label', + requestKey: 'ocp.requests', showUnits: true, showUsageFirst: true, usageFormatOptions: { @@ -129,7 +129,7 @@ export const memoryWidget: OcpDashboardWidget = { export const volumeWidget: OcpDashboardWidget = { id: getId(), - titleKey: 'ocp_dashboard.volume_title', + titleKey: 'ocp.volume_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.volume, details: { @@ -139,7 +139,7 @@ export const volumeWidget: OcpDashboardWidget = { requestFormatOptions: { fractionDigits: 0, }, - requestKey: 'ocp_dashboard.requests_label', + requestKey: 'ocp.requests', showUnits: true, showUsageFirst: true, usageFormatOptions: { diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index 3b11ba6cb..a130e404f 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -50,7 +50,7 @@ export const costSummaryWidget: OcpSupplementaryDashboardWidget = { export const cpuWidget: OcpSupplementaryDashboardWidget = { id: getId(), - titleKey: 'ocp_supplementary_dashboard.cpu_title', + titleKey: 'ocp.cpu_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.cpu, details: { @@ -90,7 +90,7 @@ export const cpuWidget: OcpSupplementaryDashboardWidget = { export const memoryWidget: OcpSupplementaryDashboardWidget = { id: getId(), - titleKey: 'ocp_supplementary_dashboard.memory_title', + titleKey: 'ocp.memory_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.memory, details: { @@ -130,7 +130,7 @@ export const memoryWidget: OcpSupplementaryDashboardWidget = { export const volumeWidget: OcpSupplementaryDashboardWidget = { id: getId(), - titleKey: 'ocp_supplementary_dashboard.volume_title', + titleKey: 'ocp.volume_usage_and_requests', reportPathsType: ReportPathsType.ocp, reportType: ReportType.volume, details: { From 8070aa67379c2ea8b44fab7dd9ae37000260792f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 1 Mar 2021 12:11:41 -0500 Subject: [PATCH 123/200] Fix no data state for explorer (#1887) --- src/pages/views/explorer/explorer.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index c5cc0498c..bb83caa0b 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -445,9 +445,9 @@ class Explorer extends React.Component { return ; } else if ( !( - this.hasCurrentMonthData(awsProviders) && - this.hasCurrentMonthData(azureProviders) && - this.hasCurrentMonthData(gcpProviders) && + this.hasCurrentMonthData(awsProviders) || + this.hasCurrentMonthData(azureProviders) || + this.hasCurrentMonthData(gcpProviders) || this.hasCurrentMonthData(ocpProviders) ) ) { From 804d367afa71eb49f7046f78a7feb0f6dffb0663 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 1 Mar 2021 12:12:00 -0500 Subject: [PATCH 124/200] I18n ocp key typo (#1888) * combined OCP specific duplicate i18n keys (cleanup) * re-order keys due (linting rules) * fix for typo in i18n key --- src/pages/views/details/ocpDetails/detailsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index 242ada040..c445531a4 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -136,7 +136,7 @@ class DetailsTableBase extends React.Component { }, { orderBy: 'infrastructure_cost', - title: t('ocp.details_infrastructure_cost'), + title: t('ocp_details.infrastructure_cost'), // Sort by infrastructure_cost is not supported -- https://github.com/project-koku/koku/issues/796 // transforms: [sortable], From c4d02bf8fa08edbe23272cead02372ee46418a3b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 1 Mar 2021 12:25:40 -0500 Subject: [PATCH 125/200] Preserve filter when GroupBy is changed https://issues.redhat.com/browse/COST-1090 --- src/pages/views/details/awsDetails/awsDetails.tsx | 2 +- src/pages/views/details/azureDetails/azureDetails.tsx | 2 +- src/pages/views/details/gcpDetails/gcpDetails.tsx | 2 +- src/pages/views/details/ocpDetails/ocpDetails.tsx | 2 +- src/pages/views/explorer/explorer.tsx | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/pages/views/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx index ff9043d83..94ffa85db 100644 --- a/src/pages/views/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -290,7 +290,7 @@ class AwsDetails extends React.Component { const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: undefined, + // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: value, }, diff --git a/src/pages/views/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx index 16d269206..e09c9b5d3 100644 --- a/src/pages/views/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -280,7 +280,7 @@ class AzureDetails extends React.Component { const groupByKey: keyof AzureQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: undefined, + // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, diff --git a/src/pages/views/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx index e44263cfa..439a37d9b 100644 --- a/src/pages/views/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -279,7 +279,7 @@ class GcpDetails extends React.Component { const groupByKey: keyof GcpQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: undefined, + // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index cc8cd09b1..06300665a 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -280,7 +280,7 @@ class OcpDetails extends React.Component { const groupByKey: keyof OcpQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: undefined, + // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index bb83caa0b..b00e33299 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -297,7 +297,7 @@ class Explorer extends React.Component { const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: undefined, + // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: value, }, From db8e18f85579f3fed7c10428dfcc29ce531097c3 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 2 Mar 2021 12:20:45 -0500 Subject: [PATCH 126/200] Don't reset date range if groupBy changes --- src/pages/views/explorer/explorerFilter.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/views/explorer/explorerFilter.tsx b/src/pages/views/explorer/explorerFilter.tsx index b2a373f79..bfe909856 100644 --- a/src/pages/views/explorer/explorerFilter.tsx +++ b/src/pages/views/explorer/explorerFilter.tsx @@ -89,7 +89,6 @@ export class ExplorerFilterBase extends React.Component { const { fetchOrg, fetchTag, - groupBy, orgReport, orgReportPathsType, perspective, @@ -112,7 +111,8 @@ export class ExplorerFilterBase extends React.Component { categoryOptions: this.getCategoryOptions(), }); } - if (prevProps.groupBy !== groupBy || prevProps.perspective !== perspective) { + // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 + if (prevProps.perspective !== perspective) { this.handleDateRangeClick(dateRangeOptions[0].value); } } From f219444912ef05e89829dc7063f65788fe1cfa1f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 2 Mar 2021 12:21:02 -0500 Subject: [PATCH 127/200] preserve date range --- src/pages/views/explorer/explorer.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index b00e33299..cedc0f2e1 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -297,7 +297,7 @@ class Explorer extends React.Component { const newQuery = { ...JSON.parse(JSON.stringify(query)), - // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: value, }, @@ -381,13 +381,14 @@ class Explorer extends React.Component { }; private updateReport = () => { - const { perspective, fetchReport, history, location, query, queryString } = this.props; + const { dateRange, fetchReport, history, location, perspective, query, queryString } = this.props; if (!location.search) { history.replace( getRouteForQuery(history, { filter_by: query ? query.filter_by : undefined, group_by: query ? query.group_by : undefined, order_by: { cost: 'desc' }, + dateRange, // Preserve date range }) ); } else { From 73301604b451ef82435dc698172a4d2d53ffbc12 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 2 Mar 2021 12:21:26 -0500 Subject: [PATCH 128/200] update filter_by comments --- src/pages/views/details/awsDetails/awsDetails.tsx | 2 +- src/pages/views/details/azureDetails/azureDetails.tsx | 2 +- src/pages/views/details/gcpDetails/gcpDetails.tsx | 2 +- src/pages/views/details/ocpDetails/ocpDetails.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/views/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx index 94ffa85db..d7fc57d68 100644 --- a/src/pages/views/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -290,7 +290,7 @@ class AwsDetails extends React.Component { const newQuery = { ...JSON.parse(JSON.stringify(query)), - // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: value, }, diff --git a/src/pages/views/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx index e09c9b5d3..4d5ec5ca5 100644 --- a/src/pages/views/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -280,7 +280,7 @@ class AzureDetails extends React.Component { const groupByKey: keyof AzureQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, diff --git a/src/pages/views/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx index 439a37d9b..a205d076c 100644 --- a/src/pages/views/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -279,7 +279,7 @@ class GcpDetails extends React.Component { const groupByKey: keyof GcpQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index 06300665a..df22b2fc6 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -280,7 +280,7 @@ class OcpDetails extends React.Component { const groupByKey: keyof OcpQuery['group_by'] = groupBy as any; const newQuery = { ...JSON.parse(JSON.stringify(query)), - // filter_by: undefined, // See https://issues.redhat.com/browse/COST-1090 + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 group_by: { [groupByKey]: '*', }, From 78c96b51b7e7515056faf9ab67184248967b4951 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 2 Mar 2021 12:44:02 -0500 Subject: [PATCH 129/200] Rename "Historical Cost Explorer" https://issues.redhat.com/browse/COST-1101 --- .../costExplorerChart.styles.ts} | 0 .../costExplorerChart.tsx} | 10 +++++----- src/components/charts/costExplorerChart/index.ts | 1 + src/components/charts/historicalExplorerChart/index.ts | 1 - src/locales/en.json | 2 +- src/pages/views/explorer/explorerChart.tsx | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) rename src/components/charts/{historicalExplorerChart/historicalExplorerChart.styles.ts => costExplorerChart/costExplorerChart.styles.ts} (100%) rename src/components/charts/{historicalExplorerChart/historicalExplorerChart.tsx => costExplorerChart/costExplorerChart.tsx} (97%) create mode 100644 src/components/charts/costExplorerChart/index.ts delete mode 100644 src/components/charts/historicalExplorerChart/index.ts diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts b/src/components/charts/costExplorerChart/costExplorerChart.styles.ts similarity index 100% rename from src/components/charts/historicalExplorerChart/historicalExplorerChart.styles.ts rename to src/components/charts/costExplorerChart/costExplorerChart.styles.ts diff --git a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx b/src/components/charts/costExplorerChart/costExplorerChart.tsx similarity index 97% rename from src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx rename to src/components/charts/costExplorerChart/costExplorerChart.tsx index 034ab5c70..b6a4d8c98 100644 --- a/src/components/charts/historicalExplorerChart/historicalExplorerChart.tsx +++ b/src/components/charts/costExplorerChart/costExplorerChart.tsx @@ -28,9 +28,9 @@ import React from 'react'; import { formatCurrencyAbbreviation, FormatOptions, ValueFormatter } from 'utils/formatValue'; import { noop } from 'utils/noop'; -import { chartStyles } from './historicalExplorerChart.styles'; +import { chartStyles } from './costExplorerChart.styles'; -interface HistoricalExplorerChartProps { +interface CostExplorerChartProps { adjustContainerHeight?: boolean; containerHeight?: number; formatDatumValue?: ValueFormatter; @@ -54,7 +54,7 @@ interface State { units?: string; } -class HistoricalExplorerChart extends React.Component { +class CostExplorerChart extends React.Component { private containerRef = React.createRef(); private resizeObserver: any = noop; private navToggle: any = noop; @@ -68,7 +68,7 @@ class HistoricalExplorerChart extends React.Component { {reportFetchStatus === FetchStatus.inProgress ? ( this.getSkeleton() ) : ( - Date: Wed, 3 Mar 2021 09:24:09 -0500 Subject: [PATCH 130/200] fixes for i18n keys, using old key name (#1892) added keys to i18n exludelist removed dead keys --- scripts/utils/i18n_excludes | 4 ++++ src/locales/en.json | 11 +++-------- .../awsCloudDashboard/awsCloudDashboardWidgets.ts | 4 ++-- .../dashboard/awsDashboard/awsDashboardWidgets.ts | 4 ++-- .../azureCloudDashboard/azureCloudDashboardWidgets.ts | 4 ++-- .../dashboard/azureDashboard/azureDashboardWidgets.ts | 4 ++-- .../dashboard/gcpDashboard/gcpDashboardWidgets.ts | 4 ++-- .../ocpCloudDashboard/ocpCloudDashboardWidgets.ts | 4 ++-- 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index 50ef9991f..b9cec24d7 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -211,6 +211,8 @@ units.core-hours units.gb units.gb-hours units.gb-mo +units.gibibyte month +units.hour units.hours units.hrs units.tag-mo @@ -221,6 +223,8 @@ unit_tooltips.hrs unit_tooltips.gb unit_tooltips.gb-hours unit_tooltips.gb-mo +unit_tooltips.gibibyte month +unit_tooltips.hour unit_tooltips.vm-hours unit_tooltips.usd diff --git a/src/locales/en.json b/src/locales/en.json index dd514e45f..2c3666669 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -133,7 +133,6 @@ "cost_supplementary_legend_label_no_data": "Supplementary cost (no data)", "cost_supplementary_legend_label_plural": "Supplementary cost ({{startDate}}-{{endDate}} $t(months_abbr.{{month}}))", "cost_supplementary_legend_tooltip": "Supplementary cost ($t(months_abbr.{{month}}))", - "daily_usage_comparison": "Daily usage comparison ({{units}})", "date": "{{date}}-$t(months_abbr.{{month}})", "date_range": "{{startDate}} $t(months_abbr.{{month}}) {{year}}", "date_range_plural": "{{startDate}}-{{endDate}} $t(months_abbr.{{month}}) {{year}}", @@ -367,6 +366,7 @@ }, "dashboard": { "cumulative_cost_comparison": "Cumulative cost comparison ({{units}})", + "daily_usage_comparison": "Daily usage comparison ({{units}})", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", "widget_subtitle": "{{startDate}} $t(months.{{month}})", "widget_subtitle_plural": "{{startDate}}-{{endDate}} $t(months.{{month}})" @@ -791,7 +791,6 @@ "daily_cost_trend_title": "All cloud filtered by OpenShift daily cost comparison ({{units}})", "database_title": "Database services cost", "network_title": "Network services cost", - "network_trend_title": "Cumulative cost comparison ({{units}})", "storage_title": "Storage services usage", "usage_label": "Usage" }, @@ -799,9 +798,7 @@ "cost_title": "All OpenShift cost", "cost_trend_title": "All OpenShift cumulative cost comparison ({{units}})", "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})", - "memory_title": "Memory usage and requests", - "usage_label": "Usage", - "volume_title": "Volume usage and requests" + "usage_label": "Usage" }, "ocp_details": { "change_column_title": "Month over month change", @@ -820,9 +817,7 @@ "cost_title": "OpenShift supplementary cost", "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})", - "memory_title": "Memory usage and requests", - "usage_label": "Usage", - "volume_title": "Volume usage and requests" + "usage_label": "Usage" }, "ocp_usage_dashboard": { "cost_title": "OpenShift usage cost", diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index 0ac7ac845..9b6880ecd 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -114,7 +114,7 @@ export const databaseWidget: AwsCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -151,7 +151,7 @@ export const networkWidget: AwsCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 939e643b4..72a76a5fc 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -118,7 +118,7 @@ export const databaseWidget: AwsDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -155,7 +155,7 @@ export const networkWidget: AwsDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 5351b9e0f..0b2b0fe0b 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -73,7 +73,7 @@ export const databaseWidget: AzureCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -110,7 +110,7 @@ export const networkWidget: AzureCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index 8a1f12e26..ef1c28a90 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -77,7 +77,7 @@ export const databaseWidget: AzureDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -114,7 +114,7 @@ export const networkWidget: AzureDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index 83d338fb4..fcd6782ad 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -119,7 +119,7 @@ export const databaseWidget: GcpDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { @@ -158,7 +158,7 @@ export const networkWidget: GcpDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, topItems: { diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index 835b27365..126543187 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -103,7 +103,7 @@ export const databaseWidget: OcpCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, chartType: DashboardChartType.trend, @@ -130,7 +130,7 @@ export const networkWidget: OcpCloudDashboardWidget = { computedReportItem: ComputedReportItemType.cost, computedReportItemValue: ComputedReportItemValueType.total, formatOptions: {}, - titleKey: 'chart.cumulative_cost_comparison', + titleKey: 'dashboard.cumulative_cost_comparison', type: ChartType.rolling, }, chartType: DashboardChartType.trend, From 1f9e8f9169bc7aa7a7eed04f2b4bd8e2cb5271f4 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 3 Mar 2021 11:10:05 -0500 Subject: [PATCH 131/200] Fix chart null (no data) padding (#1893) https://issues.redhat.com/browse/COST-1106 --- src/components/charts/common/chartDatumUtils.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/charts/common/chartDatumUtils.ts b/src/components/charts/common/chartDatumUtils.ts index e97b60efb..706c4d71d 100644 --- a/src/components/charts/common/chartDatumUtils.ts +++ b/src/components/charts/common/chartDatumUtils.ts @@ -157,7 +157,7 @@ export function createForecastDatum( forecastItem: string = 'cost', forecastItemValue: string = 'total' ): ChartDatum { - const xVal = getDate(new Date(computedItem.date)); + const xVal = getDate(new Date(computedItem.date + 'T00:00:00')); const yVal = isFloat(value) ? parseFloat(value.toFixed(2)) : isInt(value) ? value : 0; return { x: xVal, @@ -177,7 +177,7 @@ export function createForecastConeDatum( forecastItem: string = 'cost', forecastItemValue: string = 'total' ): ChartDatum { - const xVal = getDate(new Date(computedItem.date)); + const xVal = getDate(new Date(computedItem.date + 'T00:00:00')); const yVal = isFloat(maxValue) ? parseFloat(maxValue.toFixed(2)) : isInt(maxValue) ? maxValue : 0; const y0Val = isFloat(minValue) ? parseFloat(minValue.toFixed(2)) : isInt(minValue) ? minValue : 0; return { @@ -199,7 +199,7 @@ export function createReportDatum( reportItem: string = 'cost', reportItemValue: string = 'total' // useful for infrastructure.usage values ): ChartDatum { - const xVal = idKey === 'date' ? getDate(new Date(computedItem.id)) : computedItem.label; + const xVal = idKey === 'date' ? getDate(new Date(computedItem.id + 'T00:00:00')) : computedItem.label; const yVal = isFloat(value) ? parseFloat(value.toFixed(2)) : isInt(value) ? value : 0; return { x: xVal, @@ -234,7 +234,7 @@ export function fillChartDatums(datums: ChartDatum[], type: ChartType = ChartTyp result.push({ ...prevChartDatum, key: id, - x: getDate(new Date(id)), + x: getDate(new Date(id + 'T00:00:00')), }); } if (chartDatum) { @@ -244,7 +244,7 @@ export function fillChartDatums(datums: ChartDatum[], type: ChartType = ChartTyp if (type === ChartType.daily) { prevChartDatum = { key: id, - x: getDate(new Date(id)), + x: getDate(new Date(id + 'T00:00:00')), y: null, }; } else { From 633578b7b1355c417642d6ae3581f61e7c21f136 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 3 Mar 2021 11:10:11 -0500 Subject: [PATCH 132/200] Update frontend-component packages (#1894) https://issues.redhat.com/browse/COST-1108 --- koku-ui-manifest | 4 ++-- package.json | 4 ++-- yarn.lock | 16 ++++++++-------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index 2f635910b..ebe80e64e 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -97,11 +97,11 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.0.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.0.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.93.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock diff --git a/package.json b/package.json index 8f023fae4..0a87b3082 100644 --- a/package.json +++ b/package.json @@ -38,8 +38,8 @@ "@patternfly/react-styles": "4.8.1", "@patternfly/react-table": "4.23.1", "@patternfly/react-tokens": "4.10.1", - "@redhat-cloud-services/frontend-components": "^3.0.7", - "@redhat-cloud-services/frontend-components-notifications": "^3.0.3", + "@redhat-cloud-services/frontend-components": "^3.0.10", + "@redhat-cloud-services/frontend-components-notifications": "^3.0.4", "@redhat-cloud-services/frontend-components-utilities": "^3.0.3", "@redhat-cloud-services/rbac-client": "^1.0.93", "@types/date-fns": "2.6.0", diff --git a/yarn.lock b/yarn.lock index bb3cc95b3..935e8e462 100644 --- a/yarn.lock +++ b/yarn.lock @@ -647,10 +647,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.7.0.tgz#5f7760965170f7f1e2910d2498c5be88b47a2a8c" integrity sha512-V3WyEc8ZyAuOQ2fpFuTuYYOd2tV4NePeSdxaHYgYAOs7ERLxlcFi2XsmgI5LJFdAUmJKXsg8jaIiVTkTHQygQw== -"@redhat-cloud-services/frontend-components-notifications@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.0.3.tgz#b83ef396d2a7d65889d5554a3346039683d90516" - integrity sha512-H3wLzn05GA5ntLDAxGGneAEtsjcFQoaG+WUz3RPQBEZBnFrd3bcDU42ucXEqH9GaDy/zZf1l0SXbVK/efpLJtQ== +"@redhat-cloud-services/frontend-components-notifications@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.0.4.tgz#b5fdf9bc178d861f507bde036e16ecbb617b9a85" + integrity sha512-9bUA7Ed2KSOnrGItLxrbFEe5M6pvqMU5ohvZM0o0fKJmgy6RaG8mRT+C349rxhwLwkqewDQ02qCbgNFpP587/A== dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" @@ -676,10 +676,10 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.0.7": - version "3.0.7" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.0.7.tgz#02b639d6c80ad63611498c885f96acb4a130fcbf" - integrity sha512-MTzyM3imeqpAWDq0Mllfocb+PJAmtfKpiyQ3PXHnt94wehwv8cuCZ411Y1wHF9lbsU+evpYCX4nX7Vqkc3sL6g== +"@redhat-cloud-services/frontend-components@^3.0.10": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.0.10.tgz#1236b4249a37d0264b246df58ab8f8362c36c044" + integrity sha512-A3zjQWQaw3iSMuhhLxpEO3YQOrzbXSGdIWi6ppUiG07jb9gATEY0ElWU5/V59Y9/Evks7314pxWzLqBDBSNFsA== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "0.0.10" From 758a735da17b23a0769b42d7e8f6ab6e14cac47f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 3 Mar 2021 13:39:42 -0500 Subject: [PATCH 133/200] Omit negative chart data https://issues.redhat.com/browse/COST-1109 --- src/components/charts/common/chartDatumUtils.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/components/charts/common/chartDatumUtils.ts b/src/components/charts/common/chartDatumUtils.ts index 706c4d71d..f9ae14a21 100644 --- a/src/components/charts/common/chartDatumUtils.ts +++ b/src/components/charts/common/chartDatumUtils.ts @@ -474,10 +474,14 @@ export function getUsageRangeString( return getCostRangeString(datums, key, firstOfMonth, lastOfMonth, offset); } +// Returns true if non negative integer export function isInt(n) { - return Number(n) === n && n % 1 === 0; + const result = Number(n) === n && n % 1 === 0; + return result && n > 0; } +// Returns true if non negative float export function isFloat(n) { - return Number(n) === n && n % 1 !== 0; + const result = Number(n) === n && n % 1 !== 0; + return result && n > 0; } From eadd57617b8cafac31b597c779bee8c454994b93 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 3 Mar 2021 13:42:45 -0500 Subject: [PATCH 134/200] Changed isInt and isFloat logic to >= --- src/components/charts/common/chartDatumUtils.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/charts/common/chartDatumUtils.ts b/src/components/charts/common/chartDatumUtils.ts index f9ae14a21..b04f7594b 100644 --- a/src/components/charts/common/chartDatumUtils.ts +++ b/src/components/charts/common/chartDatumUtils.ts @@ -477,11 +477,11 @@ export function getUsageRangeString( // Returns true if non negative integer export function isInt(n) { const result = Number(n) === n && n % 1 === 0; - return result && n > 0; + return result && n >= 0; } // Returns true if non negative float export function isFloat(n) { const result = Number(n) === n && n % 1 !== 0; - return result && n > 0; + return result && n >= 0; } From 148e97e7e6db3297a7dcd43d1411317aa5153313 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 3 Mar 2021 19:59:45 -0500 Subject: [PATCH 135/200] Cost Explorer shows 31 and 61 days https://issues.redhat.com/browse/COST-1117 --- src/pages/views/explorer/explorerUtils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index 339709a58..ab54bb600 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -156,11 +156,13 @@ export const getDateRange = queryFromRoute => { start_date = format(startOfMonth(today), 'yyyy-MM-dd'); break; case DateRangeType.lastSixtyDays: - today.setDate(today.getDate() - 60); + // 60 days, including today's date + today.setDate(today.getDate() - 59); start_date = format(today, 'yyyy-MM-dd'); break; case DateRangeType.lastThirtyDays: - today.setDate(today.getDate() - 30); + // 30 days, including today's date + today.setDate(today.getDate() - 29); start_date = format(today, 'yyyy-MM-dd'); break; case DateRangeType.currentMonthToDate: From 827d035ac1c8930d2ade0c460b4c14b644e6c8d1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 4 Mar 2021 13:38:35 -0500 Subject: [PATCH 136/200] Reverted date range change and updated comments instead --- src/pages/views/explorer/explorerUtils.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index ab54bb600..a7dbdd47f 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -156,13 +156,13 @@ export const getDateRange = queryFromRoute => { start_date = format(startOfMonth(today), 'yyyy-MM-dd'); break; case DateRangeType.lastSixtyDays: - // 60 days, including today's date - today.setDate(today.getDate() - 59); + // 61 days, including today's date. See https://issues.redhat.com/browse/COST-1117 + today.setDate(today.getDate() - 60); start_date = format(today, 'yyyy-MM-dd'); break; case DateRangeType.lastThirtyDays: - // 30 days, including today's date - today.setDate(today.getDate() - 29); + // 31 days, including today's date. See https://issues.redhat.com/browse/COST-1117 + today.setDate(today.getDate() - 30); start_date = format(today, 'yyyy-MM-dd'); break; case DateRangeType.currentMonthToDate: From 15d851f190bc1544bb9b25177345f9000c3b6c4a Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 13:26:51 -0500 Subject: [PATCH 137/200] OCP widget as federated module https://issues.redhat.com/browse/COST-1124 --- src/locales/en.json | 5 + .../ocpOverviewChart.styles.ts | 32 +++ .../ocpOverviewWidget/ocpOverviewChart.tsx | 233 ++++++++++++++++++ .../ocpOverviewWidget/ocpOverviewUtils.ts | 43 ++++ .../ocpOverviewWidget.styles.ts | 16 ++ .../ocpOverviewWidget/ocpOverviewWidget.tsx | 188 ++++++++++++++ webpack.config.js | 4 +- 7 files changed, 520 insertions(+), 1 deletion(-) create mode 100644 src/modules/ocpOverviewWidget/ocpOverviewChart.styles.ts create mode 100644 src/modules/ocpOverviewWidget/ocpOverviewChart.tsx create mode 100644 src/modules/ocpOverviewWidget/ocpOverviewUtils.ts create mode 100644 src/modules/ocpOverviewWidget/ocpOverviewWidget.styles.ts create mode 100644 src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx diff --git a/src/locales/en.json b/src/locales/en.json index 2c3666669..4a6359184 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,4 +1,9 @@ { + "federated_modules": { + "ocp_overview": { + "title": "All OpenShift clusters cost" + } + }, "aws_cloud_dashboard": { "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services filtered by OpenShift cost", diff --git a/src/modules/ocpOverviewWidget/ocpOverviewChart.styles.ts b/src/modules/ocpOverviewWidget/ocpOverviewChart.styles.ts new file mode 100644 index 000000000..6e8c416e8 --- /dev/null +++ b/src/modules/ocpOverviewWidget/ocpOverviewChart.styles.ts @@ -0,0 +1,32 @@ +import global_spacer_2xl from '@patternfly/react-tokens/dist/js/global_spacer_2xl'; +import global_spacer_3xl from '@patternfly/react-tokens/dist/js/global_spacer_3xl'; +import global_spacer_lg from '@patternfly/react-tokens/dist/js/global_spacer_lg'; +import global_spacer_md from '@patternfly/react-tokens/dist/js/global_spacer_md'; +import global_spacer_sm from '@patternfly/react-tokens/dist/js/global_spacer_sm'; +import React from 'react'; + +export const chartStyles = { + chartHeight: 300, + chartContainerHeight: 300, +}; + +export const styles = { + chartContainer: { + marginLeft: global_spacer_2xl.value, + }, + chartSkeleton: { + height: '125px', + marginBottom: global_spacer_md.value, + marginTop: global_spacer_3xl.value, + }, + costChart: { + marginBottom: global_spacer_sm.value, + marginTop: global_spacer_sm.value, + }, + legendSkeleton: { + marginTop: global_spacer_md.value, + }, + titleContainer: { + marginLeft: global_spacer_lg.value, + }, +} as { [className: string]: React.CSSProperties }; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx new file mode 100644 index 000000000..b7817a49e --- /dev/null +++ b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx @@ -0,0 +1,233 @@ +import { Title } from '@patternfly/react-core'; +import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import { getQuery, Query } from 'api/queries/query'; +import { Report, ReportPathsType, ReportType } from 'api/reports/report'; +import { AxiosError } from 'axios'; +import { + ChartType, + ComputedReportItemType, + ComputedReportItemValueType, + transformReport, +} from 'components/charts/common/chartDatumUtils'; +import { TrendChart } from 'components/charts/trendChart'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { reportActions, reportSelectors } from 'store/reports'; +import { unitLookupKey } from 'utils/formatValue'; +import { formatValue } from 'utils/formatValue'; + +import { chartStyles, styles } from './ocpOverviewChart.styles'; + +interface OcpOverviewChartOwnProps extends WithTranslation { + computedReportItemType?: ComputedReportItemType; + title?: string; // This is just a test property +} + +interface OcpOverviewChartStateProps { + currentQuery: Query; + currentQueryString: string; + currentReport: Report; + currentReportError: AxiosError; + currentReportFetchStatus: FetchStatus; + previousQuery: Query; + previousQueryString: string; + previousReport: Report; + previousReportError: AxiosError; + previousReportFetchStatus: FetchStatus; +} + +interface OcpOverviewChartDispatchProps { + fetchReport: typeof reportActions.fetchReport; +} + +interface OcpOverviewChartState { + // TBD... +} + +type OcpOverviewChartProps = OcpOverviewChartStateProps & OcpOverviewChartOwnProps & OcpOverviewChartDispatchProps; + +const computedReportItem = ComputedReportItemType.cost; // cost, supplementary cost, etc. +const computedReportItemValue = ComputedReportItemValueType.total; // infrastructure usage cost +const reportPathsType = ReportPathsType.ocp; +const reportType = ReportType.cost; + +class OcpOverviewChartBase extends React.Component { + protected defaultState: OcpOverviewChartState = {}; + public state: OcpOverviewChartState = { ...this.defaultState }; + + constructor(stateProps, dispatchProps) { + super(stateProps, dispatchProps); + } + + public componentDidMount() { + this.updateReport(); + } + + public componentDidUpdate(prevProps: OcpOverviewChartProps) { + const { + currentReport, + currentReportError, + currentQueryString, + previousReport, + previousReportError, + previousQueryString, + } = this.props; + + const newQuery = + prevProps.currentQueryString !== currentQueryString || prevProps.previousQueryString !== previousQueryString; + const noReport = !(currentReport || previousReport) && !(currentReportError || previousReportError); + + if (newQuery || noReport) { + this.updateReport(); + } + } + + private getChart = () => { + const { currentReport, previousReport } = this.props; + const units = this.getUnits(); + + const currentData = transformReport( + currentReport, + ChartType.rolling, + 'date', + computedReportItem, + computedReportItemValue + ); + const previousData = transformReport( + previousReport, + ChartType.rolling, + 'date', + computedReportItem, + computedReportItemValue + ); + + return ( + + ); + }; + + private getSkeleton = () => { + return ( + <> + + + + ); + }; + + private getUnits = () => { + const { currentReport } = this.props; + + const hasTotal = currentReport && currentReport.meta && currentReport.meta.total; + const hasCost = + hasTotal && + currentReport.meta.total[computedReportItem] && + currentReport.meta.total[computedReportItem][computedReportItemValue]; + + return hasCost ? unitLookupKey(currentReport.meta.total[computedReportItem][computedReportItemValue].units) : ''; + }; + + private updateReport = () => { + const { currentQueryString, fetchReport, previousQueryString } = this.props; + + fetchReport(reportPathsType, reportType, currentQueryString); + fetchReport(reportPathsType, reportType, previousQueryString); + }; + + public render() { + const { currentReportFetchStatus, previousReportFetchStatus, t } = this.props; + const title = this.props.title || t('federated_modules.ocp_overview.title'); + + return ( + <> +
    + + {title} + +
    +
    +
    + {currentReportFetchStatus === FetchStatus.inProgress || previousReportFetchStatus === FetchStatus.inProgress + ? this.getSkeleton() + : this.getChart()} +
    +
    + + ); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + const currentQuery = { + filter: { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'daily', + }, + }; + const previousQuery = { + filter: { + time_scope_units: 'month', + time_scope_value: -2, + resolution: 'daily', + }, + }; + const currentQueryString = getQuery(currentQuery); + const previousQueryString = getQuery(previousQuery); + + const currentReport = reportSelectors.selectReport(state, reportPathsType, reportType, currentQueryString); + const currentReportError = reportSelectors.selectReportError(state, reportPathsType, reportType, currentQueryString); + const currentReportFetchStatus = reportSelectors.selectReportFetchStatus( + state, + reportPathsType, + reportType, + currentQueryString + ); + + const previousReport = reportSelectors.selectReport(state, reportPathsType, reportType, previousQueryString); + const previousReportError = reportSelectors.selectReportError( + state, + reportPathsType, + reportType, + previousQueryString + ); + const previousReportFetchStatus = reportSelectors.selectReportFetchStatus( + state, + reportPathsType, + reportType, + previousQueryString + ); + + return { + currentQuery, + currentQueryString, + currentReport, + currentReportError, + currentReportFetchStatus, + previousQuery, + previousQueryString, + previousReport, + previousReportError, + previousReportFetchStatus, + }; +}); + +const mapDispatchToProps: OcpOverviewChartDispatchProps = { + fetchReport: reportActions.fetchReport, +}; + +const OcpOverviewChartConnect = connect(mapStateToProps, mapDispatchToProps)(OcpOverviewChartBase); +const OcpOverviewChart = withTranslation()(OcpOverviewChartConnect); + +export { OcpOverviewChart, OcpOverviewChartProps }; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewUtils.ts b/src/modules/ocpOverviewWidget/ocpOverviewUtils.ts new file mode 100644 index 000000000..5e66f2051 --- /dev/null +++ b/src/modules/ocpOverviewWidget/ocpOverviewUtils.ts @@ -0,0 +1,43 @@ +import { Providers } from 'api/providers'; +import { getQueryRoute, Query } from 'api/queries/query'; +import { UserAccess, UserAccessType } from 'api/userAccess'; +import { FetchStatus } from 'store/common'; + +export const baseQuery: Query = { + filter: { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'daily', + }, +}; + +export const getRouteForQuery = (history, query: Query, reset: boolean = false) => { + // Reset pagination + if (reset) { + query.filter = { + ...query.filter, + offset: baseQuery.filter.offset, + }; + } + return `${history.location.pathname}?${getQueryRoute(query)}`; +}; + +export const isOcpAvailable = ( + ocpProviders: Providers, + ocpProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (ocpProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.ocp); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + ocpProviders !== undefined && + ocpProviders.meta !== undefined && + ocpProviders.meta.count > 0; + } + return result; +}; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.styles.ts b/src/modules/ocpOverviewWidget/ocpOverviewWidget.styles.ts new file mode 100644 index 000000000..b5f65dc4d --- /dev/null +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.styles.ts @@ -0,0 +1,16 @@ +import global_BackgroundColor_light_100 from '@patternfly/react-tokens/dist/js/global_BackgroundColor_light_100'; +import global_spacer_lg from '@patternfly/react-tokens/dist/js/global_spacer_lg'; + +export const styles = { + chartContainer: { + backgroundColor: global_BackgroundColor_light_100.value, + marginLeft: global_spacer_lg.value, + marginRight: global_spacer_lg.value, + paddingRight: global_spacer_lg.value, + paddingBottom: global_spacer_lg.value, + paddingTop: global_spacer_lg.value, + }, + chartContent: { + paddingTop: global_spacer_lg.value, + }, +} as { [className: string]: React.CSSProperties }; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx new file mode 100644 index 000000000..a38de915c --- /dev/null +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx @@ -0,0 +1,188 @@ +import { Providers, ProviderType } from 'api/providers'; +import { getProvidersQuery } from 'api/queries/providersQuery'; +import { getQuery, parseQuery, Query } from 'api/queries/query'; +import { getUserAccessQuery } from 'api/queries/userAccessQuery'; +import { UserAccess, UserAccessType } from 'api/userAccess'; +import { AxiosError } from 'axios'; +import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; +import NoProviders from 'pages/state/noProviders'; +import NotAvailable from 'pages/state/notAvailable'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { ocpProvidersQuery, providersActions, providersSelectors } from 'store/providers'; +import { allUserAccessQuery, userAccessActions, userAccessSelectors } from 'store/userAccess'; + +import { OcpOverviewChart } from './ocpOverviewChart'; +import { baseQuery, isOcpAvailable } from './ocpOverviewUtils'; +import { styles } from './ocpOverviewWidget.styles'; + +interface OcpOverviewWidgetOwnProps extends WithTranslation { + title?: string; // This is just a test property +} + +interface OcpOverviewWidgetStateProps { + ocpProviders: Providers; + ocpProvidersError: AxiosError; + ocpProvidersFetchStatus: FetchStatus; + ocpProvidersQueryString: string; + query: Query; + queryString: string; + title?: string; // This is just a test property + userAccess: UserAccess; + userAccessError: AxiosError; + userAccessFetchStatus: FetchStatus; + userAccessQueryString: string; +} + +interface OcpOverviewWidgetDispatchProps { + fetchProviders: typeof providersActions.fetchProviders; + fetchUserAccess: typeof userAccessActions.fetchUserAccess; +} + +interface OcpOverviewWidgetState { + // TBD... +} + +type OcpOverviewWidgetProps = OcpOverviewWidgetStateProps & OcpOverviewWidgetOwnProps & OcpOverviewWidgetDispatchProps; + +class OcpOverviewWidgetBase extends React.Component { + protected defaultState: OcpOverviewWidgetState = {}; + public state: OcpOverviewWidgetState = { ...this.defaultState }; + + constructor(stateProps, dispatchProps) { + super(stateProps, dispatchProps); + } + + public componentDidMount() { + this.updateReport(); + } + + public componentDidUpdate(prevProps: OcpOverviewWidgetProps) { + const { queryString } = this.props; + + if (prevProps.queryString !== queryString) { + this.updateReport(); + } + } + + // Ensure at least one source provider has data available + private hasCurrentMonthData = (providers: Providers) => { + let result = false; + + if (providers && providers.data) { + for (const provider of providers.data) { + if (provider.current_month_data) { + result = true; + break; + } + } + } + return result; + }; + + private updateReport = () => { + const { fetchProviders, fetchUserAccess, queryString } = this.props; + + fetchProviders(ProviderType.ocp, queryString); + fetchUserAccess(UserAccessType.all, queryString); + }; + + public render() { + const { + ocpProviders, + ocpProvidersError, + ocpProvidersFetchStatus, + userAccessError, + userAccessFetchStatus, + t, + userAccess, + } = this.props; + + const isLoading = + userAccessFetchStatus === FetchStatus.inProgress || ocpProvidersFetchStatus === FetchStatus.inProgress; + + const title = this.props.title || t('federated_modules.ocp_overview.title'); + + // Test for no providers + const noProviders = !isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess); + + // Note: Providers are fetched via the InactiveSources component used by all routes + if (ocpProvidersError || userAccessError) { + return ; + } else if (isLoading) { + return ; + } else if (noProviders) { + return ; + } else if (!this.hasCurrentMonthData(ocpProviders)) { + return ; + } + + return ( +
    +
    + +
    +
    + ); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps(state => { + const queryFromRoute = parseQuery(location.search); + const query = { + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + }, + }; + const queryString = getQuery({ + ...query, + perspective: undefined, + dateRange: undefined, + }); + + const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); + const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); + const ocpProvidersError = providersSelectors.selectProvidersError(state, ProviderType.ocp, ocpProvidersQueryString); + const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ocp, + ocpProvidersQueryString + ); + + const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); + const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString); + const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString); + const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus( + state, + UserAccessType.all, + userAccessQueryString + ); + + return { + ocpProviders, + ocpProvidersError, + ocpProvidersFetchStatus, + ocpProvidersQueryString, + query, + queryString, + userAccess, + userAccessError, + userAccessFetchStatus, + userAccessQueryString, + }; +}); + +const mapDispatchToProps: OcpOverviewWidgetDispatchProps = { + fetchProviders: providersActions.fetchProviders, + fetchUserAccess: userAccessActions.fetchUserAccess, +}; + +const OcpOverviewWidgetConnect = connect(mapStateToProps, mapDispatchToProps)(OcpOverviewWidgetBase); +const OcpOverviewWidget = withTranslation()(OcpOverviewWidgetConnect); + +export { OcpOverviewWidget, OcpOverviewWidgetProps }; diff --git a/webpack.config.js b/webpack.config.js index 56c25c1ea..de2d1a78f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -173,7 +173,9 @@ module.exports = (_env, argv) => { name: moduleName, filename: `${moduleName}.js`, exposes: { - './RootApp': './src/federatedEntry.tsx' + './RootApp': './src/federatedEntry.tsx', + // Shared component module path. Must include default export! + './OcpOverviewWidget': './src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx', }, shared: { ...dependencies, From 5cf4607dc52e207c0c087a3d898563044e1424c5 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:42:52 -0500 Subject: [PATCH 138/200] Updated latest webpack and frontend-components packages --- koku-ui-manifest | 23 +++++---- package.json | 10 ++-- webpack.config.js | 4 +- yarn.lock | 124 +++++++++++++++++++++++++--------------------- 4 files changed, 86 insertions(+), 75 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index ebe80e64e..ab65bce17 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -97,12 +97,12 @@ mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.0.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.93.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.94.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock @@ -370,6 +370,7 @@ mgmt_services/cost-mgmt:koku-ui/color-convert:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/colorette:1.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/colorette:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:6.1.0.yarnlock @@ -491,11 +492,9 @@ mgmt_services/cost-mgmt:koku-ui/domelementtype:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domexception:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domhandler:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/domhandler:3.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/domhandler:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domhandler:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:1.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/domutils:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/dot-case:3.0.3.yarnlock @@ -532,12 +531,13 @@ mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-module-lexer:0.3.26.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-module-lexer:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es-to-primitive:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/escalade:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-html:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/escodegen:1.14.3.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-config-airbnb-base:12.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-config-airbnb:16.1.0.yarnlock @@ -716,7 +716,6 @@ mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-replace-webpack-plugin:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:3.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/htmlparser2:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/http-deceiver:1.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.2.yarnlock @@ -817,6 +816,7 @@ mgmt_services/cost-mgmt:koku-ui/is-path-inside:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-obj:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-plain-object:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-plain-object:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock @@ -918,6 +918,7 @@ mgmt_services/cost-mgmt:koku-ui/kind-of:6.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/kind-of:6.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/kleur:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/language-subtag-registry:0.3.20.yarnlock mgmt_services/cost-mgmt:koku-ui/language-tags:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/lcid:1.0.0.yarnlock @@ -1132,7 +1133,7 @@ mgmt_services/cost-mgmt:koku-ui/postcss-modules-values:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-value-parser:4.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/postcss:7.0.35.yarnlock +mgmt_services/cost-mgmt:koku-ui/postcss:8.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss:8.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.1.2.yarnlock @@ -1275,7 +1276,7 @@ mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sane:4.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/sanitize-html:1.27.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/sanitize-html:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sass-loader:11.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/sass:1.32.7.yarnlock mgmt_services/cost-mgmt:koku-ui/saxes:5.0.1.yarnlock @@ -1536,7 +1537,7 @@ mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack:5.22.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack:5.24.3.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-extensions:0.1.4.yarnlock diff --git a/package.json b/package.json index 0a87b3082..3708d2bd1 100644 --- a/package.json +++ b/package.json @@ -38,10 +38,10 @@ "@patternfly/react-styles": "4.8.1", "@patternfly/react-table": "4.23.1", "@patternfly/react-tokens": "4.10.1", - "@redhat-cloud-services/frontend-components": "^3.0.10", - "@redhat-cloud-services/frontend-components-notifications": "^3.0.4", - "@redhat-cloud-services/frontend-components-utilities": "^3.0.3", - "@redhat-cloud-services/rbac-client": "^1.0.93", + "@redhat-cloud-services/frontend-components": "^3.1.1", + "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", + "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", + "@redhat-cloud-services/rbac-client": "^1.0.94", "@types/date-fns": "2.6.0", "@types/i18next": "13.0.0", "@types/i18next-xhr-backend": "1.4.2", @@ -112,7 +112,7 @@ "tsconfig-paths-webpack-plugin": "^3.3.0", "ts-jest": "26.5.1", "ts-loader": "8.0.17", - "webpack": "^5.22.0", + "webpack": "^5.24.3", "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2", "webpack-log": "^3.0.1" diff --git a/webpack.config.js b/webpack.config.js index de2d1a78f..a40b52866 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -173,9 +173,9 @@ module.exports = (_env, argv) => { name: moduleName, filename: `${moduleName}.js`, exposes: { - './RootApp': './src/federatedEntry.tsx', + './RootApp': path.resolve(__dirname, './src/federatedEntry.tsx'), // Shared component module path. Must include default export! - './OcpOverviewWidget': './src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx', + './OcpOverviewWidget': path.resolve(__dirname, './src/modules/ocpOverviewWidget'), }, shared: { ...dependencies, diff --git a/yarn.lock b/yarn.lock index 935e8e462..01526b1f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -647,10 +647,10 @@ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.7.0.tgz#5f7760965170f7f1e2910d2498c5be88b47a2a8c" integrity sha512-V3WyEc8ZyAuOQ2fpFuTuYYOd2tV4NePeSdxaHYgYAOs7ERLxlcFi2XsmgI5LJFdAUmJKXsg8jaIiVTkTHQygQw== -"@redhat-cloud-services/frontend-components-notifications@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.0.4.tgz#b5fdf9bc178d861f507bde036e16ecbb617b9a85" - integrity sha512-9bUA7Ed2KSOnrGItLxrbFEe5M6pvqMU5ohvZM0o0fKJmgy6RaG8mRT+C349rxhwLwkqewDQ02qCbgNFpP587/A== +"@redhat-cloud-services/frontend-components-notifications@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-notifications/-/frontend-components-notifications-3.1.0.tgz#d0d7ec32e8d88b75a1aef0b2ebb1e12eecf93632" + integrity sha512-gHN424/3TJ1kPtk5Dos+aScUL+QjkmKhKhyiSDNN2o7LzhN+J+d2xA0bCx2mfEBspqHG+1nTiHpZbgQ3l0kntw== dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" @@ -665,7 +665,7 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components-utilities@>=3.0.0", "@redhat-cloud-services/frontend-components-utilities@^3.0.3": +"@redhat-cloud-services/frontend-components-utilities@>=3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.0.3.tgz#160ceccc3eb70215505307dafeb5b4333e4090ce" integrity sha512-5tV0iFuM15f5Q+TJJp97r0mCaSwffFwlh5Ey7v9MhKjv1AXU1/GCEeRmoN2B1wT1Yh1i1zPKqj423i+y5RzoPA== @@ -676,20 +676,31 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.0.10": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.0.10.tgz#1236b4249a37d0264b246df58ab8f8362c36c044" - integrity sha512-A3zjQWQaw3iSMuhhLxpEO3YQOrzbXSGdIWi6ppUiG07jb9gATEY0ElWU5/V59Y9/Evks7314pxWzLqBDBSNFsA== +"@redhat-cloud-services/frontend-components-utilities@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.1.1.tgz#6e707bdf0cbe9e9065fb8c7d64424d23aced2bc6" + integrity sha512-lqcdpvjuFJQZ1f/iNkoecjtLShqM8WPJaeTa4Y1whUu8kEkDDQ9BUa7RlTQ5x1XOt6OgTTFGg8R/RScPUbxa5A== + dependencies: + "@sentry/browser" "^5.4.0" + awesome-debounce-promise "^2.1.0" + axios "^0.21.1" + commander ">=2.20.0" + react-content-loader ">=3.4.1" + +"@redhat-cloud-services/frontend-components@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.1.tgz#848a8d7548fc3e561682376486e219b2896e77a9" + integrity sha512-tKNLVZi/957q30icYXEc8LUDfIERI3Rp/6ae1UbKHgaVqBPrCOn6M58XnGKLovHiXp0xC+cCbUdtnerMg9N8KA== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "0.0.10" "@scalprum/react-core" "0.0.13" - sanitize-html "^1.25.0" + sanitize-html "^2.3.2" -"@redhat-cloud-services/rbac-client@^1.0.93": - version "1.0.93" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.93.tgz#787a0c6033ed9395f4b3719055849049fad23cda" - integrity sha512-xAS6vSesk3v7sQucBOstyeEp/MR0F97iCIrTRVb4iQZN9eLiIE58cYPbjiD4KS3haraTVaJeJ1C4ct5OvPZKUQ== +"@redhat-cloud-services/rbac-client@^1.0.94": + version "1.0.94" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/rbac-client/-/rbac-client-1.0.94.tgz#a06f22bb2cb3af7e915f6a8f23110a48c82886cb" + integrity sha512-6iWW+s9luikuaTYv5MkdyV9v3NsOCS5QNOUveQW/oDVW/QC8Xu2tj6vSIDWZqCw5uqNLMv8PPSJQRjC+MW6DXQ== dependencies: axios "^0.21.1" @@ -2366,6 +2377,11 @@ colorette@^1.2.1: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -3020,7 +3036,7 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0, domhandler@^3.3.0: +domhandler@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== @@ -3050,15 +3066,6 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" - integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^3.3.0" - domutils@^2.4.3, domutils@^2.4.4: version "2.4.4" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.4.tgz#282739c4b150d022d34699797369aad8d19bbbd3" @@ -3297,10 +3304,10 @@ es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" -es-module-lexer@^0.3.26: - version "0.3.26" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" - integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== +es-module-lexer@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.4.1.tgz#dda8c6a14d8f340a24e34331e0fab0cb50438e0e" + integrity sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA== es-to-primitive@^1.2.1: version "1.2.1" @@ -3331,6 +3338,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^1.14.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -4496,16 +4508,6 @@ htmlparser2@^3.3.0: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - htmlparser2@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01" @@ -5023,6 +5025,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-potential-custom-element-name@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" @@ -5776,7 +5783,7 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.4: +klona@^2.0.3, klona@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== @@ -6952,14 +6959,14 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^7.0.27: - version "7.0.35" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" - integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== +postcss@^8.0.2: + version "8.2.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" + integrity sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw== dependencies: - chalk "^2.4.2" + colorette "^1.2.2" + nanoid "^3.1.20" source-map "^0.6.1" - supports-color "^6.1.0" postcss@^8.2.4: version "8.2.6" @@ -7776,15 +7783,18 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sanitize-html@^1.25.0: - version "1.27.5" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" - integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== +sanitize-html@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.3.2.tgz#a1954aea877a096c408aca7b0c260bef6e4fc402" + integrity sha512-p7neuskvC8pSurUjdVmbWPXmc9A4+QpOXIL+4gwFC+av5h+lYCXFT8uEneqsFQg/wEA1IH+cKQA60AaQI6p3cg== dependencies: - htmlparser2 "^4.1.0" - lodash "^4.17.15" + deepmerge "^4.2.2" + escape-string-regexp "^4.0.0" + htmlparser2 "^6.0.0" + is-plain-object "^5.0.0" + klona "^2.0.3" parse-srcset "^1.0.2" - postcss "^7.0.27" + postcss "^8.0.2" sass-loader@^11.0.1: version "11.0.1" @@ -9342,10 +9352,10 @@ webpack-sources@^2.1.1: source-list-map "^2.0.1" source-map "^0.6.1" -webpack@^5.22.0: - version "5.22.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.22.0.tgz#8505158bc52dcbbdb01ac94796a8aed61badf11a" - integrity sha512-xqlb6r9RUXda/d9iA6P7YRTP1ChWeP50TEESKMMNIg0u8/Rb66zN9YJJO7oYgJTRyFyYi43NVC5feG45FSO1vQ== +webpack@^5.24.3: + version "5.24.3" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.3.tgz#6ec0f5059f8d7c7961075fa553cfce7b7928acb3" + integrity sha512-x7lrWZ7wlWAdyKdML6YPvfVZkhD1ICuIZGODE5SzKJjqI9A4SpqGTjGJTc6CwaHqn19gGaoOR3ONJ46nYsn9rw== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -9356,7 +9366,7 @@ webpack@^5.22.0: browserslist "^4.14.5" chrome-trace-event "^1.0.2" enhanced-resolve "^5.7.0" - es-module-lexer "^0.3.26" + es-module-lexer "^0.4.0" eslint-scope "^5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" From 4a6ffefa452ddce54d7a112d4bc118e61eec308b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:45:49 -0500 Subject: [PATCH 139/200] Remove CSS imports for frontend-components This is causing a minification error and appear to be included by the components now --- src/federatedEntry.tsx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/federatedEntry.tsx b/src/federatedEntry.tsx index dda482749..4ffca5db1 100644 --- a/src/federatedEntry.tsx +++ b/src/federatedEntry.tsx @@ -8,12 +8,6 @@ import { getBaseName } from 'utils/getBaseName'; import App from './app'; import { configureStore } from './store'; -require.resolve('@redhat-cloud-services/frontend-components/components/Main.css'); -require.resolve('@redhat-cloud-services/frontend-components/components/InvalidObject.css'); -require.resolve('@redhat-cloud-services/frontend-components/components/NotAuthorized.css'); -require.resolve('@redhat-cloud-services/frontend-components/components/Skeleton.css'); -require.resolve('@redhat-cloud-services/frontend-components/components/Unavailable.css'); -require.resolve('@redhat-cloud-services/frontend-components-notifications/index.css'); require.resolve('@patternfly/patternfly/patternfly-addons.css'); import './styles/global.css'; From 57b9a80d44f9f8c668e91d2227a6c3abe4e84203 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:50:30 -0500 Subject: [PATCH 140/200] Update default module for ocpOverviewWidget --- src/modules/ocpOverviewWidget/index.ts | 2 ++ src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 src/modules/ocpOverviewWidget/index.ts diff --git a/src/modules/ocpOverviewWidget/index.ts b/src/modules/ocpOverviewWidget/index.ts new file mode 100644 index 000000000..cb3f7013b --- /dev/null +++ b/src/modules/ocpOverviewWidget/index.ts @@ -0,0 +1,2 @@ +export { default } from './ocpOverviewWidget'; +export * from './ocpOverviewWidget'; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx index a38de915c..dbda5df7b 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx @@ -183,6 +183,5 @@ const mapDispatchToProps: OcpOverviewWidgetDispatchProps = { }; const OcpOverviewWidgetConnect = connect(mapStateToProps, mapDispatchToProps)(OcpOverviewWidgetBase); -const OcpOverviewWidget = withTranslation()(OcpOverviewWidgetConnect); -export { OcpOverviewWidget, OcpOverviewWidgetProps }; +export default withTranslation()(OcpOverviewWidgetConnect); From 185020d1311db8c68f5c56bb0ae649461c42fbfa Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:51:26 -0500 Subject: [PATCH 141/200] Added component workaround since no longer exported in frontend-components --- .../pageHeaderTitle/pageHeaderTitle.tsx | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/components/pageHeaderTitle/pageHeaderTitle.tsx diff --git a/src/components/pageHeaderTitle/pageHeaderTitle.tsx b/src/components/pageHeaderTitle/pageHeaderTitle.tsx new file mode 100644 index 000000000..1c2635a34 --- /dev/null +++ b/src/components/pageHeaderTitle/pageHeaderTitle.tsx @@ -0,0 +1,22 @@ +import { Title } from '@patternfly/react-core'; +import classNames from 'classnames'; +import React from 'react'; + +// Note: Temp workaround for PageHeaderTitle not exported via @redhat-cloud-services/frontend-components/PageHeader + +interface PageHeaderProps { + className?: string; + title: string; +} + +const PageHeaderTitle: React.SFC = ({ className, title }) => { + const pageHeaderTitleClasses = classNames(className); + + return ( + + {title} + + ); +}; + +export { PageHeaderTitle }; From 8cd188ec0f24c6679567244be7c302ca81c333b1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:53:02 -0500 Subject: [PATCH 142/200] Update skeleton import paths --- src/components/reports/reportSummary/reportSummary.tsx | 2 +- src/components/reports/reportSummary/reportSummaryAlt.tsx | 2 +- src/components/reports/reportSummary/reportSummaryItems.tsx | 2 +- src/modules/ocpOverviewWidget/ocpOverviewChart.tsx | 2 +- src/pages/views/details/components/costChart/costChart.tsx | 2 +- .../components/historicalData/historicalDataCostChart.tsx | 2 +- .../components/historicalData/historicalDataTrendChart.tsx | 2 +- .../components/historicalData/historicalDataUsageChart.tsx | 2 +- src/pages/views/details/components/summary/summaryCard.tsx | 2 +- src/pages/views/details/components/summary/summaryView.tsx | 2 +- src/pages/views/details/components/usageChart/usageChart.tsx | 2 +- src/pages/views/explorer/explorerChart.tsx | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/reports/reportSummary/reportSummary.tsx b/src/components/reports/reportSummary/reportSummary.tsx index a7557707d..67d043351 100644 --- a/src/components/reports/reportSummary/reportSummary.tsx +++ b/src/components/reports/reportSummary/reportSummary.tsx @@ -1,7 +1,7 @@ import './reportSummary.scss'; import { Card, CardBody, CardFooter, CardTitle, Title } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { FetchStatus } from 'store/common'; diff --git a/src/components/reports/reportSummary/reportSummaryAlt.tsx b/src/components/reports/reportSummary/reportSummaryAlt.tsx index 9ac59a430..50bda169c 100644 --- a/src/components/reports/reportSummary/reportSummaryAlt.tsx +++ b/src/components/reports/reportSummary/reportSummaryAlt.tsx @@ -1,7 +1,7 @@ import './reportSummaryAlt.scss'; import { Card, CardBody, CardFooter, CardTitle, Grid, GridItem, Title } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { FetchStatus } from 'store/common'; diff --git a/src/components/reports/reportSummary/reportSummaryItems.tsx b/src/components/reports/reportSummary/reportSummaryItems.tsx index ee44f716a..94f77b49e 100644 --- a/src/components/reports/reportSummary/reportSummaryItems.tsx +++ b/src/components/reports/reportSummary/reportSummaryItems.tsx @@ -1,6 +1,6 @@ import './reportSummaryItems.scss'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { Report, ReportItem } from 'api/reports/report'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; diff --git a/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx index b7817a49e..9230a0db8 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx @@ -1,5 +1,5 @@ import { Title } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { AxiosError } from 'axios'; diff --git a/src/pages/views/details/components/costChart/costChart.tsx b/src/pages/views/details/components/costChart/costChart.tsx index 2db3c6c74..5ef2e189a 100644 --- a/src/pages/views/details/components/costChart/costChart.tsx +++ b/src/pages/views/details/components/costChart/costChart.tsx @@ -1,5 +1,5 @@ import { ChartLabel, ChartLegend, ChartPie, ChartThemeColor } from '@patternfly/react-charts'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { Report } from 'api/reports/report'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; diff --git a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx index d4c037c9f..89885daa7 100644 --- a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx @@ -1,4 +1,4 @@ -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, transformReport } from 'components/charts/common/chartDatumUtils'; diff --git a/src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx b/src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx index abf21cc60..d720a52ea 100644 --- a/src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataTrendChart.tsx @@ -1,4 +1,4 @@ -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, orgUnitIdKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, transformReport } from 'components/charts/common/chartDatumUtils'; diff --git a/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx b/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx index fd6c25684..8050382d7 100644 --- a/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx @@ -1,4 +1,4 @@ -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, transformReport } from 'components/charts/common/chartDatumUtils'; diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index 210794601..4f2019f3c 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -8,7 +8,7 @@ import { CardTitle, Title, } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, orgUnitIdKey, Query } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; diff --git a/src/pages/views/details/components/summary/summaryView.tsx b/src/pages/views/details/components/summary/summaryView.tsx index f2f5f2e26..28794ea92 100644 --- a/src/pages/views/details/components/summary/summaryView.tsx +++ b/src/pages/views/details/components/summary/summaryView.tsx @@ -1,5 +1,5 @@ import { Button, ButtonType, ButtonVariant } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { ReportPathsType, ReportType } from 'api/reports/report'; diff --git a/src/pages/views/details/components/usageChart/usageChart.tsx b/src/pages/views/details/components/usageChart/usageChart.tsx index 7f27f5a11..cae16ceb0 100644 --- a/src/pages/views/details/components/usageChart/usageChart.tsx +++ b/src/pages/views/details/components/usageChart/usageChart.tsx @@ -2,7 +2,7 @@ import 'components/charts/common/charts-common.scss'; import { ChartBullet } from '@patternfly/react-charts'; import { Grid, GridItem } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { ReportPathsType, ReportType } from 'api/reports/report'; diff --git a/src/pages/views/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx index 577a84d6b..588f2146e 100644 --- a/src/pages/views/explorer/explorerChart.tsx +++ b/src/pages/views/explorer/explorerChart.tsx @@ -1,5 +1,5 @@ import { Title } from '@patternfly/react-core'; -import { Skeleton } from '@redhat-cloud-services/frontend-components/components/Skeleton'; +import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; import { getQuery, orgUnitIdKey, parseQuery, Query, tagPrefix } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { AxiosError } from 'axios'; From 6585031a31676e1145a1f400b8775a4c4fb40041 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:53:53 -0500 Subject: [PATCH 143/200] Update PageHeader import paths --- src/pages/costModels/costModel/index.tsx | 5 +++-- src/pages/state/loading/loading.tsx | 5 +++-- src/pages/state/noData/noData.tsx | 5 +++-- src/pages/state/noProviders/noProviders.tsx | 5 +++-- src/pages/state/notAuthorized/notAuthorized.tsx | 5 +++-- src/pages/state/notAvailable/notAvailable.tsx | 7 ++++--- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/pages/costModels/costModel/index.tsx b/src/pages/costModels/costModel/index.tsx index e9e5e22ba..ff3bfb440 100644 --- a/src/pages/costModels/costModel/index.tsx +++ b/src/pages/costModels/costModel/index.tsx @@ -1,9 +1,10 @@ import { EmptyState, EmptyStateBody, EmptyStateIcon, TabContent, Title } from '@patternfly/react-core'; import { ErrorCircleOIcon } from '@patternfly/react-icons/dist/js/icons/error-circle-o-icon'; -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; import { CostModel } from 'api/costModels'; import { AxiosError } from 'axios'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import MarkupCard from 'pages/costModels/costModel/markup'; import PriceListTable from 'pages/costModels/costModel/priceListTable'; import SourceTable from 'pages/costModels/costModel/sourceTable'; diff --git a/src/pages/state/loading/loading.tsx b/src/pages/state/loading/loading.tsx index fa19a061e..e7c2fcd88 100644 --- a/src/pages/state/loading/loading.tsx +++ b/src/pages/state/loading/loading.tsx @@ -1,5 +1,6 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import { LoadingState } from 'components/state/loadingState/loadingState'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/noData/noData.tsx b/src/pages/state/noData/noData.tsx index b1413b7f9..c5e73eab7 100644 --- a/src/pages/state/noData/noData.tsx +++ b/src/pages/state/noData/noData.tsx @@ -1,5 +1,6 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/noProviders/noProviders.tsx b/src/pages/state/noProviders/noProviders.tsx index 766565922..9167e91f1 100644 --- a/src/pages/state/noProviders/noProviders.tsx +++ b/src/pages/state/noProviders/noProviders.tsx @@ -1,6 +1,7 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; import { ProviderType } from 'api/providers'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/notAuthorized/notAuthorized.tsx b/src/pages/state/notAuthorized/notAuthorized.tsx index f4cd109f7..29ebcaa0b 100644 --- a/src/pages/state/notAuthorized/notAuthorized.tsx +++ b/src/pages/state/notAuthorized/notAuthorized.tsx @@ -1,5 +1,6 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/notAvailable/notAvailable.tsx b/src/pages/state/notAvailable/notAvailable.tsx index 1a65928a0..12c086e50 100644 --- a/src/pages/state/notAvailable/notAvailable.tsx +++ b/src/pages/state/notAvailable/notAvailable.tsx @@ -1,6 +1,7 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; -import { PageHeader, PageHeaderTitle } from '@redhat-cloud-services/frontend-components/components/PageHeader'; -import { Unavailable } from '@redhat-cloud-services/frontend-components/components/Unavailable'; +import Main from '@redhat-cloud-services/frontend-components/Main'; +import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import Unavailable from '@redhat-cloud-services/frontend-components/Unavailable'; +import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; From bef5965c77265c1f2d608598a7b8073c413c07b8 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 15:54:32 -0500 Subject: [PATCH 144/200] Update remaining frontend-components import paths --- src/pages/costModels/costModel/priceListTable.tsx | 2 +- src/pages/costModels/costModelsDetails/utils/table.tsx | 2 +- src/pages/state/maintenance/maintenance.tsx | 2 +- src/pages/state/maintenance/maintenanceState.tsx | 2 +- src/pages/state/notAuthorized/notAuthorizedState.tsx | 2 +- src/pages/state/notFound/notFound.tsx | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/costModels/costModel/priceListTable.tsx b/src/pages/costModels/costModel/priceListTable.tsx index 31c98a1ae..b2e18800e 100644 --- a/src/pages/costModels/costModel/priceListTable.tsx +++ b/src/pages/costModels/costModel/priceListTable.tsx @@ -14,7 +14,7 @@ import { ToolbarItemVariant, } from '@patternfly/react-core'; import { FileInvoiceDollarIcon } from '@patternfly/react-icons/dist/js/icons/file-invoice-dollar-icon'; -import { Unavailable } from '@redhat-cloud-services/frontend-components/components/Unavailable'; +import { Unavailable } from '@redhat-cloud-services/frontend-components/Unavailable'; import { CostModel } from 'api/costModels'; import { MetricHash } from 'api/metrics'; import { AxiosError } from 'axios'; diff --git a/src/pages/costModels/costModelsDetails/utils/table.tsx b/src/pages/costModels/costModelsDetails/utils/table.tsx index 53905d696..cc5aa1bfe 100644 --- a/src/pages/costModels/costModelsDetails/utils/table.tsx +++ b/src/pages/costModels/costModelsDetails/utils/table.tsx @@ -1,6 +1,6 @@ import { Bullseye } from '@patternfly/react-core'; import { IAction, ICell, SortByDirection } from '@patternfly/react-table'; -import { Unavailable } from '@redhat-cloud-services/frontend-components/components/Unavailable'; +import { Unavailable } from '@redhat-cloud-services/frontend-components/Unavailable'; import { CostModel } from 'api/costModels'; import { LoadingState } from 'components/state/loadingState/loadingState'; import { relativeTime } from 'human-date'; diff --git a/src/pages/state/maintenance/maintenance.tsx b/src/pages/state/maintenance/maintenance.tsx index e5d2b041b..b9366676c 100644 --- a/src/pages/state/maintenance/maintenance.tsx +++ b/src/pages/state/maintenance/maintenance.tsx @@ -1,4 +1,4 @@ -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; +import Main from '@redhat-cloud-services/frontend-components/Main'; import React from 'react'; import { withRouter } from 'react-router-dom'; diff --git a/src/pages/state/maintenance/maintenanceState.tsx b/src/pages/state/maintenance/maintenanceState.tsx index 022edfd09..334839c31 100644 --- a/src/pages/state/maintenance/maintenanceState.tsx +++ b/src/pages/state/maintenance/maintenanceState.tsx @@ -1,5 +1,5 @@ import { Stack, StackItem } from '@patternfly/react-core'; -import { Maintenance } from '@redhat-cloud-services/frontend-components/components/Maintenance'; +import Maintenance from '@redhat-cloud-services/frontend-components/Maintenance'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; diff --git a/src/pages/state/notAuthorized/notAuthorizedState.tsx b/src/pages/state/notAuthorized/notAuthorizedState.tsx index 035f2a515..3c75d7836 100644 --- a/src/pages/state/notAuthorized/notAuthorizedState.tsx +++ b/src/pages/state/notAuthorized/notAuthorizedState.tsx @@ -1,4 +1,4 @@ -import { NotAuthorized as _NotAuthorized } from '@redhat-cloud-services/frontend-components/components/NotAuthorized'; +import _NotAuthorized from '@redhat-cloud-services/frontend-components/NotAuthorized'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/notFound/notFound.tsx b/src/pages/state/notFound/notFound.tsx index 5fe8bfd6f..89a9e2293 100644 --- a/src/pages/state/notFound/notFound.tsx +++ b/src/pages/state/notFound/notFound.tsx @@ -1,5 +1,5 @@ -import { InvalidObject } from '@redhat-cloud-services/frontend-components/components/InvalidObject'; -import { Main } from '@redhat-cloud-services/frontend-components/components/Main'; +import InvalidObject from '@redhat-cloud-services/frontend-components/InvalidObject'; +import Main from '@redhat-cloud-services/frontend-components/Main'; import React from 'react'; import { withRouter } from 'react-router-dom'; From 151c0735610c1aaa607715aefbe970fde09a22dd Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Fri, 5 Mar 2021 16:04:41 -0500 Subject: [PATCH 145/200] Fixed i18n key order --- src/locales/en.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 4a6359184..d9e416bd7 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1,9 +1,4 @@ { - "federated_modules": { - "ocp_overview": { - "title": "All OpenShift clusters cost" - } - }, "aws_cloud_dashboard": { "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services filtered by OpenShift cost", @@ -517,6 +512,11 @@ "time_scope_title": "Select month", "title": "Export" }, + "federated_modules": { + "ocp_overview": { + "title": "All OpenShift clusters cost" + } + }, "filter": { "active_filters": "Active filters", "name": "Name", From 38a215f27046a0d3b64bf57292269f17a50e2567 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 8 Mar 2021 01:38:55 -0500 Subject: [PATCH 146/200] Add current filter to OCP breakdown compute & memory charts https://issues.redhat.com/browse/COST-1128 --- .../costOverview/costOverviewBase.tsx | 22 ++++--------- .../components/summary/summaryCard.tsx | 26 +++++++-------- .../components/summary/summaryModal.tsx | 8 ++--- .../components/summary/summaryModalView.tsx | 12 +++---- .../components/summary/summaryView.tsx | 24 +++++++------- .../components/usageChart/usageChart.tsx | 32 +++++++++++-------- .../details/ocpBreakdown/ocpBreakdown.tsx | 5 +++ 7 files changed, 64 insertions(+), 65 deletions(-) diff --git a/src/pages/views/details/components/costOverview/costOverviewBase.tsx b/src/pages/views/details/components/costOverview/costOverviewBase.tsx index aaf75d724..288845259 100644 --- a/src/pages/views/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/views/details/components/costOverview/costOverviewBase.tsx @@ -110,7 +110,7 @@ class CostOverviewBase extends React.Component { // Returns CPU usage chart private getCpuUsageChart = (widget: CostOverviewWidget) => { - const { filterBy, groupBy, t } = this.props; + const { t } = this.props; return ( @@ -120,12 +120,7 @@ class CostOverviewBase extends React.Component { - + ); @@ -133,7 +128,7 @@ class CostOverviewBase extends React.Component { // Returns memory usage chart private getMemoryUsageChart = (widget: CostOverviewWidget) => { - const { filterBy, groupBy, t } = this.props; + const { t } = this.props; return ( @@ -143,12 +138,7 @@ class CostOverviewBase extends React.Component { - + ); @@ -173,9 +163,9 @@ class CostOverviewBase extends React.Component { return ( diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index 4f2019f3c..cf84ebd36 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -28,8 +28,8 @@ import { styles } from './summaryCard.styles'; interface SummaryOwnProps { filterBy: string | number; groupBy: string; - parentGroupBy: string; query?: Query; + reportGroupBy?: string; reportPathsType: ReportPathsType; reportType: ReportType; } @@ -68,19 +68,19 @@ class SummaryBase extends React.Component { } private getItems = () => { - const { groupBy, report } = this.props; + const { report, reportGroupBy } = this.props; const computedItems = getComputedReportItems({ report, - idKey: groupBy as any, + idKey: reportGroupBy as any, }); return computedItems; }; private getSummary = () => { - const { groupBy, report, reportFetchStatus } = this.props; + const { report, reportGroupBy, reportFetchStatus } = this.props; return ( - + {({ items }) => items.map(reportItem => ( { }; private getViewAll = () => { - const { filterBy, groupBy, parentGroupBy, query, reportPathsType, t } = this.props; + const { filterBy, groupBy, query, reportGroupBy, reportPathsType, t } = this.props; const { isBulletChartModalOpen } = this.state; const computedItems = this.getItems(); @@ -119,15 +119,15 @@ class SummaryBase extends React.Component { type={ButtonType.button} variant={ButtonVariant.link} > - {t('details.view_all', { groupBy })} + {t('details.view_all', { groupBy: reportGroupBy })}
    @@ -147,13 +147,13 @@ class SummaryBase extends React.Component { }; public render() { - const { groupBy, reportFetchStatus, t } = this.props; + const { reportGroupBy, reportFetchStatus, t } = this.props; return ( - {t('breakdown.summary_title', { groupBy })} + {t('breakdown.summary_title', { groupBy: reportGroupBy })} @@ -175,7 +175,7 @@ class SummaryBase extends React.Component { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, parentGroupBy, query, reportPathsType, reportType }) => { + (state, { filterBy, groupBy, query, reportGroupBy, reportPathsType, reportType }) => { const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; const newQuery: Query = { filter: { @@ -183,13 +183,13 @@ const mapStateToProps = createMapStateToProps { }; public render() { - const { filterBy, groupBy, isOpen, parentGroupBy, query, reportPathsType, t } = this.props; + const { filterBy, groupBy, isOpen, query, reportGroupBy, reportPathsType, t } = this.props; return ( { isOpen={isOpen} onClose={this.handleClose} title={t('details.summary_modal_title', { - groupBy, + groupBy: reportGroupBy, name: filterBy, })} variant="large" @@ -52,8 +52,8 @@ class SummaryModalBase extends React.Component { diff --git a/src/pages/views/details/components/summary/summaryModalView.tsx b/src/pages/views/details/components/summary/summaryModalView.tsx index 8f08daab4..81fdc3ce9 100644 --- a/src/pages/views/details/components/summary/summaryModalView.tsx +++ b/src/pages/views/details/components/summary/summaryModalView.tsx @@ -15,8 +15,8 @@ import { styles } from './summaryModal.styles'; interface SummaryModalViewOwnProps { filterBy: string | number; groupBy: string; - parentGroupBy: string; query?: Query; + reportGroupBy?: string; reportPathsType: ReportPathsType; } @@ -55,7 +55,7 @@ class SummaryModalViewBase extends React.Component { } public render() { - const { groupBy, report, reportFetchStatus, t } = this.props; + const { report, reportGroupBy, reportFetchStatus, t } = this.props; const cost = formatCurrency(report && report.meta && report.meta.total ? report.meta.total.cost.total.value : 0); @@ -67,7 +67,7 @@ class SummaryModalViewBase extends React.Component {
- + {({ items }) => items.map(_item => ( { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, parentGroupBy, query, reportPathsType }) => { + (state, { filterBy, groupBy, query, reportGroupBy, reportPathsType }) => { const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; const newQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', - [parentGroupBy]: filterBy, + [groupBy]: filterBy, ...(query && query.filter && query.filter.account && { account: query.filter.account }), }, filter_by: query ? query.filter_by : undefined, group_by: { ...(groupByOrg && ({ [orgUnitIdKey]: groupByOrg } as any)), - ...(groupBy && { [groupBy]: '*' }), + ...(reportGroupBy && { [reportGroupBy]: '*' }), // For specific summary cards; account, project, etc. }, }; const queryString = getQuery(newQuery); diff --git a/src/pages/views/details/components/summary/summaryView.tsx b/src/pages/views/details/components/summary/summaryView.tsx index 28794ea92..bfece9515 100644 --- a/src/pages/views/details/components/summary/summaryView.tsx +++ b/src/pages/views/details/components/summary/summaryView.tsx @@ -20,7 +20,7 @@ import { SummaryModalViewProps } from './summaryModalView'; interface SummaryViewOwnProps { filterBy: string | number; groupBy: string; - parentGroupBy: string; + reportGroupBy: string; reportPathsType: ReportPathsType; } @@ -61,11 +61,11 @@ class SummaryViewBase extends React.Component { } private getItems = () => { - const { groupBy, report } = this.props; + const { report, reportGroupBy } = this.props; const computedItems = getComputedReportItems({ report, - idKey: groupBy as any, + idKey: reportGroupBy as any, }); return computedItems; }; @@ -87,7 +87,7 @@ class SummaryViewBase extends React.Component { }; private getViewAll = () => { - const { filterBy, groupBy, parentGroupBy, reportPathsType, t } = this.props; + const { filterBy, groupBy, reportGroupBy, reportPathsType, t } = this.props; const { isSummaryModalOpen } = this.state; const computedItems = this.getItems(); @@ -107,14 +107,14 @@ class SummaryViewBase extends React.Component { type={ButtonType.button} variant={ButtonVariant.link} > - {t('details.view_all', { groupBy })} + {t('details.view_all', { groupBy: reportGroupBy })}
@@ -134,7 +134,7 @@ class SummaryViewBase extends React.Component { }; public render() { - const { groupBy, report, reportFetchStatus } = this.props; + const { report, reportGroupBy, reportFetchStatus } = this.props; return ( <> @@ -149,8 +149,8 @@ class SummaryViewBase extends React.Component { <>
@@ -166,16 +166,16 @@ class SummaryViewBase extends React.Component { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, parentGroupBy, reportPathsType }) => { + (state, { filterBy, groupBy, reportGroupBy, reportPathsType }) => { const query: Query = { filter: { limit: 3, time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', - [parentGroupBy]: filterBy, + [groupBy]: filterBy, }, - group_by: { [groupBy]: '*' }, + group_by: { [reportGroupBy]: '*' }, // For specific summary cards; account, project, etc. }; const queryString = getQuery(query); const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); diff --git a/src/pages/views/details/components/usageChart/usageChart.tsx b/src/pages/views/details/components/usageChart/usageChart.tsx index cae16ceb0..3cbedd21d 100644 --- a/src/pages/views/details/components/usageChart/usageChart.tsx +++ b/src/pages/views/details/components/usageChart/usageChart.tsx @@ -3,9 +3,11 @@ import 'components/charts/common/charts-common.scss'; import { ChartBullet } from '@patternfly/react-charts'; import { Grid, GridItem } from '@patternfly/react-core'; import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; +import { OcpQuery, parseQuery } from 'api/queries/ocpQuery'; import { getQuery, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { ReportPathsType, ReportType } from 'api/reports/report'; +import { getGroupById } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -22,13 +24,12 @@ export interface ChartDatum { } interface UsageChartOwnProps { - groupBy: string | number; - parentGroupBy: string; reportPathsType: ReportPathsType; reportType: ReportType; // cpu or memory } interface UsageChartStateProps { + groupBy?: string; report?: Report; reportFetchStatus?: FetchStatus; queryString?: string; @@ -214,10 +215,10 @@ class UsageChartBase extends React.Component { } private getCpuChart = () => { - const { parentGroupBy, reportFetchStatus, report } = this.props; + const { groupBy, reportFetchStatus, report } = this.props; const { width } = this.state; - const chartDatum = parentGroupBy === 'cluster' ? this.getChartDatumWithCapacity() : this.getChartDatum(); + const chartDatum = groupBy === 'cluster' ? this.getChartDatumWithCapacity() : this.getChartDatum(); if (!report || chartDatum.usage.length === 0) { return null; @@ -229,7 +230,7 @@ class UsageChartBase extends React.Component { this.getSkeleton() ) : ( <> - {Boolean(parentGroupBy === 'cluster') && this.getFreeSpace()} + {Boolean(groupBy === 'cluster') && this.getFreeSpace()} { } private getChartHeight = () => { - const { parentGroupBy } = this.props; + const { groupBy } = this.props; const { width } = this.state; - if (parentGroupBy === 'cluster') { + if (groupBy === 'cluster') { return width > 950 ? 115 : width > 450 ? 150 : 210; } else { return width > 700 ? 115 : width > 450 ? 150 : 180; @@ -397,22 +398,25 @@ class UsageChartBase extends React.Component { } const mapStateToProps = createMapStateToProps( - (state, { groupBy, parentGroupBy, reportPathsType, reportType }) => { - const query: Query = { + (state, { reportPathsType, reportType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupBy = getGroupById(query); + + const newQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', - limit: 3, - }, - group_by: { - [parentGroupBy]: groupBy, }, + filter_by: query ? query.filter_by : undefined, + group_by: query ? query.group_by : undefined, }; - const queryString = getQuery(query); + const queryString = getQuery(newQuery); const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); return { + groupBy, report, reportFetchStatus, queryString, diff --git a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx index 1f903829a..fe7036918 100644 --- a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx @@ -51,6 +51,11 @@ const mapStateToProps = createMapStateToProps Date: Mon, 8 Mar 2021 09:06:27 -0500 Subject: [PATCH 147/200] Updated comments for summary cards --- src/pages/views/details/components/summary/summaryCard.tsx | 4 ++-- .../views/details/components/summary/summaryModalView.tsx | 4 ++-- src/pages/views/details/components/summary/summaryView.tsx | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index cf84ebd36..cb83aae48 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -183,13 +183,13 @@ const mapStateToProps = createMapStateToProps Date: Mon, 8 Mar 2021 09:50:59 -0500 Subject: [PATCH 148/200] Updated federated module to handle missing i18next dependency --- .../charts/common/chartDatumUtils.ts | 51 +++++++++++++------ .../charts/trendChart/trendChart.tsx | 13 +++-- src/locales/en.json | 5 -- .../ocpOverviewWidget/ocpOverviewChart.tsx | 11 ++-- .../ocpOverviewWidget/ocpOverviewWidget.tsx | 10 ++-- webpack.config.js | 1 + 6 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/components/charts/common/chartDatumUtils.ts b/src/components/charts/common/chartDatumUtils.ts index b04f7594b..a7ef05881 100644 --- a/src/components/charts/common/chartDatumUtils.ts +++ b/src/components/charts/common/chartDatumUtils.ts @@ -349,13 +349,27 @@ export function getDateRangeString( ) { const [start, end] = getDateRange(datums, firstOfMonth, lastOfMonth, offset); - return i18next.t(`chart.date_range`, { - count: getDate(end), - endDate: format(end, 'dd'), - month: Number(format(start, 'M')) - 1, - startDate: format(start, 'dd'), - year: getYear(end), - }); + const count = getDate(end); + const endDate = format(end, 'dd'); + const month = Number(format(start, 'M')) - 1; + const month_abbr = Number(format(start, 'MMM')) - 1; + const startDate = format(start, 'dd'); + const year = getYear(end); + + if (i18next && i18next.t) { + return i18next.t(`chart.date_range`, { + count, + endDate, + month, + startDate, + year, + }); + } + // Federated modules may not have access to the i18next package + if (count > 1) { + return `${startDate}-${endDate} ${month_abbr} ${year}`; + } + return `${startDate} ${month_abbr} ${year}`; } export function getMonthRangeString( @@ -365,14 +379,21 @@ export function getMonthRangeString( ): [string, string] { const [start, end] = getDateRange(datums, true, false, offset); - return [ - i18next.t(key, { - month: Number(format(start, 'M')) - 1, - }), - i18next.t(key, { - month: Number(format(end, 'M')) - 1, - }), - ]; + const startMonth = Number(format(start, 'MMM')) - 1; + const endMonth = Number(format(end, 'M')) - 1; + + if (i18next && i18next.t) { + return [ + i18next.t(key, { + month: startMonth, + }), + i18next.t(key, { + month: endMonth, + }), + ]; + } + // Federated modules may not have access to the i18next package + return [`${startMonth}`, `${endMonth}`]; } export function getMaxValue(datums: ChartDatum[]) { diff --git a/src/components/charts/trendChart/trendChart.tsx b/src/components/charts/trendChart/trendChart.tsx index 69c9e0a47..18d0fc940 100644 --- a/src/components/charts/trendChart/trendChart.tsx +++ b/src/components/charts/trendChart/trendChart.tsx @@ -340,15 +340,20 @@ class TrendChart extends React.Component { const endDate = this.getEndDate(); const midDate = Math.floor(endDate / 2); + // Federated modules may not have access to the i18next package + let tooltipTitle; + if (i18next && i18next.t) { + tooltipTitle = datum => i18next.t('chart.day_of_month_title', { day: datum.x }); + } else { + tooltipTitle = datum => `Day ${datum.x}`; + } + // Clone original container. See https://issues.redhat.com/browse/COST-762 const container = cursorVoronoiContainer ? React.cloneElement(cursorVoronoiContainer, { disable: !isDataAvailable(series, hiddenSeries), labelComponent: ( - i18next.t('chart.day_of_month_title', { day: datum.x })} - /> + ), }) : undefined; diff --git a/src/locales/en.json b/src/locales/en.json index d9e416bd7..2c3666669 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -512,11 +512,6 @@ "time_scope_title": "Select month", "title": "Export" }, - "federated_modules": { - "ocp_overview": { - "title": "All OpenShift clusters cost" - } - }, "filter": { "active_filters": "Active filters", "name": "Name", diff --git a/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx index 9230a0db8..25b03770c 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewChart.tsx @@ -11,7 +11,6 @@ import { } from 'components/charts/common/chartDatumUtils'; import { TrendChart } from 'components/charts/trendChart'; import React from 'react'; -import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { reportActions, reportSelectors } from 'store/reports'; @@ -20,7 +19,7 @@ import { formatValue } from 'utils/formatValue'; import { chartStyles, styles } from './ocpOverviewChart.styles'; -interface OcpOverviewChartOwnProps extends WithTranslation { +interface OcpOverviewChartOwnProps { computedReportItemType?: ComputedReportItemType; title?: string; // This is just a test property } @@ -145,8 +144,7 @@ class OcpOverviewChartBase extends React.Component { }; public render() { - const { currentReportFetchStatus, previousReportFetchStatus, t } = this.props; - const title = this.props.title || t('federated_modules.ocp_overview.title'); + const { currentReportFetchStatus, previousReportFetchStatus, title } = this.props; return ( <> @@ -227,7 +225,4 @@ const mapDispatchToProps: OcpOverviewChartDispatchProps = { fetchReport: reportActions.fetchReport, }; -const OcpOverviewChartConnect = connect(mapStateToProps, mapDispatchToProps)(OcpOverviewChartBase); -const OcpOverviewChart = withTranslation()(OcpOverviewChartConnect); - -export { OcpOverviewChart, OcpOverviewChartProps }; +export default connect(mapStateToProps, mapDispatchToProps)(OcpOverviewChartBase); diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx index dbda5df7b..2aa9192ce 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx @@ -9,7 +9,6 @@ import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import React from 'react'; -import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; import { ocpProvidersQuery, providersActions, providersSelectors } from 'store/providers'; @@ -19,7 +18,7 @@ import { OcpOverviewChart } from './ocpOverviewChart'; import { baseQuery, isOcpAvailable } from './ocpOverviewUtils'; import { styles } from './ocpOverviewWidget.styles'; -interface OcpOverviewWidgetOwnProps extends WithTranslation { +interface OcpOverviewWidgetOwnProps { title?: string; // This is just a test property } @@ -97,14 +96,13 @@ class OcpOverviewWidgetBase extends React.Component { ocpProvidersFetchStatus, userAccessError, userAccessFetchStatus, - t, userAccess, } = this.props; const isLoading = userAccessFetchStatus === FetchStatus.inProgress || ocpProvidersFetchStatus === FetchStatus.inProgress; - const title = this.props.title || t('federated_modules.ocp_overview.title'); + const title = this.props.title; // Test for no providers const noProviders = !isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess); @@ -182,6 +180,4 @@ const mapDispatchToProps: OcpOverviewWidgetDispatchProps = { fetchUserAccess: userAccessActions.fetchUserAccess, }; -const OcpOverviewWidgetConnect = connect(mapStateToProps, mapDispatchToProps)(OcpOverviewWidgetBase); - -export default withTranslation()(OcpOverviewWidgetConnect); +export default connect(mapStateToProps, mapDispatchToProps)(OcpOverviewWidgetBase); diff --git a/webpack.config.js b/webpack.config.js index a40b52866..f4cef235b 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -219,6 +219,7 @@ module.exports = (_env, argv) => { index: `${publicPath}/index.html`, }, // hot: !isProduction, + hot: false, // default is true, which currently does not work with Insights and federated modules? port: 8002, disableHostCheck: true, headers: { From 01e587aa1ee303f67f8e8111d0082e6090964203 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Mon, 8 Mar 2021 14:08:04 -0500 Subject: [PATCH 149/200] Fixed default import for OcpOverviewChart --- src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx index 2aa9192ce..5f6949b8c 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx @@ -14,7 +14,7 @@ import { createMapStateToProps, FetchStatus } from 'store/common'; import { ocpProvidersQuery, providersActions, providersSelectors } from 'store/providers'; import { allUserAccessQuery, userAccessActions, userAccessSelectors } from 'store/userAccess'; -import { OcpOverviewChart } from './ocpOverviewChart'; +import OcpOverviewChart from './ocpOverviewChart'; import { baseQuery, isOcpAvailable } from './ocpOverviewUtils'; import { styles } from './ocpOverviewWidget.styles'; From a02904a36735a575d09c69afb4def84b2ad807c0 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Mon, 8 Mar 2021 15:01:48 -0500 Subject: [PATCH 150/200] Stubout ibm cost 1058 (#1901) * initial IBM APi changes * added 'IbmQuery' * initial IBM cloud stubout * additional changes for IBM stub out, using GCP sources for mocking * Revert adding ibm in cost model as it is not able to be hidden * changes requested from PR * one more change for review comment --- src/api/exports/exportUtils.ts | 4 + src/api/exports/ibmExport.ts | 12 + src/api/forecasts/forecast.ts | 1 + src/api/forecasts/forecastUtils.ts | 4 + src/api/forecasts/ibmForecast.ts | 19 + src/api/providers.ts | 1 + src/api/queries/ibmQuery.ts | 43 ++ src/api/queries/providersQuery.ts | 2 +- src/api/queries/userAccessQuery.ts | 2 +- src/api/reports/ibmReports.test.ts | 12 + src/api/reports/ibmReports.ts | 68 +++ src/api/reports/report.ts | 1 + src/api/reports/reportUtils.ts | 4 + src/api/tags/ibmTags.test.ts | 12 + src/api/tags/ibmTags.ts | 14 + src/api/tags/tag.ts | 1 + src/api/tags/tagUtils.ts | 4 + src/api/userAccess.ts | 1 + .../permissionsComponent/permissions.tsx | 5 + src/locales/en.json | 28 + .../state/noProviders/noProvidersState.tsx | 4 + .../notAuthorized/notAuthorizedState.tsx | 4 + .../details/ibmBreakdown/costOverview.tsx | 23 + .../details/ibmBreakdown/historicalData.tsx | 23 + .../details/ibmBreakdown/ibmBreakdown.tsx | 107 ++++ src/pages/views/details/ibmBreakdown/index.ts | 3 + .../ibmDetails/detailsHeader.styles.ts | 38 ++ .../details/ibmDetails/detailsHeader.tsx | 118 +++++ .../details/ibmDetails/detailsTable.styles.ts | 27 + .../views/details/ibmDetails/detailsTable.tsx | 392 ++++++++++++++ .../details/ibmDetails/detailsToolbar.tsx | 160 ++++++ .../details/ibmDetails/ibmDetails.styles.ts | 25 + .../views/details/ibmDetails/ibmDetails.tsx | 479 ++++++++++++++++++ .../details/ibmDetails/ibmDetailsTable.scss | 44 ++ src/pages/views/details/ibmDetails/index.ts | 3 + src/pages/views/explorer/explorer.tsx | 21 + src/pages/views/explorer/explorerChart.tsx | 3 + src/pages/views/explorer/explorerHeader.tsx | 33 +- src/pages/views/explorer/explorerTable.tsx | 5 +- src/pages/views/explorer/explorerUtils.ts | 48 ++ .../overview/ibmDashboard/ibmDashboard.tsx | 27 + .../ibmDashboard/ibmDashboardWidget.test.tsx | 28 + .../ibmDashboard/ibmDashboardWidget.tsx | 76 +++ .../views/overview/ibmDashboard/index.ts | 3 + src/pages/views/overview/overview.tsx | 68 ++- src/routes.tsx | 16 + .../ibmCostOverview/ibmCostOverview.test.ts | 38 ++ .../ibmCostOverview/ibmCostOverviewCommon.ts | 6 + .../ibmCostOverview/ibmCostOverviewReducer.ts | 34 ++ .../ibmCostOverviewSelectors.ts | 11 + .../ibmCostOverview/ibmCostOverviewWidgets.ts | 59 +++ .../costOverview/ibmCostOverview/index.ts | 5 + .../ibmHistoricalData.test.ts | 26 + .../ibmHistoricalDataCommon.ts | 6 + .../ibmHistoricalDataReducer.ts | 20 + .../ibmHistoricalDataSelectors.ts | 11 + .../ibmHistoricalDataWidgets.ts | 28 + .../historicalData/ibmHistoricalData/index.ts | 5 + .../gcpDashboard/gcpDashboardReducer.ts | 1 - .../__snapshots__/ibmDashboard.test.ts.snap | 31 ++ .../ibmDashboard/ibmDashboard.test.ts | 101 ++++ .../ibmDashboard/ibmDashboardActions.ts | 44 ++ .../ibmDashboard/ibmDashboardCommon.ts | 69 +++ .../ibmDashboard/ibmDashboardReducer.ts | 41 ++ .../ibmDashboard/ibmDashboardSelectors.ts | 43 ++ .../ibmDashboard/ibmDashboardWidgets.ts | 213 ++++++++ src/store/dashboard/ibmDashboard/index.ts | 13 + src/store/providers/index.ts | 2 + src/store/providers/providersCommon.ts | 4 + src/store/rootReducer.ts | 6 + src/store/userAccess/index.ts | 2 + src/store/userAccess/userAccessCommon.ts | 4 + .../getComputedIbmReportItems.test.ts | 14 + .../getComputedIbmReportItems.ts | 25 + 74 files changed, 2867 insertions(+), 11 deletions(-) create mode 100644 src/api/exports/ibmExport.ts create mode 100644 src/api/forecasts/ibmForecast.ts create mode 100644 src/api/queries/ibmQuery.ts create mode 100644 src/api/reports/ibmReports.test.ts create mode 100644 src/api/reports/ibmReports.ts create mode 100644 src/api/tags/ibmTags.test.ts create mode 100644 src/api/tags/ibmTags.ts create mode 100644 src/pages/views/details/ibmBreakdown/costOverview.tsx create mode 100644 src/pages/views/details/ibmBreakdown/historicalData.tsx create mode 100644 src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx create mode 100644 src/pages/views/details/ibmBreakdown/index.ts create mode 100644 src/pages/views/details/ibmDetails/detailsHeader.styles.ts create mode 100644 src/pages/views/details/ibmDetails/detailsHeader.tsx create mode 100644 src/pages/views/details/ibmDetails/detailsTable.styles.ts create mode 100644 src/pages/views/details/ibmDetails/detailsTable.tsx create mode 100644 src/pages/views/details/ibmDetails/detailsToolbar.tsx create mode 100644 src/pages/views/details/ibmDetails/ibmDetails.styles.ts create mode 100644 src/pages/views/details/ibmDetails/ibmDetails.tsx create mode 100644 src/pages/views/details/ibmDetails/ibmDetailsTable.scss create mode 100644 src/pages/views/details/ibmDetails/index.ts create mode 100644 src/pages/views/overview/ibmDashboard/ibmDashboard.tsx create mode 100644 src/pages/views/overview/ibmDashboard/ibmDashboardWidget.test.tsx create mode 100644 src/pages/views/overview/ibmDashboard/ibmDashboardWidget.tsx create mode 100644 src/pages/views/overview/ibmDashboard/index.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverview.test.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewCommon.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewReducer.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewSelectors.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewWidgets.ts create mode 100644 src/store/breakdown/costOverview/ibmCostOverview/index.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalData.test.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataCommon.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataReducer.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataSelectors.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataWidgets.ts create mode 100644 src/store/breakdown/historicalData/ibmHistoricalData/index.ts create mode 100644 src/store/dashboard/ibmDashboard/__snapshots__/ibmDashboard.test.ts.snap create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboard.test.ts create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboardActions.ts create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboardCommon.ts create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboardReducer.ts create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboardSelectors.ts create mode 100644 src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts create mode 100644 src/store/dashboard/ibmDashboard/index.ts create mode 100644 src/utils/computedReport/getComputedIbmReportItems.test.ts create mode 100644 src/utils/computedReport/getComputedIbmReportItems.ts diff --git a/src/api/exports/exportUtils.ts b/src/api/exports/exportUtils.ts index 5ca297b64..aa3e13712 100644 --- a/src/api/exports/exportUtils.ts +++ b/src/api/exports/exportUtils.ts @@ -3,6 +3,7 @@ import { ReportPathsType, ReportType } from 'api/reports/report'; import { runExport as runAwsExport } from './awsExport'; import { runExport as runAzureExport } from './azureExport'; import { runExport as runGcpExport } from './gcpExport'; +import { runExport as runIbmExport } from './ibmExport'; import { runExport as runOcpCloudExport } from './ocpCloudExport'; import { runExport as runOcpExport } from './ocpExport'; @@ -18,6 +19,9 @@ export function runExport(reportPathsType: ReportPathsType, reportType: ReportTy case ReportPathsType.gcp: report = runGcpExport(reportType, query); break; + case ReportPathsType.ibm: + report = runIbmExport(reportType, query); + break; case ReportPathsType.ocpCloud: report = runOcpCloudExport(reportType, query); break; diff --git a/src/api/exports/ibmExport.ts b/src/api/exports/ibmExport.ts new file mode 100644 index 000000000..51805e85a --- /dev/null +++ b/src/api/exports/ibmExport.ts @@ -0,0 +1,12 @@ +import { ReportTypePaths } from 'api/reports/ibmReports'; +import { ReportType } from 'api/reports/report'; +import axios from 'axios'; + +export function runExport(reportType: ReportType, query: string) { + const path = ReportTypePaths[reportType]; + return axios.get(`${path}?${query}`, { + headers: { + Accept: 'text/csv', + }, + }); +} diff --git a/src/api/forecasts/forecast.ts b/src/api/forecasts/forecast.ts index f3b8b1a06..67518655e 100644 --- a/src/api/forecasts/forecast.ts +++ b/src/api/forecasts/forecast.ts @@ -54,6 +54,7 @@ export const enum ForecastPathsType { azure = 'azure', azureCloud = 'azure_cloud', gcp = 'gcp', + ibm = 'gcp', // Todo: update to use ibm backend apis when they become available ocp = 'ocp', ocpCloud = 'ocp_cloud', } diff --git a/src/api/forecasts/forecastUtils.ts b/src/api/forecasts/forecastUtils.ts index 560f28a5f..725850136 100644 --- a/src/api/forecasts/forecastUtils.ts +++ b/src/api/forecasts/forecastUtils.ts @@ -4,6 +4,7 @@ import { runForecast as runAzureCloudForecast } from './azureCloudForecast'; import { runForecast as runAzureForecast } from './azureForecast'; import { ForecastPathsType, ForecastType } from './forecast'; import { runForecast as runGcpForecast } from './gcpForecast'; +import { runForecast as runIbmForecast } from './ibmForecast'; import { runForecast as runOcpCloudForecast } from './ocpCloudForecast'; import { runForecast as runOcpForecast } from './ocpForecast'; @@ -25,6 +26,9 @@ export function runForecast(forecastPathsType: ForecastPathsType, forecastType: case ForecastPathsType.gcp: forecast = runGcpForecast(forecastType, query); break; + case ForecastPathsType.ibm: + forecast = runIbmForecast(forecastType, query); + break; case ForecastPathsType.ocp: forecast = runOcpForecast(forecastType, query); break; diff --git a/src/api/forecasts/ibmForecast.ts b/src/api/forecasts/ibmForecast.ts new file mode 100644 index 000000000..5d9bb95af --- /dev/null +++ b/src/api/forecasts/ibmForecast.ts @@ -0,0 +1,19 @@ +import axios from 'axios'; + +import { Forecast, ForecastType } from './forecast'; + +export const ForecastTypePaths: Partial> = { + [ForecastType.cost]: 'forecasts/ibm/costs/', +}; + +export function runForecast(forecastType: ForecastType, query: string) { + const insights = (window as any).insights; + const path = ForecastTypePaths[forecastType]; + if (insights && insights.chrome && insights.chrome.auth && insights.chrome.auth.getUser) { + return insights.chrome.auth.getUser().then(() => { + return axios.get(`${path}?${query}`); + }); + } else { + return axios.get(`${path}?${query}`); + } +} diff --git a/src/api/providers.ts b/src/api/providers.ts index dc7c65398..2f03073e7 100644 --- a/src/api/providers.ts +++ b/src/api/providers.ts @@ -55,6 +55,7 @@ export const enum ProviderType { aws = 'aws', azure = 'azure', gcp = 'gcp', + ibm = 'gcp', // Todo: update to use ibm backend apis when they become available ocp = 'ocp', } diff --git a/src/api/queries/ibmQuery.ts b/src/api/queries/ibmQuery.ts new file mode 100644 index 000000000..f5ee7f8bd --- /dev/null +++ b/src/api/queries/ibmQuery.ts @@ -0,0 +1,43 @@ +import * as utils from './query'; + +export interface IbmFilters extends utils.Filters { + account?: string | number; +} + +type IbmGroupByValue = string | string[]; + +interface IbmGroupBys { + service?: IbmGroupByValue; + account?: IbmGroupByValue; + instance_type?: IbmGroupByValue; + project?: IbmGroupByValue; + region?: IbmGroupByValue; +} + +interface IbmOrderBys { + account?: string; + cost?: string; + project?: string; + region?: string; + service?: string; + usage?: string; +} + +export interface IbmQuery extends utils.Query { + delta?: string; + filter?: IbmFilters; + group_by?: IbmGroupBys; + order_by?: IbmOrderBys; +} + +export function getQueryRoute(query: IbmQuery) { + return utils.getQueryRoute(query); +} + +export function getQuery(query: IbmQuery) { + return utils.getQuery(query); +} + +export function parseQuery(query: string): T { + return utils.parseQuery(query); +} diff --git a/src/api/queries/providersQuery.ts b/src/api/queries/providersQuery.ts index d08309cac..7aa8fba9a 100644 --- a/src/api/queries/providersQuery.ts +++ b/src/api/queries/providersQuery.ts @@ -2,7 +2,7 @@ import { parse, stringify } from 'qs'; export interface ProvidersQuery { page_size?: number; - type?: 'AWS' | 'AZURE' | 'GCP' | 'OCP'; + type?: 'AWS' | 'AZURE' | 'GCP' | 'IBM' | 'OCP'; } export function getProvidersQuery(query: ProvidersQuery) { diff --git a/src/api/queries/userAccessQuery.ts b/src/api/queries/userAccessQuery.ts index 5b1b69cfc..31de047f3 100644 --- a/src/api/queries/userAccessQuery.ts +++ b/src/api/queries/userAccessQuery.ts @@ -2,7 +2,7 @@ import { parse, stringify } from 'qs'; export interface UserAccessQuery { page_size?: number; - type?: '' | 'AWS' | 'AZURE' | 'cost_model' | 'GCP' | 'OCP'; + type?: '' | 'AWS' | 'AZURE' | 'cost_model' | 'GCP' | 'IBM' | 'OCP'; } export function getUserAccessQuery(query: UserAccessQuery) { diff --git a/src/api/reports/ibmReports.test.ts b/src/api/reports/ibmReports.test.ts new file mode 100644 index 000000000..bec4b72ec --- /dev/null +++ b/src/api/reports/ibmReports.test.ts @@ -0,0 +1,12 @@ +jest.mock('axios'); + +import axios from 'axios'; + +import { runReport } from './ibmReports'; +import { ReportType } from './report'; + +test('api run reports calls axios get', () => { + const query = 'filter[resolution]=daily'; + runReport(ReportType.cost, query); + expect(axios.get).toBeCalledWith(`reports/gcp/costs/?${query}`); +}); diff --git a/src/api/reports/ibmReports.ts b/src/api/reports/ibmReports.ts new file mode 100644 index 000000000..0eb0b2d60 --- /dev/null +++ b/src/api/reports/ibmReports.ts @@ -0,0 +1,68 @@ +import axios from 'axios'; +import { Omit } from 'react-redux'; + +import { Report, ReportData, ReportItem, ReportItemValue, ReportMeta, ReportType, ReportValue } from './report'; + +export interface IbmReportItem extends ReportItem { + account?: string; + project?: string; + instance_type?: string; + region?: string; + service?: string; +} + +export interface GroupByAccountData extends Omit { + account: string; +} + +export interface GroupByRegionData extends Omit { + region: string; +} + +export interface GroupByServiceData extends Omit { + service: string; +} + +export interface GroupByInstanceTypeData extends Omit { + instance_type: string; +} + +export interface GroupByProjectData extends Omit { + project: string; +} + +export interface IbmReportData extends ReportData { + accounts?: GroupByAccountData[]; + instance_types?: GroupByInstanceTypeData[]; + projects?: GroupByProjectData[]; + regions?: GroupByRegionData[]; + services?: GroupByServiceData[]; +} + +export interface IbmReportMeta extends ReportMeta { + total?: { + cost?: ReportItemValue; + infrastructure?: ReportItemValue; + supplementary?: ReportItemValue; + usage?: ReportValue; + }; +} + +export interface IbmReport extends Report { + meta: IbmReportMeta; + data: IbmReportData[]; +} + +// Todo: update to use ibm backend apis when they become available +export const ReportTypePaths: Partial> = { + [ReportType.cost]: 'reports/gcp/costs/', + [ReportType.database]: 'reports/gcp/costs/', + [ReportType.network]: 'reports/gcp/costs/', + [ReportType.storage]: 'reports/gcp/storage/', + [ReportType.instanceType]: 'reports/gcp/instance-types/', +}; + +export function runReport(reportType: ReportType, query: string) { + const path = ReportTypePaths[reportType]; + return axios.get(`${path}?${query}`); +} diff --git a/src/api/reports/report.ts b/src/api/reports/report.ts index 619ef071c..4f21fb919 100644 --- a/src/api/reports/report.ts +++ b/src/api/reports/report.ts @@ -128,6 +128,7 @@ export const enum ReportPathsType { azure = 'azure', azureCloud = 'azure_cloud', gcp = 'gcp', + ibm = 'gcp', ocp = 'ocp', ocpCloud = 'ocp_cloud', ocpUsage = 'ocp_usage', diff --git a/src/api/reports/reportUtils.ts b/src/api/reports/reportUtils.ts index 10c516834..8bdc63ca4 100644 --- a/src/api/reports/reportUtils.ts +++ b/src/api/reports/reportUtils.ts @@ -3,6 +3,7 @@ import { runReport as runAwsReport } from './awsReports'; import { runReport as runAzureCloudReport } from './azureCloudReports'; import { runReport as runAzureReport } from './azureReports'; import { runReport as runGcpReport } from './gcpReports'; +import { runReport as runIbmReport } from './ibmReports'; import { runReport as runOcpCloudReport } from './ocpCloudReports'; import { runReport as runOcpReport } from './ocpReports'; import { runReport as runOcpUsageReport } from './ocpUsageReports'; @@ -26,6 +27,9 @@ export function runReport(reportPathsType: ReportPathsType, reportType: ReportTy case ReportPathsType.gcp: report = runGcpReport(reportType, query); break; + case ReportPathsType.ibm: + report = runIbmReport(reportType, query); + break; case ReportPathsType.ocp: report = runOcpReport(reportType, query); break; diff --git a/src/api/tags/ibmTags.test.ts b/src/api/tags/ibmTags.test.ts new file mode 100644 index 000000000..c7a26a1c1 --- /dev/null +++ b/src/api/tags/ibmTags.test.ts @@ -0,0 +1,12 @@ +jest.mock('axios'); + +import axios from 'axios'; + +import { runTag } from './ibmTags'; +import { TagType } from './tag'; + +test('api run reports calls axios get', () => { + const query = 'filter[resolution]=daily'; + runTag(TagType.tag, query); + expect(axios.get).toBeCalledWith(`tags/ibm/?${query}`); +}); diff --git a/src/api/tags/ibmTags.ts b/src/api/tags/ibmTags.ts new file mode 100644 index 000000000..8c3c9d754 --- /dev/null +++ b/src/api/tags/ibmTags.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; + +import { Tag, TagType } from './tag'; + +export interface IbmTag extends Tag {} + +export const TagTypePaths: Partial> = { + [TagType.tag]: 'tags/ibm/', +}; + +export function runTag(tagType: TagType, query: string) { + const path = TagTypePaths[tagType]; + return axios.get(`${path}?${query}`); +} diff --git a/src/api/tags/tag.ts b/src/api/tags/tag.ts index c06f8b394..d9b86a250 100644 --- a/src/api/tags/tag.ts +++ b/src/api/tags/tag.ts @@ -40,5 +40,6 @@ export const enum TagPathsType { aws = 'aws', azure = 'azure', gcp = 'gcp', + ibm = 'gcp', // Todo: update to use ibm backend apis when they become available ocp = 'ocp', } diff --git a/src/api/tags/tagUtils.ts b/src/api/tags/tagUtils.ts index 33d600eda..af85c9a93 100644 --- a/src/api/tags/tagUtils.ts +++ b/src/api/tags/tagUtils.ts @@ -1,6 +1,7 @@ import { runTag as runAwsTag } from './awsTags'; import { runTag as runAzureTag } from './azureTags'; import { runTag as runGcpTag } from './gcpTags'; +import { runTag as runIbmTag } from './ibmTags'; import { runTag as runOcpTag } from './ocpTags'; import { TagPathsType, TagType } from './tag'; @@ -16,6 +17,9 @@ export function runTag(tagPathsType: TagPathsType, tagType: TagType, query: stri case TagPathsType.gcp: tagReport = runGcpTag(tagType, query); break; + case TagPathsType.ibm: + tagReport = runIbmTag(tagType, query); + break; case TagPathsType.ocp: tagReport = runOcpTag(tagType, query); break; diff --git a/src/api/userAccess.ts b/src/api/userAccess.ts index 338b0d540..0f976d895 100644 --- a/src/api/userAccess.ts +++ b/src/api/userAccess.ts @@ -21,6 +21,7 @@ export const enum UserAccessType { cost_model = 'cost_model', explorer = 'explorer', gcp = 'gcp', + ibm = 'gcp', ocp = 'ocp', } diff --git a/src/components/async/permissionsComponent/permissions.tsx b/src/components/async/permissionsComponent/permissions.tsx index 57ecfc35d..0220dd0e0 100644 --- a/src/components/async/permissionsComponent/permissions.tsx +++ b/src/components/async/permissionsComponent/permissions.tsx @@ -64,6 +64,7 @@ class PermissionsBase extends React.Component { const costModel = userAccess.data.find(d => d.type === UserAccessType.cost_model); const explorer = userAccess.data.find(d => d.type === UserAccessType.explorer); const gcp = userAccess.data.find(d => d.type === UserAccessType.gcp); + const ibm = userAccess.data.find(d => d.type === UserAccessType.ibm); const ocp = userAccess.data.find(d => d.type === UserAccessType.ocp); // cost models may include :uuid @@ -77,6 +78,7 @@ class PermissionsBase extends React.Component { (azure && azure.access) || (costModel && costModel.access) || (gcp && gcp.access) || + (ibm && ibm.access) || (ocp && ocp.access) ); case paths.awsDetails: @@ -92,6 +94,9 @@ class PermissionsBase extends React.Component { case paths.gcpDetails: case paths.gcpDetailsBreakdown: return gcp && gcp.access; + case paths.ibmDetails: + case paths.ibmDetailsBreakdown: + return ibm && ibm.access; case paths.ocpDetails: case paths.ocpDetailsBreakdown: return ocp && ocp.access; diff --git a/src/locales/en.json b/src/locales/en.json index 2c3666669..b8fd22e9a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -91,6 +91,7 @@ "aws": "Amazon Web Services", "azure": "Microsoft Azure", "gcp": "Google Cloud Platform", + "ibm": "IBM Cloud", "ocp": "OpenShift" }, "raw_cost_desc": "The costs reported by a cloud provider without any cost model calculations applied.", @@ -476,6 +477,7 @@ "azure": "Microsoft Azure", "azure_cloud": "Microsoft Azure filtered by OpenShift", "gcp": "Google Cloud Platform", + "ibm": "IBM Cloud", "ocp": "All OpenShift cost", "ocp_supplementary": "OpenShift supplementary cost", "ocp_usage": "OpenShift usage" @@ -488,6 +490,7 @@ "azure": "Microsoft Azure - Top 5 Costliest", "azure_cloud": "Microsoft Azure filtered by OpenShift - Top 5 Costliest", "gcp": "Google Cloud Platform - Top 5 Costliest", + "ibm": "IBM Cloud - Top 5 Costliest", "ocp": "All OpenShift cost - Top 5 Costliest", "ocp_supplementary": "OpenShift supplementary cost - Top 5 Costliest", "ocp_usage": "OpenShift usage - Top 5 Costliest" @@ -685,6 +688,23 @@ "tag_plural": "Tags" } }, + "ibm_dashboard": { + "compute_title": "Compute instances usage", + "cost_title": "IBM Cloud Services cost", + "cost_trend_title": "IBM Cloud Services cumulative cost comparison ({{units}})", + "daily_cost_trend_title": "IBM Cloud Services daily cost comparison ({{units}})", + "database_title": "Database services cost", + "network_title": "Network services cost", + "storage_title": "Storage services usage", + "usage_label": "Usage" + }, + "ibm_details": { + "change_column_title": "Month over month change", + "empty_state": "Processing data to generate a list of all services that sums to a total cost...", + "name_column_title": "$t(group_by.values.{{groupBy}}) names", + "tag_column_title": "Tag names", + "total_cost": "Total cost" + }, "inactive_sources": { "go_to_sources": "Go to Sources for more information", "title": "A problem was detected with {{value}}", @@ -737,6 +757,8 @@ "explorer": "Cost Explorer", "gcp_details": "Google Cloud Platform Details", "gcp_details_breakdown": "Google Cloud Platform Details Breakdown", + "ibm_details": "IBM Cloud Details", + "ibm_details_breakdown": "IBM Cloud Details Breakdown", "ocp_details": "OpenShift Details", "ocp_details_breakdown": "OpenShift Details Breakdown", "overview": "Cost Management Overview" @@ -746,6 +768,7 @@ "azure_service_name": "Microsoft Azure in Cost Management", "cost_models_service_name": "Cost Models in Cost Management", "gcp_service_name": "Google Cloud Platform in Cost Management", + "ibm_service_name": "IBM Cloud in Cost Management", "ocp_service_name": "OpenShift in Cost Management" }, "no_data_for_date": "No data available for {{startDate}} $t(months_abbr.{{month}})", @@ -767,6 +790,8 @@ "gcp_desc": "Add an Google Cloud Platform account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", "gcp_title": "Track your Google Cloud Platform spending!", "get_started": "Get started with Sources", + "ibm_desc": "Add an IBM Cloud account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", + "ibm_title": "Track your IBM Cloud spending!", "ocp_add_sources": "Add an OpenShift cluster to Cost Management", "ocp_desc": "Add an OpenShift Container Platform cluster to see a total cost breakdown of your pods by cluster, node, project, or labels.", "ocp_title": "Track your OpenShift spending!", @@ -843,6 +868,8 @@ "azure_desc": "Raw cost from Azure infrastructure.", "gcp": "Google Cloud Platform", "gcp_desc": "Raw cost from Google Cloud Platform infrastructure.", + "ibm": "IBM Cloud", + "ibm_desc": "Raw cost from IBM Cloud infrastructure.", "infrastructure": "Infrastructure", "ocp": "OpenShift", "ocp_cloud": "OpenShift cloud infrastructure", @@ -856,6 +883,7 @@ "azure": "Microsoft Azure", "azure_cloud": "Microsoft Azure filtered by OpenShift", "gcp": "Google Cloud Platform", + "ibm": "IBM Cloud", "label": "Perspective", "ocp_usage": "OpenShift usage", "supplementary": "Supplementary" diff --git a/src/pages/state/noProviders/noProvidersState.tsx b/src/pages/state/noProviders/noProvidersState.tsx index 077d5af6a..8cf069644 100644 --- a/src/pages/state/noProviders/noProvidersState.tsx +++ b/src/pages/state/noProviders/noProvidersState.tsx @@ -58,6 +58,10 @@ class NoProvidersStateBase extends React.Component { descKey = 'no_providers_state.gcp_desc'; titleKey = 'no_providers_state.gcp_title'; break; + case ProviderType.ibm: + descKey = 'no_providers_state.ibm_desc'; + titleKey = 'no_providers_state.ibm_title'; + break; case ProviderType.ocp: descKey = 'no_providers_state.ocp_desc'; docUrlKey = 'docs.add_ocp_sources'; diff --git a/src/pages/state/notAuthorized/notAuthorizedState.tsx b/src/pages/state/notAuthorized/notAuthorizedState.tsx index 3c75d7836..066e078d0 100644 --- a/src/pages/state/notAuthorized/notAuthorizedState.tsx +++ b/src/pages/state/notAuthorized/notAuthorizedState.tsx @@ -29,6 +29,10 @@ class NotAuthorizedStateBase extends React.Component { case paths.gcpDetailsBreakdown: serviceName = 'no_auth_state.gcp_service_name'; break; + case paths.ibmDetails: + case paths.ibmDetailsBreakdown: + serviceName = 'no_auth_state.ibm_service_name'; + break; case paths.costModels: serviceName = 'no_auth_state.cost_models_service_name'; break; diff --git a/src/pages/views/details/ibmBreakdown/costOverview.tsx b/src/pages/views/details/ibmBreakdown/costOverview.tsx new file mode 100644 index 000000000..6667514e3 --- /dev/null +++ b/src/pages/views/details/ibmBreakdown/costOverview.tsx @@ -0,0 +1,23 @@ +import { CostOverviewBase } from 'pages/views/details/components/costOverview/costOverviewBase'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { ibmCostOverviewSelectors } from 'store/breakdown/costOverview/ibmCostOverview'; +import { createMapStateToProps } from 'store/common'; + +interface CostOverviewStateProps { + widgets: number[]; +} + +type CostOverviewOwnProps = WithTranslation; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + return { + selectWidgets: ibmCostOverviewSelectors.selectWidgets(state), + widgets: ibmCostOverviewSelectors.selectCurrentWidgets(state), + }; +}); + +const CostOverview = withTranslation()(connect(mapStateToProps, {})(CostOverviewBase)); + +export { CostOverview }; diff --git a/src/pages/views/details/ibmBreakdown/historicalData.tsx b/src/pages/views/details/ibmBreakdown/historicalData.tsx new file mode 100644 index 000000000..8a7278b6d --- /dev/null +++ b/src/pages/views/details/ibmBreakdown/historicalData.tsx @@ -0,0 +1,23 @@ +import { HistoricalDataBase } from 'pages/views/details/components/historicalData/historicalDataBase'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { ibmHistoricalDataSelectors } from 'store/breakdown/historicalData/ibmHistoricalData'; +import { createMapStateToProps } from 'store/common'; + +interface HistoricalDataStateProps { + widgets: number[]; +} + +type HistoricalDataOwnProps = WithTranslation; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + return { + selectWidgets: ibmHistoricalDataSelectors.selectWidgets(state), + widgets: ibmHistoricalDataSelectors.selectCurrentWidgets(state), + }; +}); + +const HistoricalData = withTranslation()(connect(mapStateToProps, {})(HistoricalDataBase)); + +export { HistoricalData }; diff --git a/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx new file mode 100644 index 000000000..8edf90437 --- /dev/null +++ b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx @@ -0,0 +1,107 @@ +import { ProviderType } from 'api/providers'; +import { getQuery, IbmQuery, parseQuery } from 'api/queries/ibmQuery'; +import { getProvidersQuery } from 'api/queries/providersQuery'; +import { breakdownDescKey, breakdownTitleKey, Query } from 'api/queries/query'; +import { Report, ReportPathsType, ReportType } from 'api/reports/report'; +import { TagPathsType } from 'api/tags/tag'; +import { AxiosError } from 'axios'; +import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { paths } from 'routes'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { ibmProvidersQuery, providersSelectors } from 'store/providers'; +import { reportActions, reportSelectors } from 'store/reports'; + +import { CostOverview } from './costOverview'; +import { HistoricalData } from './historicalData'; + +type IbmBreakdownOwnProps = WithTranslation; + +interface IbmBreakdownStateProps { + CostOverview?: React.ReactNode; + detailsURL: string; + HistoricalData?: React.ReactNode; + query: Query; + queryString: string; + report: Report; + reportError: AxiosError; + reportFetchStatus: FetchStatus; + reportType: ReportType; + reportPathsType: ReportPathsType; +} + +interface BreakdownDispatchProps { + fetchReport?: typeof reportActions.fetchReport; +} + +const detailsURL = paths.ibmDetails; +const reportType = ReportType.cost; +const reportPathsType = ReportPathsType.ibm; + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const filterBy = getGroupByValue(query); + const groupBy = getGroupById(query); + + const newQuery: Query = { + filter: { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'monthly', + limit: 3, + ...(query && query.filter && query.filter.account && { ['account']: query.filter.account }), + }, + filter_by: query ? query.filter_by : undefined, + group_by: { + ...(groupBy && { [groupBy]: filterBy }), + }, + }; + const queryString = getQuery(newQuery); + + const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); + const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); + const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); + + const providersQueryString = getProvidersQuery(ibmProvidersQuery); + const providers = providersSelectors.selectProviders(state, ProviderType.ibm, providersQueryString); + const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ibm, + providersQueryString + ); + + return { + costOverviewComponent: , + description: query[breakdownDescKey], + detailsURL, + emptyStateTitle: props.t('navigation.ibm_details'), + filterBy, + groupBy, + historicalDataComponent: , + providers, + providersFetchStatus, + providerType: ProviderType.ibm, + query, + queryString, + report, + reportError, + reportFetchStatus, + reportType, + reportPathsType, + tagReportPathsType: TagPathsType.ibm, + title: query[breakdownTitleKey] ? query[breakdownTitleKey] : filterBy, + }; +}); + +const mapDispatchToProps: BreakdownDispatchProps = { + fetchReport: reportActions.fetchReport, +}; + +const IbmBreakdown = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(BreakdownBase)); + +export default IbmBreakdown; diff --git a/src/pages/views/details/ibmBreakdown/index.ts b/src/pages/views/details/ibmBreakdown/index.ts new file mode 100644 index 000000000..970c40b76 --- /dev/null +++ b/src/pages/views/details/ibmBreakdown/index.ts @@ -0,0 +1,3 @@ +import IbmBreakdown from './ibmBreakdown'; + +export default IbmBreakdown; diff --git a/src/pages/views/details/ibmDetails/detailsHeader.styles.ts b/src/pages/views/details/ibmDetails/detailsHeader.styles.ts new file mode 100644 index 000000000..6647ebcd7 --- /dev/null +++ b/src/pages/views/details/ibmDetails/detailsHeader.styles.ts @@ -0,0 +1,38 @@ +import global_BackgroundColor_light_100 from '@patternfly/react-tokens/dist/js/global_BackgroundColor_light_100'; +import global_Color_100 from '@patternfly/react-tokens/dist/js/global_Color_100'; +import global_Color_200 from '@patternfly/react-tokens/dist/js/global_Color_200'; +import global_FontSize_sm from '@patternfly/react-tokens/dist/js/global_FontSize_sm'; +import global_spacer_lg from '@patternfly/react-tokens/dist/js/global_spacer_lg'; +import global_spacer_md from '@patternfly/react-tokens/dist/js/global_spacer_md'; +import global_spacer_sm from '@patternfly/react-tokens/dist/js/global_spacer_sm'; +import React from 'react'; + +export const styles = { + cost: { + display: 'flex', + alignItems: 'center', + }, + costLabel: {}, + costValue: { + marginTop: 0, + marginBottom: 0, + marginRight: global_spacer_md.var, + }, + costLabelUnit: { + fontSize: global_FontSize_sm.value, + color: global_Color_100.var, + }, + costLabelDate: { + fontSize: global_FontSize_sm.value, + color: global_Color_200.var, + }, + header: { + display: 'flex', + justifyContent: 'space-between', + padding: global_spacer_lg.var, + backgroundColor: global_BackgroundColor_light_100.var, + }, + title: { + paddingBottom: global_spacer_sm.var, + }, +} as { [className: string]: React.CSSProperties }; diff --git a/src/pages/views/details/ibmDetails/detailsHeader.tsx b/src/pages/views/details/ibmDetails/detailsHeader.tsx new file mode 100644 index 000000000..f2ad5ca51 --- /dev/null +++ b/src/pages/views/details/ibmDetails/detailsHeader.tsx @@ -0,0 +1,118 @@ +import { Title } from '@patternfly/react-core'; +import { Providers, ProviderType } from 'api/providers'; +import { getQuery, IbmQuery } from 'api/queries/ibmQuery'; +import { getProvidersQuery } from 'api/queries/providersQuery'; +import { IbmReport } from 'api/reports/ibmReports'; +import { TagPathsType } from 'api/tags/tag'; +import { AxiosError } from 'axios'; +import { GroupBy } from 'pages/views/components/groupBy/groupBy'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { ibmProvidersQuery, providersSelectors } from 'store/providers'; +import { ComputedIbmReportItemsParams, getIdKeyForGroupBy } from 'utils/computedReport/getComputedIbmReportItems'; +import { getSinceDateRangeString } from 'utils/dateRange'; +import { formatCurrency } from 'utils/formatValue'; + +import { styles } from './detailsHeader.styles'; + +interface DetailsHeaderOwnProps { + groupBy?: string; + onGroupByClicked(value: string); + report: IbmReport; +} + +interface DetailsHeaderStateProps { + queryString?: string; + providers: Providers; + providersError: AxiosError; + providersFetchStatus: FetchStatus; +} + +type DetailsHeaderProps = DetailsHeaderOwnProps & DetailsHeaderStateProps & WithTranslation; + +const baseQuery: IbmQuery = { + delta: 'cost', + filter: { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'monthly', + }, +}; + +const groupByOptions: { + label: string; + value: ComputedIbmReportItemsParams['idKey']; +}[] = [ + { label: 'account', value: 'account' }, + { label: 'project', value: 'project' }, + { label: 'service', value: 'service' }, + { label: 'region', value: 'region' }, +]; + +const tagReportPathsType = TagPathsType.ibm; + +class DetailsHeaderBase extends React.Component { + public render() { + const { groupBy, onGroupByClicked, providers, providersError, report, t } = this.props; + const showContent = report && !providersError && providers && providers.meta && providers.meta.count > 0; + + const hasCost = + report && report.meta && report.meta.total && report.meta.total.cost && report.meta.total.cost.total; + + return ( +
+
+ + {t('navigation.ibm_details')} + + +
+ {Boolean(showContent) && ( +
+ + {formatCurrency(hasCost ? report.meta.total.cost.total.value : 0)} + +
+
{t('ibm_details.total_cost')}
+
{getSinceDateRangeString()}
+
+
+ )} +
+ ); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + const queryString = getQuery(baseQuery); + const providersQueryString = getProvidersQuery(ibmProvidersQuery); + const providers = providersSelectors.selectProviders(state, ProviderType.ibm, providersQueryString); + const providersError = providersSelectors.selectProvidersError(state, ProviderType.ibm, providersQueryString); + const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ibm, + providersQueryString + ); + + return { + providers, + providersError, + providersFetchStatus, + queryString, + }; +}); + +const DetailsHeader = withTranslation()(connect(mapStateToProps, {})(DetailsHeaderBase)); + +export { DetailsHeader, DetailsHeaderProps }; diff --git a/src/pages/views/details/ibmDetails/detailsTable.styles.ts b/src/pages/views/details/ibmDetails/detailsTable.styles.ts new file mode 100644 index 000000000..97752f957 --- /dev/null +++ b/src/pages/views/details/ibmDetails/detailsTable.styles.ts @@ -0,0 +1,27 @@ +import global_BackgroundColor_light_100 from '@patternfly/react-tokens/dist/js/global_BackgroundColor_light_100'; +import global_disabled_color_100 from '@patternfly/react-tokens/dist/js/global_disabled_color_100'; +import global_FontSize_xs from '@patternfly/react-tokens/dist/js/global_FontSize_xs'; +import global_spacer_3xl from '@patternfly/react-tokens/dist/js/global_spacer_3xl'; +import global_spacer_xs from '@patternfly/react-tokens/dist/js/global_spacer_xs'; +import React from 'react'; + +export const styles = { + emptyState: { + backgroundColor: global_BackgroundColor_light_100.value, + display: 'flex', + justifyContent: 'center', + paddingTop: global_spacer_3xl.value, + height: '35vh', + width: '100%', + }, + infoArrow: { + position: 'relative', + }, + infoArrowDesc: { + bottom: global_spacer_xs.value, + }, + infoDescription: { + color: global_disabled_color_100.value, + fontSize: global_FontSize_xs.value, + }, +} as { [className: string]: React.CSSProperties }; diff --git a/src/pages/views/details/ibmDetails/detailsTable.tsx b/src/pages/views/details/ibmDetails/detailsTable.tsx new file mode 100644 index 000000000..5736fc888 --- /dev/null +++ b/src/pages/views/details/ibmDetails/detailsTable.tsx @@ -0,0 +1,392 @@ +import './ibmDetailsTable.scss'; + +import { Bullseye, EmptyState, EmptyStateBody, EmptyStateIcon, Spinner } from '@patternfly/react-core'; +import { CalculatorIcon } from '@patternfly/react-icons/dist/js/icons/calculator-icon'; +import { sortable, SortByDirection, Table, TableBody, TableHeader } from '@patternfly/react-table'; +import { getQueryRoute } from 'api/queries/azureQuery'; +import { getQuery, IbmQuery } from 'api/queries/ibmQuery'; +import { breakdownDescKey, tagPrefix } from 'api/queries/query'; +import { IbmReport } from 'api/reports/ibmReports'; +import { ReportPathsType } from 'api/reports/report'; +import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; +import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; +import { Actions } from 'pages/views/details/components/actions/actions'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; +import { paths } from 'routes'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedIbmReportItems'; +import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; +import { getForDateRangeString, getNoDataForDateRangeString } from 'utils/dateRange'; +import { formatCurrency } from 'utils/formatValue'; + +import { styles } from './detailsTable.styles'; + +interface DetailsTableOwnProps { + groupBy: string; + isAllSelected?: boolean; + isLoading?: boolean; + onSelected(items: ComputedReportItem[], isSelected: boolean); + onSort(value: string, isSortAscending: boolean); + query: IbmQuery; + report: IbmReport; + selectedItems?: ComputedReportItem[]; +} + +interface DetailsTableState { + columns?: any[]; + loadingRows?: any[]; + rows?: any[]; +} + +type DetailsTableProps = DetailsTableOwnProps & WithTranslation; + +const reportPathsType = ReportPathsType.ibm; + +class DetailsTableBase extends React.Component { + public state: DetailsTableState = { + columns: [], + rows: [], + }; + + constructor(props: DetailsTableProps) { + super(props); + this.handleOnSelect = this.handleOnSelect.bind(this); + this.handleOnSort = this.handleOnSort.bind(this); + } + + public componentDidMount() { + this.initDatum(); + } + + public componentDidUpdate(prevProps: DetailsTableProps) { + const { query, report, selectedItems } = this.props; + const currentReport = report && report.data ? JSON.stringify(report.data) : ''; + const previousReport = prevProps.report && prevProps.report.data ? JSON.stringify(prevProps.report.data) : ''; + + if ( + getQuery(prevProps.query) !== getQuery(query) || + previousReport !== currentReport || + prevProps.selectedItems !== selectedItems + ) { + this.initDatum(); + } + } + + private buildCostLink = (label: string, description: string) => { + const { groupBy, query } = this.props; + + const newQuery = { + ...query, + ...(description && description !== label && { [breakdownDescKey]: description }), + group_by: { + [groupBy]: label, + }, + }; + return `${paths.ibmDetailsBreakdown}?${getQueryRoute(newQuery)}`; + }; + + private initDatum = () => { + const { isAllSelected, query, report, selectedItems, t } = this.props; + if (!query || !report) { + return; + } + + const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = this.getGroupByTagKey(); + + const total = formatCurrency( + report && report.meta && report.meta.total && report.meta.total.cost && report.meta.total.cost.total + ? report.meta.total.cost.total.value + : 0 + ); + + const columns = groupByTagKey + ? [ + { + title: t('ibm_details.tag_column_title'), + }, + { + title: t('ibm_details.change_column_title'), + }, + { + orderBy: 'cost', + title: t('cost', { total }), + transforms: [sortable], + }, + { + title: '', + }, + ] + : [ + { + orderBy: groupById, + title: t('ibm_details.name_column_title', { groupBy: groupById }), + transforms: [sortable], + }, + { + title: t('ibm_details.change_column_title'), + }, + { + orderBy: 'cost', + title: t('cost'), + transforms: [sortable], + }, + { + title: '', + }, + ]; + + const rows = []; + const computedItems = getUnsortedComputedReportItems({ + report, + idKey: (groupByTagKey as any) || groupById, + }); + + computedItems.map((item, index) => { + const label = item && item.label !== null ? item.label : ''; + const monthOverMonth = this.getMonthOverMonthCost(item, index); + const cost = this.getTotalCost(item, index); + const actions = this.getActions(item); + + let name = {label}; + if (label === `no-${groupById}` || label === `no-${groupByTagKey}`) { + name = label as any; + } + + const desc = item.id && item.id !== item.label ?
{item.id}
: null; + + rows.push({ + cells: [ + { + title: ( +
+ {name} + {desc} +
+ ), + }, + { title:
{monthOverMonth}
}, + { title:
{cost}
}, + { title:
{actions}
}, + ], + disableSelection: item.label === `no-${groupById}` || item.label === `no-${groupByTagKey}`, + isOpen: false, + item, + selected: isAllSelected || (selectedItems && selectedItems.find(val => val.id === item.id) !== undefined), + }); + }); + + const loadingRows = [ + { + heightAuto: true, + cells: [ + { + props: { colSpan: 5 }, + title: ( + +
+ +
+
+ ), + }, + ], + }, + ]; + + this.setState({ + columns, + loadingRows, + rows, + sortBy: {}, + }); + }; + + private getActions = (item: ComputedReportItem) => { + const { groupBy, query } = this.props; + + return ; + }; + + private getEmptyState = () => { + const { query, t } = this.props; + + for (const val of Object.values(query.filter_by)) { + if (val !== '*') { + return ; + } + } + return ( + + + {t('ibm_details.empty_state')} + + ); + }; + + private getGroupByTagKey = () => { + const { query } = this.props; + let groupByTagKey; + + for (const groupBy of Object.keys(query.group_by)) { + const tagIndex = groupBy.indexOf(tagPrefix); + if (tagIndex !== -1) { + groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; + break; + } + } + return groupByTagKey; + }; + + private getMonthOverMonthCost = (item: ComputedReportItem, index: number) => { + const { t } = this.props; + const value = formatCurrency(Math.abs(item.cost.total.value - item.delta_value)); + const percentage = item.delta_percent !== null ? Math.abs(item.delta_percent).toFixed(2) : 0; + + const showPercentage = !(percentage === 0 || percentage === '0.00'); + const showValue = item.delta_percent !== null; // Workaround for https://github.com/project-koku/koku/issues/1395 + + let iconOverride; + if (showPercentage) { + iconOverride = 'iconOverride'; + if (item.delta_percent !== null && item.delta_value < 0) { + iconOverride += ' decrease'; + } + if (item.delta_percent !== null && item.delta_value > 0) { + iconOverride += ' increase'; + } + } + + if (!showValue) { + return getNoDataForDateRangeString(); + } else { + return ( +
+
+ {showPercentage ? t('percent', { value: percentage }) : } + {Boolean(showPercentage && item.delta_percent !== null && item.delta_value > 0) && ( + + )} + {Boolean(showPercentage && item.delta_percent !== null && item.delta_value < 0) && ( + + )} +
+
+ {getForDateRangeString(value)} +
+
+ ); + } + }; + + public getSortBy = () => { + const { query } = this.props; + const { columns } = this.state; + + let index = -1; + let direction: any = SortByDirection.asc; + + for (const key of Object.keys(query.order_by)) { + let c = 0; + for (const column of columns) { + if (column.orderBy === key) { + direction = query.order_by[key] === 'asc' ? SortByDirection.asc : SortByDirection.desc; + index = c + 1; + break; + } + c++; + } + } + return index > -1 ? { index, direction } : {}; + }; + + private getTotalCost = (item: ComputedReportItem, index: number) => { + const { report, t } = this.props; + const cost = + report && report.meta && report.meta.total && report.meta.total.cost && report.meta.total.cost.total + ? report.meta.total.cost.total.value + : 0; + const percentValue = cost === 0 ? cost.toFixed(2) : ((item.cost.total.value / cost) * 100).toFixed(2); + + return ( + <> + {formatCurrency(item.cost.total.value)} +
+ {t('percent_of_cost', { + value: percentValue, + })} +
+ + ); + }; + + private handleOnSelect = (event, isSelected, rowId) => { + const { onSelected } = this.props; + + let rows; + let items = []; + if (rowId === -1) { + rows = this.state.rows.map(row => { + row.selected = isSelected; + return row; + }); + } else { + rows = [...this.state.rows]; + rows[rowId].selected = isSelected; + items = [rows[rowId].item]; + } + this.setState({ rows }, () => { + if (onSelected) { + onSelected(items, isSelected); + } + }); + }; + + private handleOnSort = (event, index, direction) => { + const { onSort } = this.props; + const { columns } = this.state; + + if (onSort) { + const orderBy = columns[index - 1].orderBy; + const isSortAscending = direction === SortByDirection.asc; + onSort(orderBy, isSortAscending); + } + }; + + public render() { + const { isLoading } = this.props; + const { columns, loadingRows, rows } = this.state; + + return ( + <> + + + +
+ {Boolean(rows.length === 0) &&
{this.getEmptyState()}
} + + ); + } +} + +const DetailsTable = withTranslation()(DetailsTableBase); + +export { DetailsTable, DetailsTableProps }; diff --git a/src/pages/views/details/ibmDetails/detailsToolbar.tsx b/src/pages/views/details/ibmDetails/detailsToolbar.tsx new file mode 100644 index 000000000..694e1bdc0 --- /dev/null +++ b/src/pages/views/details/ibmDetails/detailsToolbar.tsx @@ -0,0 +1,160 @@ +import { ToolbarChipGroup } from '@patternfly/react-core'; +import { getQuery, IbmQuery } from 'api/queries/ibmQuery'; +import { tagKey } from 'api/queries/query'; +import { Tag, TagPathsType, TagType } from 'api/tags/tag'; +import { DataToolbar } from 'pages/views/components/dataToolbar/dataToolbar'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { tagActions, tagSelectors } from 'store/tags'; +import { ComputedReportItem } from 'utils/computedReport/getComputedReportItems'; +import { isEqual } from 'utils/equal'; + +interface DetailsToolbarOwnProps { + isAllSelected?: boolean; + isBulkSelectDisabled?: boolean; + isExportDisabled?: boolean; + items?: ComputedReportItem[]; + itemsPerPage?: number; + itemsTotal?: number; + groupBy: string; + onBulkSelected(action: string); + onExportClicked(); + onFilterAdded(filterType: string, filterValue: string); + onFilterRemoved(filterType: string, filterValue?: string); + pagination?: React.ReactNode; + query?: IbmQuery; + queryString?: string; + selectedItems?: ComputedReportItem[]; +} + +interface DetailsToolbarStateProps { + tagReport?: Tag; + tagReportFetchStatus?: FetchStatus; +} + +interface DetailsToolbarDispatchProps { + fetchTag?: typeof tagActions.fetchTag; +} + +interface DetailsToolbarState { + categoryOptions?: ToolbarChipGroup[]; +} + +type DetailsToolbarProps = DetailsToolbarOwnProps & + DetailsToolbarStateProps & + DetailsToolbarDispatchProps & + WithTranslation; + +const tagReportType = TagType.tag; +const tagReportPathsType = TagPathsType.ibm; + +export class DetailsToolbarBase extends React.Component { + protected defaultState: DetailsToolbarState = {}; + public state: DetailsToolbarState = { ...this.defaultState }; + + public componentDidMount() { + const { fetchTag, queryString } = this.props; + fetchTag(tagReportPathsType, tagReportType, queryString); + this.setState({ + categoryOptions: this.getCategoryOptions(), + }); + } + + public componentDidUpdate(prevProps: DetailsToolbarProps) { + const { fetchTag, query, queryString, tagReport } = this.props; + if (query && !isEqual(query, prevProps.query)) { + fetchTag(tagReportPathsType, tagReportType, queryString); + } + if (!isEqual(tagReport, prevProps.tagReport)) { + this.setState({ + categoryOptions: this.getCategoryOptions(), + }); + } + } + + private getCategoryOptions = (): ToolbarChipGroup[] => { + const { t, tagReport } = this.props; + + const options = [ + { name: t('filter_by.values.account'), key: 'account' }, + { name: t('filter_by.values.project'), key: 'project' }, + { name: t('filter_by.values.service'), key: 'service' }, + { name: t('filter_by.values.region'), key: 'region' }, + ]; + + if (tagReport && tagReport.data && tagReport.data.length > 0) { + options.push({ name: t('filter_by.values.tag'), key: tagKey }); + } + return options; + }; + + public render() { + const { + groupBy, + isAllSelected, + isBulkSelectDisabled, + isExportDisabled, + itemsPerPage, + itemsTotal, + onBulkSelected, + onExportClicked, + onFilterAdded, + onFilterRemoved, + pagination, + query, + selectedItems, + tagReport, + } = this.props; + const { categoryOptions } = this.state; + + return ( + + ); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + // Omitting key_only to share a single request -- the toolbar needs key values + const queryString = getQuery({ + // key_only: true + }); + + const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); + const tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, queryString); + return { + queryString, + tagReport, + tagReportFetchStatus, + }; +}); + +const mapDispatchToProps: DetailsToolbarDispatchProps = { + fetchTag: tagActions.fetchTag, +}; + +const DetailsToolbarConnect = connect(mapStateToProps, mapDispatchToProps)(DetailsToolbarBase); +const DetailsToolbar = withTranslation()(DetailsToolbarConnect); + +export { DetailsToolbar, DetailsToolbarProps }; diff --git a/src/pages/views/details/ibmDetails/ibmDetails.styles.ts b/src/pages/views/details/ibmDetails/ibmDetails.styles.ts new file mode 100644 index 000000000..d554e26c8 --- /dev/null +++ b/src/pages/views/details/ibmDetails/ibmDetails.styles.ts @@ -0,0 +1,25 @@ +import global_BackgroundColor_light_100 from '@patternfly/react-tokens/dist/js/global_BackgroundColor_light_100'; +import global_spacer_lg from '@patternfly/react-tokens/dist/js/global_spacer_lg'; +import global_spacer_md from '@patternfly/react-tokens/dist/js/global_spacer_md'; + +export const styles = { + gcpDetails: { + minHeight: '100%', + }, + content: { + paddingBottom: global_spacer_lg.value, + paddingTop: global_spacer_lg.value, + }, + paginationContainer: { + marginLeft: global_spacer_lg.value, + marginRight: global_spacer_lg.value, + }, + pagination: { + backgroundColor: global_BackgroundColor_light_100.value, + padding: global_spacer_md.value, + }, + tableContainer: { + marginLeft: global_spacer_lg.value, + marginRight: global_spacer_lg.value, + }, +} as { [className: string]: React.CSSProperties }; diff --git a/src/pages/views/details/ibmDetails/ibmDetails.tsx b/src/pages/views/details/ibmDetails/ibmDetails.tsx new file mode 100644 index 000000000..91ca9be18 --- /dev/null +++ b/src/pages/views/details/ibmDetails/ibmDetails.tsx @@ -0,0 +1,479 @@ +import { Pagination, PaginationVariant } from '@patternfly/react-core'; +import { Providers, ProviderType } from 'api/providers'; +import { getQuery, getQueryRoute, IbmQuery, parseQuery } from 'api/queries/ibmQuery'; +import { getProvidersQuery } from 'api/queries/providersQuery'; +import { tagPrefix } from 'api/queries/query'; +import { IbmReport } from 'api/reports/ibmReports'; +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { AxiosError } from 'axios'; +import Loading from 'pages/state/loading'; +import NoData from 'pages/state/noData'; +import NoProviders from 'pages/state/noProviders'; +import NotAvailable from 'pages/state/notAvailable'; +import { ExportModal } from 'pages/views/components/export/exportModal'; +import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; +import React from 'react'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { RouteComponentProps } from 'react-router-dom'; +import { createMapStateToProps, FetchStatus } from 'store/common'; +import { ibmProvidersQuery, providersSelectors } from 'store/providers'; +import { reportActions, reportSelectors } from 'store/reports'; +import { getIdKeyForGroupBy } from 'utils/computedReport/getComputedIbmReportItems'; +import { ComputedReportItem, getUnsortedComputedReportItems } from 'utils/computedReport/getComputedReportItems'; + +import { DetailsHeader } from './detailsHeader'; +import { DetailsTable } from './detailsTable'; +import { DetailsToolbar } from './detailsToolbar'; +import { styles } from './ibmDetails.styles'; + +interface IbmDetailsStateProps { + providers: Providers; + providersFetchStatus: FetchStatus; + query: IbmQuery; + queryString: string; + report: IbmReport; + reportError: AxiosError; + reportFetchStatus: FetchStatus; +} + +interface IbmDetailsDispatchProps { + fetchReport: typeof reportActions.fetchReport; +} + +interface IbmDetailsState { + columns: any[]; + isAllSelected: boolean; + isExportModalOpen: boolean; + rows: any[]; + selectedItems: ComputedReportItem[]; +} + +type IbmDetailsOwnProps = RouteComponentProps & WithTranslation; + +type IbmDetailsProps = IbmDetailsStateProps & IbmDetailsOwnProps & IbmDetailsDispatchProps; + +const baseQuery: IbmQuery = { + delta: 'cost', + filter: { + limit: 10, + offset: 0, + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, + filter_by: {}, + group_by: { + account: '*', + }, + order_by: { + cost: 'desc', + }, +}; + +const reportType = ReportType.cost; +const reportPathsType = ReportPathsType.ibm; + +class IbmDetails extends React.Component { + protected defaultState: IbmDetailsState = { + columns: [], + isAllSelected: false, + isExportModalOpen: false, + rows: [], + selectedItems: [], + }; + public state: IbmDetailsState = { ...this.defaultState }; + + constructor(stateProps, dispatchProps) { + super(stateProps, dispatchProps); + this.handleBulkSelected = this.handleBulkSelected.bind(this); + this.handleExportModalClose = this.handleExportModalClose.bind(this); + this.handleExportModalOpen = this.handleExportModalOpen.bind(this); + this.handleFilterAdded = this.handleFilterAdded.bind(this); + this.handleFilterRemoved = this.handleFilterRemoved.bind(this); + this.handlePerPageSelect = this.handlePerPageSelect.bind(this); + this.handleSelected = this.handleSelected.bind(this); + this.handleSetPage = this.handleSetPage.bind(this); + this.handleSort = this.handleSort.bind(this); + } + + public componentDidMount() { + this.updateReport(); + } + + public componentDidUpdate(prevProps: IbmDetailsProps, prevState: IbmDetailsState) { + const { location, report, reportError, queryString } = this.props; + const { selectedItems } = this.state; + + const newQuery = prevProps.queryString !== queryString; + const noReport = !report && !reportError; + const noLocation = !location.search; + const newItems = prevState.selectedItems !== selectedItems; + + if (newQuery || noReport || noLocation || newItems) { + this.updateReport(); + } + } + + private getComputedItems = () => { + const { query, report } = this.props; + + const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = getGroupByTagKey(query); + + return getUnsortedComputedReportItems({ + report, + idKey: (groupByTagKey as any) || groupById, + }); + }; + + private getExportModal = (computedItems: ComputedReportItem[]) => { + const { isAllSelected, isExportModalOpen, selectedItems } = this.state; + const { query, report } = this.props; + + const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = getGroupByTagKey(query); + const itemsTotal = report && report.meta ? report.meta.count : 0; + + return ( + 0} + groupBy={groupByTagKey ? `${tagPrefix}${groupByTagKey}` : groupById} + isOpen={isExportModalOpen} + items={selectedItems} + onClose={this.handleExportModalClose} + query={query} + reportPathsType={reportPathsType} + showTimeScope + /> + ); + }; + + private getPagination = (isBottom: boolean = false) => { + const { report } = this.props; + + const count = report && report.meta ? report.meta.count : 0; + const limit = + report && report.meta && report.meta.filter && report.meta.filter.limit + ? report.meta.filter.limit + : baseQuery.filter.limit; + const offset = + report && report.meta && report.meta.filter && report.meta.filter.offset + ? report.meta.filter.offset + : baseQuery.filter.offset; + const page = offset / limit + 1; + + return ( + + ); + }; + + private getRouteForQuery(query: IbmQuery, reset: boolean = false) { + const { history } = this.props; + + // Reset pagination + if (reset) { + query.filter = { + ...query.filter, + offset: baseQuery.filter.offset, + }; + } + return `${history.location.pathname}?${getQueryRoute(query)}`; + } + + private getTable = () => { + const { query, report, reportFetchStatus } = this.props; + const { isAllSelected, selectedItems } = this.state; + const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = getGroupByTagKey(query); + + return ( + + ); + }; + + private getToolbar = (computedItems: ComputedReportItem[]) => { + const { query, report } = this.props; + const { isAllSelected, selectedItems } = this.state; + + const groupById = getIdKeyForGroupBy(query.group_by); + const groupByTagKey = getGroupByTagKey(query); + const itemsTotal = report && report.meta ? report.meta.count : 0; + + return ( + + ); + }; + + private handleBulkSelected = (action: string) => { + const { isAllSelected } = this.state; + + if (action === 'none') { + this.setState({ isAllSelected: false, selectedItems: [] }); + } else if (action === 'page') { + this.setState({ + isAllSelected: false, + selectedItems: this.getComputedItems(), + }); + } else if (action === 'all') { + this.setState({ isAllSelected: !isAllSelected, selectedItems: [] }); + } + }; + + public handleExportModalClose = (isOpen: boolean) => { + this.setState({ isExportModalOpen: isOpen }); + }; + + public handleExportModalOpen = () => { + this.setState({ isExportModalOpen: true }); + }; + + private handleFilterAdded = (filterType: string, filterValue: string) => { + const { history, query } = this.props; + + const filteredQuery = addQueryFilter(query, filterType, filterValue); + history.replace(this.getRouteForQuery(filteredQuery, true)); + }; + + private handleFilterRemoved = (filterType: string, filterValue: string) => { + const { history, query } = this.props; + + const filteredQuery = removeQueryFilter(query, filterType, filterValue); + history.replace(this.getRouteForQuery(filteredQuery, true)); + }; + + private handleGroupByClick = groupBy => { + const { history, query } = this.props; + const groupByKey: keyof IbmQuery['group_by'] = groupBy as any; + const newQuery = { + ...JSON.parse(JSON.stringify(query)), + // filter_by: undefined, // Preserve filter -- see https://issues.redhat.com/browse/COST-1090 + group_by: { + [groupByKey]: '*', + }, + order_by: { cost: 'desc' }, + }; + history.replace(this.getRouteForQuery(newQuery, true)); + this.setState({ isAllSelected: false, selectedItems: [] }); + }; + + private handlePerPageSelect = (_event, perPage) => { + const { history, query } = this.props; + const newQuery = { ...JSON.parse(JSON.stringify(query)) }; + newQuery.filter = { + ...query.filter, + limit: perPage, + }; + const filteredQuery = this.getRouteForQuery(newQuery, true); + history.replace(filteredQuery); + }; + + private handleSelected = (items: ComputedReportItem[], isSelected: boolean = false) => { + const { isAllSelected, selectedItems } = this.state; + + let newItems = [...(isAllSelected ? this.getComputedItems() : selectedItems)]; + if (items && items.length > 0) { + if (isSelected) { + items.map(item => newItems.push(item)); + } else { + items.map(item => { + newItems = newItems.filter(val => val.id !== item.id); + }); + } + } + this.setState({ isAllSelected: false, selectedItems: newItems }); + }; + + private handleSetPage = (event, pageNumber) => { + const { history, query, report } = this.props; + + const limit = + report && report.meta && report.meta.filter && report.meta.filter.limit + ? report.meta.filter.limit + : baseQuery.filter.limit; + const offset = pageNumber * limit - limit; + + const newQuery = { ...JSON.parse(JSON.stringify(query)) }; + newQuery.filter = { + ...query.filter, + offset, + }; + const filteredQuery = this.getRouteForQuery(newQuery); + history.replace(filteredQuery); + }; + + private handleSort = (sortType: string, isSortAscending: boolean) => { + const { history, query } = this.props; + const newQuery = { ...JSON.parse(JSON.stringify(query)) }; + newQuery.order_by = {}; + newQuery.order_by[sortType] = isSortAscending ? 'asc' : 'desc'; + const filteredQuery = this.getRouteForQuery(newQuery); + history.replace(filteredQuery); + }; + + // Ensure at least one source provider has data available + private hasCurrentMonthData = () => { + const { providers } = this.props; + let result = false; + + if (providers && providers.data) { + for (const provider of providers.data) { + if (provider.current_month_data) { + result = true; + break; + } + } + } + return result; + }; + + private updateReport = () => { + const { query, location, fetchReport, history, queryString } = this.props; + if (!location.search) { + history.replace( + this.getRouteForQuery({ + filter_by: query ? query.filter_by : undefined, + group_by: query ? query.group_by : undefined, + order_by: { cost: 'desc' }, + }) + ); + } else { + fetchReport(reportPathsType, reportType, queryString); + } + }; + + public render() { + const { providers, providersFetchStatus, query, report, reportError, reportFetchStatus, t } = this.props; + + const groupById = getIdKeyForGroupBy(query.group_by); + const computedItems = this.getComputedItems(); + const title = t('navigation.ibm_details'); + + // Note: Providers are fetched via the InactiveSources component used by all routes + if (reportError) { + return ; + } else if (providersFetchStatus === FetchStatus.inProgress && reportFetchStatus === FetchStatus.inProgress) { + return ; + } else if (providersFetchStatus === FetchStatus.complete && reportFetchStatus === FetchStatus.complete) { + // API returns empty data array for no sources + const noProviders = + providers && providers.meta && providers.meta.count === 0 && providersFetchStatus === FetchStatus.complete; + + if (noProviders) { + return ; + } + if (!this.hasCurrentMonthData()) { + return ; + } + } + return ( +
+ +
+ {this.getToolbar(computedItems)} + {this.getExportModal(computedItems)} + {reportFetchStatus === FetchStatus.inProgress ? ( + + ) : ( + <> +
{this.getTable()}
+
+
{this.getPagination(true)}
+
+ + )} +
+
+ ); + } +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + const queryFromRoute = parseQuery(location.search); + const query = { + delta: 'cost', + filter: { + ...baseQuery.filter, + ...queryFromRoute.filter, + }, + filter_by: queryFromRoute.filter_by || baseQuery.filter_by, + group_by: queryFromRoute.group_by || baseQuery.group_by, + order_by: queryFromRoute.order_by || baseQuery.order_by, + }; + const queryString = getQuery(query); + const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); + const reportError = reportSelectors.selectReportError(state, reportPathsType, reportType, queryString); + const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); + + const providersQueryString = getProvidersQuery(ibmProvidersQuery); + const providers = providersSelectors.selectProviders(state, ProviderType.ibm, providersQueryString); + const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( + state, + ProviderType.ibm, + providersQueryString + ); + + return { + providers, + providersFetchStatus, + query, + queryString, + report, + reportError, + reportFetchStatus, + + // Testing... + // + // providers: { + // meta: { + // count: 0, + // }, + // } as any, + // providersError: { + // response: { + // // status: 401 + // status: 500 + // } + // } as any, + // providersFetchStatus: FetchStatus.inProgress, + }; +}); + +const mapDispatchToProps: IbmDetailsDispatchProps = { + fetchReport: reportActions.fetchReport, +}; + +export default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(IbmDetails)); diff --git a/src/pages/views/details/ibmDetails/ibmDetailsTable.scss b/src/pages/views/details/ibmDetails/ibmDetailsTable.scss new file mode 100644 index 000000000..e17311d3f --- /dev/null +++ b/src/pages/views/details/ibmDetails/ibmDetailsTable.scss @@ -0,0 +1,44 @@ +@import url("~@patternfly/patternfly/base/patternfly-variables.css"); + +.monthOverMonthOverride { + div { + display: block; + margin-right: 0; + margin-bottom: var(--pf-global--spacer--xs); + &.iconOverride { + &.decrease { + color: var(--pf-global--success-color--100); + } + &.increase { + color: var(--pf-global--danger-color--100); + } + .fa-sort-up {} + .fa-sort-down { + margin-left: 10px; + } + .fa-sort-up::before { + color: var(--pf-global--danger-color--100); + } + .fa-sort-down::before { + color: var(--pf-global--success-color--100); + } + span { + margin-right: -17px !important; + } + } + } +} + +.tableOverride { + &.pf-c-table { + thead th + th + th + th { + .pf-c-table__button { + margin-left: auto; + } + text-align: right; + } + tbody td + td + td + td { + text-align: right; + } + } +} diff --git a/src/pages/views/details/ibmDetails/index.ts b/src/pages/views/details/ibmDetails/index.ts new file mode 100644 index 000000000..19afb540c --- /dev/null +++ b/src/pages/views/details/ibmDetails/index.ts @@ -0,0 +1,3 @@ +import IbmDetails from './ibmDetails'; + +export default IbmDetails; diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index cedc0f2e1..b829ad37a 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -23,6 +23,7 @@ import { awsProvidersQuery, azureProvidersQuery, gcpProvidersQuery, + ibmProvidersQuery, ocpProvidersQuery, providersSelectors, } from 'store/providers'; @@ -50,6 +51,7 @@ import { isAwsAvailable, isAzureAvailable, isGcpAvailable, + isIbmAvailable, isOcpAvailable, PerspectiveType, } from './explorerUtils'; @@ -65,6 +67,9 @@ interface ExplorerStateProps { gcpProviders: Providers; gcpProvidersFetchStatus: FetchStatus; gcpProvidersQueryString: string; + ibmProviders: Providers; + ibmProvidersFetchStatus: FetchStatus; + ibmProvidersQueryString: string; ocpProviders: Providers; ocpProvidersFetchStatus: FetchStatus; ocpProvidersQueryString: string; @@ -401,10 +406,12 @@ class Explorer extends React.Component { awsProviders, azureProviders, gcpProviders, + ibmProviders, ocpProviders, awsProvidersFetchStatus, azureProvidersFetchStatus, gcpProvidersFetchStatus, + ibmProvidersFetchStatus, ocpProvidersFetchStatus, perspective, userAccessFetchStatus, @@ -420,6 +427,7 @@ class Explorer extends React.Component { awsProvidersFetchStatus === FetchStatus.inProgress || azureProvidersFetchStatus === FetchStatus.inProgress || gcpProvidersFetchStatus === FetchStatus.inProgress || + ibmProvidersFetchStatus === FetchStatus.inProgress || ocpProvidersFetchStatus === FetchStatus.inProgress || userAccessFetchStatus === FetchStatus.inProgress; @@ -434,6 +442,7 @@ class Explorer extends React.Component { isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess) && isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess) && isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess) && + isIbmAvailable(ibmProviders, ibmProvidersFetchStatus, userAccess) && isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess) ); @@ -449,6 +458,7 @@ class Explorer extends React.Component { this.hasCurrentMonthData(awsProviders) || this.hasCurrentMonthData(azureProviders) || this.hasCurrentMonthData(gcpProviders) || + this.hasCurrentMonthData(ibmProviders) || this.hasCurrentMonthData(ocpProviders) ) ) { @@ -547,6 +557,14 @@ const mapStateToProps = createMapStateToProps { case PerspectiveType.gcp: result = 'explorer.title.gcp'; break; + case PerspectiveType.ibm: + result = 'explorer.title.ibm'; + break; case PerspectiveType.ocp: result = 'explorer.title.ocp'; break; diff --git a/src/pages/views/explorer/explorerHeader.tsx b/src/pages/views/explorer/explorerHeader.tsx index a3381a773..415cf7cce 100644 --- a/src/pages/views/explorer/explorerHeader.tsx +++ b/src/pages/views/explorer/explorerHeader.tsx @@ -16,6 +16,7 @@ import { awsProvidersQuery, azureProvidersQuery, gcpProvidersQuery, + ibmProvidersQuery, ocpProvidersQuery, providersSelectors, } from 'store/providers'; @@ -38,10 +39,12 @@ import { infrastructureAzureCloudOptions, infrastructureAzureOptions, infrastructureGcpOptions, + infrastructureIbmOptions, infrastructureOcpOptions, isAwsAvailable, isAzureAvailable, isGcpAvailable, + isIbmAvailable, isOcpAvailable, ocpOptions, PerspectiveType, @@ -65,6 +68,9 @@ interface ExplorerHeaderStateProps { gcpProviders: Providers; gcpProvidersFetchStatus: FetchStatus; gcpProvidersQueryString: string; + ibmProviders: Providers; + ibmProvidersFetchStatus: FetchStatus; + ibmProvidersQueryString: string; ocpProviders: Providers; ocpProvidersFetchStatus: FetchStatus; ocpProvidersQueryString: string; @@ -106,6 +112,8 @@ class ExplorerHeaderBase extends React.Component { azureProvidersFetchStatus, gcpProviders, gcpProvidersFetchStatus, + ibmProviders, + ibmProvidersFetchStatus, ocpProviders, ocpProvidersFetchStatus, perspective, @@ -127,6 +135,9 @@ class ExplorerHeaderBase extends React.Component { if (isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess)) { return PerspectiveType.gcp; } + if (isIbmAvailable(ibmProviders, ibmProvidersFetchStatus, userAccess)) { + return PerspectiveType.ibm; + } return undefined; }; @@ -138,6 +149,8 @@ class ExplorerHeaderBase extends React.Component { azureProvidersFetchStatus, gcpProviders, gcpProvidersFetchStatus, + ibmProviders, + ibmProvidersFetchStatus, ocpProviders, ocpProvidersFetchStatus, userAccess, @@ -147,9 +160,10 @@ class ExplorerHeaderBase extends React.Component { const _isAwsAvailable = isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess); const _isAzureAvailable = isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess); const _isGcpAvailable = isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess); + const _isIbmAvailable = isIbmAvailable(ibmProviders, ibmProvidersFetchStatus, userAccess); const _isOcpAvailable = isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess); - if (!(_isAwsAvailable || _isAzureAvailable || _isGcpAvailable || _isOcpAvailable)) { + if (!(_isAwsAvailable || _isAzureAvailable || _isGcpAvailable || _isIbmAvailable || _isOcpAvailable)) { return null; } @@ -168,6 +182,9 @@ class ExplorerHeaderBase extends React.Component { if (_isGcpAvailable) { options.push(...infrastructureGcpOptions); } + if (_isIbmAvailable) { + options.push(...infrastructureIbmOptions); + } if (_isAzureAvailable) { options.push(...infrastructureAzureOptions); } @@ -211,10 +228,12 @@ class ExplorerHeaderBase extends React.Component { awsProviders, azureProviders, gcpProviders, + ibmProviders, ocpProviders, awsProvidersFetchStatus, azureProvidersFetchStatus, gcpProvidersFetchStatus, + ibmProvidersFetchStatus, groupBy, ocpProvidersFetchStatus, onFilterAdded, @@ -231,6 +250,7 @@ class ExplorerHeaderBase extends React.Component { isAwsAvailable(awsProviders, awsProvidersFetchStatus, userAccess) && isAzureAvailable(azureProviders, azureProvidersFetchStatus, userAccess) && isGcpAvailable(gcpProviders, gcpProvidersFetchStatus, userAccess) && + isIbmAvailable(ibmProviders, ibmProvidersFetchStatus, userAccess) && isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess) ); @@ -318,6 +338,14 @@ const mapStateToProps = createMapStateToProps { : [ { cellTransforms: [nowrap], - orderBy: groupById === 'account' && perspective !== PerspectiveType.gcp ? 'account_alias' : groupById, + orderBy: + (groupById === 'account' && perspective !== PerspectiveType.gcp) || perspective !== PerspectiveType.ibm + ? 'account_alias' + : groupById, title: t('explorer.name_column_title', { groupBy: groupById }), transforms: [sortable], }, diff --git a/src/pages/views/explorer/explorerUtils.ts b/src/pages/views/explorer/explorerUtils.ts index a7dbdd47f..70d1b66e6 100644 --- a/src/pages/views/explorer/explorerUtils.ts +++ b/src/pages/views/explorer/explorerUtils.ts @@ -10,6 +10,7 @@ import { FetchStatus } from 'store/common'; import { ComputedAwsReportItemsParams } from 'utils/computedReport/getComputedAwsReportItems'; import { ComputedAzureReportItemsParams } from 'utils/computedReport/getComputedAzureReportItems'; import { ComputedGcpReportItemsParams } from 'utils/computedReport/getComputedGcpReportItems'; +import { ComputedIbmReportItemsParams } from 'utils/computedReport/getComputedIbmReportItems'; import { ComputedOcpReportItemsParams } from 'utils/computedReport/getComputedOcpReportItems'; // The date range drop down has the options below (if today is Jan 18th…) @@ -30,6 +31,7 @@ export const enum PerspectiveType { azureCloud = 'azure_cloud', // Azure filtered by Ocp gcp = 'gcp', ocp = 'ocp', + ibm = 'ibm', ocpSupplementary = 'ocp_supplementary', ocpUsage = 'ocp_usage', } @@ -86,6 +88,16 @@ export const groupByGcpOptions: { { label: 'region', value: 'region' }, ]; +export const groupByIbmOptions: { + label: string; + value: ComputedIbmReportItemsParams['idKey']; +}[] = [ + { label: 'account', value: 'account' }, + { label: 'project', value: 'project' }, + { label: 'service', value: 'service' }, + { label: 'region', value: 'region' }, +]; + export const groupByOcpOptions: { label: string; value: ComputedOcpReportItemsParams['idKey']; @@ -113,6 +125,9 @@ export const infrastructureAzureCloudOptions = [{ label: 'explorer.perspective.a // Infrastructure GCP options export const infrastructureGcpOptions = [{ label: 'explorer.perspective.gcp', value: 'gcp' }]; +// Infrastructure IBM options +export const infrastructureIbmOptions = [{ label: 'explorer.perspective.ibm', value: 'ibm' }]; + // Infrastructure Ocp options export const infrastructureOcpOptions = [{ label: 'explorer.perspective.ocp_usage', value: 'ocp_usage' }]; @@ -134,6 +149,7 @@ export const getComputedReportItemType = (perspective: string) => { case PerspectiveType.azure: case PerspectiveType.azureCloud: case PerspectiveType.gcp: + case PerspectiveType.ibm: case PerspectiveType.ocp: case PerspectiveType.ocpUsage: default: @@ -190,6 +206,7 @@ export const getGroupByDefault = (perspective: string) => { case PerspectiveType.aws: case PerspectiveType.awsCloud: case PerspectiveType.gcp: + case PerspectiveType.ibm: result = 'account'; break; case PerspectiveType.azure: @@ -223,6 +240,9 @@ export const getGroupByOptions = (perspective: string) => { case PerspectiveType.gcp: result = groupByGcpOptions; break; + case PerspectiveType.ibm: + result = groupByIbmOptions; + break; case PerspectiveType.allCloud: case PerspectiveType.ocp: case PerspectiveType.ocpSupplementary: @@ -247,6 +267,7 @@ export const getOrgReportPathsType = (perspective: string) => { case PerspectiveType.azure: case PerspectiveType.azureCloud: case PerspectiveType.gcp: + case PerspectiveType.ibm: case PerspectiveType.ocp: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: @@ -266,6 +287,7 @@ export const getReportType = (perspective: string) => { case PerspectiveType.azure: case PerspectiveType.azureCloud: case PerspectiveType.gcp: + case PerspectiveType.ibm: case PerspectiveType.ocp: case PerspectiveType.ocpSupplementary: case PerspectiveType.ocpUsage: @@ -297,6 +319,9 @@ export const getReportPathsType = (perspective: string) => { case PerspectiveType.gcp: result = ReportPathsType.gcp; break; + case PerspectiveType.ibm: + result = ReportPathsType.ibm; + break; case PerspectiveType.ocp: result = ReportPathsType.ocp; break; @@ -327,6 +352,9 @@ export const getTagReportPathsType = (perspective: string) => { case PerspectiveType.gcp: return TagPathsType.gcp; break; + case PerspectiveType.ibm: + return TagPathsType.ibm; + break; case PerspectiveType.allCloud: case PerspectiveType.ocp: case PerspectiveType.ocpSupplementary: @@ -411,6 +439,26 @@ export const isGcpAvailable = ( return result; }; +export const isIbmAvailable = ( + ibmProviders: Providers, + ibmProvidersFetchStatus: FetchStatus, + userAccess: UserAccess +) => { + let result = false; + if (ibmProvidersFetchStatus === FetchStatus.complete) { + const data = (userAccess.data as any).find(d => d.type === UserAccessType.ibm); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + result = + isUserAccessAllowed && + ibmProviders !== undefined && + ibmProviders.meta !== undefined && + ibmProviders.meta.count > 0; + } + return result; +}; + export const isOcpAvailable = ( ocpProviders: Providers, ocpProvidersFetchStatus: FetchStatus, diff --git a/src/pages/views/overview/ibmDashboard/ibmDashboard.tsx b/src/pages/views/overview/ibmDashboard/ibmDashboard.tsx new file mode 100644 index 000000000..4fce1fc36 --- /dev/null +++ b/src/pages/views/overview/ibmDashboard/ibmDashboard.tsx @@ -0,0 +1,27 @@ +import { DashboardBase } from 'pages/views/overview/components/dashboardBase'; +import { WithTranslation, withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps } from 'store/common'; +import { ibmDashboardSelectors } from 'store/dashboard/ibmDashboard'; + +import { IbmDashboardWidget } from './ibmDashboardWidget'; + +type IbmDashboardOwnProps = WithTranslation; + +interface IbmDashboardStateProps { + DashboardWidget: typeof IbmDashboardWidget; + widgets: number[]; +} + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const mapStateToProps = createMapStateToProps((state, props) => { + return { + DashboardWidget: IbmDashboardWidget, + selectWidgets: ibmDashboardSelectors.selectWidgets(state), + widgets: ibmDashboardSelectors.selectCurrentWidgets(state), + }; +}); + +const IbmDashboard = withTranslation()(connect(mapStateToProps, {})(DashboardBase)); + +export default IbmDashboard; diff --git a/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.test.tsx b/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.test.tsx new file mode 100644 index 000000000..a50916a6b --- /dev/null +++ b/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.test.tsx @@ -0,0 +1,28 @@ +jest.mock('date-fns'); + +import { format, getDate, getMonth, startOfMonth } from 'date-fns'; +import { IbmDashboardTab } from 'store/dashboard/ibmDashboard'; +import { mockDate } from 'testUtils'; + +import { getIdKeyForTab } from './ibmDashboardWidget'; + +const getDateMock = getDate as jest.Mock; +const formatMock = format as jest.Mock; +const startOfMonthMock = startOfMonth as jest.Mock; +const getMonthMock = getMonth as jest.Mock; + +beforeEach(() => { + mockDate(); + getDateMock.mockReturnValue(1); + formatMock.mockReturnValue('formated date'); + startOfMonthMock.mockReturnValue(1); + getMonthMock.mockReturnValue(1); +}); + +test('id key for dashboard tab is the tab name in singular form', () => { + [IbmDashboardTab.services, IbmDashboardTab.projects, IbmDashboardTab.regions].forEach(value => { + expect(getIdKeyForTab(value)).toEqual(value.slice(0, -1)); + }); + + expect(getIdKeyForTab(IbmDashboardTab.instanceType)).toEqual(IbmDashboardTab.instanceType); +}); diff --git a/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.tsx b/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.tsx new file mode 100644 index 000000000..c91a2277f --- /dev/null +++ b/src/pages/views/overview/ibmDashboard/ibmDashboardWidget.tsx @@ -0,0 +1,76 @@ +import { + DashboardWidgetBase, + DashboardWidgetOwnProps, + DashboardWidgetStateProps, +} from 'pages/views/overview/components/dashboardWidgetBase'; +import { withTranslation } from 'react-i18next'; +import { connect } from 'react-redux'; +import { createMapStateToProps } from 'store/common'; +import { ibmDashboardActions, ibmDashboardSelectors, IbmDashboardTab } from 'store/dashboard/ibmDashboard'; +import { forecastSelectors } from 'store/forecasts'; +import { reportSelectors } from 'store/reports'; +import { ComputedIbmReportItemsParams } from 'utils/computedReport/getComputedIbmReportItems'; + +interface IbmDashboardWidgetDispatchProps { + fetchForecasts: typeof ibmDashboardActions.fetchWidgetForecasts; + fetchReports: typeof ibmDashboardActions.fetchWidgetReports; + updateTab: typeof ibmDashboardActions.changeWidgetTab; +} + +export const getIdKeyForTab = (tab: IbmDashboardTab): ComputedIbmReportItemsParams['idKey'] => { + switch (tab) { + case IbmDashboardTab.services: + return 'service'; + case IbmDashboardTab.projects: + return 'project'; + case IbmDashboardTab.regions: + return 'region'; + case IbmDashboardTab.instanceType: + return 'instance_type'; + } +}; + +const mapStateToProps = createMapStateToProps( + (state, { widgetId }) => { + const widget = ibmDashboardSelectors.selectWidget(state, widgetId); + const queries = ibmDashboardSelectors.selectWidgetQueries(state, widgetId); + return { + ...widget, + getIdKeyForTab, + currentQuery: queries.current, + previousQuery: queries.previous, + tabsQuery: queries.tabs, + currentReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.current), + currentReportFetchStatus: reportSelectors.selectReportFetchStatus( + state, + widget.reportPathsType, + widget.reportType, + queries.current + ), + forecast: forecastSelectors.selectForecast( + state, + widget.forecastPathsType, + widget.forecastType, + queries.forecast + ), + previousReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.previous), + tabsReport: reportSelectors.selectReport(state, widget.reportPathsType, widget.reportType, queries.tabs), + tabsReportFetchStatus: reportSelectors.selectReportFetchStatus( + state, + widget.reportPathsType, + widget.reportType, + queries.tabs + ), + }; + } +); + +const mapDispatchToProps: IbmDashboardWidgetDispatchProps = { + fetchForecasts: ibmDashboardActions.fetchWidgetForecasts, + fetchReports: ibmDashboardActions.fetchWidgetReports, + updateTab: ibmDashboardActions.changeWidgetTab, +}; + +const IbmDashboardWidget = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(DashboardWidgetBase)); + +export { IbmDashboardWidget }; diff --git a/src/pages/views/overview/ibmDashboard/index.ts b/src/pages/views/overview/ibmDashboard/index.ts new file mode 100644 index 000000000..4244b9274 --- /dev/null +++ b/src/pages/views/overview/ibmDashboard/index.ts @@ -0,0 +1,3 @@ +import IbmDashboard from './ibmDashboard'; + +export default IbmDashboard; diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index 19e29692d..96fee3d0c 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -16,6 +16,7 @@ import AwsDashboard from 'pages/views/overview/awsDashboard'; import AzureCloudDashboard from 'pages/views/overview/azureCloudDashboard'; import AzureDashboard from 'pages/views/overview/azureDashboard'; import GcpDashboard from 'pages/views/overview/gcpDashboard'; +import IbmDashboard from 'pages/views/overview/ibmDashboard'; import OcpCloudDashboard from 'pages/views/overview/ocpCloudDashboard'; import OcpDashboard from 'pages/views/overview/ocpDashboard'; import OcpSupplementaryDashboard from 'pages/views/overview/ocpSupplementaryDashboard'; @@ -29,6 +30,7 @@ import { awsProvidersQuery, azureProvidersQuery, gcpProvidersQuery, + ibmProvidersQuery, ocpProvidersQuery, providersSelectors, } from 'store/providers'; @@ -44,6 +46,7 @@ const enum InfrastructurePerspective { azure = 'azure', azureCloud = 'azure_cloud', // Azure filtered by Ocp gcp = 'gcp', + ibm = 'ibm', ocpUsage = 'ocp_usage', } @@ -80,6 +83,9 @@ interface OverviewStateProps { gcpProviders: Providers; gcpProvidersFetchStatus: FetchStatus; gcpProvidersQueryString: string; + ibmProviders: Providers; + ibmProvidersFetchStatus: FetchStatus; + ibmProvidersQueryString: string; ocpProviders: Providers; ocpProvidersFetchStatus: FetchStatus; ocpProvidersQueryString: string; @@ -126,6 +132,9 @@ const infrastructureAzureCloudOptions = [{ label: 'overview.perspective.azure_cl // Infrastructure GCP options const infrastructureGcpOptions = [{ label: 'overview.perspective.gcp', value: 'gcp' }]; +// Infrastructure IBM options +const infrastructureIbmOptions = [{ label: 'overview.perspective.ibm', value: 'ibm' }]; + // Infrastructure Ocp options const infrastructureOcpOptions = [{ label: 'overview.perspective.ocp_usage', value: 'ocp_usage' }]; @@ -143,7 +152,7 @@ class OverviewBase extends React.Component { } public componentDidUpdate(prevProps: OverviewProps) { - const { awsProviders, azureProviders, gcpProviders, ocpProviders, userAccess } = this.props; + const { awsProviders, azureProviders, gcpProviders, ibmProviders, ocpProviders, userAccess } = this.props; // Note: User access and providers are fetched via the Permissions and InactiveSources components used by all routes if ( @@ -151,6 +160,7 @@ class OverviewBase extends React.Component { prevProps.awsProviders !== awsProviders || prevProps.azureProviders !== azureProviders || prevProps.gcpProviders !== gcpProviders || + prevProps.ibmProviders !== ibmProviders || prevProps.ocpProviders !== ocpProviders ) { this.setState({ @@ -166,6 +176,7 @@ class OverviewBase extends React.Component { const isAwsAvailable = this.isAwsAvailable(); const isAzureAvailable = this.isAzureAvailable(); const isGcpAvailable = this.isGcpAvailable(); + const isIbmAvailable = this.isIbmAvailable(); const isOcpAvailable = this.isOcpAvailable(); const isOcpCloudAvailable = this.isOcpCloudAvailable(); @@ -175,7 +186,7 @@ class OverviewBase extends React.Component { tab: OverviewTab.ocp, }); } - if (isAwsAvailable || isAzureAvailable || isGcpAvailable || isOcpCloudAvailable) { + if (isAwsAvailable || isAzureAvailable || isGcpAvailable || isIbmAvailable || isOcpCloudAvailable) { availableTabs.push({ contentRef: React.createRef(), tab: OverviewTab.infrastructure, @@ -189,13 +200,16 @@ class OverviewBase extends React.Component { const isAwsAvailable = this.isAwsAvailable(); const isAzureAvailable = this.isAzureAvailable(); const isGcpAvailable = this.isGcpAvailable(); + const isIbmAvailable = this.isIbmAvailable(); const isOcpAvailable = this.isOcpAvailable(); const isOcpCloudAvailable = this.isOcpCloudAvailable(); const showOcpOnly = - isOcpAvailable && !(isAwsAvailable || isAzureAvailable || isGcpAvailable || isOcpCloudAvailable); + isOcpAvailable && + !(isAwsAvailable || isAzureAvailable || isGcpAvailable || isIbmAvailable || isOcpCloudAvailable); const showInfrastructureOnly = - !isOcpAvailable && (isAwsAvailable || isAzureAvailable || isGcpAvailable || isOcpCloudAvailable); + !isOcpAvailable && + (isAwsAvailable || isAzureAvailable || isGcpAvailable || isIbmAvailable || isOcpCloudAvailable); if (showOcpOnly) { return OverviewTab.ocp; @@ -210,6 +224,7 @@ class OverviewBase extends React.Component { const isAwsAvailable = this.isAwsAvailable(); const isAzureAvailable = this.isAzureAvailable(); const isGcpAvailable = this.isGcpAvailable(); + const isIbmAvailable = this.isIbmAvailable(); const isOcpAvailable = this.isOcpAvailable(); if (isOcpAvailable) { @@ -224,6 +239,9 @@ class OverviewBase extends React.Component { if (isGcpAvailable) { return InfrastructurePerspective.gcp; } + if (isIbmAvailable) { + return InfrastructurePerspective.ibm; + } return undefined; }; @@ -242,6 +260,7 @@ class OverviewBase extends React.Component { const isAwsAvailable = this.isAwsAvailable(); const isAzureAvailable = this.isAzureAvailable(); const isGcpAvailable = this.isGcpAvailable(); + const isIbmAvailable = this.isIbmAvailable(); const isOcpAvailable = this.isOcpAvailable(); if (!(isAwsAvailable || isAzureAvailable || isGcpAvailable || isOcpAvailable)) { @@ -263,6 +282,9 @@ class OverviewBase extends React.Component { if (isGcpAvailable) { options.push(...infrastructureGcpOptions); } + if (isIbmAvailable) { + options.push(...infrastructureIbmOptions); + } if (isAzureAvailable) { options.push(...infrastructureAzureOptions); } @@ -331,7 +353,7 @@ class OverviewBase extends React.Component { }; private getTabItem = (tab: OverviewTab, index: number) => { - const { awsProviders, azureProviders, gcpProviders, ocpProviders } = this.props; + const { awsProviders, azureProviders, gcpProviders, ibmProviders, ocpProviders } = this.props; const { activeTabKey, currentInfrastructurePerspective, currentOcpPerspective } = this.state; const emptyTab = <>; // Lazily load tabs const noData = ; @@ -349,6 +371,8 @@ class OverviewBase extends React.Component { return this.hasCurrentMonthData(awsProviders) ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.gcp) { return this.hasCurrentMonthData(gcpProviders) ? : noData; + } else if (currentInfrastructurePerspective === InfrastructurePerspective.ibm) { + return this.hasCurrentMonthData(ibmProviders) ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.azure) { return this.hasCurrentMonthData(azureProviders) ? : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.azureCloud) { @@ -455,6 +479,21 @@ class OverviewBase extends React.Component { ); }; + private isIbmAvailable = () => { + const { ibmProviders, userAccess } = this.props; + + const data = (userAccess.data as any).find(d => d.type === UserAccessType.ibm); + const isUserAccessAllowed = data && data.access; + + // providers API returns empty data array for no sources + return ( + isUserAccessAllowed && + ibmProviders !== undefined && + ibmProviders.meta !== undefined && + ibmProviders.meta.count > 0 + ); + }; + private isOcpAvailable = () => { const { ocpProviders, userAccess } = this.props; @@ -479,6 +518,7 @@ class OverviewBase extends React.Component { awsProvidersFetchStatus, azureProvidersFetchStatus, gcpProvidersFetchStatus, + ibmProvidersFetchStatus, ocpProvidersFetchStatus, userAccessFetchStatus, t, @@ -488,6 +528,7 @@ class OverviewBase extends React.Component { awsProvidersFetchStatus === FetchStatus.inProgress || azureProvidersFetchStatus === FetchStatus.inProgress || gcpProvidersFetchStatus === FetchStatus.inProgress || + ibmProvidersFetchStatus === FetchStatus.inProgress || ocpProvidersFetchStatus === FetchStatus.inProgress || userAccessFetchStatus === FetchStatus.inProgress; @@ -495,8 +536,9 @@ class OverviewBase extends React.Component { const noAwsProviders = !this.isAwsAvailable() && awsProvidersFetchStatus === FetchStatus.complete; const noAzureProviders = !this.isAzureAvailable() && azureProvidersFetchStatus === FetchStatus.complete; const noGcpProviders = !this.isGcpAvailable() && gcpProvidersFetchStatus === FetchStatus.complete; + const noIbmProviders = !this.isIbmAvailable() && ibmProvidersFetchStatus === FetchStatus.complete; const noOcpProviders = !this.isOcpAvailable() && ocpProvidersFetchStatus === FetchStatus.complete; - const noProviders = noAwsProviders && noAzureProviders && noGcpProviders && noOcpProviders; + const noProviders = noAwsProviders && noAzureProviders && noGcpProviders && noIbmProviders && noOcpProviders; const title = t('navigation.overview'); @@ -528,6 +570,9 @@ class OverviewBase extends React.Component {

{t('overview.gcp')}

{t('overview.gcp_desc')}


+

{t('overview.ibm')}

+

{t('overview.ibm_desc')}

+

{t('overview.aws')}

{t('overview.aws_desc')}


@@ -580,6 +625,14 @@ const mapStateToProps = createMapStateToProps import(/* webpackChunkName: "azure" */ const Explorer = asyncComponent(() => import(/* webpackChunkName: "azure" */ 'pages/views/explorer/explorer')); const GcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/views/details/gcpBreakdown')); const GcpDetails = asyncComponent(() => import(/* webpackChunkName: "gcp" */ 'pages/views/details/gcpDetails')); +const IbmBreakdown = asyncComponent(() => import(/* webpackChunkName: "ibm" */ 'pages/views/details/ibmBreakdown')); +const IbmDetails = asyncComponent(() => import(/* webpackChunkName: "ibm" */ 'pages/views/details/ibmDetails')); const OcpDetails = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/views/details/ocpDetails')); const OcpBreakdown = asyncComponent(() => import(/* webpackChunkName: "ocp" */ 'pages/views/details/ocpBreakdown')); const Overview = asyncComponent(() => import(/* webpackChunkName: "overview" */ 'pages/views/overview')); @@ -32,6 +34,8 @@ const paths = { explorer: '/explorer', gcpDetails: '/infrastructure/gcp', gcpDetailsBreakdown: '/infrastructure/gcp/breakdown', + ibmDetails: '/infrastructure/ibm', + ibmDetailsBreakdown: '/infrastructure/ibm/breakdown', ocpDetails: '/ocp', ocpDetailsBreakdown: '/ocp/breakdown', overview: '/', @@ -98,6 +102,18 @@ const routes = [ component: permissionsComponent(GcpBreakdown), exact: true, }, + { + path: paths.ibmDetails, + labelKey: 'navigation.ibm_details', + component: permissionsComponent(IbmDetails), + exact: true, + }, + { + path: paths.ibmDetailsBreakdown, + labelKey: 'navigation.ibm_details_breakdown', + component: permissionsComponent(IbmBreakdown), + exact: true, + }, { path: paths.ocpDetails, labelKey: 'navigation.ocp_details', diff --git a/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverview.test.ts b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverview.test.ts new file mode 100644 index 000000000..63ba2c099 --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverview.test.ts @@ -0,0 +1,38 @@ +jest.mock('store/reports/reportActions'); + +import { createMockStoreCreator } from 'store/mockStore'; +import { reportActions } from 'store/reports'; + +import { ibmCostOverviewStateKey } from './ibmCostOverviewCommon'; +import { ibmCostOverviewReducer } from './ibmCostOverviewReducer'; +import * as selectors from './ibmCostOverviewSelectors'; +import { + accountSummaryWidget, + costWidget, + projectSummaryWidget, + regionSummaryWidget, + serviceSummaryWidget, +} from './ibmCostOverviewWidgets'; + +const createIbmCostOverviewStore = createMockStoreCreator({ + [ibmCostOverviewStateKey]: ibmCostOverviewReducer, +}); + +const fetchReportMock = reportActions.fetchReport as jest.Mock; + +beforeEach(() => { + fetchReportMock.mockReturnValue({ type: '@@test' }); +}); + +test('default state', () => { + const store = createIbmCostOverviewStore(); + const state = store.getState(); + expect(selectors.selectCurrentWidgets(state)).toEqual([ + costWidget.id, + accountSummaryWidget.id, + projectSummaryWidget.id, + serviceSummaryWidget.id, + regionSummaryWidget.id, + ]); + expect(selectors.selectWidget(state, costWidget.id)).toEqual(costWidget); +}); diff --git a/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewCommon.ts b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewCommon.ts new file mode 100644 index 000000000..6a4fa4587 --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewCommon.ts @@ -0,0 +1,6 @@ +import { CostOverviewWidget } from 'store/breakdown/costOverview/common/costOverviewCommon'; + +export const ibmCostOverviewStateKey = 'ibmCostOverview'; + +// tslint:disable-next-line:no-empty-interface +export interface IbmCostOverviewWidget extends CostOverviewWidget {} diff --git a/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewReducer.ts b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewReducer.ts new file mode 100644 index 000000000..ea82c5801 --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewReducer.ts @@ -0,0 +1,34 @@ +import { IbmCostOverviewWidget } from './ibmCostOverviewCommon'; +import { + accountSummaryWidget, + costWidget, + projectSummaryWidget, + regionSummaryWidget, + serviceSummaryWidget, +} from './ibmCostOverviewWidgets'; + +export type IbmCostOverviewState = Readonly<{ + widgets: Record; + currentWidgets: number[]; +}>; + +export const defaultState: IbmCostOverviewState = { + currentWidgets: [ + costWidget.id, + accountSummaryWidget.id, + projectSummaryWidget.id, + serviceSummaryWidget.id, + regionSummaryWidget.id, + ], + widgets: { + [costWidget.id]: costWidget, + [accountSummaryWidget.id]: accountSummaryWidget, + [projectSummaryWidget.id]: projectSummaryWidget, + [serviceSummaryWidget.id]: serviceSummaryWidget, + [regionSummaryWidget.id]: regionSummaryWidget, + }, +}; + +export function ibmCostOverviewReducer(state = defaultState): IbmCostOverviewState { + return state; +} diff --git a/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewSelectors.ts b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewSelectors.ts new file mode 100644 index 000000000..dc57e3ace --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewSelectors.ts @@ -0,0 +1,11 @@ +import { RootState } from 'store/rootReducer'; + +import { ibmCostOverviewStateKey } from './ibmCostOverviewCommon'; + +export const selectIbmCostOverviewState = (state: RootState) => state[ibmCostOverviewStateKey]; + +export const selectWidgets = (state: RootState) => selectIbmCostOverviewState(state).widgets; + +export const selectWidget = (state: RootState, id: number) => selectWidgets(state)[id]; + +export const selectCurrentWidgets = (state: RootState) => selectIbmCostOverviewState(state).currentWidgets; diff --git a/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewWidgets.ts b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewWidgets.ts new file mode 100644 index 000000000..43c4827df --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/ibmCostOverviewWidgets.ts @@ -0,0 +1,59 @@ +import { tagPrefix } from 'api/queries/query'; +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; + +import { IbmCostOverviewWidget } from './ibmCostOverviewCommon'; + +let currrentId = 0; +const getId = () => currrentId++; + +export const costWidget: IbmCostOverviewWidget = { + id: getId(), + reportPathsType: ReportPathsType.ocp, + reportType: ReportType.cost, + type: CostOverviewWidgetType.cost, +}; + +export const accountSummaryWidget: IbmCostOverviewWidget = { + id: getId(), + reportSummary: { + reportGroupBy: 'account', + showWidgetOnGroupBy: ['project', 'region', 'service', tagPrefix], + }, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + type: CostOverviewWidgetType.reportSummary, +}; + +export const projectSummaryWidget: IbmCostOverviewWidget = { + id: getId(), + reportSummary: { + reportGroupBy: 'project', + showWidgetOnGroupBy: ['account', 'region', 'service', tagPrefix], + }, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + type: CostOverviewWidgetType.reportSummary, +}; + +export const regionSummaryWidget: IbmCostOverviewWidget = { + id: getId(), + reportSummary: { + reportGroupBy: 'region', + showWidgetOnGroupBy: ['account', 'project', 'service', tagPrefix], + }, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + type: CostOverviewWidgetType.reportSummary, +}; + +export const serviceSummaryWidget: IbmCostOverviewWidget = { + id: getId(), + reportSummary: { + reportGroupBy: 'service', + showWidgetOnGroupBy: ['project', 'region', 'account', tagPrefix], + }, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + type: CostOverviewWidgetType.reportSummary, +}; diff --git a/src/store/breakdown/costOverview/ibmCostOverview/index.ts b/src/store/breakdown/costOverview/ibmCostOverview/index.ts new file mode 100644 index 000000000..8f073e85a --- /dev/null +++ b/src/store/breakdown/costOverview/ibmCostOverview/index.ts @@ -0,0 +1,5 @@ +import { ibmCostOverviewStateKey, IbmCostOverviewWidget } from './ibmCostOverviewCommon'; +import { ibmCostOverviewReducer } from './ibmCostOverviewReducer'; +import * as ibmCostOverviewSelectors from './ibmCostOverviewSelectors'; + +export { ibmCostOverviewStateKey, ibmCostOverviewReducer, ibmCostOverviewSelectors, IbmCostOverviewWidget }; diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalData.test.ts b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalData.test.ts new file mode 100644 index 000000000..45be42f75 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalData.test.ts @@ -0,0 +1,26 @@ +jest.mock('store/reports/reportActions'); + +import { createMockStoreCreator } from 'store/mockStore'; +import { reportActions } from 'store/reports'; + +import { ibmHistoricalDataStateKey } from './ibmHistoricalDataCommon'; +import { ibmHistoricalDataReducer } from './ibmHistoricalDataReducer'; +import * as selectors from './ibmHistoricalDataSelectors'; +import { computeUsageWidget, costWidget, storageUsageWidget } from './ibmHistoricalDataWidgets'; + +const createIbmHistoricalDataStore = createMockStoreCreator({ + [ibmHistoricalDataStateKey]: ibmHistoricalDataReducer, +}); + +const fetchReportMock = reportActions.fetchReport as jest.Mock; + +beforeEach(() => { + fetchReportMock.mockReturnValue({ type: '@@test' }); +}); + +test('default state', () => { + const store = createIbmHistoricalDataStore(); + const state = store.getState(); + expect(selectors.selectCurrentWidgets(state)).toEqual([costWidget.id, computeUsageWidget.id, storageUsageWidget.id]); + expect(selectors.selectWidget(state, costWidget.id)).toEqual(costWidget); +}); diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataCommon.ts b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataCommon.ts new file mode 100644 index 000000000..0ca42c6f6 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataCommon.ts @@ -0,0 +1,6 @@ +import { HistoricalDataWidget } from 'store/breakdown/historicalData/common/historicalDataCommon'; + +export const ibmHistoricalDataStateKey = 'ibmHistoricalData'; + +// tslint:disable-next-line:no-empty-interface +export interface IbmHistoricalDataWidget extends HistoricalDataWidget {} diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataReducer.ts b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataReducer.ts new file mode 100644 index 000000000..557aa0912 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataReducer.ts @@ -0,0 +1,20 @@ +import { IbmHistoricalDataWidget } from './ibmHistoricalDataCommon'; +import { computeUsageWidget, costWidget, storageUsageWidget } from './ibmHistoricalDataWidgets'; + +export type IbmHistoricalDataState = Readonly<{ + widgets: Record; + currentWidgets: number[]; +}>; + +export const defaultState: IbmHistoricalDataState = { + currentWidgets: [costWidget.id, computeUsageWidget.id, storageUsageWidget.id], + widgets: { + [costWidget.id]: costWidget, + [computeUsageWidget.id]: computeUsageWidget, + [storageUsageWidget.id]: storageUsageWidget, + }, +}; + +export function ibmHistoricalDataReducer(state = defaultState): IbmHistoricalDataState { + return state; +} diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataSelectors.ts b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataSelectors.ts new file mode 100644 index 000000000..7603e6f63 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataSelectors.ts @@ -0,0 +1,11 @@ +import { RootState } from 'store/rootReducer'; + +import { ibmHistoricalDataStateKey } from './ibmHistoricalDataCommon'; + +export const selectIbmHistoricalDataState = (state: RootState) => state[ibmHistoricalDataStateKey]; + +export const selectWidgets = (state: RootState) => selectIbmHistoricalDataState(state).widgets; + +export const selectWidget = (state: RootState, id: number) => selectWidgets(state)[id]; + +export const selectCurrentWidgets = (state: RootState) => selectIbmHistoricalDataState(state).currentWidgets; diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataWidgets.ts b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataWidgets.ts new file mode 100644 index 000000000..1ee6c6cb7 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/ibmHistoricalDataWidgets.ts @@ -0,0 +1,28 @@ +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { HistoricalDataWidgetType } from 'store/breakdown/historicalData/common/historicalDataCommon'; + +import { IbmHistoricalDataWidget } from './ibmHistoricalDataCommon'; + +let currrentId = 0; +const getId = () => currrentId++; + +export const costWidget: IbmHistoricalDataWidget = { + id: getId(), + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + type: HistoricalDataWidgetType.trend, +}; + +export const computeUsageWidget: IbmHistoricalDataWidget = { + id: getId(), + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.instanceType, + type: HistoricalDataWidgetType.trend, +}; + +export const storageUsageWidget: IbmHistoricalDataWidget = { + id: getId(), + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.storage, + type: HistoricalDataWidgetType.trend, +}; diff --git a/src/store/breakdown/historicalData/ibmHistoricalData/index.ts b/src/store/breakdown/historicalData/ibmHistoricalData/index.ts new file mode 100644 index 000000000..15cf7ef85 --- /dev/null +++ b/src/store/breakdown/historicalData/ibmHistoricalData/index.ts @@ -0,0 +1,5 @@ +import { ibmHistoricalDataStateKey, IbmHistoricalDataWidget } from './ibmHistoricalDataCommon'; +import { ibmHistoricalDataReducer } from './ibmHistoricalDataReducer'; +import * as ibmHistoricalDataSelectors from './ibmHistoricalDataSelectors'; + +export { ibmHistoricalDataStateKey, ibmHistoricalDataReducer, ibmHistoricalDataSelectors, IbmHistoricalDataWidget }; diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts b/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts index a6afd01bf..1ebf075ba 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardReducer.ts @@ -12,7 +12,6 @@ export type GcpDashboardState = Readonly<{ }>; export const defaultState: GcpDashboardState = { - // currentWidgets: [costSummaryWidget.id, computeWidget.id, storageWidget.id, networkWidget.id, databaseWidget.id], currentWidgets: [costSummaryWidget.id, computeWidget.id, storageWidget.id, networkWidget.id, databaseWidget.id], widgets: { [costSummaryWidget.id]: costSummaryWidget, diff --git a/src/store/dashboard/ibmDashboard/__snapshots__/ibmDashboard.test.ts.snap b/src/store/dashboard/ibmDashboard/__snapshots__/ibmDashboard.test.ts.snap new file mode 100644 index 000000000..0fe0b05a0 --- /dev/null +++ b/src/store/dashboard/ibmDashboard/__snapshots__/ibmDashboard.test.ts.snap @@ -0,0 +1,31 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`fetch widget reports 1`] = ` +Array [ + Array [ + "gcp", + "cost", + "filter[time_scope_units]=month&filter[time_scope_value]=-1&filter[resolution]=daily", + ], + Array [ + "gcp", + "cost", + "filter[time_scope_units]=month&filter[time_scope_value]=-2&filter[resolution]=daily", + ], + Array [ + "gcp", + "cost", + "filter[time_scope_units]=month&filter[time_scope_value]=-1&filter[resolution]=monthly&filter[limit]=3&group_by[service]=*", + ], +] +`; + +exports[`getGroupByForTab accounts tab 1`] = `Object {}`; + +exports[`getGroupByForTab instance types tab 1`] = `Object {}`; + +exports[`getGroupByForTab regions tab 1`] = `Object {}`; + +exports[`getGroupByForTab services tab 1`] = `Object {}`; + +exports[`getGroupByForTab unknown tab 1`] = `Object {}`; diff --git a/src/store/dashboard/ibmDashboard/ibmDashboard.test.ts b/src/store/dashboard/ibmDashboard/ibmDashboard.test.ts new file mode 100644 index 000000000..f2965f4c2 --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboard.test.ts @@ -0,0 +1,101 @@ +jest.mock('store/reports/reportActions'); + +import { ReportType } from 'api/reports/report'; +import { ChartType } from 'components/charts/common/chartDatumUtils'; +import { createMockStoreCreator } from 'store/mockStore'; +import { reportActions } from 'store/reports'; + +import * as actions from './ibmDashboardActions'; +import { getGroupByForTab, getQueryForWidgetTabs, ibmDashboardStateKey, IbmDashboardTab } from './ibmDashboardCommon'; +import { ibmDashboardReducer } from './ibmDashboardReducer'; +import * as selectors from './ibmDashboardSelectors'; +import { computeWidget, costSummaryWidget, databaseWidget, networkWidget, storageWidget } from './ibmDashboardWidgets'; + +const createIbmDashboardStore = createMockStoreCreator({ + [ibmDashboardStateKey]: ibmDashboardReducer, +}); + +const fetchReportMock = reportActions.fetchReport as jest.Mock; + +beforeEach(() => { + fetchReportMock.mockReturnValue({ type: '@@test' }); +}); + +test('default state', () => { + const store = createIbmDashboardStore(); + const state = store.getState(); + expect(selectors.selectCurrentWidgets(state)).toEqual([ + costSummaryWidget.id, + computeWidget.id, + storageWidget.id, + networkWidget.id, + databaseWidget.id, + ]); + expect(selectors.selectWidget(state, costSummaryWidget.id)).toEqual(costSummaryWidget); +}); + +test('fetch widget reports', () => { + const store = createIbmDashboardStore(); + store.dispatch(actions.fetchWidgetReports(costSummaryWidget.id)); + expect(fetchReportMock.mock.calls).toMatchSnapshot(); +}); + +test('changeWidgetTab', () => { + const store = createIbmDashboardStore(); + store.dispatch(actions.changeWidgetTab(costSummaryWidget.id, IbmDashboardTab.regions)); + const widget = selectors.selectWidget(store.getState(), costSummaryWidget.id); + expect(widget.currentTab).toBe(IbmDashboardTab.regions); + expect(fetchReportMock).toHaveBeenCalledTimes(3); +}); + +describe('getGroupByForTab', () => { + test('services tab', () => { + expect(getGroupByForTab(IbmDashboardTab.services)).toMatchSnapshot(); + }); + + test('instance types tab', () => { + expect(getGroupByForTab(IbmDashboardTab.instanceType)).toMatchSnapshot(); + }); + + test('accounts tab', () => { + expect(getGroupByForTab(IbmDashboardTab.accounts)).toMatchSnapshot(); + }); + + test('regions tab', () => { + expect(getGroupByForTab(IbmDashboardTab.regions)).toMatchSnapshot(); + }); + + test('unknown tab', () => { + expect(getGroupByForTab('unknown' as any)).toMatchSnapshot(); + }); +}); + +test('getQueryForWidget', () => { + const widget = { + id: 1, + titleKey: '', + reportType: ReportType.cost, + availableTabs: [IbmDashboardTab.accounts], + currentTab: IbmDashboardTab.accounts, + details: { formatOptions: {} }, + trend: { + titleKey: '', + type: ChartType.daily, + formatOptions: {}, + }, + topItems: { + formatOptions: {}, + }, + }; + + [ + [ + undefined, + 'filter[time_scope_units]=month&filter[time_scope_value]=-1&filter[resolution]=daily&group_by[account]=*', + ], + [{}, 'group_by[account]=*'], + [{ limit: 3 }, 'filter[limit]=3&group_by[account]=*'], + ].forEach(value => { + expect(getQueryForWidgetTabs(widget, value[0])).toEqual(value[1]); + }); +}); diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardActions.ts b/src/store/dashboard/ibmDashboard/ibmDashboardActions.ts new file mode 100644 index 000000000..e131b8b7d --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboardActions.ts @@ -0,0 +1,44 @@ +import { ThunkAction } from 'store/common'; +import { forecastActions } from 'store/forecasts'; +import { reportActions } from 'store/reports'; +import { createAction } from 'typesafe-actions'; + +import { IbmDashboardTab } from './ibmDashboardCommon'; +import { selectWidget, selectWidgetQueries } from './ibmDashboardSelectors'; + +export const fetchWidgetForecasts = (id: number): ThunkAction => { + return (dispatch, getState) => { + const state = getState(); + const widget = selectWidget(state, id); + + if (widget.forecastPathsType && widget.forecastType) { + const { forecast } = selectWidgetQueries(state, id); + dispatch(forecastActions.fetchForecast(widget.forecastPathsType, widget.forecastType, forecast)); + } + }; +}; + +export const fetchWidgetReports = (id: number): ThunkAction => { + return (dispatch, getState) => { + const state = getState(); + const widget = selectWidget(state, id); + const { previous, current, tabs } = selectWidgetQueries(state, id); + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, current)); + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, previous)); + if (widget.availableTabs) { + dispatch(reportActions.fetchReport(widget.reportPathsType, widget.reportType, tabs)); + } + }; +}; + +export const setWidgetTab = createAction('ibmDashboard/widget/tab')<{ + id: number; + tab: IbmDashboardTab; +}>(); + +export const changeWidgetTab = (id: number, tab: IbmDashboardTab): ThunkAction => { + return dispatch => { + dispatch(setWidgetTab({ id, tab })); + dispatch(fetchWidgetReports(id)); + }; +}; diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardCommon.ts b/src/store/dashboard/ibmDashboard/ibmDashboardCommon.ts new file mode 100644 index 000000000..c49a06444 --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboardCommon.ts @@ -0,0 +1,69 @@ +import { getQuery, IbmFilters, IbmQuery } from 'api/queries/ibmQuery'; +import { DashboardWidget } from 'store/dashboard/common/dashboardCommon'; + +export const ibmDashboardStateKey = 'ibmDashboard'; +export const ibmDashboardDefaultFilters: IbmFilters = { + time_scope_units: 'month', + time_scope_value: -1, + resolution: 'daily', +}; +export const ibmDashboardTabFilters: IbmFilters = { + ...ibmDashboardDefaultFilters, + limit: 3, +}; + +// eslint-disable-next-line no-shadow +export const enum IbmDashboardTab { + services = 'services', + accounts = 'accounts', + projects = 'projects', + regions = 'regions', + instanceType = 'instance_type', +} + +export interface IbmDashboardWidget extends DashboardWidget {} + +export function getGroupByForTab(widget: IbmDashboardWidget): IbmQuery['group_by'] { + switch (widget.currentTab) { + case IbmDashboardTab.services: + // Use group_by for service tab and filter for others -- https://github.com/project-koku/koku-ui/issues/846 + return { + service: widget.tabsFilter && widget.tabsFilter.service ? widget.tabsFilter.service : '*', + }; + case IbmDashboardTab.accounts: + return { account: '*' }; + case IbmDashboardTab.projects: + return { project: '*' }; + case IbmDashboardTab.regions: + return { region: '*' }; + case IbmDashboardTab.instanceType: + return { instance_type: '*' }; + default: + return {}; + } +} + +export function getQueryForWidget(filter: IbmFilters = ibmDashboardDefaultFilters, props?) { + const query: IbmQuery = { + filter, + ...(props ? props : {}), + }; + return getQuery(query); +} + +export function getQueryForWidgetTabs(widget: IbmDashboardWidget, filter: IbmFilters = ibmDashboardDefaultFilters) { + const group_by = getGroupByForTab(widget); + const newFilter = { + ...JSON.parse(JSON.stringify(filter)), + }; + + // Use group_by for service tab and filter for others -- https://github.com/project-koku/koku-ui/issues/846 + if (widget.currentTab === IbmDashboardTab.services && widget.tabsFilter && widget.tabsFilter.service) { + newFilter.service = undefined; + } + const query: IbmQuery = { + filter: newFilter, + group_by, + }; + return getQuery(query); +} diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardReducer.ts b/src/store/dashboard/ibmDashboard/ibmDashboardReducer.ts new file mode 100644 index 000000000..3d5758fc2 --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboardReducer.ts @@ -0,0 +1,41 @@ +import { ActionType, getType } from 'typesafe-actions'; + +import { setWidgetTab } from './ibmDashboardActions'; +import { IbmDashboardWidget } from './ibmDashboardCommon'; +import { computeWidget, costSummaryWidget, databaseWidget, networkWidget, storageWidget } from './ibmDashboardWidgets'; + +export type IbmDashboardAction = ActionType; + +export type IbmDashboardState = Readonly<{ + widgets: Record; + currentWidgets: number[]; +}>; + +export const defaultState: IbmDashboardState = { + currentWidgets: [costSummaryWidget.id, computeWidget.id, storageWidget.id, networkWidget.id, databaseWidget.id], + widgets: { + [costSummaryWidget.id]: costSummaryWidget, + [computeWidget.id]: computeWidget, + [storageWidget.id]: storageWidget, + [networkWidget.id]: networkWidget, + [databaseWidget.id]: databaseWidget, + }, +}; + +export function ibmDashboardReducer(state = defaultState, action: IbmDashboardAction): IbmDashboardState { + switch (action.type) { + case getType(setWidgetTab): + return { + ...state, + widgets: { + ...state.widgets, + [action.payload.id]: { + ...state.widgets[action.payload.id], + currentTab: action.payload.tab, + }, + }, + }; + default: + return state; + } +} diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardSelectors.ts b/src/store/dashboard/ibmDashboard/ibmDashboardSelectors.ts new file mode 100644 index 000000000..22504b5ac --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboardSelectors.ts @@ -0,0 +1,43 @@ +import { RootState } from 'store/rootReducer'; + +import { + getQueryForWidget, + getQueryForWidgetTabs, + ibmDashboardDefaultFilters, + ibmDashboardStateKey, + ibmDashboardTabFilters, +} from './ibmDashboardCommon'; + +export const selectIbmDashboardState = (state: RootState) => state[ibmDashboardStateKey]; + +export const selectWidgets = (state: RootState) => selectIbmDashboardState(state).widgets; + +export const selectWidget = (state: RootState, id: number) => selectWidgets(state)[id]; + +export const selectCurrentWidgets = (state: RootState) => selectIbmDashboardState(state).currentWidgets; + +export const selectWidgetQueries = (state: RootState, id: number) => { + const widget = selectWidget(state, id); + + const filter = { + ...ibmDashboardDefaultFilters, + ...(widget.filter ? widget.filter : {}), + }; + const tabsFilter = { + ...ibmDashboardTabFilters, + ...(widget.tabsFilter ? widget.tabsFilter : {}), + }; + + return { + previous: getQueryForWidget({ + ...filter, + time_scope_value: -2, + }), + current: getQueryForWidget(filter), + forecast: getQueryForWidget({}, { limit: 31 }), + tabs: getQueryForWidgetTabs(widget, { + ...tabsFilter, + resolution: 'monthly', + }), + }; +}; diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts b/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts new file mode 100644 index 000000000..f129495fc --- /dev/null +++ b/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts @@ -0,0 +1,213 @@ +import { ForecastPathsType, ForecastType } from 'api/forecasts/forecast'; +import { ReportPathsType, ReportType } from 'api/reports/report'; +import { + ChartType, + ComputedForecastItemType, + ComputedReportItemType, + ComputedReportItemValueType, +} from 'components/charts/common/chartDatumUtils'; +import { paths } from 'routes'; +import { DashboardChartType } from 'store/dashboard/common/dashboardCommon'; + +import { IbmDashboardTab, IbmDashboardWidget } from './ibmDashboardCommon'; + +let currrentId = 0; +const getId = () => currrentId++; + +export const computeWidget: IbmDashboardWidget = { + id: getId(), + titleKey: 'ibm_dashboard.compute_title', + forecastPathsType: ForecastPathsType.ibm, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.instanceType, + details: { + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showUnits: true, + showUsageFirst: true, + showUsageLegendLabel: true, + usageFormatOptions: { + fractionDigits: 0, + }, + usageKey: 'ibm_dashboard.usage_label', + }, + filter: { + service: 'Compute Engine', + }, + tabsFilter: { + service: 'Compute Engine', + }, + trend: { + computedReportItem: ComputedReportItemType.usage, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: { + fractionDigits: 2, + }, + titleKey: 'dashboard.daily_usage_comparison', + type: ChartType.daily, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // IbmDashboardTab.instanceType, + // IbmDashboardTab.accounts, + // IbmDashboardTab.regions, + // ], + chartType: DashboardChartType.trend, + currentTab: IbmDashboardTab.instanceType, +}; + +export const costSummaryWidget: IbmDashboardWidget = { + id: getId(), + titleKey: 'ibm_dashboard.cost_title', + forecastPathsType: ForecastPathsType.ibm, + forecastType: ForecastType.cost, + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.cost, + details: { + adjustContainerHeight: true, + appNavId: 'ibm', + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showHorizontal: true, + viewAllPath: paths.ibmDetails, + }, + tabsFilter: { + limit: 3, + }, + trend: { + computedForecastItem: ComputedForecastItemType.cost, + computedReportItem: ComputedReportItemType.cost, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: {}, + dailyTitleKey: 'ibm_dashboard.daily_cost_trend_title', + titleKey: 'ibm_dashboard.cost_trend_title', + type: ChartType.rolling, + }, + topItems: { + formatOptions: {}, + }, + availableTabs: [IbmDashboardTab.services, IbmDashboardTab.projects, IbmDashboardTab.regions], + chartType: DashboardChartType.dailyTrend, + currentTab: IbmDashboardTab.services, +}; + +export const databaseWidget: IbmDashboardWidget = { + id: getId(), + titleKey: 'ibm_dashboard.database_title', + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.database, + details: { + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showUnits: true, + }, + filter: { + service: 'Bigtable,Datastore,Database Migrations,Firestore,MemoryStore,Spanner,SQL', + }, + tabsFilter: { + service: 'Bigtable,Datastore,Database Migrations,Firestore,MemoryStore,Spanner,SQL', + }, + trend: { + computedReportItem: ComputedReportItemType.cost, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: {}, + titleKey: 'dashboard.cumulative_cost_comparison', + type: ChartType.rolling, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // IbmDashboardTab.services, + // IbmDashboardTab.accounts, + // IbmDashboardTab.regions, + // ], + chartType: DashboardChartType.trend, + currentTab: IbmDashboardTab.services, +}; + +export const networkWidget: IbmDashboardWidget = { + id: getId(), + titleKey: 'ibm_dashboard.network_title', + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.network, + details: { + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showUnits: true, + }, + filter: { + service: + 'VPC network,Network services,Hybrid Connectivity,Network Service Tiers,Network Security,Network Intelligence', + }, + tabsFilter: { + service: + 'VPC network,Network services,Hybrid Connectivity,Network Service Tiers,Network Security,Network Intelligence', + }, + trend: { + computedReportItem: ComputedReportItemType.cost, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: {}, + titleKey: 'dashboard.cumulative_cost_comparison', + type: ChartType.rolling, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // IbmDashboardTab.services, + // IbmDashboardTab.accounts, + // IbmDashboardTab.regions, + // ], + chartType: DashboardChartType.trend, + currentTab: IbmDashboardTab.services, +}; + +export const storageWidget: IbmDashboardWidget = { + id: getId(), + titleKey: 'ibm_dashboard.storage_title', + reportPathsType: ReportPathsType.ibm, + reportType: ReportType.storage, + details: { + costKey: 'cost', + formatOptions: { + fractionDigits: 2, + }, + showUnits: true, + showUsageFirst: true, + showUsageLegendLabel: true, + usageFormatOptions: { + fractionDigits: 0, + }, + usageKey: 'ibm_dashboard.usage_label', + }, + trend: { + computedReportItem: ComputedReportItemType.usage, + computedReportItemValue: ComputedReportItemValueType.total, + formatOptions: { + fractionDigits: 2, + }, + titleKey: 'dashboard.daily_usage_comparison', + type: ChartType.daily, + }, + topItems: { + formatOptions: {}, + }, + // availableTabs: [ + // IbmDashboardTab.services, + // IbmDashboardTab.accounts, + // IbmDashboardTab.regions, + // ], + chartType: DashboardChartType.trend, + currentTab: IbmDashboardTab.projects, +}; diff --git a/src/store/dashboard/ibmDashboard/index.ts b/src/store/dashboard/ibmDashboard/index.ts new file mode 100644 index 000000000..6e715627d --- /dev/null +++ b/src/store/dashboard/ibmDashboard/index.ts @@ -0,0 +1,13 @@ +import * as ibmDashboardActions from './ibmDashboardActions'; +import { ibmDashboardStateKey, IbmDashboardTab, IbmDashboardWidget } from './ibmDashboardCommon'; +import { ibmDashboardReducer } from './ibmDashboardReducer'; +import * as ibmDashboardSelectors from './ibmDashboardSelectors'; + +export { + ibmDashboardStateKey, + ibmDashboardReducer, + ibmDashboardActions, + ibmDashboardSelectors, + IbmDashboardTab, + IbmDashboardWidget, +}; diff --git a/src/store/providers/index.ts b/src/store/providers/index.ts index 0ebfde37c..45234eb7a 100644 --- a/src/store/providers/index.ts +++ b/src/store/providers/index.ts @@ -2,6 +2,7 @@ import { awsProvidersQuery, azureProvidersQuery, gcpProvidersQuery, + ibmProvidersQuery, ocpProvidersQuery, } from 'store/providers/providersCommon'; @@ -14,6 +15,7 @@ export { awsProvidersQuery, azureProvidersQuery, gcpProvidersQuery, + ibmProvidersQuery, ocpProvidersQuery, ProvidersAction, providersActions, diff --git a/src/store/providers/providersCommon.ts b/src/store/providers/providersCommon.ts index 91ac4f454..5964d4060 100644 --- a/src/store/providers/providersCommon.ts +++ b/src/store/providers/providersCommon.ts @@ -20,6 +20,10 @@ export const gcpProvidersQuery: ProvidersQuery = { type: 'GCP', }; +export const ibmProvidersQuery: ProvidersQuery = { + type: 'GCP', +}; + export function getReportId(type: ProviderType, query: string) { return `${type}--${query}`; } diff --git a/src/store/rootReducer.ts b/src/store/rootReducer.ts index 440e0ae3f..add024e8e 100644 --- a/src/store/rootReducer.ts +++ b/src/store/rootReducer.ts @@ -3,6 +3,7 @@ import { combineReducers } from 'redux'; import { awsCostOverviewReducer, awsCostOverviewStateKey } from 'store/breakdown/costOverview/awsCostOverview'; import { azureCostOverviewReducer, azureCostOverviewStateKey } from 'store/breakdown/costOverview/azureCostOverview'; import { gcpCostOverviewReducer, gcpCostOverviewStateKey } from 'store/breakdown/costOverview/gcpCostOverview'; +import { ibmCostOverviewReducer, ibmCostOverviewStateKey } from 'store/breakdown/costOverview/ibmCostOverview'; import { ocpCostOverviewReducer, ocpCostOverviewStateKey } from 'store/breakdown/costOverview/ocpCostOverview'; import { awsHistoricalDataReducer, awsHistoricalDataStateKey } from 'store/breakdown/historicalData/awsHistoricalData'; import { @@ -10,6 +11,7 @@ import { azureHistoricalDataStateKey, } from 'store/breakdown/historicalData/azureHistoricalData'; import { gcpHistoricalDataReducer, gcpHistoricalDataStateKey } from 'store/breakdown/historicalData/gcpHistoricalData'; +import { ibmHistoricalDataReducer, ibmHistoricalDataStateKey } from 'store/breakdown/historicalData/ibmHistoricalData'; import { ocpHistoricalDataReducer, ocpHistoricalDataStateKey } from 'store/breakdown/historicalData/ocpHistoricalData'; import { costModelsReducer, costModelsStateKey } from 'store/costModels'; import { awsCloudDashboardReducer, awsCloudDashboardStateKey } from 'store/dashboard/awsCloudDashboard'; @@ -17,6 +19,7 @@ import { awsDashboardReducer, awsDashboardStateKey } from 'store/dashboard/awsDa import { azureCloudDashboardReducer, azureCloudDashboardStateKey } from 'store/dashboard/azureCloudDashboard'; import { azureDashboardReducer, azureDashboardStateKey } from 'store/dashboard/azureDashboard'; import { gcpDashboardReducer, gcpDashboardStateKey } from 'store/dashboard/gcpDashboard'; +import { ibmDashboardReducer, ibmDashboardStateKey } from 'store/dashboard/ibmDashboard'; import { ocpCloudDashboardReducer, ocpCloudDashboardStateKey } from 'store/dashboard/ocpCloudDashboard'; import { ocpDashboardReducer, ocpDashboardStateKey } from 'store/dashboard/ocpDashboard'; import { @@ -55,6 +58,9 @@ export const rootReducer = combineReducers({ [gcpCostOverviewStateKey]: gcpCostOverviewReducer, [gcpDashboardStateKey]: gcpDashboardReducer, [gcpHistoricalDataStateKey]: gcpHistoricalDataReducer, + [ibmCostOverviewStateKey]: ibmCostOverviewReducer, + [ibmDashboardStateKey]: ibmDashboardReducer, + [ibmHistoricalDataStateKey]: ibmHistoricalDataReducer, [metricsStateKey]: metricsReducer, [ocpCostOverviewStateKey]: ocpCostOverviewReducer, [ocpDashboardStateKey]: ocpDashboardReducer, diff --git a/src/store/userAccess/index.ts b/src/store/userAccess/index.ts index b3f498570..3ecfb9651 100644 --- a/src/store/userAccess/index.ts +++ b/src/store/userAccess/index.ts @@ -4,6 +4,7 @@ import { azureUserAccessQuery, costModelUserAccessQuery, gcpUserAccessQuery, + ibmUserAccessQuery, ocpUserAccessQuery, } from 'store/userAccess/userAccessCommon'; @@ -18,6 +19,7 @@ export { azureUserAccessQuery, costModelUserAccessQuery, gcpUserAccessQuery, + ibmUserAccessQuery, ocpUserAccessQuery, UserAccessAction, userAccessActions, diff --git a/src/store/userAccess/userAccessCommon.ts b/src/store/userAccess/userAccessCommon.ts index 728656aac..c059f2f8a 100644 --- a/src/store/userAccess/userAccessCommon.ts +++ b/src/store/userAccess/userAccessCommon.ts @@ -28,6 +28,10 @@ export const gcpUserAccessQuery: UserAccessQuery = { type: 'GCP', }; +export const ibmUserAccessQuery: UserAccessQuery = { + type: 'GCP', +}; + export function getReportId(type: UserAccessType, query: string) { return `${type}--${query}`; } diff --git a/src/utils/computedReport/getComputedIbmReportItems.test.ts b/src/utils/computedReport/getComputedIbmReportItems.test.ts new file mode 100644 index 000000000..5f9a3e38c --- /dev/null +++ b/src/utils/computedReport/getComputedIbmReportItems.test.ts @@ -0,0 +1,14 @@ +import { getIdKeyForGroupBy } from './getComputedIbmReportItems'; + +test('get id key for groupBy', () => { + [ + [{ account: 's', instance_type: 's' }, 'account'], + [{ instance_type: 's', region: 's' }, 'instance_type'], + [{ region: 's', service: 's' }, 'region'], + [{ service: 's' }, 'service'], + [{}, 'date'], + [undefined, 'date'], + ].forEach(value => { + expect(getIdKeyForGroupBy(value[0])).toEqual(value[1]); + }); +}); diff --git a/src/utils/computedReport/getComputedIbmReportItems.ts b/src/utils/computedReport/getComputedIbmReportItems.ts new file mode 100644 index 000000000..6b19788bd --- /dev/null +++ b/src/utils/computedReport/getComputedIbmReportItems.ts @@ -0,0 +1,25 @@ +import { GcpQuery } from 'api/queries/gcpQuery'; +import { GcpReport, GcpReportItem } from 'api/reports/gcpReports'; + +import { ComputedReportItemsParams } from './getComputedReportItems'; + +export interface ComputedIbmReportItemsParams extends ComputedReportItemsParams {} + +export function getIdKeyForGroupBy(groupBy: GcpQuery['group_by'] = {}): ComputedIbmReportItemsParams['idKey'] { + if (groupBy.account) { + return 'account'; + } + if (groupBy.instance_type) { + return 'instance_type'; + } + if (groupBy.project) { + return 'project'; + } + if (groupBy.region) { + return 'region'; + } + if (groupBy.service) { + return 'service'; + } + return 'date'; +} From 97c9409c59e62a9b24ab02e585c22acdda603b2b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 9 Mar 2021 00:54:13 -0500 Subject: [PATCH 151/200] Updated query functions to use either logical AND or logical OR --- src/api/queries/query.ts | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index e23e4ddc3..caf9c7f31 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -1,6 +1,7 @@ import { parse, stringify } from 'qs'; -export const groupByPrefix = 'or:'; // logical OR ('or:') or AND ('and:') prefix for group_by +export const groupByOrPrefix = 'or:'; // logical OR prefix for group_by +export const groupByAndPrefix = 'and:'; // logical AND prefix for group_by export const tagPrefix = 'tag:'; // Tag prefix for group_by export const breakdownDescKey = 'breakdown_desc'; // Used to display a description in the breakdown header @@ -39,7 +40,7 @@ export interface Query { } // Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 -export function addGroupByPrifix(query: Query) { +export function addGroupByPrifix(query: Query, prefix: string = groupByOrPrefix) { if (!(query && query.group_by)) { return query; } @@ -48,7 +49,7 @@ export function addGroupByPrifix(query: Query) { group_by: {}, }; for (const key of Object.keys(query.group_by)) { - newQuery.group_by[`${groupByPrefix}${key}`] = query.group_by[key]; + newQuery.group_by[`${prefix}${key}`] = query.group_by[key]; } return newQuery; } @@ -66,7 +67,14 @@ export function convertFilterByToGroupBy(query: Query) { if (!newQuery.group_by) { newQuery.group_by = {}; } - newQuery.group_by[key] = query.filter_by[key]; + if (newQuery.group_by[key]) { + if (!Array.isArray(newQuery.group_by[key])) { + newQuery.group_by[key] = newQuery.group_by[key] !== '*' ? [newQuery.group_by[key]] : []; + } + newQuery.group_by[key].push(query.filter_by[key]); + } else { + newQuery.group_by[key] = query.filter_by[key]; + } } return newQuery; } @@ -77,7 +85,7 @@ export function getQueryRoute(query: Query) { } // Returns query and adds group_by prefix -export function getQuery(query: Query) { +export function getQuery(query: Query, prefix: string = groupByOrPrefix) { const newQuery = convertFilterByToGroupBy(query); let addGroupByPrefix = false; @@ -100,12 +108,12 @@ export function getQuery(query: Query) { } // Skip adding group_by prefix for a single group_by - const q = addGroupByPrefix ? addGroupByPrifix(newQuery) : newQuery; + const q = addGroupByPrefix ? addGroupByPrifix(newQuery, prefix) : newQuery; return stringify(q, { encode: false, indices: false }); } // Returns query without filter_by prefix -export function parseFilterByPrefix(query: Query) { +export function parseFilterByPrefix(query: Query, prefix: string = groupByOrPrefix) { if (!(query && query.filter_by)) { return query; } @@ -114,15 +122,15 @@ export function parseFilterByPrefix(query: Query) { filter_by: {}, }; for (const key of Object.keys(query.filter_by)) { - const index = key.indexOf(groupByPrefix); - const filterByKey = index !== -1 ? key.substring(index + groupByPrefix.length) : key; + const index = key.indexOf(prefix); + const filterByKey = index !== -1 ? key.substring(index + prefix.length) : key; newQuery.filter_by[filterByKey] = query.filter_by[key]; } return newQuery; } // Returns query without group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 -export function parseGroupByPrefix(query: Query) { +export function parseGroupByPrefix(query: Query, prefix: string = groupByOrPrefix) { if (!(query && query.group_by)) { return query; } @@ -131,8 +139,8 @@ export function parseGroupByPrefix(query: Query) { group_by: {}, }; for (const key of Object.keys(query.group_by)) { - const index = key.indexOf(groupByPrefix); - const groupByKey = index !== -1 ? key.substring(index + groupByPrefix.length) : key; + const index = key.indexOf(prefix); + const groupByKey = index !== -1 ? key.substring(index + prefix.length) : key; newQuery.group_by[groupByKey] = query.group_by[key]; } return newQuery; From 5121210328f96bec85584ac091d64a30d117bfc6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 9 Mar 2021 00:54:54 -0500 Subject: [PATCH 152/200] Fixed sum of costs in getComuptedReportItem --- .../computedReport/getComputedReportItems.ts | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/utils/computedReport/getComputedReportItems.ts b/src/utils/computedReport/getComputedReportItems.ts index 91437ad65..5b37cb09f 100644 --- a/src/utils/computedReport/getComputedReportItems.ts +++ b/src/utils/computedReport/getComputedReportItems.ts @@ -73,20 +73,28 @@ export function getComputedReportItems({ function getCostData(val, key, item?: any) { return { markup: { - value: (item ? item[key].markup.value : 0) + val[key] && val[key].markup ? val[key].markup.value : 0, - units: val[key] && val[key].markup ? val[key].markup.units : 'USD', + value: + (item && item[key] && item[key].markup ? item[key].markup.value : 0) + + (val[key] && val[key].markup ? val[key].markup.value : 0), + units: val && val[key] && val[key].markup ? val[key].markup.units : 'USD', }, raw: { - value: (item ? item[key].raw.value : 0) + val[key] && val[key].raw ? val[key].raw.value : 0, - units: val[key] && val[key].raw ? val[key].raw.units : 'USD', + value: + (item && item[key] && item[key].raw ? item[key].raw.value : 0) + + (val[key] && val[key].raw ? val[key].raw.value : 0), + units: val && val[key] && val[key].raw ? val[key].raw.units : 'USD', }, total: { - value: (item ? item[key].total.value : 0) + val[key] && val[key].total ? Number(val[key].total.value) : 0, - units: val[key] && val[key].total ? val[key].total.units : null, + value: + (item && item[key] && item[key].total ? item[key].total.value : 0) + + (val[key] && val[key].total ? Number(val[key].total.value) : 0), + units: val && val[key] && val[key].total ? val[key].total.units : null, }, usage: { - value: (item ? item[key].usage.value : 0) + val[key] && val[key].usage ? Number(val[key].usage.value) : 0, - units: val[key] && val[key].usage ? val[key].usage.units : null, + value: + (item && item[key] && item[key].usage ? item[key].usage.value : 0) + + (val[key] && val[key].usage ? Number(val[key].usage.value) : 0), + units: val && val[key] && val[key].usage ? val[key].usage.units : null, }, }; } @@ -94,20 +102,20 @@ function getCostData(val, key, item?: any) { function getUsageData(val, item?: any) { return { capacity: { - value: (item ? item.capacity.value : 0) + val.capacity ? val.capacity.value : 0, - units: val.capacity ? val.capacity.units : 'Core-Hours', + value: (item && item.capacity ? item.capacity.value : 0) + (val.capacity ? val.capacity.value : 0), + units: val && val.capacity ? val.capacity.units : 'Core-Hours', }, limit: { - value: (item ? item.limit.value : 0) + val.limit ? val.limit.value : 0, - units: val.limit ? val.limit.units : 'Core-Hours', + value: (item && item.limit ? item.limit.value : 0) + (val.limit ? val.limit.value : 0), + units: val && val.limit ? val.limit.units : 'Core-Hours', }, request: { - value: (item ? item.request.value : 0) + val.request ? val.request.value : 0, - units: val.request ? val.request.units : 'Core-Hours', + value: (item && item.request ? item.request.value : 0) + (val.request ? val.request.value : 0), + units: val && val.request ? val.request.units : 'Core-Hours', }, usage: { - value: (item ? item.usage.value : 0) + val.usage ? val.usage.value : 0, - units: val.usage ? val.usage.units : 'Core-Hours', + value: (item && item.usage ? item.usage.value : 0) + (val.usage ? val.usage.value : 0), + units: val && val.usage ? val.usage.units : 'Core-Hours', }, }; } @@ -202,6 +210,8 @@ export function getUnsortedComputedReportItems Date: Tue, 9 Mar 2021 00:56:59 -0500 Subject: [PATCH 153/200] Renamed filterBy props as groupByValue --- .../components/costOverview/costOverviewBase.tsx | 6 +++--- .../historicalData/historicalDataBase.tsx | 14 +++++++------- .../historicalData/historicalDataCostChart.tsx | 8 ++++---- .../historicalData/historicalDataTrendChart.tsx | 8 ++++---- .../historicalData/historicalDataUsageChart.tsx | 8 ++++---- .../details/components/summary/summaryModal.tsx | 12 ++++++------ 6 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/pages/views/details/components/costOverview/costOverviewBase.tsx b/src/pages/views/details/components/costOverview/costOverviewBase.tsx index 288845259..2e96f4239 100644 --- a/src/pages/views/details/components/costOverview/costOverviewBase.tsx +++ b/src/pages/views/details/components/costOverview/costOverviewBase.tsx @@ -22,8 +22,8 @@ import { WithTranslation } from 'react-i18next'; import { CostOverviewWidget, CostOverviewWidgetType } from 'store/breakdown/costOverview/common/costOverviewCommon'; interface CostOverviewOwnProps { - filterBy: string | number; groupBy: string; + groupByValue: string | number; query?: Query; report: Report; } @@ -146,7 +146,7 @@ class CostOverviewBase extends React.Component { // Returns summary card widget private getSummaryCard = (widget: CostOverviewWidget) => { - const { filterBy, groupBy, query } = this.props; + const { groupBy, groupByValue, query } = this.props; let showWidget = false; for (const groupById of widget.reportSummary.showWidgetOnGroupBy) { @@ -162,8 +162,8 @@ class CostOverviewBase extends React.Component { if (showWidget) { return ( { // Returns cost chart private getCostChart = (widget: HistoricalDataWidget) => { - const { filterBy, groupBy, t } = this.props; + const { groupBy, groupByValue, t } = this.props; return ( @@ -38,8 +38,8 @@ class HistoricalDataBase extends React.Component { @@ -50,7 +50,7 @@ class HistoricalDataBase extends React.Component { // Returns trend chart private getTrendChart = (widget: HistoricalDataWidget) => { - const { filterBy, groupBy, query, t } = this.props; + const { groupBy, groupByValue, query, t } = this.props; return ( @@ -61,8 +61,8 @@ class HistoricalDataBase extends React.Component { { // Returns usage chart private getUsageChart = (widget: HistoricalDataWidget) => { - const { filterBy, groupBy, t } = this.props; + const { groupBy, groupByValue, t } = this.props; return ( @@ -85,8 +85,8 @@ class HistoricalDataBase extends React.Component { diff --git a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx index 89885daa7..ffd38ff54 100644 --- a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx @@ -13,8 +13,8 @@ import { formatValue, unitLookupKey } from 'utils/formatValue'; import { chartStyles, styles } from './historicalChart.styles'; interface HistoricalDataCostChartOwnProps { - filterBy: string | number; groupBy: string; + groupByValue: string | number; reportPathsType: ReportPathsType; reportType: ReportType; } @@ -120,7 +120,7 @@ class HistoricalDataCostChartBase extends React.Component( - (state, { filterBy, groupBy, reportPathsType, reportType }) => { + (state, { groupBy, groupByValue, reportPathsType, reportType }) => { const currentQuery: Query = { filter: { time_scope_units: 'month', @@ -129,7 +129,7 @@ const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, query, reportPathsType, reportType }) => { + (state, { groupBy, groupByValue, query, reportPathsType, reportType }) => { const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; // instance-types and storage APIs must filter org units @@ -164,7 +164,7 @@ const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, reportPathsType, reportType }) => { + (state, { groupBy, groupByValue, reportPathsType, reportType }) => { const currentQuery: Query = { filter: { time_scope_units: 'month', @@ -126,7 +126,7 @@ const mapStateToProps = createMapStateToProps { } public shouldComponentUpdate(nextProps: SummaryModalProps) { - const { filterBy, isOpen } = this.props; - return nextProps.filterBy !== filterBy || nextProps.isOpen !== isOpen; + const { groupByValue, isOpen } = this.props; + return nextProps.groupByValue !== groupByValue || nextProps.isOpen !== isOpen; } private handleClose = () => { @@ -36,7 +36,7 @@ class SummaryModalBase extends React.Component { }; public render() { - const { filterBy, groupBy, isOpen, query, reportGroupBy, reportPathsType, t } = this.props; + const { groupBy, groupByValue, isOpen, query, reportGroupBy, reportPathsType, t } = this.props; return ( { onClose={this.handleClose} title={t('details.summary_modal_title', { groupBy: reportGroupBy, - name: filterBy, + name: groupByValue, })} variant="large" > Date: Tue, 9 Mar 2021 00:57:43 -0500 Subject: [PATCH 154/200] Added filter_by params to summary cards --- .../details/components/summary/summaryCard.tsx | 12 ++++++------ .../components/summary/summaryModalView.tsx | 8 ++++---- .../details/components/summary/summaryView.tsx | 17 ++++++++++------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index cb83aae48..b83d01c08 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -26,8 +26,8 @@ import { formatValue } from 'utils/formatValue'; import { styles } from './summaryCard.styles'; interface SummaryOwnProps { - filterBy: string | number; groupBy: string; + groupByValue: string | number; query?: Query; reportGroupBy?: string; reportPathsType: ReportPathsType; @@ -99,7 +99,7 @@ class SummaryBase extends React.Component { }; private getViewAll = () => { - const { filterBy, groupBy, query, reportGroupBy, reportPathsType, t } = this.props; + const { groupBy, groupByValue, query, reportGroupBy, reportPathsType, t } = this.props; const { isBulletChartModalOpen } = this.state; const computedItems = this.getItems(); @@ -122,8 +122,8 @@ class SummaryBase extends React.Component { {t('details.view_all', { groupBy: reportGroupBy })} { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, query, reportGroupBy, reportPathsType, reportType }) => { + (state, { groupBy, groupByValue, query, reportGroupBy, reportPathsType, reportType }) => { const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; const newQuery: Query = { filter: { @@ -183,10 +183,10 @@ const mapStateToProps = createMapStateToProps { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, query, reportGroupBy, reportPathsType }) => { + (state, { groupBy, groupByValue, query, reportGroupBy, reportPathsType }) => { const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; const newQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', - [groupBy]: filterBy, // Other "filter_by"s must be applied here ...(query && query.filter && query.filter.account && { account: query.filter.account }), + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - filter_by: query ? query.filter_by : undefined, + ...(query && query.filter_by && { filter_by: query.filter_by }), group_by: { ...(groupByOrg && ({ [orgUnitIdKey]: groupByOrg } as any)), ...(reportGroupBy && { [reportGroupBy]: '*' }), // Group by specific account, project, etc. diff --git a/src/pages/views/details/components/summary/summaryView.tsx b/src/pages/views/details/components/summary/summaryView.tsx index 1460c35f7..0ba6a05e5 100644 --- a/src/pages/views/details/components/summary/summaryView.tsx +++ b/src/pages/views/details/components/summary/summaryView.tsx @@ -18,8 +18,9 @@ import { SummaryModal } from './summaryModal'; import { SummaryModalViewProps } from './summaryModalView'; interface SummaryViewOwnProps { - filterBy: string | number; groupBy: string; + groupByValue: string | number; + query?: Query; reportGroupBy: string; reportPathsType: ReportPathsType; } @@ -87,7 +88,7 @@ class SummaryViewBase extends React.Component { }; private getViewAll = () => { - const { filterBy, groupBy, reportGroupBy, reportPathsType, t } = this.props; + const { groupBy, groupByValue, reportGroupBy, reportPathsType, t } = this.props; const { isSummaryModalOpen } = this.state; const computedItems = this.getItems(); @@ -110,8 +111,8 @@ class SummaryViewBase extends React.Component { {t('details.view_all', { groupBy: reportGroupBy })} { } const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, reportGroupBy, reportPathsType }) => { - const query: Query = { + (state, { groupBy, groupByValue, query, reportGroupBy, reportPathsType }) => { + const newQuery: Query = { filter: { limit: 3, time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', - [groupBy]: filterBy, // Other "filter_by"s must be applied here + ...(query && query.filter && query.filter.account && { account: query.filter.account }), + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, + ...(query && query.filter_by && { filter_by: query.filter_by }), group_by: { [reportGroupBy]: '*' }, // Group by specific account, project, etc. }; - const queryString = getQuery(query); + const queryString = getQuery(newQuery); const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); return { From 28adafcc399f5349b3642b2ef8ce246bf5348cf4 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 9 Mar 2021 01:00:28 -0500 Subject: [PATCH 155/200] Modified breakdown querys to include group_by from previous page as a filter https://issues.redhat.com/browse/COST-1131 --- .../details/awsBreakdown/awsBreakdown.tsx | 19 +++++------ .../details/azureBreakdown/azureBreakdown.tsx | 19 +++++++---- .../details/gcpBreakdown/gcpBreakdown.tsx | 34 +++++++++++++------ .../details/ibmBreakdown/ibmBreakdown.tsx | 19 +++++------ .../details/ocpBreakdown/ocpBreakdown.tsx | 20 +++++------ 5 files changed, 61 insertions(+), 50 deletions(-) diff --git a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 30352ba9d..6dc847fc6 100644 --- a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -45,23 +45,20 @@ const reportPathsType = ReportPathsType.aws; const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const filterBy = getGroupByValue(query); const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const groupByOrg = query && query.group_by && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; const newQuery: Query = { filter: { + resolution: 'monthly', time_scope_units: 'month', time_scope_value: -1, - resolution: 'monthly', - limit: 3, ...(query && query.filter && query.filter.account && { ['account']: query.filter.account }), - }, - filter_by: query ? query.filter_by : undefined, - group_by: { + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here ...(groupByOrg && ({ [orgUnitIdKey]: groupByOrg } as any)), - ...(groupBy && { [groupBy]: filterBy }), }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); @@ -78,13 +75,13 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.aws_details'), - filterBy, groupBy, - historicalDataComponent: , + groupByValue, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.aws, @@ -96,7 +93,7 @@ const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const filterBy = getGroupByValue(query); const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const newQuery: Query = { - ...query, - ...{ [breakdownDescKey]: undefined }, + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here + }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); @@ -67,13 +72,13 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.azure_details'), - filterBy, groupBy, - historicalDataComponent: , + groupByValue, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.azure, @@ -85,7 +90,7 @@ const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const filterBy = getGroupByValue(query); const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const newQuery: Query = { filter: { + resolution: 'monthly', time_scope_units: 'month', time_scope_value: -1, - resolution: 'monthly', - limit: 3, ...(query && query.filter && query.filter.account && { ['account']: query.filter.account }), + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - filter_by: query ? query.filter_by : undefined, - group_by: { - ...(groupBy && { [groupBy]: filterBy }), - }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); @@ -76,13 +73,13 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.gcp_details'), - filterBy, groupBy, - historicalDataComponent: , + groupByValue, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.gcp, @@ -94,7 +91,7 @@ const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const filterBy = getGroupByValue(query); const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const newQuery: Query = { filter: { + resolution: 'monthly', time_scope_units: 'month', time_scope_value: -1, - resolution: 'monthly', - limit: 3, ...(query && query.filter && query.filter.account && { ['account']: query.filter.account }), + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - filter_by: query ? query.filter_by : undefined, - group_by: { - ...(groupBy && { [groupBy]: filterBy }), - }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); @@ -76,13 +73,13 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.ibm_details'), - filterBy, groupBy, - historicalDataComponent: , + groupByValue, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.ibm, @@ -94,7 +91,7 @@ const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const filterBy = getGroupByValue(query); const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const newQuery: Query = { - ...query, - ...{ [breakdownDescKey]: undefined }, filter: { - ...query.filter, - limit: undefined, // Not necessary - offset: undefined, // Not necessary + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); @@ -72,13 +72,13 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.ocp_details'), - filterBy, groupBy, - historicalDataComponent: , + groupByValue, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.ocp, @@ -90,7 +90,7 @@ const mapStateToProps = createMapStateToProps Date: Tue, 9 Mar 2021 01:11:51 -0500 Subject: [PATCH 156/200] Clean up comment --- .../views/details/gcpBreakdown/gcpBreakdown.tsx | 15 --------------- .../computedReport/getComputedReportItems.ts | 2 +- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx index fc2c9794e..e8050de64 100644 --- a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx @@ -102,18 +102,3 @@ const mapDispatchToProps: BreakdownDispatchProps = { const GcpBreakdown = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(BreakdownBase)); export default GcpBreakdown; - -/* -https://ci.foo.redhat.com:1337/api/cost-management/v1/reports/gcp/costs/?filter[resolution]=monthly&filter[time_scope_units]=month&filter[time_scope_value]=-1&group_by[and:project]=openshift-gce-devel-ci&group_by[or:project]=openshift&group_by[or:region]=us -filter[resolution]=monthly -filter[time_scope_units]=month -filter[time_scope_value]=-1 -group_by[and:project]=openshift-gce-devel-ci -group_by[or:project]=openshift -group_by[or:region]=us -$20,730.30 - - - - - */ diff --git a/src/utils/computedReport/getComputedReportItems.ts b/src/utils/computedReport/getComputedReportItems.ts index 5b37cb09f..80b62a3e2 100644 --- a/src/utils/computedReport/getComputedReportItems.ts +++ b/src/utils/computedReport/getComputedReportItems.ts @@ -210,7 +210,7 @@ export function getUnsortedComputedReportItems Date: Tue, 9 Mar 2021 02:02:28 -0500 Subject: [PATCH 157/200] Add filter_bys to historical charts --- .../historicalDataCostChart.tsx | 22 +++++++------ .../historicalDataTrendChart.tsx | 33 ++++++++----------- .../historicalDataUsageChart.tsx | 22 +++++++------ 3 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx index ffd38ff54..f0b762152 100644 --- a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx @@ -1,8 +1,9 @@ import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; -import { getQuery, Query } from 'api/queries/query'; +import { getQuery, parseQuery, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, transformReport } from 'components/charts/common/chartDatumUtils'; import { HistoricalCostChart } from 'components/charts/historicalCostChart'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -13,8 +14,6 @@ import { formatValue, unitLookupKey } from 'utils/formatValue'; import { chartStyles, styles } from './historicalChart.styles'; interface HistoricalDataCostChartOwnProps { - groupBy: string; - groupByValue: string | number; reportPathsType: ReportPathsType; reportType: ReportType; } @@ -120,17 +119,21 @@ class HistoricalDataCostChartBase extends React.Component( - (state, { groupBy, groupByValue, reportPathsType, reportType }) => { + (state, { reportPathsType, reportType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); + const currentQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'daily', limit: 3, + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - group_by: { - [groupBy]: groupByValue, - }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const currentQueryString = getQuery(currentQuery); const previousQuery: Query = { @@ -139,10 +142,9 @@ const mapStateToProps = createMapStateToProps( - (state, { groupBy, groupByValue, query, reportPathsType, reportType }) => { + (state, { reportPathsType, reportType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; - // instance-types and storage APIs must filter org units - const useFilter = reportType === ReportType.instanceType || reportType === ReportType.storage; - const currentQuery: Query = { filter: { time_scope_units: 'month', @@ -159,13 +158,10 @@ const mapStateToProps = createMapStateToProps( - (state, { groupBy, groupByValue, reportPathsType, reportType }) => { + (state, { reportPathsType, reportType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); + const currentQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'daily', limit: 3, + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - group_by: { - [groupBy]: groupByValue, - }, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const currentQueryString = getQuery(currentQuery); const previousQuery: Query = { @@ -136,10 +139,9 @@ const mapStateToProps = createMapStateToProps Date: Tue, 9 Mar 2021 02:04:04 -0500 Subject: [PATCH 158/200] Add filter_bys to usage chart --- .../views/details/components/usageChart/usageChart.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/pages/views/details/components/usageChart/usageChart.tsx b/src/pages/views/details/components/usageChart/usageChart.tsx index 3cbedd21d..96ce055f8 100644 --- a/src/pages/views/details/components/usageChart/usageChart.tsx +++ b/src/pages/views/details/components/usageChart/usageChart.tsx @@ -7,7 +7,7 @@ import { OcpQuery, parseQuery } from 'api/queries/ocpQuery'; import { getQuery, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { ReportPathsType, ReportType } from 'api/reports/report'; -import { getGroupById } from 'pages/views/utils/groupBy'; +import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -402,15 +402,16 @@ const mapStateToProps = createMapStateToProps(location.search); const query = queryFromRoute; const groupBy = getGroupById(query); + const groupByValue = getGroupByValue(query); const newQuery: Query = { filter: { time_scope_units: 'month', time_scope_value: -1, resolution: 'monthly', + ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here }, - filter_by: query ? query.filter_by : undefined, - group_by: query ? query.group_by : undefined, + ...(query && query.filter_by && { filter_by: query.filter_by }), }; const queryString = getQuery(newQuery); const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); From 11ba48ad981876aed07695093699f2189770e6f1 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 9 Mar 2021 02:05:05 -0500 Subject: [PATCH 159/200] Clean up historical chart props --- .../details/awsBreakdown/awsBreakdown.tsx | 4 +-- .../details/azureBreakdown/azureBreakdown.tsx | 2 +- .../historicalData/historicalDataBase.tsx | 33 ++++--------------- .../details/gcpBreakdown/gcpBreakdown.tsx | 2 +- .../details/ibmBreakdown/ibmBreakdown.tsx | 2 +- .../details/ocpBreakdown/ocpBreakdown.tsx | 2 +- 6 files changed, 13 insertions(+), 32 deletions(-) diff --git a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 6dc847fc6..02415e3c1 100644 --- a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -56,7 +56,7 @@ const mapStateToProps = createMapStateToProps, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.aws, diff --git a/src/pages/views/details/azureBreakdown/azureBreakdown.tsx b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx index 2190d5039..dfa9689f4 100644 --- a/src/pages/views/details/azureBreakdown/azureBreakdown.tsx +++ b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx @@ -78,7 +78,7 @@ const mapStateToProps = createMapStateToProps, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.azure, diff --git a/src/pages/views/details/components/historicalData/historicalDataBase.tsx b/src/pages/views/details/components/historicalData/historicalDataBase.tsx index 1dfd9e853..9ff77e484 100644 --- a/src/pages/views/details/components/historicalData/historicalDataBase.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataBase.tsx @@ -1,5 +1,4 @@ import { Card, CardBody, CardTitle, Grid, GridItem, Title } from '@patternfly/react-core'; -import { Query } from 'api/queries/query'; import React from 'react'; import { WithTranslation } from 'react-i18next'; import { @@ -12,9 +11,7 @@ import { HistoricalDataTrendChart } from './historicalDataTrendChart'; import { HistoricalDataUsageChart } from './historicalDataUsageChart'; interface HistoricalDataOwnProps { - groupBy: string; - groupByValue: string | number; - query?: Query; + // TBD... } interface HistoricalDataStateProps { @@ -27,7 +24,7 @@ type HistoricalDataProps = HistoricalDataOwnProps & HistoricalDataStateProps & W class HistoricalDataBase extends React.Component { // Returns cost chart private getCostChart = (widget: HistoricalDataWidget) => { - const { groupBy, groupByValue, t } = this.props; + const { t } = this.props; return ( @@ -37,12 +34,7 @@ class HistoricalDataBase extends React.Component { - + ); @@ -50,7 +42,7 @@ class HistoricalDataBase extends React.Component { // Returns trend chart private getTrendChart = (widget: HistoricalDataWidget) => { - const { groupBy, groupByValue, query, t } = this.props; + const { t } = this.props; return ( @@ -60,13 +52,7 @@ class HistoricalDataBase extends React.Component { - + ); @@ -74,7 +60,7 @@ class HistoricalDataBase extends React.Component { // Returns usage chart private getUsageChart = (widget: HistoricalDataWidget) => { - const { groupBy, groupByValue, t } = this.props; + const { t } = this.props; return ( @@ -84,12 +70,7 @@ class HistoricalDataBase extends React.Component { - + ); diff --git a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx index e8050de64..138803c46 100644 --- a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx @@ -79,7 +79,7 @@ const mapStateToProps = createMapStateToProps, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.gcp, diff --git a/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx index 55b4dd9b1..b418632c4 100644 --- a/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx +++ b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx @@ -79,7 +79,7 @@ const mapStateToProps = createMapStateToProps, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.ibm, diff --git a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx index 0c172d9d4..09e2f6613 100644 --- a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx @@ -78,7 +78,7 @@ const mapStateToProps = createMapStateToProps, + historicalDataComponent: , providers, providersFetchStatus, providerType: ProviderType.ocp, From c2a9ff3b9735276b7f4de827dab095e0f55bb11d Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Tue, 9 Mar 2021 02:05:28 -0500 Subject: [PATCH 160/200] Move groupByOrg to filter --- src/pages/views/details/components/summary/summaryCard.tsx | 2 +- src/pages/views/details/components/summary/summaryModalView.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index b83d01c08..e250bfe63 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -185,10 +185,10 @@ const mapStateToProps = createMapStateToProps Date: Tue, 9 Mar 2021 11:14:40 +0100 Subject: [PATCH 161/200] Prepare app to expose remote modules --- config/chunk-mapper.js | 53 +++++++++++++++++++++---- koku-ui-manifest | 8 ++-- package.json | 6 +-- src/__snapshots__/app.test.tsx.snap | 50 +++++++++++++++++++----- src/app.tsx | 13 ++++++- src/modules/ocpOverviewWidget/index.ts | 6 +++ webpack.config.js | 54 ++++++++++---------------- yarn.lock | 41 +++++++++---------- 8 files changed, 152 insertions(+), 79 deletions(-) diff --git a/config/chunk-mapper.js b/config/chunk-mapper.js index baf890936..621ac4295 100644 --- a/config/chunk-mapper.js +++ b/config/chunk-mapper.js @@ -1,16 +1,55 @@ +/* global */ + +/** + * The chunk mapper is required for other apps which do not run cost webpack init to propery register its modules + * If we want to used the remote module outside of cost and before it was run in browser, the fed-mods.json is required + * to properly find and register new remote modules. + */ class ChunkMapper { - // Looks like this file may not be needed anymore or there is an upstream bug - // https://github.com/RedHatInsights/frontend-components/blob/master/packages/config/chunk-mapper.js - // Just emit an empty JSON file for now + constructor(options) { + this.config = {}; + this.options = options || {}; + } + apply(compiler) { compiler.hooks.emit.tap('ChunkMapper', compilation => { + const prefix = + this.options.prefix || RegExp('^/.*/$').test(compiler.options.output.publicPath) + ? compiler.options.output.publicPath + : '/'; + compilation.chunks.forEach(({ name, files, runtime }) => { + const modules = Array.isArray(this.options.modules) ? this.options.modules : [this.options.modules]; + if (modules.find(oneEntry => RegExp(`${oneEntry}$`).test(runtime))) { + this.config[runtime] = { + ...(this.config[runtime] || {}), + ...(name === runtime + ? { + entry: Array.from(files) + .map(item => `${prefix}${item}`) + .filter((file, _index, array) => { + if (array.find(item => !RegExp('\\.hot-update\\.js$').test(item))) { + return !RegExp('\\.hot-update\\.js$').test(file); + } + + return true; + }), + } + : { + modules: [ + ...(this.config[runtime].modules || []), + ...Array.from(files).map(item => `${prefix}${item}`), + ], + }), + }; + } + }); + compilation.assets['fed-mods.json'] = { - source: () => '{}', - length: () => 2 - } + source: () => JSON.stringify(this.config, null, 4), + size: () => JSON.stringify(this.config, null, 4).length, + }; }); } } module.exports = ChunkMapper; - diff --git a/koku-ui-manifest b/koku-ui-manifest index ab65bce17..e2e41d452 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -101,14 +101,13 @@ mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notif mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.94.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock -mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/@scalprum/react-core:0.0.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@scalprum/react-core:0.0.16.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/browser:5.26.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/core:5.26.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@sentry/hub:5.26.0.yarnlock @@ -946,6 +945,7 @@ mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevelnext:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock diff --git a/package.json b/package.json index 3708d2bd1..1989290c1 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@patternfly/react-styles": "4.8.1", "@patternfly/react-table": "4.23.1", "@patternfly/react-tokens": "4.10.1", - "@redhat-cloud-services/frontend-components": "^3.1.1", + "@redhat-cloud-services/frontend-components": "^3.1.2", "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", "@redhat-cloud-services/rbac-client": "^1.0.94", @@ -109,9 +109,9 @@ "rimraf": "^3.0.2", "sass": "^1.32.7", "sass-loader": "^11.0.1", - "tsconfig-paths-webpack-plugin": "^3.3.0", "ts-jest": "26.5.1", "ts-loader": "8.0.17", + "tsconfig-paths-webpack-plugin": "^3.3.0", "webpack": "^5.24.3", "webpack-cli": "^4.5.0", "webpack-dev-server": "^3.11.2", @@ -120,4 +120,4 @@ "insights": { "appname": "cost-management" } -} +} \ No newline at end of file diff --git a/src/__snapshots__/app.test.tsx.snap b/src/__snapshots__/app.test.tsx.snap index fe7441292..f8a237f15 100644 --- a/src/__snapshots__/app.test.tsx.snap +++ b/src/__snapshots__/app.test.tsx.snap @@ -1,17 +1,47 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders login if isLoggedIn is false 1`] = ` - - - +
+ + + + } + module="./OcpOverviewWidget" + scope="costManagement" + title="Custom title prop" + /> + + + +
`; exports[`renders page layout 1`] = ` - - - +
+ + + + } + module="./OcpOverviewWidget" + scope="costManagement" + title="Custom title prop" + /> + + + +
`; diff --git a/src/app.tsx b/src/app.tsx index 81698db9a..f3bfe4a8d 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,3 +1,4 @@ +import AsyncComponent from '@redhat-cloud-services/frontend-components/AsyncComponent'; import { I18nProvider } from 'components/i18n'; import Maintenance from 'pages/state/maintenance'; import React from 'react'; @@ -66,7 +67,17 @@ export class App extends React.Component { const { maintenanceMode } = this.state; const route = maintenanceMode ? : ; - return {route}; + return ( +
+ + {route} +
+ ); } } diff --git a/src/modules/ocpOverviewWidget/index.ts b/src/modules/ocpOverviewWidget/index.ts index cb3f7013b..60306dabd 100644 --- a/src/modules/ocpOverviewWidget/index.ts +++ b/src/modules/ocpOverviewWidget/index.ts @@ -1,2 +1,8 @@ export { default } from './ocpOverviewWidget'; export * from './ocpOverviewWidget'; + +/** + * Note, the ocpOverviewWidget uses the translation context, but consuming apps might + * not have the correct context or translation messages. Translation will not work properly. + * Either wrap the component in required context or remove the translation. * + */ diff --git a/webpack.config.js b/webpack.config.js index a40b52866..69dc3a5c7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -28,7 +28,7 @@ const singletonDeps = [ '@patternfly/react-tokens', '@redhat-cloud-services/frontend-components', '@redhat-cloud-services/frontend-components-utilities', - '@redhat-cloud-services/frontend-components-notifications' + '@redhat-cloud-services/frontend-components-notifications', ]; const fileRegEx = /\.(png|woff|woff2|eot|ttf|svg|gif|jpe?g|png)(\?[a-z0-9=.]+)?$/; const srcDir = path.resolve(__dirname, './src'); @@ -44,15 +44,9 @@ const betaBranches = ['master', 'qa-beta', 'ci-beta', 'prod-beta']; const moduleName = insights.appname.replace(/-(\w)/g, (_, match) => match.toUpperCase()); module.exports = (_env, argv) => { - const gitBranch = - process.env.TRAVIS_BRANCH || - process.env.BRANCH || - gitRevisionPlugin.branch(); + const gitBranch = process.env.TRAVIS_BRANCH || process.env.BRANCH || gitRevisionPlugin.branch(); const isProduction = nodeEnv === 'production' || argv.mode === 'production'; - const appDeployment = - (isProduction && betaBranches.includes(gitBranch)) || appEnv === 'proxy' - ? 'beta/apps' - : 'apps'; + const appDeployment = (isProduction && betaBranches.includes(gitBranch)) || appEnv === 'proxy' ? 'beta/apps' : 'apps'; const publicPath = `/${appDeployment}/${insights.appname}/`; // Moved multiple entries to index.tsx in order to help speed up webpack const entry = path.join(srcDir, 'index.tsx'); @@ -72,14 +66,14 @@ module.exports = (_env, argv) => { }; return { - stats: stats, + stats, mode: isProduction ? 'production' : 'development', devtool: 'source-map', // isProduction ? 'source-map' : 'eval', entry, output: { path: distDir, filename: isProduction ? '[chunkhash].bundle.js' : '[name].bundle.js', - publicPath: publicPath, + publicPath, }, module: { rules: [ @@ -87,8 +81,8 @@ module.exports = (_env, argv) => { test: new RegExp(entry), loader: path.resolve(__dirname, './config/chrome-render-loader.js'), options: { - appName: insights.appname - } + appName: insights.appname, + }, }, { test: /\.tsx?$/, @@ -96,8 +90,8 @@ module.exports = (_env, argv) => { use: [ { loader: 'ts-loader', - } - ] + }, + ], }, { test: /\.html?$/, @@ -110,10 +104,7 @@ module.exports = (_env, argv) => { { test: /\.css$/i, exclude: /@patternfly\/react-styles\/css/, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - ], + use: [MiniCssExtractPlugin.loader, 'css-loader'], }, { // Since we use Insights' upstream PatternFly, we're using null-loader to save about 1MB of CSS @@ -124,11 +115,7 @@ module.exports = (_env, argv) => { { test: /\.s[ac]ss$/i, sideEffects: true, - use: [ - MiniCssExtractPlugin.loader, - 'css-loader', - 'sass-loader' - ], + use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'], }, { test: fileRegEx, @@ -140,9 +127,7 @@ module.exports = (_env, argv) => { new webpack.DefinePlugin({ 'process.env.APP_PUBLIC_PATH': JSON.stringify(publicPath), 'process.env.VERSION': JSON.stringify(gitRevisionPlugin.version()), - 'process.env.COMMITHASH': JSON.stringify( - gitRevisionPlugin.commithash() - ), + 'process.env.COMMITHASH': JSON.stringify(gitRevisionPlugin.commithash()), 'process.env.BRANCH': JSON.stringify(gitRevisionPlugin.branch()), }), new CopyWebpackPlugin({ @@ -168,7 +153,6 @@ module.exports = (_env, argv) => { chunkFilename: isProduction ? '[id].[contenthash].css' : '[id].css', ignoreOrder: true, // Enable to remove warnings about conflicting order }), - new ChunkMapperPlugin(), new webpack.container.ModuleFederationPlugin({ name: moduleName, filename: `${moduleName}.js`, @@ -182,8 +166,11 @@ module.exports = (_env, argv) => { ...singletonDeps.reduce((acc, dep) => { acc[dep] = { singleton: true, requiredVersion: dependencies[dep] }; return acc; - }, {}) - } + }, {}), + }, + }), + new ChunkMapperPlugin({ + modules: [moduleName], }), // development plugins // !isProduction && new webpack.HotModuleReplacementPlugin(), @@ -201,8 +188,7 @@ module.exports = (_env, argv) => { }, }, performance: { - assetFilter: assetFilename => - !(fileRegEx.test(assetFilename) || /\.map$/.test(assetFilename)), + assetFilter: assetFilename => !(fileRegEx.test(assetFilename) || /\.map$/.test(assetFilename)), }, resolve: { extensions: ['.tsx', '.ts', '.js'], @@ -213,10 +199,10 @@ module.exports = (_env, argv) => { ], }, devServer: { - stats: stats, + stats, contentBase: false, historyApiFallback: { - index: `${publicPath}/index.html`, + index: `${publicPath}index.html`, }, // hot: !isProduction, port: 8002, diff --git a/yarn.lock b/yarn.lock index 01526b1f7..547a26d62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -687,14 +687,14 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.1.tgz#848a8d7548fc3e561682376486e219b2896e77a9" - integrity sha512-tKNLVZi/957q30icYXEc8LUDfIERI3Rp/6ae1UbKHgaVqBPrCOn6M58XnGKLovHiXp0xC+cCbUdtnerMg9N8KA== +"@redhat-cloud-services/frontend-components@^3.1.2": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.2.tgz#ceec958451c395d04882491ed69b66db4caffaaa" + integrity sha512-KI5NuAn7MSK/Os1pxNZnHjJtOCW+oVElyPI3kqEFZIZeyfYGC7pIPD6RF+osT6wWSwSAnwkxVDG5jU0bL1/sBQ== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" - "@scalprum/core" "0.0.10" - "@scalprum/react-core" "0.0.13" + "@scalprum/core" "^0.0.11" + "@scalprum/react-core" "^0.0.16" sanitize-html "^2.3.2" "@redhat-cloud-services/rbac-client@^1.0.94": @@ -717,22 +717,18 @@ lodash "^4.17.20" lodash-es "^4.17.20" -"@scalprum/core@*": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@scalprum/core/-/core-0.0.3.tgz#a7d60597af82a0911b7ffceec01a3e242de686e2" - integrity sha512-3fbzufqQhOMFZ3v6ua2BhTlnFwk8WeFfBJj8l8TO8ZiR9p/bFNGG0A17gCqBeZYvFOS4XTx8g2z4T1g+1eQfvA== +"@scalprum/core@^0.0.11": + version "0.0.11" + resolved "https://registry.yarnpkg.com/@scalprum/core/-/core-0.0.11.tgz#9d547d9ce1e344eba034ab03221e43cad455d2ff" + integrity sha512-iTXWltn+7x3uGghQ1gR4upZzu2ltILaTMA4zY54yUP/DqR9x5NpSlSZnjnVoyqZ1ftL2PjU7pPokt3fVv6phqQ== -"@scalprum/core@0.0.10": - version "0.0.10" - resolved "https://registry.yarnpkg.com/@scalprum/core/-/core-0.0.10.tgz#0bb4190180fd491a26301dac28e5ab9d3c83527b" - integrity sha512-eIE+nDHpAjRcG1HkBh10Iv6cXc33CZRH8qLFUQqFhj4CyJEWUG4QGUHItwC3ma2gEElVWe3qNong2D5v/cGIFg== - -"@scalprum/react-core@0.0.13": - version "0.0.13" - resolved "https://registry.yarnpkg.com/@scalprum/react-core/-/react-core-0.0.13.tgz#76e031e24cec6381d1002d101f74f006b860b4e9" - integrity sha512-2mGEUjiwG2J4r3FMG05pLsn2NULx36tYZRMyH6RqkANmtITLu+b8EzfNLFR1tGcRJxhamJLZhHhSYlNhNzpKng== +"@scalprum/react-core@^0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@scalprum/react-core/-/react-core-0.0.16.tgz#b7b9f9f7397dfb56b4a43b4dbce4511d69afc56e" + integrity sha512-VNsh3oBBvMjzm8ByTXiHkJCYwNgRbY9Apz2zVU+1rzZPtRRbjvvnRZTop5vcRa6CRMyttNNtSQ3R2n0EZlNBGg== dependencies: - "@scalprum/core" "*" + "@scalprum/core" "^0.0.11" + lodash "^4.17.0" "@sentry/browser@^5.4.0": version "5.26.0" @@ -5926,6 +5922,11 @@ lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + loglevel@^1.6.8: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" From 630cf40dcefc367eaa31f56ad941a6c80e5e5395 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 9 Mar 2021 12:06:13 -0500 Subject: [PATCH 162/200] consolidate of i18n details keys (#1905) * initial cleanup of i18n details keys * Changes for PR comments * fixed typo in en.json --- src/locales/en.json | 43 +++---------------- .../details/awsDetails/detailsHeader.tsx | 2 +- .../views/details/awsDetails/detailsTable.tsx | 10 ++--- .../details/azureDetails/detailsHeader.tsx | 2 +- .../details/azureDetails/detailsTable.tsx | 10 ++--- .../details/gcpDetails/detailsHeader.tsx | 2 +- .../views/details/gcpDetails/detailsTable.tsx | 10 ++--- .../details/ibmDetails/detailsHeader.tsx | 2 +- .../views/details/ibmDetails/detailsTable.tsx | 10 ++--- .../details/ocpDetails/detailsHeader.tsx | 2 +- .../views/details/ocpDetails/detailsTable.tsx | 10 ++--- src/pages/views/explorer/explorerTable.tsx | 6 +-- 12 files changed, 40 insertions(+), 69 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index b8fd22e9a..111bf36c3 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -20,12 +20,7 @@ "usage_label": "Usage" }, "aws_details": { - "change_column_title": "Month over month change", - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", - "org_unit_column_title": "Names", - "tag_column_title": "Tag names", - "total_cost": "Total cost" + "org_unit_column_title": "Names" }, "azure_cloud_dashboard": { "compute_title": "Virtual machines usage", @@ -47,13 +42,6 @@ "storage_title": "Storage services usage", "usage_label": "Usage" }, - "azure_details": { - "change_column_title": "Month over month change", - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", - "tag_column_title": "Tag names", - "total_cost": "Total cost" - }, "breakdown": { "back_to_details": "Back to $t(breakdown.navigation.{{value}}) $t(group_by.top_values.{{groupBy}}) details", "cluster_title": "Clusters", @@ -379,6 +367,8 @@ }, "clusters_modal_title": "$t(group_by.values.{{groupBy}}) {{name}} clusters", "cost_value": "Cost: {{value}}", + "empty_state": "Processing data to generate a list of all services that sums to a total cost...", + "month_over_month_change": "Month over month change", "more_clusters": ", {{value}} more...", "more_clusters_plural": ", show all...", "more_tags": ", {{value}} more...", @@ -397,8 +387,11 @@ "value": "Value" } }, + "resource_names": "$t(group_by.values.{{groupBy}}) names", "summary_modal_title": "{{name}} $t(group_by.top_values.{{groupBy}})s", + "tag_names": "Tag names", "tags_modal_title": "$t(group_by.values.{{groupBy}}) {{name}} related tags", + "total_cost": "Total cost", "usage": { "cpu_capacity": "Capacity - {{value}} {{units}}", "cpu_limit": "Limit - {{value}} {{units}}", @@ -466,8 +459,6 @@ "last_thirty_days": "Last 30 days", "previous_month_to_date": "Previous month and month to date" }, - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", "no_data": "no data", "org_unit_column_title": "Names", "perspective": { @@ -482,7 +473,6 @@ "ocp_supplementary": "OpenShift supplementary cost", "ocp_usage": "OpenShift usage" }, - "tag_column_title": "Tag names", "title": { "all_cloud": "All cloud filtered by OpenShift - Top 5 Costliest", "aws": "Amazon Web Services - Top 5 Costliest", @@ -494,8 +484,7 @@ "ocp": "All OpenShift cost - Top 5 Costliest", "ocp_supplementary": "OpenShift supplementary cost - Top 5 Costliest", "ocp_usage": "OpenShift usage - Top 5 Costliest" - }, - "total_cost": "Total cost" + } }, "export": { "aggregate_type": "Select aggregate type", @@ -616,13 +605,6 @@ "storage_title": "Storage services usage", "usage_label": "Usage" }, - "gcp_details": { - "change_column_title": "Month over month change", - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", - "tag_column_title": "Tag names", - "total_cost": "Total cost" - }, "group_by": { "all": "All $t(group_by.values.{{groupBy}}, { 'count': 5 })", "details": "$t(group_by.values.{{groupBy}}, { 'count': 3 })", @@ -698,13 +680,6 @@ "storage_title": "Storage services usage", "usage_label": "Usage" }, - "ibm_details": { - "change_column_title": "Month over month change", - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", - "tag_column_title": "Tag names", - "total_cost": "Total cost" - }, "inactive_sources": { "go_to_sources": "Go to Sources for more information", "title": "A problem was detected with {{value}}", @@ -826,15 +801,11 @@ "usage_label": "Usage" }, "ocp_details": { - "change_column_title": "Month over month change", - "empty_state": "Processing data to generate a list of all services that sums to a total cost...", "infrastructure_cost": "Infrastructure cost", "infrastructure_cost_desc": "The cost based on raw usage data from the underlying infrastructure.", - "name_column_title": "$t(group_by.values.{{groupBy}}) names", "supplementary_aria_label": "A description of infrastructure and supplementary cost", "supplementary_cost": "Supplementary cost", "supplementary_cost_desc": "All costs not directly attributed to the infrastructure. These costs are determined by applying a price list within a cost model to OpenShift cluster metrics.", - "tag_column_title": "Tag names", "title": "OpenShift details", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost: {{infrastructureCost}} and supplementary cost: {{supplementaryCost}}" }, diff --git a/src/pages/views/details/awsDetails/detailsHeader.tsx b/src/pages/views/details/awsDetails/detailsHeader.tsx index c2b973059..f01b209bd 100644 --- a/src/pages/views/details/awsDetails/detailsHeader.tsx +++ b/src/pages/views/details/awsDetails/detailsHeader.tsx @@ -86,7 +86,7 @@ class DetailsHeaderBase extends React.Component { {formatCurrency(hasCost ? report.meta.total.cost.total.value : 0)}
-
{t('aws_details.total_cost')}
+
{t('details.total_cost')}
{getSinceDateRangeString()}
diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index e0fc0915d..4312e7d77 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -133,10 +133,10 @@ class DetailsTableBase extends React.Component { groupByTagKey || groupByOrg ? [ { - title: groupByOrg ? t('aws_details.org_unit_column_title') : t('aws_details.tag_column_title'), + title: groupByOrg ? t('aws_details.org_unit_column_title') : t('details.tag_names'), }, { - title: t('aws_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -150,11 +150,11 @@ class DetailsTableBase extends React.Component { : [ { orderBy: groupById === 'account' ? 'account_alias' : groupById, - title: t('aws_details.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, { - title: t('aws_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -263,7 +263,7 @@ class DetailsTableBase extends React.Component { return ( - {t('aws_details.empty_state')} + {t('details.empty_state')} ); }; diff --git a/src/pages/views/details/azureDetails/detailsHeader.tsx b/src/pages/views/details/azureDetails/detailsHeader.tsx index b062e2ec2..a2533131c 100644 --- a/src/pages/views/details/azureDetails/detailsHeader.tsx +++ b/src/pages/views/details/azureDetails/detailsHeader.tsx @@ -82,7 +82,7 @@ class DetailsHeaderBase extends React.Component { {formatCurrency(hasCost ? report.meta.total.cost.total.value : 0)}
-
{t('azure_details.total_cost')}
+
{t('details.total_cost')}
{getSinceDateRangeString()}
diff --git a/src/pages/views/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx index 1c2c38e44..6798a781d 100644 --- a/src/pages/views/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -104,10 +104,10 @@ class DetailsTableBase extends React.Component { const columns = groupByTagKey ? [ { - title: t('azure_details.tag_column_title'), + title: t('details.tag_names'), }, { - title: t('azure_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -121,11 +121,11 @@ class DetailsTableBase extends React.Component { : [ { orderBy: groupById, - title: t('azure_details.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, { - title: t('azure_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -220,7 +220,7 @@ class DetailsTableBase extends React.Component { return ( - {t('azure_details.empty_state')} + {t('details.empty_state')} ); }; diff --git a/src/pages/views/details/gcpDetails/detailsHeader.tsx b/src/pages/views/details/gcpDetails/detailsHeader.tsx index 62a79032a..4a0c27b04 100644 --- a/src/pages/views/details/gcpDetails/detailsHeader.tsx +++ b/src/pages/views/details/gcpDetails/detailsHeader.tsx @@ -83,7 +83,7 @@ class DetailsHeaderBase extends React.Component { {formatCurrency(hasCost ? report.meta.total.cost.total.value : 0)}
-
{t('gcp_details.total_cost')}
+
{t('details.total_cost')}
{getSinceDateRangeString()}
diff --git a/src/pages/views/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx index b5bb7136e..8ce1fbca3 100644 --- a/src/pages/views/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -104,10 +104,10 @@ class DetailsTableBase extends React.Component { const columns = groupByTagKey ? [ { - title: t('gcp_details.tag_column_title'), + title: t('details.tag_names'), }, { - title: t('gcp_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -121,11 +121,11 @@ class DetailsTableBase extends React.Component { : [ { orderBy: groupById, - title: t('gcp_details.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, { - title: t('gcp_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -220,7 +220,7 @@ class DetailsTableBase extends React.Component { return ( - {t('gcp_details.empty_state')} + {t('details.empty_state')} ); }; diff --git a/src/pages/views/details/ibmDetails/detailsHeader.tsx b/src/pages/views/details/ibmDetails/detailsHeader.tsx index f2ad5ca51..7957c2c3e 100644 --- a/src/pages/views/details/ibmDetails/detailsHeader.tsx +++ b/src/pages/views/details/ibmDetails/detailsHeader.tsx @@ -83,7 +83,7 @@ class DetailsHeaderBase extends React.Component { {formatCurrency(hasCost ? report.meta.total.cost.total.value : 0)}
-
{t('ibm_details.total_cost')}
+
{t('details.total_cost')}
{getSinceDateRangeString()}
diff --git a/src/pages/views/details/ibmDetails/detailsTable.tsx b/src/pages/views/details/ibmDetails/detailsTable.tsx index 5736fc888..a33d30c8a 100644 --- a/src/pages/views/details/ibmDetails/detailsTable.tsx +++ b/src/pages/views/details/ibmDetails/detailsTable.tsx @@ -104,10 +104,10 @@ class DetailsTableBase extends React.Component { const columns = groupByTagKey ? [ { - title: t('ibm_details.tag_column_title'), + title: t('details.tag_names'), }, { - title: t('ibm_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -121,11 +121,11 @@ class DetailsTableBase extends React.Component { : [ { orderBy: groupById, - title: t('ibm_details.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, { - title: t('ibm_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'cost', @@ -220,7 +220,7 @@ class DetailsTableBase extends React.Component { return ( - {t('ibm_details.empty_state')} + {t('details.empty_state')} ); }; diff --git a/src/pages/views/details/ocpDetails/detailsHeader.tsx b/src/pages/views/details/ocpDetails/detailsHeader.tsx index 096c32907..9e6ad6ae3 100644 --- a/src/pages/views/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/views/details/ocpDetails/detailsHeader.tsx @@ -106,7 +106,7 @@ class DetailsHeaderBase extends React.Component {
<Tooltip - content={t('ocp_details.total_cost_tooltip', { + content={t('details.total_cost_tooltip', { supplementaryCost, infrastructureCost, })} diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index c445531a4..de6860c32 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -105,10 +105,10 @@ class DetailsTableBase extends React.Component<DetailsTableProps> { ? [ // Sorting with tag keys is not supported { - title: t('ocp_details.tag_column_title'), + title: t('details.tag_names'), }, { - title: t('ocp_details.change_column_title'), + title: t('details.month_over_month_change'), }, { title: t('ocp_details.infrastructure_cost'), @@ -128,11 +128,11 @@ class DetailsTableBase extends React.Component<DetailsTableProps> { : [ { orderBy: groupById, - title: t('ocp_details.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, { - title: t('ocp_details.change_column_title'), + title: t('details.month_over_month_change'), }, { orderBy: 'infrastructure_cost', @@ -254,7 +254,7 @@ class DetailsTableBase extends React.Component<DetailsTableProps> { return ( <EmptyState> <EmptyStateIcon icon={CalculatorIcon} /> - <EmptyStateBody>{t('ocp_details.empty_state')}</EmptyStateBody> + <EmptyStateBody>{t('details.empty_state')}</EmptyStateBody> </EmptyState> ); }; diff --git a/src/pages/views/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx index 3fa52e645..6167101ca 100644 --- a/src/pages/views/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -115,7 +115,7 @@ class ExplorerTableBase extends React.Component<ExplorerTableProps> { ? [ { cellTransforms: [nowrap], - title: groupByOrg ? t('explorer.org_unit_column_title') : t('explorer.tag_column_title'), + title: groupByOrg ? t('explorer.org_unit_column_title') : t('details.tag_names'), }, ] : [ @@ -125,7 +125,7 @@ class ExplorerTableBase extends React.Component<ExplorerTableProps> { (groupById === 'account' && perspective !== PerspectiveType.gcp) || perspective !== PerspectiveType.ibm ? 'account_alias' : groupById, - title: t('explorer.name_column_title', { groupBy: groupById }), + title: t('details.resource_names', { groupBy: groupById }), transforms: [sortable], }, ]; @@ -257,7 +257,7 @@ class ExplorerTableBase extends React.Component<ExplorerTableProps> { return ( <EmptyState> <EmptyStateIcon icon={CalculatorIcon} /> - <EmptyStateBody>{t('explorer.empty_state')}</EmptyStateBody> + <EmptyStateBody>{t('details.empty_state')}</EmptyStateBody> </EmptyState> ); }; From 4a16e684d5cbf58267840acbb98fc0bf9b160e22 Mon Sep 17 00:00:00 2001 From: Doug Donahue <57504257+ddonahue007@users.noreply.github.com> Date: Tue, 9 Mar 2021 12:06:37 -0500 Subject: [PATCH 163/200] consolidate duplicate i18n keys for dashboards. (#1904) * consolidate duplicate i18n keys for dashboards. * fixed unordered keys --- scripts/utils/i18n_excludes | 1 + src/locales/en.json | 53 +++++-------------- .../awsCloudDashboardWidgets.ts | 10 ++-- .../awsDashboard/awsDashboardWidgets.ts | 10 ++-- .../azureCloudDashboardWidgets.ts | 10 ++-- .../azureDashboard/azureDashboardWidgets.ts | 10 ++-- .../gcpDashboard/gcpDashboardWidgets.ts | 10 ++-- .../ibmDashboard/ibmDashboardWidgets.ts | 10 ++-- .../ocpCloudDashboardWidgets.ts | 8 +-- .../ocpDashboard/ocpDashboardWidgets.ts | 6 +-- .../ocpSupplementaryDashboardWidgets.ts | 6 +-- .../ocpUsageDashboardWidgets.ts | 6 +-- 12 files changed, 57 insertions(+), 83 deletions(-) diff --git a/scripts/utils/i18n_excludes b/scripts/utils/i18n_excludes index b9cec24d7..ceb9aee5d 100644 --- a/scripts/utils/i18n_excludes +++ b/scripts/utils/i18n_excludes @@ -11,6 +11,7 @@ breakdown.historical_chart.view_data breakdown.navigation.aws breakdown.navigation.azure breakdown.navigation.gcp +breakdown.navigation.ibm breakdown.navigation.ocp breakdown.navigation.ocpunit_tooltips.core-hours chart.cost_forecast_cone_legend_label_no_data diff --git a/src/locales/en.json b/src/locales/en.json index 111bf36c3..c4e5f7250 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -3,21 +3,13 @@ "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services filtered by OpenShift cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})" }, "aws_dashboard": { "compute_title": "Compute (EC2) instances usage", "cost_title": "Amazon Web Services cost", "cost_trend_title": "Amazon Web Services cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "Amazon Web Services daily cost comparison ({{units}})" }, "aws_details": { "org_unit_column_title": "Names" @@ -26,21 +18,13 @@ "compute_title": "Virtual machines usage", "cost_title": "Microsoft Azure filtered by OpenShift cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})" }, "azure_dashboard": { "compute_title": "Virtual machines usage", "cost_title": "Microsoft Azure cost", "cost_trend_title": "Microsoft Azure cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "Microsoft Azure daily cost comparison ({{units}})" }, "breakdown": { "back_to_details": "Back to $t(breakdown.navigation.{{value}}) $t(group_by.top_values.{{groupBy}}) details", @@ -356,7 +340,11 @@ "dashboard": { "cumulative_cost_comparison": "Cumulative cost comparison ({{units}})", "daily_usage_comparison": "Daily usage comparison ({{units}})", + "database_title": "Database services cost", + "network_title": "Network services cost", + "storage_title": "Storage services usage", "total_cost_tooltip": "This total cost is the sum of the infrastructure cost {{infrastructureCost}} and supplementary cost {{supplementaryCost}}", + "usage": "Usage", "widget_subtitle": "{{startDate}} $t(months.{{month}})", "widget_subtitle_plural": "{{startDate}}-{{endDate}} $t(months.{{month}})" }, @@ -599,11 +587,7 @@ "compute_title": "Compute instances usage", "cost_title": "Google Cloud Platform Services cost", "cost_trend_title": "Google Cloud Platform Services cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "Google Cloud Platform Services daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "Google Cloud Platform Services daily cost comparison ({{units}})" }, "group_by": { "all": "All $t(group_by.values.{{groupBy}}, { 'count': 5 })", @@ -674,11 +658,7 @@ "compute_title": "Compute instances usage", "cost_title": "IBM Cloud Services cost", "cost_trend_title": "IBM Cloud Services cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "IBM Cloud Services daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "IBM Cloud Services daily cost comparison ({{units}})" }, "inactive_sources": { "go_to_sources": "Go to Sources for more information", @@ -788,17 +768,12 @@ "compute_title": "Compute services usage", "cost_title": "All cloud filtered by OpenShift cost", "cost_trend_title": "All cloud filtered by OpenShift cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "All cloud filtered by OpenShift daily cost comparison ({{units}})", - "database_title": "Database services cost", - "network_title": "Network services cost", - "storage_title": "Storage services usage", - "usage_label": "Usage" + "daily_cost_trend_title": "All cloud filtered by OpenShift daily cost comparison ({{units}})" }, "ocp_dashboard": { "cost_title": "All OpenShift cost", "cost_trend_title": "All OpenShift cumulative cost comparison ({{units}})", - "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})", - "usage_label": "Usage" + "daily_cost_trend_title": "All OpenShift daily cost comparison ({{units}})" }, "ocp_details": { "infrastructure_cost": "Infrastructure cost", @@ -812,15 +787,13 @@ "ocp_supplementary_dashboard": { "cost_title": "OpenShift supplementary cost", "cost_trend_title": "OpenShift cumulative supplementary cost comparison ({{units}})", - "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})", - "usage_label": "Usage" + "daily_cost_trend_title": "OpenShift daily supplementary cost comparison ({{units}})" }, "ocp_usage_dashboard": { "cost_title": "OpenShift usage cost", "cost_trend_title": "Metering cumulative cost comparison ({{units}})", "cpu_title": "OpenShift CPU usage and requests", "memory_title": "OpenShift memory usage and requests", - "usage_label": "Usage", "volume_title": "OpenShift volume usage and requests" }, "onboarding": { diff --git a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts index 9b6880ecd..51d6ac7b3 100644 --- a/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts +++ b/src/store/dashboard/awsCloudDashboard/awsCloudDashboardWidgets.ts @@ -29,7 +29,7 @@ export const computeWidget: AwsCloudDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'aws_cloud_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service: 'AmazonEC2', @@ -94,7 +94,7 @@ export const costSummaryWidget: AwsCloudDashboardWidget = { export const databaseWidget: AwsCloudDashboardWidget = { id: getId(), - titleKey: 'aws_cloud_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.database, details: { @@ -131,7 +131,7 @@ export const databaseWidget: AwsCloudDashboardWidget = { export const networkWidget: AwsCloudDashboardWidget = { id: getId(), - titleKey: 'aws_cloud_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.network, details: { @@ -168,7 +168,7 @@ export const networkWidget: AwsCloudDashboardWidget = { export const storageWidget: AwsCloudDashboardWidget = { id: getId(), - titleKey: 'aws_cloud_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.awsCloud, reportType: ReportType.storage, details: { @@ -182,7 +182,7 @@ export const storageWidget: AwsCloudDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'aws_cloud_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts index 72a76a5fc..991bd87be 100644 --- a/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts +++ b/src/store/dashboard/awsDashboard/awsDashboardWidgets.ts @@ -30,7 +30,7 @@ export const computeWidget: AwsDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'aws_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service: 'AmazonEC2', @@ -98,7 +98,7 @@ export const costSummaryWidget: AwsDashboardWidget = { export const databaseWidget: AwsDashboardWidget = { id: getId(), - titleKey: 'aws_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.aws, reportType: ReportType.database, details: { @@ -135,7 +135,7 @@ export const databaseWidget: AwsDashboardWidget = { export const networkWidget: AwsDashboardWidget = { id: getId(), - titleKey: 'aws_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.aws, reportType: ReportType.network, details: { @@ -172,7 +172,7 @@ export const networkWidget: AwsDashboardWidget = { export const storageWidget: AwsDashboardWidget = { id: getId(), - titleKey: 'aws_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.aws, reportType: ReportType.storage, details: { @@ -186,7 +186,7 @@ export const storageWidget: AwsDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'aws_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts index 0b2b0fe0b..4545faa47 100644 --- a/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts +++ b/src/store/dashboard/azureCloudDashboard/azureCloudDashboardWidgets.ts @@ -53,7 +53,7 @@ export const costSummaryWidget: AzureCloudDashboardWidget = { export const databaseWidget: AzureCloudDashboardWidget = { id: getId(), - titleKey: 'azure_cloud_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.database, details: { @@ -90,7 +90,7 @@ export const databaseWidget: AzureCloudDashboardWidget = { export const networkWidget: AzureCloudDashboardWidget = { id: getId(), - titleKey: 'azure_cloud_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.network, details: { @@ -127,7 +127,7 @@ export const networkWidget: AzureCloudDashboardWidget = { export const storageWidget: AzureCloudDashboardWidget = { id: getId(), - titleKey: 'azure_cloud_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.azureCloud, reportType: ReportType.storage, details: { @@ -142,7 +142,7 @@ export const storageWidget: AzureCloudDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'azure_cloud_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service_name: 'Storage', @@ -188,7 +188,7 @@ export const virtualMachineWidget: AzureCloudDashboardWidget = { fractionDigits: 0, }, units: 'vm-hours', - usageKey: 'azure_cloud_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service_name: 'Virtual Machines', diff --git a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts index ef1c28a90..bf8ad7a08 100644 --- a/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts +++ b/src/store/dashboard/azureDashboard/azureDashboardWidgets.ts @@ -57,7 +57,7 @@ export const costSummaryWidget: AzureDashboardWidget = { export const databaseWidget: AzureDashboardWidget = { id: getId(), - titleKey: 'azure_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.azure, reportType: ReportType.database, details: { @@ -94,7 +94,7 @@ export const databaseWidget: AzureDashboardWidget = { export const networkWidget: AzureDashboardWidget = { id: getId(), - titleKey: 'azure_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.azure, reportType: ReportType.network, details: { @@ -131,7 +131,7 @@ export const networkWidget: AzureDashboardWidget = { export const storageWidget: AzureDashboardWidget = { id: getId(), - titleKey: 'azure_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.azure, reportType: ReportType.storage, details: { @@ -146,7 +146,7 @@ export const storageWidget: AzureDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'azure_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service_name: 'Storage', @@ -192,7 +192,7 @@ export const virtualMachineWidget: AzureDashboardWidget = { fractionDigits: 0, }, units: 'vm-hours', - usageKey: 'azure_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service_name: 'Virtual Machines', diff --git a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts index fcd6782ad..d32bc8e5c 100644 --- a/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts +++ b/src/store/dashboard/gcpDashboard/gcpDashboardWidgets.ts @@ -31,7 +31,7 @@ export const computeWidget: GcpDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'gcp_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service: 'Compute Engine', @@ -99,7 +99,7 @@ export const costSummaryWidget: GcpDashboardWidget = { export const databaseWidget: GcpDashboardWidget = { id: getId(), - titleKey: 'gcp_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.gcp, reportType: ReportType.database, details: { @@ -136,7 +136,7 @@ export const databaseWidget: GcpDashboardWidget = { export const networkWidget: GcpDashboardWidget = { id: getId(), - titleKey: 'gcp_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.gcp, reportType: ReportType.network, details: { @@ -175,7 +175,7 @@ export const networkWidget: GcpDashboardWidget = { export const storageWidget: GcpDashboardWidget = { id: getId(), - titleKey: 'gcp_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.gcp, reportType: ReportType.storage, details: { @@ -189,7 +189,7 @@ export const storageWidget: GcpDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'gcp_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts b/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts index f129495fc..77725d031 100644 --- a/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts +++ b/src/store/dashboard/ibmDashboard/ibmDashboardWidgets.ts @@ -31,7 +31,7 @@ export const computeWidget: IbmDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ibm_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service: 'Compute Engine', @@ -99,7 +99,7 @@ export const costSummaryWidget: IbmDashboardWidget = { export const databaseWidget: IbmDashboardWidget = { id: getId(), - titleKey: 'ibm_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.ibm, reportType: ReportType.database, details: { @@ -136,7 +136,7 @@ export const databaseWidget: IbmDashboardWidget = { export const networkWidget: IbmDashboardWidget = { id: getId(), - titleKey: 'ibm_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.ibm, reportType: ReportType.network, details: { @@ -175,7 +175,7 @@ export const networkWidget: IbmDashboardWidget = { export const storageWidget: IbmDashboardWidget = { id: getId(), - titleKey: 'ibm_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.ibm, reportType: ReportType.storage, details: { @@ -189,7 +189,7 @@ export const storageWidget: IbmDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ibm_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts index 126543187..28d0ae7fa 100644 --- a/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts +++ b/src/store/dashboard/ocpCloudDashboard/ocpCloudDashboardWidgets.ts @@ -65,7 +65,7 @@ export const computeWidget: OcpCloudDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_cloud_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, filter: { service: 'AmazonEC2', @@ -84,7 +84,7 @@ export const computeWidget: OcpCloudDashboardWidget = { export const databaseWidget: OcpCloudDashboardWidget = { id: getId(), - titleKey: 'ocp_cloud_dashboard.database_title', + titleKey: 'dashboard.database_title', reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.database, details: { @@ -111,7 +111,7 @@ export const databaseWidget: OcpCloudDashboardWidget = { export const networkWidget: OcpCloudDashboardWidget = { id: getId(), - titleKey: 'ocp_cloud_dashboard.network_title', + titleKey: 'dashboard.network_title', reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.network, details: { @@ -138,7 +138,7 @@ export const networkWidget: OcpCloudDashboardWidget = { export const storageWidget: OcpCloudDashboardWidget = { id: getId(), - titleKey: 'ocp_cloud_dashboard.storage_title', + titleKey: 'dashboard.storage_title', reportPathsType: ReportPathsType.ocpCloud, reportType: ReportType.storage, details: { diff --git a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts index 63c577617..093dcb332 100644 --- a/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts +++ b/src/store/dashboard/ocpDashboard/ocpDashboardWidgets.ts @@ -71,7 +71,7 @@ export const cpuWidget: OcpDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, @@ -108,7 +108,7 @@ export const memoryWidget: OcpDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, @@ -145,7 +145,7 @@ export const volumeWidget: OcpDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts index a130e404f..c53d530b4 100644 --- a/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts +++ b/src/store/dashboard/ocpSupplementaryDashboard/ocpSupplementaryDashboardWidgets.ts @@ -66,7 +66,7 @@ export const cpuWidget: OcpSupplementaryDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_supplementary_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, @@ -106,7 +106,7 @@ export const memoryWidget: OcpSupplementaryDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_supplementary_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, @@ -146,7 +146,7 @@ export const volumeWidget: OcpSupplementaryDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_supplementary_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, diff --git a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts index cc4c29754..4b60e25b3 100644 --- a/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts +++ b/src/store/dashboard/ocpUsageDashboard/ocpUsageDashboardWidgets.ts @@ -56,7 +56,7 @@ export const cpuWidget: OcpUsageDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_usage_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { @@ -89,7 +89,7 @@ export const memoryWidget: OcpUsageDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_usage_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, @@ -121,7 +121,7 @@ export const volumeWidget: OcpUsageDashboardWidget = { usageFormatOptions: { fractionDigits: 0, }, - usageKey: 'ocp_usage_dashboard.usage_label', + usageKey: 'dashboard.usage_label', }, trend: { computedReportItem: ComputedReportItemType.usage, From 6d4bb570d4eff1f12957a6f95397c7c7af9360dc Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Tue, 9 Mar 2021 12:24:49 -0500 Subject: [PATCH 164/200] Update app.tsx Omit the example from app.tsx, so we can merge this PR. --- src/app.tsx | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/app.tsx b/src/app.tsx index f3bfe4a8d..81698db9a 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,4 +1,3 @@ -import AsyncComponent from '@redhat-cloud-services/frontend-components/AsyncComponent'; import { I18nProvider } from 'components/i18n'; import Maintenance from 'pages/state/maintenance'; import React from 'react'; @@ -67,17 +66,7 @@ export class App extends React.Component<AppProps, AppState> { const { maintenanceMode } = this.state; const route = maintenanceMode ? <Maintenance /> : <Routes />; - return ( - <div> - <AsyncComponent - scope="costManagement" - appName="cost-management" - module="./OcpOverviewWidget" - title="Custom title prop" - /> - <I18nProvider locale={this.state.locale}>{route}</I18nProvider> - </div> - ); + return <I18nProvider locale={this.state.locale}>{route}</I18nProvider>; } } From 29e6f9d82adb17410f5d44ef4f9f0db8336cacaa Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Tue, 9 Mar 2021 13:22:49 -0500 Subject: [PATCH 165/200] Updated snapshots for federated module updates (#1906) * Updated snapshots for federated module updates * Udpated frontend-components package --- koku-ui-manifest | 647 ++++---- package.json | 4 +- src/__snapshots__/app.test.tsx.snap | 50 +- yarn.lock | 2291 ++++++++++++--------------- 4 files changed, 1331 insertions(+), 1661 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index e2e41d452..e966c2732 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -1,32 +1,39 @@ mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.11.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/core:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.11.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-member-expression-to-functions:7.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-imports:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-transforms:7.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-optimise-call-expression:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-replace-supers:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-simple-access:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/code-frame:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/compat-data:7.13.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/core:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/core:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.13.9.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/generator:7.13.9.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-compilation-targets:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-function-name:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-get-function-arity:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-member-expression-to-functions:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-imports:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-module-transforms:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-optimise-call-expression:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-plugin-utils:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-replace-supers:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-simple-access:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-split-export-declaration:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-identifier:7.12.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helper-validator-option:7.12.17.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/helpers:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/highlight:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/parser:7.13.10.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-async-generators:7.8.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-bigint:7.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-class-properties:7.10.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-class-properties:7.12.13.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-import-meta:7.10.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-json-strings:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-logical-assignment-operators:7.10.4.yarnlock @@ -35,39 +42,38 @@ mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-numeric-separator:7.10.4.ya mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-object-rest-spread:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-optional-catch-binding:7.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-optional-chaining:7.8.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-top-level-await:7.12.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime-corejs3:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.11.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.12.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/template:7.10.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/@babel/types:7.11.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/plugin-syntax-top-level-await:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime-corejs3:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/runtime:7.13.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/template:7.12.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/traverse:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@babel/types:7.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@bcoe/v8-coverage:0.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@cnakazawa/watch:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@discoveryjs/json-ext:0.5.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@eslint/eslintrc:0.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@eslint/eslintrc:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/fontawesome-common-types:0.2.34.yarnlock mgmt_services/cost-mgmt:koku-ui/@fortawesome/free-solid-svg-icons:5.15.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@istanbuljs/load-nyc-config:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@istanbuljs/schema:0.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@istanbuljs/schema:0.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/console:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/core:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/environment:26.6.2.yarnlock @@ -78,67 +84,68 @@ mgmt_services/cost-mgmt:koku-ui/@jest/source-map:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/test-result:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/test-sequencer:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/transform:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@jest/types:25.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@jest/types:26.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@jest/types:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.87.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.7.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:2.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.94.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/core:0.0.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@scalprum/react-core:0.0.16.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/browser:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/core:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/hub:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/minimal:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/types:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sentry/utils:5.26.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@sinonjs/commons:1.8.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/browser:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/core:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/hub:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/minimal:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/types:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sentry/utils:5.30.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@sinonjs/commons:1.8.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@sinonjs/fake-timers:6.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@testing-library/dom:7.29.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/@testing-library/dom:7.30.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@testing-library/react:11.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/anymatch:1.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/aria-query:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.10.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/aria-query:4.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.12.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__core:7.1.12.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/babel__generator:7.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__template:7.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.0.15.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.0.15.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.0.15.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/cheerio:0.22.22.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/cheerio:0.22.24.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__template:7.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/babel__traverse:7.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/cheerio:0.22.25.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/cheerio:0.22.25.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/classnames:2.2.11.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/date-fns:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/debounce-promise:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/enzyme:3.10.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/eslint-scope:3.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/eslint:7.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/eslint:7.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/estree:0.0.46.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/glob:7.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/graceful-fs:4.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/graceful-fs:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/history:4.7.8.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/hoist-non-react-statics:3.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/html-minifier-terser:5.1.1.yarnlock @@ -149,18 +156,17 @@ mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-coverage:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-coverage:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-coverage:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-lib-report:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/istanbul-reports:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/istanbul-reports:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.14.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/jest:26.0.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/json-schema:7.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/json5:0.0.29.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/minimatch:3.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/node:14.11.8.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/node:14.14.33.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/normalize-package-data:2.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/prettier:2.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/prettier:2.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/prop-types:15.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/prop-types:15.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/qs:6.9.5.yarnlock @@ -168,28 +174,29 @@ mgmt_services/cost-mgmt:koku-ui/@types/react-dom:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react-i18next:8.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react-redux:7.1.16.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react-router-dom:5.1.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/react-router:5.1.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/react-transition-group:4.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/react:16.9.52.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/react-router:5.1.12.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/react-transition-group:4.4.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/react:17.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/scheduler:0.16.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/source-list-map:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/stack-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/tapable:1.0.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/uglify-js:3.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/uglify-js:3.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/warning:3.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/webpack-sources:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/webpack-sources:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@types/webpack:4.41.26.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/yargs-parser:15.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/@types/yargs:15.0.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/eslint-plugin:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/experimental-utils:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/parser:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/scope-manager:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/types:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/typescript-estree:4.15.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/visitor-keys:4.15.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/yargs-parser:20.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@types/yargs:15.0.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/eslint-plugin:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/experimental-utils:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/parser:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/scope-manager:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/types:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/typescript-estree:4.17.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/@typescript-eslint/visitor-keys:4.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/ast:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/floating-point-hex-parser:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@webassemblyjs/helper-api-error:1.11.0.yarnlock @@ -215,16 +222,17 @@ mgmt_services/cost-mgmt:koku-ui/@xtuc/ieee754:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@xtuc/long:4.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/@yarnpkg/lockfile:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/abab:2.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/abab:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/accepts:1.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/accepts:1.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/accepts:1.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-globals:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-jsx:5.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/acorn-jsx:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn-walk:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/acorn:7.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/acorn:8.0.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/acorn:8.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/acorn:8.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/airbnb-prop-types:2.16.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-errors:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv-keywords:3.5.2.yarnlock @@ -234,7 +242,7 @@ mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ajv:6.12.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/ajv:7.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/ajv:7.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-colors:3.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-colors:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/ansi-escapes:4.3.1.yarnlock @@ -258,14 +266,15 @@ mgmt_services/cost-mgmt:koku-ui/arr-union:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/array-filter:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/array-flatten:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/array-flatten:2.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/array-includes:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-union:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array-union:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/array-uniq:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/array-unique:0.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/array.prototype.find:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/array.prototype.flatmap:1.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/array.prototype.flat:1.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/array.prototype.flatmap:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/asap:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/asn1:0.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/assert-plus:1.0.0.yarnlock @@ -283,11 +292,10 @@ mgmt_services/cost-mgmt:koku-ui/awesome-debounce-promise:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/awesome-imperative-promise:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/awesome-only-resolves-last-promise:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/aws-sign2:0.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/aws4:1.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/axe-core:3.5.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/aws4:1.11.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/axe-core:4.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock mgmt_services/cost-mgmt:koku-ui/axios:0.21.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/axios:0.19.2.yarnlock mgmt_services/cost-mgmt:koku-ui/axobject-query:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-eslint:9.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/babel-jest:26.6.3.yarnlock @@ -302,7 +310,7 @@ mgmt_services/cost-mgmt:koku-ui/batch:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/bcrypt-pbkdf:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/big.js:5.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/binary-extensions:1.13.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/binary-extensions:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/binary-extensions:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bindings:1.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/body-parser:1.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/bonjour:3.5.0.yarnlock @@ -326,19 +334,18 @@ mgmt_services/cost-mgmt:koku-ui/cache-base:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/call-bind:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/callsites:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/camel-case:4.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/camel-case:4.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:5.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/camelcase:6.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/camelcase:6.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/caniuse-lite:1.0.30001185.yarnlock +mgmt_services/cost-mgmt:koku-ui/camelcase:6.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/caniuse-lite:1.0.30001197.yarnlock mgmt_services/cost-mgmt:koku-ui/capture-exit:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/caseless:0.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:2.4.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/chalk:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/chalk:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/char-regex:1.0.2.yarnlock @@ -347,7 +354,7 @@ mgmt_services/cost-mgmt:koku-ui/character-entities:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/character-reference-invalid:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio-select-tmp:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/cheerio:1.0.0-rc.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/chokidar:3.4.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/chokidar:3.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/chokidar:2.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/chrome-trace-event:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ci-info:2.0.0.yarnlock @@ -368,15 +375,15 @@ mgmt_services/cost-mgmt:koku-ui/color-convert:1.9.3.yarnlock mgmt_services/cost-mgmt:koku-ui/color-convert:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/color-name:1.1.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/colorette:1.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/colorette:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/colorette:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock mgmt_services/cost-mgmt:koku-ui/combined-stream:1.0.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/commander:6.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/commander:7.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/commander:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:2.20.3.yarnlock mgmt_services/cost-mgmt:koku-ui/commander:4.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/commander:7.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/comment-parser:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/component-emitter:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/compressible:2.0.18.yarnlock @@ -393,8 +400,8 @@ mgmt_services/cost-mgmt:koku-ui/cookie-signature:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/cookie:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-descriptor:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/copy-webpack-plugin:7.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/core-js-pure:3.6.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/core-js:2.6.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/core-js-pure:3.9.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/core-js:2.6.12.yarnlock mgmt_services/cost-mgmt:koku-ui/core-util-is:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/core-util-is:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-env:7.0.3.yarnlock @@ -405,15 +412,15 @@ mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/cross-spawn:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/css-in-js-utils:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/css-loader:5.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/css-select:1.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/css-select:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/css-select:3.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/css-what:2.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/css-what:3.4.2.yarnlock mgmt_services/cost-mgmt:koku-ui/css-what:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cssesc:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/cssom:0.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/cssom:0.3.8.yarnlock mgmt_services/cost-mgmt:koku-ui/cssstyle:2.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/csstype:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/csstype:3.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-array:1.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-collection:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/d3-color:1.4.1.yarnlock @@ -431,19 +438,18 @@ mgmt_services/cost-mgmt:koku-ui/d3-timer:1.0.10.yarnlock mgmt_services/cost-mgmt:koku-ui/damerau-levenshtein:1.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/dashdash:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/data-urls:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/date-fns:2.16.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/date-fns:2.19.0.yarnlock mgmt_services/cost-mgmt:koku-ui/date-fns:2.17.0.yarnlock mgmt_services/cost-mgmt:koku-ui/debounce-promise:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:2.6.9.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:3.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/debug:4.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/debug:4.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/decamelize:1.2.0.yarnlock @@ -466,7 +472,6 @@ mgmt_services/cost-mgmt:koku-ui/depd:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/destroy:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/detect-newline:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/detect-node:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/diff-sequences:25.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/diff-sequences:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/dir-glob:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/discontinuous-range:1.0.0.yarnlock @@ -482,37 +487,36 @@ mgmt_services/cost-mgmt:koku-ui/dom-helpers:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-helpers:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-helpers:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-serializer:0.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/dom-serializer:1.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/dom-serializer:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/dom-serializer:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:1.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/domelementtype:2.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/domelementtype:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domelementtype:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domexception:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/domhandler:2.4.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/domhandler:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domhandler:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/domutils:1.5.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/domutils:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:1.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/domutils:2.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/dot-case:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/dot-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/ecc-jsbn:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/ee-first:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/electron-to-chromium:1.3.663.yarnlock -mgmt_services/cost-mgmt:koku-ui/emittery:0.7.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/electron-to-chromium:1.3.683.yarnlock +mgmt_services/cost-mgmt:koku-ui/emittery:0.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:7.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/emoji-regex:8.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/emoji-regex:9.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/emoji-regex:9.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/emojis-list:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/encodeurl:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/end-of-stream:1.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:4.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/enhanced-resolve:5.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/enquirer:2.3.6.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/entities:2.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/entities:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/entities:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/envinfo:7.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-adapter-react-16:1.15.6.yarnlock @@ -521,15 +525,12 @@ mgmt_services/cost-mgmt:koku-ui/enzyme-shallow-equal:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-shallow-equal:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme-to-json:3.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/enzyme:3.11.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/errno:0.1.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/errno:0.1.8.yarnlock mgmt_services/cost-mgmt:koku-ui/error-ex:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/error-ex:1.3.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.17.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0-next.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/es-abstract:1.18.0.yarnlock mgmt_services/cost-mgmt:koku-ui/es-module-lexer:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/es-to-primitive:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/escalade:3.1.1.yarnlock @@ -537,7 +538,7 @@ mgmt_services/cost-mgmt:koku-ui/escape-html:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/escape-string-regexp:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/escodegen:1.14.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/escodegen:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-config-airbnb-base:12.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-config-airbnb:16.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-config-prettier:2.10.0.yarnlock @@ -548,17 +549,17 @@ mgmt_services/cost-mgmt:koku-ui/eslint-import-resolver-node:0.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-module-utils:2.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-import:2.22.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jest:21.27.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsdoc:32.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsx-a11y:6.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsdoc:32.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-jsx-a11y:6.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-markdown:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-node:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-patternfly-react:4.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:2.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-prettier:3.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-promise:3.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react-hooks:4.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react-hooks:4.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.22.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.22.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint-plugin-react:7.21.4.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-rulesdir:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-simple-import-sort:5.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-plugin-standard:3.1.0.yarnlock @@ -572,8 +573,8 @@ mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eslint-visitor-keys:2.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/eslint:7.20.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/espree:7.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/eslint:7.21.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/espree:7.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/espree:7.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/esprima:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/esprima:4.0.1.yarnlock @@ -581,17 +582,16 @@ mgmt_services/cost-mgmt:koku-ui/esquery:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/esrecurse:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/esrecurse:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/estraverse:4.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/estraverse:4.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/estraverse:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/estraverse:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/esutils:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/etag:1.8.1.yarnlock mgmt_services/cost-mgmt:koku-ui/eventemitter3:4.0.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/events:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/events:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/eventsource:1.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/exec-sh:0.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/execa:4.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/execa:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/execa:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/exit:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/expand-brackets:2.1.4.yarnlock @@ -608,18 +608,18 @@ mgmt_services/cost-mgmt:koku-ui/extsprintf:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-deep-equal:3.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-diff:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/fast-glob:3.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/fast-glob:3.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/fast-glob:3.2.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/fast-glob:3.2.5.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-json-stable-stringify:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-json-stable-stringify:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-levenshtein:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/fast-levenshtein:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/fastest-levenshtein:1.0.12.yarnlock -mgmt_services/cost-mgmt:koku-ui/fastq:1.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/fastq:1.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/faye-websocket:0.11.3.yarnlock mgmt_services/cost-mgmt:koku-ui/fb-watchman:2.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/file-entry-cache:6.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/file-selector:0.1.13.yarnlock +mgmt_services/cost-mgmt:koku-ui/file-entry-cache:6.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/file-selector:0.1.19.yarnlock mgmt_services/cost-mgmt:koku-ui/file-uri-to-path:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fill-range:7.0.1.yarnlock @@ -633,9 +633,8 @@ mgmt_services/cost-mgmt:koku-ui/find-up:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/flat-cache:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/flatted:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/focus-trap:6.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.5.10.yarnlock -mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/follow-redirects:1.13.3.yarnlock mgmt_services/cost-mgmt:koku-ui/for-in:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/forever-agent:0.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/form-data:2.3.3.yarnlock @@ -644,18 +643,19 @@ mgmt_services/cost-mgmt:koku-ui/fragment-cache:0.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/fresh:0.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/fs.realpath:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/fsevents:1.2.13.yarnlock -mgmt_services/cost-mgmt:koku-ui/fsevents:2.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/fsevents:2.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/fsevents:2.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/fsevents:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/function-bind:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/function.prototype.name:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/function.prototype.name:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/function.prototype.name:1.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/function.prototype.name:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/functional-red-black-tree:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/functions-have-names:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/functions-have-names:1.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/gensync:1.0.0-beta.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/gensync:1.0.0-beta.2.yarnlock mgmt_services/cost-mgmt:koku-ui/get-caller-file:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/get-caller-file:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/get-intrinsic:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-package-type:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/get-stdin:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/get-stream:4.1.0.yarnlock @@ -666,10 +666,10 @@ mgmt_services/cost-mgmt:koku-ui/get-value:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/getpass:0.1.7.yarnlock mgmt_services/cost-mgmt:koku-ui/git-revision-webpack-plugin:3.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-parent:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/glob-parent:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/glob-to-regexp:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock @@ -679,18 +679,21 @@ mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/glob:7.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:11.12.0.yarnlock mgmt_services/cost-mgmt:koku-ui/globals:12.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/globby:11.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/globby:11.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/globby:6.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/graceful-fs:4.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/growly:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/handle-thing:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/har-schema:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/har-validator:5.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/has-bigints:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/has-flag:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has-flag:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/has-symbols:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/has-symbols:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/has-symbols:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/has-symbols:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/has-value:0.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/has-value:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/has-values:0.1.4.yarnlock @@ -712,10 +715,11 @@ mgmt_services/cost-mgmt:koku-ui/html-loader:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-minifier-terser:5.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-parse-stringify2:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/html-replace-webpack-plugin:2.6.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:5.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/html-webpack-plugin:5.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/htmlparser2:3.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/htmlparser2:6.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/htmlparser2:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/http-deceiver:1.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/http-errors:1.6.3.yarnlock @@ -731,7 +735,7 @@ mgmt_services/cost-mgmt:koku-ui/hyphenate-style-name:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-json-sync:2.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next-xhr-backend:3.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/i18next:19.8.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/i18next:19.9.2.yarnlock mgmt_services/cost-mgmt:koku-ui/i18next:19.8.8.yarnlock mgmt_services/cost-mgmt:koku-ui/iconv-lite:0.4.24.yarnlock mgmt_services/cost-mgmt:koku-ui/icss-utils:5.1.0.yarnlock @@ -739,8 +743,8 @@ mgmt_services/cost-mgmt:koku-ui/icss-utils:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:3.3.10.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:4.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/ignore:5.1.8.yarnlock -mgmt_services/cost-mgmt:koku-ui/import-fresh:3.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/import-fresh:3.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/import-fresh:3.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/import-fresh:3.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/import-local:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/import-local:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/imurmurhash:0.1.4.yarnlock @@ -756,7 +760,7 @@ mgmt_services/cost-mgmt:koku-ui/inherits:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/inherits:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/inline-style-prefixer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/internal-ip:4.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/internal-slot:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/internal-slot:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/interpret:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/invariant:2.2.4.yarnlock mgmt_services/cost-mgmt:koku-ui/invert-kv:1.0.0.yarnlock @@ -772,17 +776,18 @@ mgmt_services/cost-mgmt:koku-ui/is-alphabetical:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-alphanumerical:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-arguments:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-arrayish:0.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-bigint:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-binary-path:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-binary-path:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-boolean-object:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-buffer:1.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/is-buffer:1.1.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-callable:1.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-ci:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-core-module:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-core-module:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-data-descriptor:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-data-descriptor:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-date-object:1.0.2.yarnlock @@ -805,7 +810,7 @@ mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-glob:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-hexadecimal:1.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-negative-zero:2.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-negative-zero:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number-object:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-number:7.0.0.yarnlock @@ -819,13 +824,14 @@ mgmt_services/cost-mgmt:koku-ui/is-plain-object:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-potential-custom-element-name:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-regex:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/is-stream:1.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-stream:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-string:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/is-subset:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/is-symbol:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-typedarray:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/is-utf8:0.2.1.yarnlock @@ -852,7 +858,6 @@ mgmt_services/cost-mgmt:koku-ui/istanbul-reports:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-changed-files:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-cli:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-config:26.6.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/jest-diff:25.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-diff:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-diff:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-docblock:21.2.0.yarnlock @@ -860,7 +865,6 @@ mgmt_services/cost-mgmt:koku-ui/jest-docblock:26.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-each:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-environment-jsdom:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-environment-node:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/jest-get-type:25.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-get-type:26.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-haste-map:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-jasmine2:26.6.3.yarnlock @@ -876,7 +880,7 @@ mgmt_services/cost-mgmt:koku-ui/jest-runner:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-runtime:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-serializer:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-snapshot:26.6.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/jest-util:26.5.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/jest-util:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-util:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-validate:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/jest-watcher:26.6.2.yarnlock @@ -885,10 +889,10 @@ mgmt_services/cost-mgmt:koku-ui/jest:26.6.3.yarnlock mgmt_services/cost-mgmt:koku-ui/js-file-download:0.4.12.yarnlock mgmt_services/cost-mgmt:koku-ui/js-tokens:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/js-tokens:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/js-yaml:3.14.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/js-yaml:3.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsbn:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsdoctypeparser:9.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsdom:16.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsdom:16.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsesc:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-better-errors:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/json-parse-even-better-errors:2.3.1.yarnlock @@ -900,13 +904,13 @@ mgmt_services/cost-mgmt:koku-ui/json-stable-stringify:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json-stringify-safe:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/json3:3.3.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/json5:2.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/json5:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/json5:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/jsonify:0.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/jsprim:1.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:2.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/jsx-ast-utils:3.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/killable:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/kind-of:3.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/kind-of:3.2.2.yarnlock @@ -918,7 +922,7 @@ mgmt_services/cost-mgmt:koku-ui/kind-of:6.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/kleur:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/klona:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/language-subtag-registry:0.3.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/language-subtag-registry:0.3.21.yarnlock mgmt_services/cost-mgmt:koku-ui/language-tags:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/lcid:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/leven:3.1.0.yarnlock @@ -932,19 +936,19 @@ mgmt_services/cost-mgmt:koku-ui/loader-utils:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/locate-path:5.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash-es:4.17.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash-es:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.assign:4.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.escape:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.flattendeep:4.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.isequal:4.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash.sortby:4.7.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock -mgmt_services/cost-mgmt:koku-ui/lodash:4.17.20.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock +mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/lodash:4.17.21.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevel:1.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/loglevelnext:3.0.1.yarnlock @@ -953,7 +957,7 @@ mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/loose-envify:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/lower-case:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/lru-cache:6.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/lz-string:1.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/make-dir:3.1.0.yarnlock @@ -973,19 +977,18 @@ mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:3.1.10.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/micromatch:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-db:1.44.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-db:1.45.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mime-db:1.46.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.27.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.28.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-db:1.46.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime-types:2.1.29.yarnlock mgmt_services/cost-mgmt:koku-ui/mime:1.6.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/mime:2.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/mime:2.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/mimic-fn:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/mini-create-react-context:0.4.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:1.3.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/mini-css-extract-plugin:1.3.9.yarnlock mgmt_services/cost-mgmt:koku-ui/minimalistic-assert:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/minimatch:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/minimist:1.2.5.yarnlock @@ -1007,16 +1010,16 @@ mgmt_services/cost-mgmt:koku-ui/nanoid:2.1.11.yarnlock mgmt_services/cost-mgmt:koku-ui/nanoid:3.1.20.yarnlock mgmt_services/cost-mgmt:koku-ui/nanomatch:1.2.13.yarnlock mgmt_services/cost-mgmt:koku-ui/natural-compare:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/nearley:2.19.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/nearley:2.20.1.yarnlock mgmt_services/cost-mgmt:koku-ui/negotiator:0.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/neo-async:2.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/nice-try:1.0.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/no-case:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/no-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/node-forge:0.10.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-int64:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/node-modules-regexp:1.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.70.yarnlock +mgmt_services/cost-mgmt:koku-ui/node-notifier:8.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/node-releases:1.1.71.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-package-data:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/normalize-path:2.1.1.yarnlock @@ -1025,8 +1028,8 @@ mgmt_services/cost-mgmt:koku-ui/normalize-path:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:2.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/npm-run-path:4.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/nth-check:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/nth-check:1.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/nth-check:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/null-loader:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/number-is-nan:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/nwsapi:2.2.0.yarnlock @@ -1035,23 +1038,22 @@ mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-copy:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/object-inspect:1.8.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/object-is:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/object-is:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/object-is:1.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-inspect:1.9.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-is:1.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-is:1.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/object-is:1.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/object-keys:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-keys:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object-visit:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.assign:4.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.entries:1.1.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.fromentries:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/object.pick:1.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.values:1.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/object.values:1.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.values:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/object.values:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/obuf:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/obuf:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/on-finished:2.3.0.yarnlock @@ -1066,7 +1068,7 @@ mgmt_services/cost-mgmt:koku-ui/optionator:0.8.3.yarnlock mgmt_services/cost-mgmt:koku-ui/optionator:0.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/original:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/os-locale:1.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/p-each-series:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/p-each-series:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-finally:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-limit:2.3.0.yarnlock @@ -1080,20 +1082,20 @@ mgmt_services/cost-mgmt:koku-ui/p-map:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-retry:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/p-try:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/param-case:3.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/param-case:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/parent-module:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-entities:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-json:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse-json:5.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/parse-json:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/parse-srcset:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5-htmlparser2-tree-adapter:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5-sax-parser:6.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/parse5:5.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/parse5:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parse5:6.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock mgmt_services/cost-mgmt:koku-ui/parseurl:1.3.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/pascal-case:3.1.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/pascal-case:3.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pascalcase:0.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/path-dirname:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/path-exists:2.1.0.yarnlock @@ -1134,19 +1136,17 @@ mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-selector-parser:6.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss-value-parser:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/postcss:8.2.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/postcss:8.2.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/postcss:8.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prelude-ls:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/prettier-linter-helpers:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/prettier:2.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/pretty-error:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/pretty-format:25.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/pretty-format:25.5.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/pretty-error:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pretty-format:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/pretty-format:26.6.2.yarnlock mgmt_services/cost-mgmt:koku-ui/process-nextick-args:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/progress:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/prompts:2.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/prompts:2.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/prop-types-exact:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/prop-types-extra:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/prop-types:15.7.2.yarnlock @@ -1155,6 +1155,7 @@ mgmt_services/cost-mgmt:koku-ui/prop-types:15.7.2.yarnlock mgmt_services/cost-mgmt:koku-ui/proxy-addr:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/prr:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/psl:1.8.0.yarnlock mgmt_services/cost-mgmt:koku-ui/pump:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:1.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/punycode:2.1.1.yarnlock @@ -1164,6 +1165,7 @@ mgmt_services/cost-mgmt:koku-ui/qs:6.9.6.yarnlock mgmt_services/cost-mgmt:koku-ui/qs:6.5.2.yarnlock mgmt_services/cost-mgmt:koku-ui/querystring:0.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/querystringify:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/queue-microtask:1.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/raf:3.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/railroad-diagrams:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/randexp:0.4.6.yarnlock @@ -1172,11 +1174,11 @@ mgmt_services/cost-mgmt:koku-ui/range-parser:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/range-parser:1.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/raw-body:2.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-bootstrap:1.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/react-content-loader:5.1.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/react-content-loader:6.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/react-dom:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-dropzone:9.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-fast-compare:2.0.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/react-i18next:11.7.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/react-i18next:11.8.9.yarnlock mgmt_services/cost-mgmt:koku-ui/react-i18next:11.8.7.yarnlock mgmt_services/cost-mgmt:koku-ui/react-is:16.13.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-is:16.13.1.yarnlock @@ -1194,7 +1196,7 @@ mgmt_services/cost-mgmt:koku-ui/react-redux:7.2.2.yarnlock mgmt_services/cost-mgmt:koku-ui/react-router-dom:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-router:5.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-shallow-renderer:16.14.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/react-test-renderer:16.13.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/react-test-renderer:16.14.0.yarnlock mgmt_services/cost-mgmt:koku-ui/react-test-renderer:17.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react-transition-group:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/react:17.0.1.yarnlock @@ -1209,7 +1211,7 @@ mgmt_services/cost-mgmt:koku-ui/readable-stream:2.3.7.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readable-stream:3.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/readdirp:2.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/readdirp:3.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/readdirp:3.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/rechoir:0.7.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux-thunk:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/redux:4.0.5.yarnlock @@ -1219,14 +1221,14 @@ mgmt_services/cost-mgmt:koku-ui/regenerator-runtime:0.13.7.yarnlock mgmt_services/cost-mgmt:koku-ui/regex-not:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/regex-not:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/regexp.prototype.flags:1.3.1.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regexpp:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/regextras:0.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/relateurl:0.2.7.yarnlock mgmt_services/cost-mgmt:koku-ui/remark-parse:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/remove-trailing-separator:1.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/renderkid:2.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/renderkid:2.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-element:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock mgmt_services/cost-mgmt:koku-ui/repeat-string:1.6.1.yarnlock @@ -1246,12 +1248,11 @@ mgmt_services/cost-mgmt:koku-ui/resolve-from:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-from:5.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-pathname:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve-url:0.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.17.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/resolve:1.19.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/resolve:1.20.0.yarnlock mgmt_services/cost-mgmt:koku-ui/ret:0.1.15.yarnlock mgmt_services/cost-mgmt:koku-ui/retry:0.12.0.yarnlock @@ -1261,7 +1262,7 @@ mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rimraf:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/rst-selector-parser:2.2.3.yarnlock mgmt_services/cost-mgmt:koku-ui/rsvp:4.8.5.yarnlock -mgmt_services/cost-mgmt:koku-ui/run-parallel:1.1.9.yarnlock +mgmt_services/cost-mgmt:koku-ui/run-parallel:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/safe-buffer:5.1.2.yarnlock @@ -1278,7 +1279,7 @@ mgmt_services/cost-mgmt:koku-ui/safer-buffer:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sane:4.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sanitize-html:2.3.2.yarnlock mgmt_services/cost-mgmt:koku-ui/sass-loader:11.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/sass:1.32.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/sass:1.32.8.yarnlock mgmt_services/cost-mgmt:koku-ui/saxes:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.19.1.yarnlock mgmt_services/cost-mgmt:koku-ui/scheduler:0.20.1.yarnlock @@ -1291,12 +1292,12 @@ mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:5.7.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/semver:7.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/semver:6.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/semver:7.3.4.yarnlock mgmt_services/cost-mgmt:koku-ui/send:0.17.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serialize-javascript:5.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/serve-index:1.9.1.yarnlock @@ -1312,7 +1313,7 @@ mgmt_services/cost-mgmt:koku-ui/shebang-command:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/shebang-regex:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/shebang-regex:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/shellwords:0.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/side-channel:1.0.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/side-channel:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/signal-exit:3.0.3.yarnlock @@ -1330,7 +1331,7 @@ mgmt_services/cost-mgmt:koku-ui/source-map-resolve:0.5.3.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map-support:0.5.19.yarnlock -mgmt_services/cost-mgmt:koku-ui/source-map-url:0.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/source-map-url:0.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.5.7.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.5.7.yarnlock mgmt_services/cost-mgmt:koku-ui/source-map:0.6.1.yarnlock @@ -1343,14 +1344,14 @@ mgmt_services/cost-mgmt:koku-ui/spdx-correct:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-exceptions:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-expression-parse:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/spdx-expression-parse:3.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/spdx-license-ids:3.0.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/spdx-license-ids:3.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/spdy-transport:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/spdy:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/split-string:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/sprintf-js:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/sshpk:1.16.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/stack-utils:2.0.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/stack-utils:2.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/state-toggle:1.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/static-extend:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/statuses:1.5.0.yarnlock @@ -1363,12 +1364,12 @@ mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string-width:3.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/string-width:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/string-width:4.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/string.prototype.matchall:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/string.prototype.trim:1.2.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/string.prototype.trimend:1.0.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/string.prototype.trimstart:1.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/string-width:4.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/string.prototype.matchall:4.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/string.prototype.trim:1.2.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/string.prototype.trimend:1.0.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/string.prototype.trimstart:1.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/string_decoder:1.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/string_decoder:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/strip-ansi:3.0.1.yarnlock @@ -1391,7 +1392,7 @@ mgmt_services/cost-mgmt:koku-ui/supports-color:7.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/supports-hyperlinks:2.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/symbol-observable:1.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/symbol-tree:3.2.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/tabbable:5.1.4.yarnlock +mgmt_services/cost-mgmt:koku-ui/tabbable:5.1.6.yarnlock mgmt_services/cost-mgmt:koku-ui/table:6.0.7.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/tapable:2.2.0.yarnlock @@ -1419,9 +1420,9 @@ mgmt_services/cost-mgmt:koku-ui/to-regex:3.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/toidentifier:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tough-cookie:2.5.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/tough-cookie:3.0.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/tough-cookie:4.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tr46:2.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/trim-trailing-lines:1.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/trim-trailing-lines:1.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/trim:0.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/trough:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/ts-jest:26.5.1.yarnlock @@ -1433,9 +1434,9 @@ mgmt_services/cost-mgmt:koku-ui/tslib:1.13.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/tslib:1.14.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/tslib:2.0.3.yarnlock -mgmt_services/cost-mgmt:koku-ui/tsutils:3.17.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/tslib:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/tslib:2.1.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/tsutils:3.21.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tunnel-agent:0.6.0.yarnlock mgmt_services/cost-mgmt:koku-ui/tweetnacl:0.14.5.yarnlock mgmt_services/cost-mgmt:koku-ui/tweetnacl:0.14.5.yarnlock @@ -1451,6 +1452,7 @@ mgmt_services/cost-mgmt:koku-ui/type-is:1.6.18.yarnlock mgmt_services/cost-mgmt:koku-ui/typedarray-to-buffer:3.1.5.yarnlock mgmt_services/cost-mgmt:koku-ui/typesafe-actions:5.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/typescript:4.1.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/unbox-primitive:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uncontrollable:7.2.1.yarnlock mgmt_services/cost-mgmt:koku-ui/unherit:1.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/unified:6.2.0.yarnlock @@ -1462,27 +1464,27 @@ mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-stringify-position:1.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-visit-parents:2.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unist-util-visit:1.4.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/universalify:0.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unpipe:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/unset-value:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/upath:1.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/uri-js:4.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/uri-js:4.4.1.yarnlock mgmt_services/cost-mgmt:koku-ui/urix:0.1.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/url-parse:1.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/url-parse:1.4.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/url-parse:1.5.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/url-parse:1.5.1.yarnlock mgmt_services/cost-mgmt:koku-ui/url:0.11.0.yarnlock mgmt_services/cost-mgmt:koku-ui/use:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/util-deprecate:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/utila:0.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/utils-merge:1.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock mgmt_services/cost-mgmt:koku-ui/uuid:3.4.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/uuid:8.3.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.2.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/uuid:8.3.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.3.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/v8-compile-cache:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/v8-to-istanbul:7.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/validate-npm-package-license:3.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/value-equal:1.0.1.yarnlock @@ -1491,32 +1493,32 @@ mgmt_services/cost-mgmt:koku-ui/verror:1.10.0.yarnlock mgmt_services/cost-mgmt:koku-ui/vfile-location:2.0.6.yarnlock mgmt_services/cost-mgmt:koku-ui/vfile-message:1.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/vfile:2.3.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-area:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-bar:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-brush-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-chart:35.4.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-area:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-axis:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-bar:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-brush-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-chart:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/victory-core:35.4.4.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-core:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-core:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-create-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-cursor-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-group:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-legend:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-line:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-pie:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-polar-axis:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-scatter:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-selection-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-shared-events:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-stack:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-tooltip:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-tooltip:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.7.yarnlock -mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.7.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-core:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-core:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-create-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-cursor-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-group:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-legend:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-line:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-pie:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-polar-axis:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-scatter:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-selection-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-shared-events:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-stack:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-tooltip:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-tooltip:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-voronoi-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.11.yarnlock +mgmt_services/cost-mgmt:koku-ui/victory-zoom-container:35.4.11.yarnlock mgmt_services/cost-mgmt:koku-ui/void-elements:2.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-hr-time:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/w3c-xmlserializer:2.0.0.yarnlock @@ -1537,13 +1539,14 @@ mgmt_services/cost-mgmt:koku-ui/webpack-log:3.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-merge:5.7.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:1.4.3.yarnlock mgmt_services/cost-mgmt:koku-ui/webpack-sources:2.2.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/webpack:5.24.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/webpack:5.24.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-driver:0.7.4.yarnlock mgmt_services/cost-mgmt:koku-ui/websocket-extensions:0.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-encoding:1.0.5.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-mimetype:2.3.0.yarnlock mgmt_services/cost-mgmt:koku-ui/whatwg-url:8.4.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/which-boxed-primitive:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:1.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which-module:2.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/which:1.3.1.yarnlock @@ -1559,17 +1562,17 @@ mgmt_services/cost-mgmt:koku-ui/wrap-ansi:6.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/wrappy:1.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/write-file-atomic:3.0.3.yarnlock mgmt_services/cost-mgmt:koku-ui/ws:6.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/ws:7.3.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/ws:7.4.4.yarnlock mgmt_services/cost-mgmt:koku-ui/x-is-string:0.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xml-name-validator:3.0.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xmlchars:2.2.0.yarnlock mgmt_services/cost-mgmt:koku-ui/xstate:4.16.2.yarnlock mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock mgmt_services/cost-mgmt:koku-ui/xtend:4.0.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/y18n:3.2.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/y18n:4.0.0.yarnlock +mgmt_services/cost-mgmt:koku-ui/y18n:3.2.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/y18n:4.0.1.yarnlock mgmt_services/cost-mgmt:koku-ui/yallist:4.0.0.yarnlock -mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.1.yarnlock +mgmt_services/cost-mgmt:koku-ui/yargs-parser:20.2.6.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:13.1.2.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:18.1.3.yarnlock mgmt_services/cost-mgmt:koku-ui/yargs-parser:3.2.0.yarnlock diff --git a/package.json b/package.json index 1989290c1..6cd81ed22 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@patternfly/react-styles": "4.8.1", "@patternfly/react-table": "4.23.1", "@patternfly/react-tokens": "4.10.1", - "@redhat-cloud-services/frontend-components": "^3.1.2", + "@redhat-cloud-services/frontend-components": "^3.1.3", "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", "@redhat-cloud-services/rbac-client": "^1.0.94", @@ -120,4 +120,4 @@ "insights": { "appname": "cost-management" } -} \ No newline at end of file +} diff --git a/src/__snapshots__/app.test.tsx.snap b/src/__snapshots__/app.test.tsx.snap index f8a237f15..fe7441292 100644 --- a/src/__snapshots__/app.test.tsx.snap +++ b/src/__snapshots__/app.test.tsx.snap @@ -1,47 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders login if isLoggedIn is false 1`] = ` -<div> - <ForwardRef - appName="cost-management" - fallback={ - <Bullseye> - <Spinner - size="xl" - /> - </Bullseye> - } - module="./OcpOverviewWidget" - scope="costManagement" - title="Custom title prop" - /> - <I18nProvider - locale="en" - > - <Routes /> - </I18nProvider> -</div> +<I18nProvider + locale="en" +> + <Routes /> +</I18nProvider> `; exports[`renders page layout 1`] = ` -<div> - <ForwardRef - appName="cost-management" - fallback={ - <Bullseye> - <Spinner - size="xl" - /> - </Bullseye> - } - module="./OcpOverviewWidget" - scope="costManagement" - title="Custom title prop" - /> - <I18nProvider - locale="en" - > - <Routes /> - </I18nProvider> -</div> +<I18nProvider + locale="en" +> + <Routes /> +</I18nProvider> `; diff --git a/yarn.lock b/yarn.lock index 547a26d62..7ba454d44 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,151 +9,172 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== dependencies: - "@babel/highlight" "^7.10.4" + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.8": + version "7.13.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" + integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== "@babel/core@^7.1.0", "@babel/core@^7.7.5": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" - integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.6" - "@babel/helper-module-transforms" "^7.11.0" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.11.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.11.5" - "@babel/types" "^7.11.5" + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.10.tgz#07de050bbd8193fcd8a3c27918c0890613a94559" + integrity sha512-bfIYcT0BdKeAZrovpMqX2Mx5NrgAckGbwT982AkdS5GNfn3KMGiprlBAtmBcFZRUmpaufS6WZFP8trvx8ptFDw== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.10" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.10" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" convert-source-map "^1.7.0" debug "^4.1.0" - gensync "^1.0.0-beta.1" + gensync "^1.0.0-beta.2" json5 "^2.1.2" lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" + semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6": - version "7.11.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" - integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" + integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== dependencies: - "@babel/types" "^7.11.5" + "@babel/types" "^7.13.0" jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== +"@babel/helper-compilation-targets@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.10.tgz#1310a1678cb8427c07a753750da4f8ce442bdd0c" + integrity sha512-/Xju7Qg1GQO4mHZ/Kcs6Au7gfafgZnwm+a7sy/ow/tV1sHeraRUHbjdat8/UvDor4Tez+siGKDk6zIKtCPKVJA== dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/compat-data" "^7.13.8" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== +"@babel/helper-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz#93ad656db3c3c2232559fd7b2c3dbdcbe0eb377a" + integrity sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA== dependencies: - "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.12.13" -"@babel/helper-member-expression-to-functions@^7.10.4": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" - integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.13" -"@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== +"@babel/helper-member-expression-to-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz#6aa4bb678e0f8c22f58cdb79451d30494461b091" + integrity sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.13.0" -"@babel/helper-module-transforms@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" - integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/template" "^7.10.4" - "@babel/types" "^7.11.0" +"@babel/helper-module-imports@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" + integrity sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-module-transforms@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" + integrity sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-replace-supers" "^7.13.0" + "@babel/helper-simple-access" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" lodash "^4.17.19" -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== dependencies: - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.8.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== +"@babel/helper-replace-supers@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz#6034b7b51943094cb41627848cb219cb02be1d24" + integrity sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw== dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.13.0" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== +"@babel/helper-simple-access@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" + integrity sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA== dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/types" "^7.12.13" -"@babel/helper-split-export-declaration@^7.11.0": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" - integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== dependencies: - "@babel/types" "^7.11.0" + "@babel/types" "^7.12.13" -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== +"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" + integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" - integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.12.13", "@babel/parser@^7.13.0", "@babel/parser@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.10.tgz#8f8f9bf7b3afa3eabd061f7a5bcdf4fec3c48409" + integrity sha512-0s7Mlrw9uTWkYua7xWr99Wpk2bnGa0ANleKfksYAES8LpWH4gW1OUr42vqKNf0us5UQNfru2wPqMqRITzq/SIQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -170,11 +191,11 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" - integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" @@ -233,64 +254,57 @@ "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-plugin-utils" "^7.12.13" "@babel/runtime-corejs3@^7.10.2": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.11.2.tgz#02c3029743150188edeb66541195f54600278419" - integrity sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A== + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz#14c3f4c85de22ba88e8e86685d13e8861a82fe86" + integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== dependencies: core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.5": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" - integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.6", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" + integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.4.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.7": +"@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.13.tgz#0a21452352b02542db0ffb928ac2d3ca7cb6d66d" - integrity sha512-8+3UMPBrjFa/6TtKi/7sehPKqfAm4g6K+YQjyyFOLUTxzOngcRZTlAVY8sc2CORJYqdHQY8gRPHmn+qo15rCBw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4", "@babel/template@^7.3.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.11.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.11.0" - "@babel/parser" "^7.11.5" - "@babel/types" "^7.11.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" + integrity sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.0" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.0" + "@babel/types" "^7.13.0" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" - integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== +"@babel/types@^7.0.0", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.13.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" + integrity sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA== dependencies: - "@babel/helper-validator-identifier" "^7.10.4" + "@babel/helper-validator-identifier" "^7.12.11" lodash "^4.17.19" to-fast-properties "^2.0.0" @@ -312,10 +326,10 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz#8f03a22a04de437254e8ce8cc84ba39689288752" integrity sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg== -"@eslint/eslintrc@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" - integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== +"@eslint/eslintrc@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" + integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -324,7 +338,6 @@ ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" - lodash "^4.17.20" minimatch "^3.0.4" strip-json-comments "^3.1.1" @@ -352,9 +365,9 @@ resolve-from "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" - integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== "@jest/console@^26.6.2": version "26.6.2" @@ -516,27 +529,6 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/types@^25.5.0": - version "25.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" - integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^1.1.1" - "@types/yargs" "^15.0.0" - chalk "^3.0.0" - -"@jest/types@^26.5.2": - version "26.5.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.5.2.tgz#44c24f30c8ee6c7f492ead9ec3f3c62a5289756d" - integrity sha512-QDs5d0gYiyetI8q+2xWdkixVQMklReZr4ltw7GFDtb4fuJIBCE6mzj2LnitGqCuAlLap6wPyb8fpoHgwZz5fdg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@jest/types@^26.6.2": version "26.6.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" @@ -548,25 +540,25 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@nodelib/fs.scandir@2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" - integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== +"@nodelib/fs.scandir@2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" + integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== dependencies: - "@nodelib/fs.stat" "2.0.3" + "@nodelib/fs.stat" "2.0.4" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" - integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== +"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" + integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== "@nodelib/fs.walk@^1.2.3": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" - integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + version "1.2.6" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" + integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== dependencies: - "@nodelib/fs.scandir" "2.1.3" + "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" "@patternfly/patternfly@4.87.2": @@ -601,7 +593,7 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.97.1", "@patternfly/react-core@^4.97.1": +"@patternfly/react-core@4.97.1": version "4.97.1" resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.97.1.tgz#d25e4b7e2306a1412fc2d5d6b08d257e14bf036e" integrity sha512-t3Cfv8eWqfDpSjqlKixtat9bW82IKBVVwuO/XJ3CUbo7cQVacCBB1h8+q274Iz8ZQ7xx0iU79EzPEH8bs6FsZg== @@ -614,16 +606,39 @@ tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-icons@4.9.1", "@patternfly/react-icons@^4.9.1": +"@patternfly/react-core@^4.97.1": + version "4.97.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.97.2.tgz#a389f6984d03ed730506fa3cdccb1355f37b04fc" + integrity sha512-Xl/l/+OjWVtWnbb9Kw//1bn+6KEM9aOc1nk+Vm6D8wlbuuz+RAFBc0rZjPWuq00YYnVA+sExESe0W2d3wdn/SQ== + dependencies: + "@patternfly/react-icons" "^4.9.2" + "@patternfly/react-styles" "^4.8.2" + "@patternfly/react-tokens" "^4.10.2" + focus-trap "6.2.2" + react-dropzone "9.0.0" + tippy.js "5.1.2" + tslib "1.13.0" + +"@patternfly/react-icons@4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.9.1.tgz#b4de554b029f00e9061b92e574c5634e7ad1918f" integrity sha512-+E571OPoTQsRejUj6kjfRCgGTYHp7zWY7T99xqMBDHTwTK9Ry9HZNW19VkeGW032ux5Commp6Dae0DBXmDommQ== -"@patternfly/react-styles@4.8.1", "@patternfly/react-styles@^4.8.1": +"@patternfly/react-icons@^4.9.1", "@patternfly/react-icons@^4.9.2": + version "4.9.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.9.2.tgz#dcb2efa9727de97d5aa5d6be47a75daee49addb8" + integrity sha512-3PY81A9mj9YyUpznSWhcWMKHRyGWNgZ1IDYqbMva7Q8wgd0fjsiTJ+5zAp4YQLo1mA8KwYX9v5s37hK8XiTbAA== + +"@patternfly/react-styles@4.8.1": version "4.8.1" resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.1.tgz#c3ebc7bdbae67a77e2b8f9f4311bbc33fce98ab2" integrity sha512-Mt+IGH6m4mDBVDOE/1CJ0Ij7jooLKuJEVFWXsE19J1pRSZ3ZmrDCibp6y8DrKdmsY7ky0RSs7ScMVyhwdCA/Nw== +"@patternfly/react-styles@^4.8.1", "@patternfly/react-styles@^4.8.2": + version "4.8.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.2.tgz#4796a77b658541d75d616e2e2a00fc5d7ec42bc7" + integrity sha512-JLVZTUYa8LIyASLvfiAgByLgNcg+OPkuXSh8Za5KdjqrBaNVQ3Wlul+oWQGwlGjbq7KSiyDg1oWemxOuLJH1VQ== + "@patternfly/react-table@4.23.1": version "4.23.1" resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.23.1.tgz#d123ca19cdb3e48c4794281cbf843df92b1ed5d1" @@ -637,15 +652,20 @@ lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.10.1", "@patternfly/react-tokens@^4.10.1": +"@patternfly/react-tokens@4.10.1": version "4.10.1" resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.1.tgz#84374ac3000f0936e1381915d73ba24330559b06" integrity sha512-Hte76yiEIG4Ligtmbiy+iGmFnT3fzmqUNk5LN0Hph4zFfgI0Mq35zgZGrKvkm/T1sXSmhMEcT4JmHcKcXI0RpA== +"@patternfly/react-tokens@^4.10.1", "@patternfly/react-tokens@^4.10.2": + version "4.10.2" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.2.tgz#fd0054379ac81c8490b901b5b8fb408263ce91fe" + integrity sha512-/G1MENPxVY7X9UUuieO79yfjJ3g6KjBUBsBQVKOQplCxuvcRCF1MpmQKAxfg9Yb804MbPY+IVzVD3c4u9S3Iww== + "@popperjs/core@^2.5.3": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.7.0.tgz#5f7760965170f7f1e2910d2498c5be88b47a2a8c" - integrity sha512-V3WyEc8ZyAuOQ2fpFuTuYYOd2tV4NePeSdxaHYgYAOs7ERLxlcFi2XsmgI5LJFdAUmJKXsg8jaIiVTkTHQygQw== + version "2.9.1" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.1.tgz#7f554e7368c9ab679a11f4a042ca17149d70cf12" + integrity sha512-DvJbbn3dUgMxDnJLH+RZQPnXak1h4ZVYQ7CWiFWjQwBFkVajT4rfw2PdpHLTSTwxrYfnoEXkuBiwkDm6tPMQeA== "@redhat-cloud-services/frontend-components-notifications@^3.1.0": version "3.1.0" @@ -654,29 +674,7 @@ dependencies: "@redhat-cloud-services/frontend-components-utilities" "*" -"@redhat-cloud-services/frontend-components-utilities@*": - version "2.2.6" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-2.2.6.tgz#5793f30797b260f8597d1436d5edc7bcf23caf0f" - integrity sha512-EiHuaookfbAVxUsWZI4cPdT3/Ywax9nJherhNUCExB6PTpPfQ+DiF8VPM7pvyfM9b9Z/2VZerHm5JK2MpTuYIQ== - dependencies: - "@sentry/browser" "^5.4.0" - awesome-debounce-promise "^2.1.0" - axios "^0.19.0" - commander ">=2.20.0" - react-content-loader ">=3.4.1" - -"@redhat-cloud-services/frontend-components-utilities@>=3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.0.3.tgz#160ceccc3eb70215505307dafeb5b4333e4090ce" - integrity sha512-5tV0iFuM15f5Q+TJJp97r0mCaSwffFwlh5Ey7v9MhKjv1AXU1/GCEeRmoN2B1wT1Yh1i1zPKqj423i+y5RzoPA== - dependencies: - "@sentry/browser" "^5.4.0" - awesome-debounce-promise "^2.1.0" - axios "^0.21.1" - commander ">=2.20.0" - react-content-loader ">=3.4.1" - -"@redhat-cloud-services/frontend-components-utilities@^3.1.1": +"@redhat-cloud-services/frontend-components-utilities@*", "@redhat-cloud-services/frontend-components-utilities@>=3.0.0", "@redhat-cloud-services/frontend-components-utilities@^3.1.1": version "3.1.1" resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components-utilities/-/frontend-components-utilities-3.1.1.tgz#6e707bdf0cbe9e9065fb8c7d64424d23aced2bc6" integrity sha512-lqcdpvjuFJQZ1f/iNkoecjtLShqM8WPJaeTa4Y1whUu8kEkDDQ9BUa7RlTQ5x1XOt6OgTTFGg8R/RScPUbxa5A== @@ -687,10 +685,10 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.2.tgz#ceec958451c395d04882491ed69b66db4caffaaa" - integrity sha512-KI5NuAn7MSK/Os1pxNZnHjJtOCW+oVElyPI3kqEFZIZeyfYGC7pIPD6RF+osT6wWSwSAnwkxVDG5jU0bL1/sBQ== +"@redhat-cloud-services/frontend-components@^3.1.3": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.3.tgz#4ed5312fb62c2505d9ff934212720631f2581fd2" + integrity sha512-2c0CBTKJ8MRA1SvlPBWWTb6XVH25MnuDJ0Fc3aDWvMlmAtxcNuWPeDe5TCHN20k0Qvj6DoaU0c6XrtyneTW9Fw== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "^0.0.11" @@ -731,61 +729,61 @@ lodash "^4.17.0" "@sentry/browser@^5.4.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.26.0.tgz#e90a197fb94c5f26c8e05d6a539c118f33c7d598" - integrity sha512-52kNVpy10Zd3gJRGFkhnOQvr80WJg7+XBqjMOE0//Akh4PfvEK3IqmAjVqysz6aHdruwTTivKF4ZoAxL/pA7Rg== + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.30.0.tgz#c28f49d551db3172080caef9f18791a7fd39e3b3" + integrity sha512-rOb58ZNVJWh1VuMuBG1mL9r54nZqKeaIlwSlvzJfc89vyfd7n6tQ1UXMN383QBz/MS5H5z44Hy5eE+7pCrYAfw== dependencies: - "@sentry/core" "5.26.0" - "@sentry/types" "5.26.0" - "@sentry/utils" "5.26.0" + "@sentry/core" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/core@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.26.0.tgz#9b5fe4de8a869d733ebcc77f5ec9c619f8717a51" - integrity sha512-Ubrw7K52orTVsaxpz8Su40FPXugKipoQC+zPrXcH+JIMB+o18kutF81Ae4WzuUqLfP7YB91eAlRrP608zw0EXA== +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== dependencies: - "@sentry/hub" "5.26.0" - "@sentry/minimal" "5.26.0" - "@sentry/types" "5.26.0" - "@sentry/utils" "5.26.0" + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/hub@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.26.0.tgz#b2bbd8128cd5915f2ee59cbc29fff30272d74ec5" - integrity sha512-lAYeWvvhGYS6eQ5d0VEojw0juxGc3v4aAu8VLvMKWcZ1jXD13Bhc46u9Nvf4qAY6BAQsJDQcpEZLpzJu1bk1Qw== +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== dependencies: - "@sentry/types" "5.26.0" - "@sentry/utils" "5.26.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" tslib "^1.9.3" -"@sentry/minimal@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.26.0.tgz#851dea3644153ed3ac4837fa8ed5661d94e7a313" - integrity sha512-mdFo3FYaI1W3KEd8EHATYx8mDOZIxeoUhcBLlH7Iej6rKvdM7p8GoECrmHPU1l6sCCPtBuz66QT5YeXc7WILsA== +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== dependencies: - "@sentry/hub" "5.26.0" - "@sentry/types" "5.26.0" + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" tslib "^1.9.3" -"@sentry/types@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.26.0.tgz#b0cbacb0b24cd86620fb296b46cf7277bb004a3e" - integrity sha512-ugpa1ePOhK55pjsyutAsa2tiJVQEyGYCaOXzaheg/3+EvhMdoW+owiZ8wupfvPhtZFIU3+FPOVz0d5k9K5d1rw== +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== -"@sentry/utils@5.26.0": - version "5.26.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.26.0.tgz#09a3d01d91747f38f796cafeb24f8fd86e4fa05f" - integrity sha512-F2gnHIAWbjiowcAgxz3VpKxY/NQ39NTujEd/NPnRTWlRynLFg3bAV+UvZFXljhYJeN3b/zRlScNDcpCWTrtZGw== +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== dependencies: - "@sentry/types" "5.26.0" + "@sentry/types" "5.30.0" tslib "^1.9.3" "@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== + version "1.8.2" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.2.tgz#858f5c4b48d80778fde4b9d541f27edc0d56488b" + integrity sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw== dependencies: type-detect "4.0.8" @@ -797,9 +795,9 @@ "@sinonjs/commons" "^1.7.0" "@testing-library/dom@^7.28.1": - version "7.29.4" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.29.4.tgz#1647c2b478789621ead7a50614ad81ab5ae5b86c" - integrity sha512-CtrJRiSYEfbtNGtEsd78mk1n1v2TUbeABlNIcOCJdDfkN5/JTOwQEbbQpoSRxGqzcWPgStMvJ4mNolSuBRv1NA== + version "7.30.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.30.0.tgz#53697851f7708a1448cc30b74a2ea056dd709cd6" + integrity sha512-v4GzWtltaiDE0yRikLlcLAfEiiK8+ptu6OuuIebm9GdC2XlZTNDPGEfM2UkEtnH7hr9TRq2sivT5EA9P1Oy7bw== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -824,14 +822,14 @@ integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== "@types/aria-query@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" - integrity sha512-iIgQNzCm0v7QMhhe4Jjn9uRh+I6GoPmt03CbEtwx3ao8/EfoQcmgtqH4vQ5Db/lxiIGaWDv6nwvunuh0RyX0+A== + version "4.2.1" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.1.tgz#78b5433344e2f92e8b306c06a5622c50c245bf6b" + integrity sha512-S6oPal772qJZHoRZLFc/XoZW2gFvwXusYUmXPXkgxJLuEk2vOt7jc4Yo6z/vtI0EBkbPBVrJJ0B+prLIKiWqHg== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.10" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.10.tgz#ca58fc195dd9734e77e57c6f2df565623636ab40" - integrity sha512-x8OM8XzITIMyiwl5Vmo2B1cR1S1Ipkyv4mdlbJjMa1lmuKvKY9FrBbEANIaMlnWn5Rf7uO+rC/VgYabNkE17Hw== + version "7.1.12" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" + integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -847,31 +845,24 @@ "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.0.3" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.3.tgz#b8aaeba0a45caca7b56a5de9459872dde3727214" - integrity sha512-uCoznIPDmnickEi6D0v11SBpW0OuVqHJCa7syXqQHy5uktSCreIlt0iglsCnmvz8yCb38hGcWeseA8cWJSwv5Q== + version "7.4.0" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" + integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.15.tgz#db9e4238931eb69ef8aab0ad6523d4d4caa39d03" - integrity sha512-Pzh9O3sTK8V6I1olsXpCfj2k/ygO2q1X0vhhnDrEQyYLHZesWz+zMZMVcwXLCYf0U36EtmyYaFGPfXlTtDHe3A== + version "7.11.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" + integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== dependencies: "@babel/types" "^7.3.0" -"@types/cheerio@*": - version "0.22.22" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.22.tgz#ae71cf4ca59b8bbaf34c99af7a5d6c8894988f5f" - integrity sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA== - dependencies: - "@types/node" "*" - -"@types/cheerio@^0.22.22": - version "0.22.24" - resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.24.tgz#fcee47074aa221ac0f31ede0c72c0800bf3bf0aa" - integrity sha512-iKXt/cwltGvN06Dd6zwQG1U35edPwId9lmcSeYfcxSNvvNg4vysnFB+iBQNjj06tSVV7MBj0GWMQ7dwb4Z+p8Q== +"@types/cheerio@*", "@types/cheerio@^0.22.22": + version "0.22.25" + resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.25.tgz#2f77c99922a3459373a873d55caaa049ead26fa0" + integrity sha512-Y2kmbk74dSGRI1bBmo67bowDoVxNm9cs+IPZznsFPRuBN6ToK2RCATZipOJsgO0Unbtiy01o0hP2SS+MKdUNvQ== dependencies: "@types/node" "*" @@ -909,9 +900,9 @@ "@types/estree" "*" "@types/eslint@*": - version "7.2.6" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.6.tgz#5e9aff555a975596c03a98b59ecd103decc70c3c" - integrity sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw== + version "7.2.7" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.7.tgz#f7ef1cf0dceab0ae6f9a976a0a9af14ab1baca26" + integrity sha512-EHXbc1z2GoQRqHaAT7+grxlTJ3WE2YNeD6jlpPoRc83cCoThRY+NUWjCUZaYmk51OICkPXn2hhphcWcWXgNW0Q== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -930,9 +921,9 @@ "@types/node" "*" "@types/graceful-fs@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" - integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ== + version "4.1.5" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" + integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== dependencies: "@types/node" "*" @@ -985,14 +976,6 @@ dependencies: "@types/istanbul-lib-coverage" "*" -"@types/istanbul-reports@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" - integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== - dependencies: - "@types/istanbul-lib-coverage" "*" - "@types/istanbul-lib-report" "*" - "@types/istanbul-reports@^3.0.0": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" @@ -1000,7 +983,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@26.0.20": +"@types/jest@26.0.20", "@types/jest@26.x": version "26.0.20" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.20.tgz#cd2f2702ecf69e86b586e1f5223a60e454056307" integrity sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA== @@ -1008,24 +991,11 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" -"@types/jest@26.x": - version "26.0.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.14.tgz#078695f8f65cb55c5a98450d65083b2b73e5a3f3" - integrity sha512-Hz5q8Vu0D288x3iWXePSn53W7hAjP0H7EQ6QvDO9c7t46mR0lNOLlfuwQ+JkVxuhygHzlzPX+0jKdA3ZgSh+Vg== - dependencies: - jest-diff "^25.2.1" - pretty-format "^25.2.1" - -"@types/json-schema@*": +"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.6": - version "7.0.6" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" - integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== - "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1037,9 +1007,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "14.11.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.8.tgz#fe2012f2355e4ce08bca44aeb3abbb21cf88d33f" - integrity sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw== + version "14.14.33" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.33.tgz#9e4f8c64345522e4e8ce77b334a8aaa64e2b6c78" + integrity sha512-oJqcTrgPUF29oUP8AsUqbXGJNuPutsetaa9kTQAQce5Lx5dTYWV02ScBiT/k1BX/Z7pKeqedmvp39Wu4zR7N7g== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1047,9 +1017,9 @@ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/prettier@^2.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.2.tgz#4929992f87a0129f4960a110faeb526210562e7b" - integrity sha512-IiPhNnenzkqdSdQH3ifk9LoX7oQe61ZlDdDO4+MUv6FyWdPGDPr26gCPVs3oguZEMq//nFZZpwUZcVuNJsG+DQ== + version "2.2.2" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.2.2.tgz#e2280c89ddcbeef340099d6968d8c86ba155fdf6" + integrity sha512-i99hy7Ki19EqVOl77WplDrvgNugHnsSjECVR/wUrzw2TJXz1zlUfT2ngGckR6xN7yFYaijsMAqPkOLx9HgUqHg== "@types/prop-types@*", "@types/prop-types@^15.7.3": version "15.7.3" @@ -1095,29 +1065,30 @@ "@types/react-router" "*" "@types/react-router@*": - version "5.1.8" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.8.tgz#4614e5ba7559657438e17766bb95ef6ed6acc3fa" - integrity sha512-HzOyJb+wFmyEhyfp4D4NYrumi+LQgQL/68HvJO+q6XtuHSDvw6Aqov7sCAhjbNq3bUPgPqbdvjXC5HeB2oEAPg== + version "5.1.12" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.12.tgz#0f300e09468e7aed86e18241c90238c18c377e51" + integrity sha512-0bhXQwHYfMeJlCh7mGhc0VJTRm0Gk+Z8T00aiP4702mDUuLs9SMhnd2DitpjWFjdOecx2UXtICK14H9iMnziGA== dependencies: "@types/history" "*" "@types/react" "*" "@types/react-transition-group@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d" - integrity sha512-/QfLHGpu+2fQOqQaXh8MG9q03bFENooTb/it4jr5kKaZlDQfWvjqWZg48AwzPVMBHlRuTRAY7hRHCEOXz5kV6w== + version "4.4.1" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.1.tgz#e1a3cb278df7f47f17b5082b1b3da17170bd44b1" + integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== dependencies: "@types/react" "*" -"@types/react@*": - version "16.9.52" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.52.tgz#c46c72d1a1d8d9d666f4dd2066c0e22600ccfde1" - integrity sha512-EHRjmnxiNivwhGdMh9sz1Yw9AUxTSZFxKqdBWAAzyZx3sufWwx6ogqHYh/WB1m/I4ZpjkoZLExF5QTy2ekVi/Q== +"@types/react@*", "@types/react@>=16.9.11", "@types/react@>=16.9.35": + version "17.0.3" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" + integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== dependencies: "@types/prop-types" "*" + "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@17.0.2", "@types/react@>=16.9.11", "@types/react@>=16.9.35": +"@types/react@17.0.2": version "17.0.2" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.2.tgz#3de24c4efef902dd9795a49c75f760cbe4f7a5a8" integrity sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA== @@ -1125,6 +1096,11 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/scheduler@*": + version "0.16.1" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.1.tgz#18845205e86ff0038517aab7a18a62a6b9f71275" + integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -1141,9 +1117,9 @@ integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== "@types/uglify-js@*": - version "3.11.0" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.11.0.tgz#2868d405cc45cd9dc3069179052103032c33afbc" - integrity sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q== + version "3.13.0" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.0.tgz#1cad8df1fb0b143c5aba08de5712ea9d1ff71124" + integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== dependencies: source-map "^0.6.1" @@ -1153,9 +1129,9 @@ integrity sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI= "@types/webpack-sources@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.0.0.tgz#08216ab9be2be2e1499beaebc4d469cec81e82a7" - integrity sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.0.tgz#8882b0bd62d1e0ce62f183d0d01b72e6e82e8c10" + integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== dependencies: "@types/node" "*" "@types/source-list-map" "*" @@ -1174,24 +1150,24 @@ source-map "^0.6.0" "@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + version "20.2.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" + integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== "@types/yargs@^15.0.0": - version "15.0.8" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.8.tgz#7644904cad7427eb704331ea9bf1ee5499b82e23" - integrity sha512-b0BYzFUzBpOhPjpl1wtAHU994jBeKF4TKVlT7ssFv44T617XNcPdRoG4AzHLVshLzlrF7i3lTelH7UbuNYV58Q== + version "15.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.13.tgz#34f7fec8b389d7f3c1fd08026a5763e072d3c6dc" + integrity sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.15.1.tgz#835f64aa0a403e5e9e64c10ceaf8d05c3f015180" - integrity sha512-yW2epMYZSpNJXZy22Biu+fLdTG8Mn6b22kR3TqblVk50HGNV8Zya15WAXuQCr8tKw4Qf1BL4QtI6kv6PCkLoJw== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.17.0.tgz#6f856eca4e6a52ce9cf127dfd349096ad936aa2d" + integrity sha512-/fKFDcoHg8oNan39IKFOb5WmV7oWhQe1K6CDaAVfJaNWEhmfqlA24g+u1lqU5bMH7zuNasfMId4LaYWC5ijRLw== dependencies: - "@typescript-eslint/experimental-utils" "4.15.1" - "@typescript-eslint/scope-manager" "4.15.1" + "@typescript-eslint/experimental-utils" "4.17.0" + "@typescript-eslint/scope-manager" "4.17.0" debug "^4.1.1" functional-red-black-tree "^1.0.1" lodash "^4.17.15" @@ -1199,60 +1175,60 @@ semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/experimental-utils@4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.15.1.tgz#d744d1ac40570a84b447f7aa1b526368afd17eec" - integrity sha512-9LQRmOzBRI1iOdJorr4jEnQhadxK4c9R2aEAsm7WE/7dq8wkKD1suaV0S/JucTL8QlYUPU1y2yjqg+aGC0IQBQ== +"@typescript-eslint/experimental-utils@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.17.0.tgz#762c44aaa1a6a3c05b6d63a8648fb89b89f84c80" + integrity sha512-ZR2NIUbnIBj+LGqCFGQ9yk2EBQrpVVFOh9/Kd0Lm6gLpSAcCuLLe5lUCibKGCqyH9HPwYC0GIJce2O1i8VYmWA== dependencies: "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.15.1" - "@typescript-eslint/types" "4.15.1" - "@typescript-eslint/typescript-estree" "4.15.1" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" eslint-scope "^5.0.0" eslint-utils "^2.0.0" "@typescript-eslint/parser@^4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.15.1.tgz#4c91a0602733db63507e1dbf13187d6c71a153c4" - integrity sha512-V8eXYxNJ9QmXi5ETDguB7O9diAXlIyS+e3xzLoP/oVE4WCAjssxLIa0mqCLsCGXulYJUfT+GV70Jv1vHsdKwtA== + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.17.0.tgz#141b647ffc72ebebcbf9b0fe6087f65b706d3215" + integrity sha512-KYdksiZQ0N1t+6qpnl6JeK9ycCFprS9xBAiIrw4gSphqONt8wydBw4BXJi3C11ywZmyHulvMaLjWsxDjUSDwAw== dependencies: - "@typescript-eslint/scope-manager" "4.15.1" - "@typescript-eslint/types" "4.15.1" - "@typescript-eslint/typescript-estree" "4.15.1" + "@typescript-eslint/scope-manager" "4.17.0" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/typescript-estree" "4.17.0" debug "^4.1.1" -"@typescript-eslint/scope-manager@4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.15.1.tgz#f6511eb38def2a8a6be600c530c243bbb56ac135" - integrity sha512-ibQrTFcAm7yG4C1iwpIYK7vDnFg+fKaZVfvyOm3sNsGAerKfwPVFtYft5EbjzByDJ4dj1WD8/34REJfw/9wdVA== +"@typescript-eslint/scope-manager@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.17.0.tgz#f4edf94eff3b52a863180f7f89581bf963e3d37d" + integrity sha512-OJ+CeTliuW+UZ9qgULrnGpPQ1bhrZNFpfT/Bc0pzNeyZwMik7/ykJ0JHnQ7krHanFN9wcnPK89pwn84cRUmYjw== dependencies: - "@typescript-eslint/types" "4.15.1" - "@typescript-eslint/visitor-keys" "4.15.1" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" -"@typescript-eslint/types@4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.15.1.tgz#da702f544ef1afae4bc98da699eaecd49cf31c8c" - integrity sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw== +"@typescript-eslint/types@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.17.0.tgz#f57d8fc7f31b348db946498a43050083d25f40ad" + integrity sha512-RN5z8qYpJ+kXwnLlyzZkiJwfW2AY458Bf8WqllkondQIcN2ZxQowAToGSd9BlAUZDB5Ea8I6mqL2quGYCLT+2g== -"@typescript-eslint/typescript-estree@4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.1.tgz#fa9a9ff88b4a04d901ddbe5b248bc0a00cd610be" - integrity sha512-z8MN3CicTEumrWAEB2e2CcoZa3KP9+SMYLIA2aM49XW3cWIaiVSOAGq30ffR5XHxRirqE90fgLw3e6WmNx5uNw== +"@typescript-eslint/typescript-estree@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz#b835d152804f0972b80dbda92477f9070a72ded1" + integrity sha512-lRhSFIZKUEPPWpWfwuZBH9trYIEJSI0vYsrxbvVvNyIUDoKWaklOAelsSkeh3E2VBSZiNe9BZ4E5tYBZbUczVQ== dependencies: - "@typescript-eslint/types" "4.15.1" - "@typescript-eslint/visitor-keys" "4.15.1" + "@typescript-eslint/types" "4.17.0" + "@typescript-eslint/visitor-keys" "4.17.0" debug "^4.1.1" globby "^11.0.1" is-glob "^4.0.1" semver "^7.3.2" tsutils "^3.17.1" -"@typescript-eslint/visitor-keys@4.15.1": - version "4.15.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.1.tgz#c76abbf2a3be8a70ed760f0e5756bf62de5865dd" - integrity sha512-tYzaTP9plooRJY8eNlpAewTOqtWW/4ff/5wBjNVaJ0S0wC4Gpq/zDVRTJa5bq2v1pCNQ08xxMCndcvR+h7lMww== +"@typescript-eslint/visitor-keys@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz#9c304cfd20287c14a31d573195a709111849b14d" + integrity sha512-WfuMN8mm5SSqXuAr9NM+fItJ0SVVphobWYkWOwQ1odsfC014Vdxk/92t4JwS1Q6fCA/ABfCKpa3AVtpUKTNKGQ== dependencies: - "@typescript-eslint/types" "4.15.1" + "@typescript-eslint/types" "4.17.0" eslint-visitor-keys "^2.0.0" "@webassemblyjs/ast@1.11.0": @@ -1436,7 +1412,7 @@ resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -1457,7 +1433,7 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: +acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== @@ -1472,10 +1448,10 @@ acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.0.4: - version "8.0.5" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" - integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== +acorn@^8.0.4, acorn@^8.0.5: + version "8.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.1.0.tgz#52311fd7037ae119cbb134309e901aa46295b3fe" + integrity sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA== airbnb-prop-types@^2.16.0: version "2.16.0" @@ -1513,9 +1489,9 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: uri-js "^4.2.2" ajv@^7.0.2: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.1.0.tgz#f982ea7933dc7f1012eae9eec5a86687d805421b" - integrity sha512-svS9uILze/cXbH0z2myCK2Brqprx/+JJYK5pHicT/GQiBfzzhUVAIT6MwqJg8y4xV/zoGsUeuPuwtoiKSGE15g== + version "7.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.1.tgz#a5ac226171912447683524fa2f1248fcf8bac83d" + integrity sha512-+nu0HDv7kNSOua9apAVc979qd932rrZeb3WOvoiD31A/p1mIE5/9bN2027pE2rOPYEdS3UHzsvof4hY+lM9/WQ== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1643,13 +1619,15 @@ array-flatten@^2.1.0: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== +array-includes@^3.1.1, array-includes@^3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" is-string "^1.0.5" array-union@^1.0.1: @@ -1683,20 +1661,22 @@ array.prototype.find@^2.1.1: es-abstract "^1.17.4" array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" array.prototype.flatmap@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" - integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" function-bind "^1.1.1" asap@^2.0.3: @@ -1793,14 +1773,14 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" - integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axe-core@^3.5.4: - version "3.5.5" - resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-3.5.5.tgz#84315073b53fa3c0c51676c588d59da09a192227" - integrity sha512-5P0QZ6J5xGikH780pghEdbEKijCTrruK9KxtPZCFWUpef0f6GipO+xEZ5GKCb020mmqgbiNO6TcA55CriL784Q== +axe-core@^4.0.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.3.tgz#64a4c85509e0991f5168340edc4bedd1ceea6966" + integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== axios@0.21.1, axios@^0.21.1: version "0.21.1" @@ -1809,14 +1789,7 @@ axios@0.21.1, axios@^0.21.1: dependencies: follow-redirects "^1.10.0" -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -axobject-query@^2.1.2: +axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== @@ -1940,9 +1913,9 @@ binary-extensions@^1.0.0: integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bindings@^1.5.0: version "1.5.0" @@ -2094,12 +2067,12 @@ callsites@^3.0.0: integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camel-case@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" - integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: - pascal-case "^3.1.1" - tslib "^1.10.0" + pascal-case "^3.1.2" + tslib "^2.0.3" camelcase@^3.0.0: version "3.0.0" @@ -2111,20 +2084,15 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.1.0.tgz#27dc176173725fb0adf8a48b647f4d7871944d78" - integrity sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ== - -camelcase@^6.2.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== caniuse-lite@^1.0.30001181: - version "1.0.30001185" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001185.tgz#3482a407d261da04393e2f0d61eefbc53be43b95" - integrity sha512-Fpi4kVNtNvJ15H0F6vwmXtb3tukv3Zg3qhKkOGUq7KJ1J6b9kf4dnNgtEAFXhRsJo0gNj9W60+wBvn0JcTvdTg== + version "1.0.30001197" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001197.tgz#47ad15b977d2f32b3ec2fe2b087e0c50443771db" + integrity sha512-8aE+sqBqtXz4G8g35Eg/XEaFr2N7rd/VQ6eABGBmNtcB8cN6qNJhMi6oSFy4UWWZgqgL3filHT8Nha4meu3tsw== capture-exit@^2.0.0: version "2.0.0" @@ -2147,14 +2115,6 @@ chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -2208,9 +2168,9 @@ cheerio@^1.0.0-rc.3: parse5-htmlparser2-tree-adapter "^6.0.0" "chokidar@>=2.0.0 <4.0.0": - version "3.4.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.2.tgz#38dc8e658dec3809741eb3ef7bb0a47fe424232d" - integrity sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A== + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== dependencies: anymatch "~3.1.1" braces "~3.0.2" @@ -2218,9 +2178,9 @@ cheerio@^1.0.0-rc.3: is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.4.0" + readdirp "~3.5.0" optionalDependencies: - fsevents "~2.1.2" + fsevents "~2.3.1" chokidar@^2.1.8: version "2.1.8" @@ -2368,12 +2328,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -colorette@^1.2.2: +colorette@^1.2.1, colorette@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== @@ -2385,10 +2340,10 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@>=2.20.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.1.0.tgz#f8d722b78103141006b66f4c7ba1e97315ba75bc" - integrity sha512-wl7PNrYWd2y5mp1OK/LhTlv8Ff4kQJQRXXAvF+uU/TPNiVJUxZLRYGj/B0y/lPGAVcSbJqH2Za/cvHmrPMC8mA== +commander@>=2.20.0, commander@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.1.0.tgz#f2eaecf131f10e36e07d894698226e36ae0eb5ff" + integrity sha512-pRxBna3MJe6HKnBGsDyMv8ETbptw3axEdYHoqNh7gu5oDcew8fs0xnivZGm06Ogk8zGAJ9VX+OPEr2GXEQK4dg== commander@^2.19.0, commander@^2.20.0: version "2.20.3" @@ -2400,11 +2355,6 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.0.0.tgz#3e2bbfd8bb6724760980988fb5b22b7ee6b71ab2" - integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA== - comment-parser@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8" @@ -2499,14 +2449,14 @@ copy-webpack-plugin@7.0.0: serialize-javascript "^5.0.1" core-js-pure@^3.0.0: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + version "3.9.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" + integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== core-js@^2.5.0: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" @@ -2566,15 +2516,15 @@ css-loader@5.0.2: schema-utils "^3.0.0" semver "^7.3.4" -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= +css-select@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" css-select@^3.1.2: version "3.1.2" @@ -2587,10 +2537,10 @@ css-select@^3.1.2: domutils "^2.4.3" nth-check "^2.0.0" -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== css-what@^4.0.0: version "4.0.0" @@ -2612,7 +2562,7 @@ cssom@~0.3.6: resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -cssstyle@^2.2.0: +cssstyle@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== @@ -2620,9 +2570,9 @@ cssstyle@^2.2.0: cssom "~0.3.6" csstype@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.3.tgz#2b410bbeba38ba9633353aff34b05d9755d065f8" - integrity sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag== + version "3.0.7" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" + integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== d3-array@^1.2.0: version "1.2.4" @@ -2720,9 +2670,9 @@ data-urls@^2.0.0: whatwg-url "^8.0.0" date-fns@*: - version "2.16.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" - integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + version "2.19.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.19.0.tgz#65193348635a28d5d916c43ec7ce6fbd145059e1" + integrity sha512-X3bf2iTPgCAQp9wvjOQytnf5vO5rESYRXlPIVcgSbtT5OTScPcsf9eZU+B/YIkKAtYr5WeCii58BgATrNitlWg== date-fns@2.17.0: version "2.17.0" @@ -2741,13 +2691,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: dependencies: ms "2.0.0" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debug@^3.1.1, debug@^3.2.6: version "3.2.7" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -2755,14 +2698,7 @@ debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" - integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== - dependencies: - ms "2.1.2" - -debug@^4.3.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -2774,7 +2710,7 @@ decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.0: +decimal.js@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== @@ -2893,11 +2829,6 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== -diff-sequences@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" - integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== - diff-sequences@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" @@ -2985,16 +2916,7 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" - integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - -dom-serializer@~1.2.0: +dom-serializer@^1.0.1, dom-serializer@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== @@ -3008,12 +2930,7 @@ domelementtype@1, domelementtype@^1.3.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" - integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== - -domelementtype@^2.1.0: +domelementtype@^2.0.1, domelementtype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== @@ -3032,13 +2949,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - domhandler@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" @@ -3046,15 +2956,7 @@ domhandler@^4.0.0: dependencies: domelementtype "^2.1.0" -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: +domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== @@ -3071,13 +2973,13 @@ domutils@^2.4.3, domutils@^2.4.4: domelementtype "^2.0.1" domhandler "^4.0.0" -dot-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" - integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" ecc-jsbn@~0.1.1: version "0.1.2" @@ -3093,14 +2995,14 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.649: - version "1.3.663" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.663.tgz#dd54adfd8d7f0e01b80d236c6e232efbaa0c686c" - integrity sha512-xkVkzHj6k3oRRGlmdgUCCLSLhtFYHDCTH7SeK+LJdJjnsLcrdbpr8EYmfMQhez3V/KPO5UScSpzQ0feYX6Qoyw== + version "1.3.683" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.683.tgz#2c9ab53ff5275cf3dd49278af714d0f8975204f7" + integrity sha512-8mFfiAesXdEdE0DhkMKO7W9U6VU/9T3VTWwZ+4g84/YMP4kgwgFtQgUxuu7FUMcvSeKSNhFQNU+WZ68BQTLT5A== emittery@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451" - integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ== + version "0.7.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" + integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== emoji-regex@^7.0.1: version "7.0.3" @@ -3113,9 +3015,9 @@ emoji-regex@^8.0.0: integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== emoji-regex@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.0.0.tgz#48a2309cc8a1d2e9d23bc6a67c39b63032e76ea4" - integrity sha512-6p1NII1Vm62wni/VR/cUMauVQoxmLVb9csqQlvLz+hO2gk8U2UYDfXHQSUYIBKmZwAKz867IDqG7B+u0mj+M6w== + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojis-list@^3.0.0: version "3.0.0" @@ -3135,9 +3037,9 @@ end-of-stream@^1.1.0: once "^1.4.0" enhanced-resolve@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== dependencies: graceful-fs "^4.1.2" memory-fs "^0.5.0" @@ -3164,9 +3066,9 @@ entities@^1.1.1: integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@~2.1.0: version "2.1.0" @@ -3252,9 +3154,9 @@ enzyme@3.11.0: string.prototype.trim "^1.2.1" errno@^0.1.3: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" @@ -3265,40 +3167,27 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.4, es-abstract@^1.17.5: - version "1.17.7" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" - integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-regex "^1.1.1" - object-inspect "^1.8.0" - object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: - version "1.18.0-next.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" - integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== +es-abstract@^1.17.4, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: + version "1.18.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" + integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== dependencies: + call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" + get-intrinsic "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.2" - is-negative-zero "^2.0.0" - is-regex "^1.1.1" - object-inspect "^1.8.0" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.2" + is-string "^1.0.5" + object-inspect "^1.9.0" object-keys "^1.1.1" - object.assign "^4.1.1" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.0" es-module-lexer@^0.4.0: version "0.4.1" @@ -3339,13 +3228,13 @@ escape-string-regexp@^4.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== dependencies: esprima "^4.0.1" - estraverse "^4.2.0" + estraverse "^5.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: @@ -3430,9 +3319,9 @@ eslint-plugin-jest@^21.15.0: integrity sha512-0E4OIgBJVlAmf1KfYFtZ3gYxgUzC5Eb3Jzmrc9ikI1OY+/cM8Kh72Ti7KfpeHNeD3HJNf9SmEfmvQLIz44Hrhw== eslint-plugin-jsdoc@^32.0.1: - version "32.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.0.1.tgz#a3ab1a64a4e6ff550605706aa3fd0d092073da56" - integrity sha512-7T6cKNGJsJ1SxhG4vbEBi2fRmUL3DHzRNsiQZri4vkgIQjCoBb40ZNxSNwBqiVz16C7tW3qLncPoNXsiIFdzcg== + version "32.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.2.0.tgz#d848ea8475a9be63d8d261bd7fa01cf2a2bb32d5" + integrity sha512-ikeVeF3JVmzjcmGd04OZK0rXjgiw46TWtNX+OhyF2jQlw3w1CAU1vyAyLv8PZcIjp7WxP4N20Vg1CI9bp/52dw== dependencies: comment-parser "1.1.2" debug "^4.3.1" @@ -3443,20 +3332,20 @@ eslint-plugin-jsdoc@^32.0.1: spdx-expression-parse "^3.0.1" eslint-plugin-jsx-a11y@^6.0.3: - version "6.3.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.3.1.tgz#99ef7e97f567cc6a5b8dd5ab95a94a67058a2660" - integrity sha512-i1S+P+c3HOlBJzMFORRbC58tHa65Kbo8b52/TwCwSKLohwvpfT5rm2GjGWzOHTEuq4xxf2aRlHHTtmExDQOP+g== + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== dependencies: - "@babel/runtime" "^7.10.2" + "@babel/runtime" "^7.11.2" aria-query "^4.2.2" array-includes "^3.1.1" ast-types-flow "^0.0.7" - axe-core "^3.5.4" - axobject-query "^2.1.2" + axe-core "^4.0.2" + axobject-query "^2.2.0" damerau-levenshtein "^1.0.6" emoji-regex "^9.0.0" has "^1.0.3" - jsx-ast-utils "^2.4.1" + jsx-ast-utils "^3.1.0" language-tags "^1.0.5" eslint-plugin-markdown@^2.0.0: @@ -3520,11 +3409,11 @@ eslint-plugin-promise@^3.7.0: integrity sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ== eslint-plugin-react-hooks@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.1.2.tgz#2eb53731d11c95826ef7a7272303eabb5c9a271e" - integrity sha512-ykUeqkGyUGgwTtk78C0o8UG2fzwmgJ0qxBGPp2WqRKsTwcLuVf01kTDRAtOsd4u6whX2XOC8749n2vPydP82fg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz#8c229c268d468956334c943bb45fc860280f5556" + integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== -eslint-plugin-react@^7.22.0: +eslint-plugin-react@^7.22.0, eslint-plugin-react@^7.7.0: version "7.22.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.22.0.tgz#3d1c542d1d3169c45421c1215d9470e341707269" integrity sha512-p30tuX3VS+NWv9nQot9xIGAHBXR0+xJVaZriEsHoJrASGCJZDJ8JLNM0YqKqI0AKm6Uxaa1VUHoNEibxRCMQHA== @@ -3541,23 +3430,6 @@ eslint-plugin-react@^7.22.0: resolve "^1.18.1" string.prototype.matchall "^4.0.2" -eslint-plugin-react@^7.7.0: - version "7.21.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.4.tgz#31060b2e5ff82b12e24a3cc33edb7d12f904775c" - integrity sha512-uHeQ8A0hg0ltNDXFu3qSfFqTNPXm1XithH6/SY318UX76CMj7Q599qWpgmMhVQyvhq36pm7qvoN3pb6/3jsTFg== - dependencies: - array-includes "^3.1.1" - array.prototype.flatmap "^1.2.3" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.4.1 || ^3.0.0" - object.entries "^1.1.2" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.17.0" - string.prototype.matchall "^4.0.2" - eslint-plugin-rulesdir@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-rulesdir/-/eslint-plugin-rulesdir-0.1.0.tgz#ad144d7e98464fda82963eff3fab331aecb2bf08" @@ -3612,12 +3484,12 @@ eslint-visitor-keys@^2.0.0: integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== eslint@^7.20.0: - version "7.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.20.0.tgz#db07c4ca4eda2e2316e7aa57ac7fc91ec550bdc7" - integrity sha512-qGi0CTcOGP2OtCQBgWZlQjcTuP0XkIpYFj25XtRTQSHC+umNnp7UMshr2G8SLsRFYDdAPFeHOsiteadmMH02Yw== + version "7.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.21.0.tgz#4ecd5b8c5b44f5dedc9b8a110b01bbfeb15d1c83" + integrity sha512-W2aJbXpMNofUp0ztQaF40fveSsJBjlSCSWpy//gzfTvwC+USs/nceBrKmlJOiM8r1bLwP2EuYkCqArn/6QTIgg== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.3.0" + "@eslint/eslintrc" "^0.4.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3630,7 +3502,7 @@ eslint@^7.20.0: espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" - file-entry-cache "^6.0.0" + file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" glob-parent "^5.0.0" globals "^12.1.0" @@ -3654,16 +3526,7 @@ eslint@^7.20.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" - integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.3.0" - -espree@^7.3.1: +espree@^7.3.0, espree@^7.3.1: version "7.3.1" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== @@ -3691,7 +3554,7 @@ esrecurse@^4.1.0, esrecurse@^4.3.0: dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== @@ -3717,9 +3580,9 @@ eventemitter3@^4.0.0: integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== events@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" - integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== eventsource@^1.0.7: version "1.0.7" @@ -3747,9 +3610,9 @@ execa@^1.0.0: strip-eof "^1.0.0" execa@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" - integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" get-stream "^5.0.0" @@ -3897,9 +3760,9 @@ fast-diff@^1.1.1, fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.1.1, fast-glob@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" - integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -3924,9 +3787,9 @@ fastest-levenshtein@^1.0.12: integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== fastq@^1.6.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.8.0.tgz#550e1f9f59bbc65fe185cb6a9b4d95357107f481" - integrity sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q== + version "1.11.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== dependencies: reusify "^1.0.4" @@ -3944,17 +3807,17 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" -file-entry-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" - integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" file-selector@^0.1.8: - version "0.1.13" - resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.13.tgz#5efd977ca2bca1700992df1b10e254f4e73d2df4" - integrity sha512-T2efCBY6Ps+jLIWdNQsmzt/UnAjKOEAlsZVdnQztg/BtAZGNL4uX1Jet9cMM8gify/x4CSudreji2HssGBNVIQ== + version "0.1.19" + resolved "https://registry.yarnpkg.com/file-selector/-/file-selector-0.1.19.tgz#8ecc9d069a6f544f2e4a096b64a8052e70ec8abf" + integrity sha512-kCWw3+Aai8Uox+5tHCNgMFaUdgidxvMnLWO6fM5sZ0hA2wlHP5/DHGF0ECe84BiB95qdJbKNEJhWKVDvMN+JDQ== dependencies: tslib "^2.0.1" @@ -4043,22 +3906,10 @@ focus-trap@6.2.2: dependencies: tabbable "^5.1.4" -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -follow-redirects@^1.0.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.2.tgz#dd73c8effc12728ba5cf4259d760ea5fb83e3147" - integrity sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA== - -follow-redirects@^1.10.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" - integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.13.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" + integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== for-in@^1.0.2: version "1.0.2" @@ -4109,54 +3960,40 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== +fsevents@^2.1.2, fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" - -function.prototype.name@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.3.tgz#0bb034bb308e7682826f215eb6b2ae64918847fe" - integrity sha512-H51qkbNSp8mtkJt+nyW1gyStBiKZxfRqySNUR99ylq6BPXHKI4SEvIlTKp4odLfjRKJV04DFWMU3G/YRlQOsag== +function.prototype.name@^1.1.2, function.prototype.name@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.4.tgz#e4ea839b9d3672ae99d0efd9f38d9191c5eaac83" + integrity sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - functions-have-names "^1.2.1" + es-abstract "^1.18.0-next.2" + functions-have-names "^1.2.2" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" - integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== - -functions-have-names@^1.2.1: +functions-have-names@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-caller-file@^1.0.1: version "1.0.3" @@ -4168,7 +4005,7 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -4232,9 +4069,9 @@ glob-parent@^3.1.0: path-dirname "^1.0.0" glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" @@ -4268,9 +4105,9 @@ globals@^12.1.0: type-fest "^0.8.1" globby@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + version "11.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" + integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" @@ -4290,16 +4127,11 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -graceful-fs@^4.1.11: +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.6" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== -graceful-fs@^4.1.2, graceful-fs@^4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4323,6 +4155,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +has-bigints@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4333,10 +4170,10 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== has-value@^0.3.1: version "0.3.1" @@ -4468,7 +4305,7 @@ html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: relateurl "^0.2.7" terser "^4.6.3" -html-parse-stringify2@2.0.1: +html-parse-stringify2@2.0.1, html-parse-stringify2@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz#dc5670b7292ca158b7bc916c9a6735ac8872834a" integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= @@ -4481,18 +4318,17 @@ html-replace-webpack-plugin@2.6.0: integrity sha512-BL0DgtqIAef2C8+Dq8v3Ork7FWLPVVkuFkd3DpFB8XxI8hgXiWytvWhGTztSwdiIrPstUPahL5g7W8ts/vuERw== html-webpack-plugin@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.1.0.tgz#1c11bbe01ab9d1262c4b601edebcf394364b1f60" - integrity sha512-2axkp+2NHmvHUWrKe1dY4LyM3WatQEdFChr42OY7R/Ad7f0AQzaKscGCcqN/FtQBxo8rdfJP7M3RMFDttqok3g== + version "5.3.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.3.1.tgz#8797327548e3de438e3494e0c6d06f181a7f20d1" + integrity sha512-rZsVvPXUYFyME0cuGkyOHfx9hmkFa4pWfxY/mdY38PsBEaVNsRoA+Id+8z6DBDgyv3zaw6XQszdF8HLwfQvcdQ== dependencies: "@types/html-minifier-terser" "^5.0.0" html-minifier-terser "^5.0.1" - loader-utils "^2.0.0" lodash "^4.17.20" pretty-error "^2.1.1" tapable "^2.0.0" -htmlparser2@^3.3.0: +htmlparser2@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -4505,9 +4341,9 @@ htmlparser2@^3.3.0: readable-stream "^3.1.1" htmlparser2@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.0.tgz#c2da005030390908ca4c91e5629e418e0665ac01" - integrity sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" + integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" @@ -4621,11 +4457,11 @@ i18next-xhr-backend@*, i18next-xhr-backend@3.2.2: "@babel/runtime" "^7.5.5" i18next@*: - version "19.8.2" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.8.2.tgz#8a20ee098c4702f14aae6dee3ecc39245a6a161e" - integrity sha512-YWqkUpwnmeZxbNxhQ4BENC27BlXnq4kD6NlqMUwX7T6ZN3alNnBXsWrh/8mJ37BL5cKMZaqA0k/YUo4o6rLfpA== + version "19.9.2" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-19.9.2.tgz#ea5a124416e3c5ab85fddca2c8e3c3669a8da397" + integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== dependencies: - "@babel/runtime" "^7.10.1" + "@babel/runtime" "^7.12.0" i18next@19.8.8: version "19.8.8" @@ -4662,9 +4498,9 @@ ignore@^5.1.4: integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -4728,14 +4564,14 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== dependencies: - es-abstract "^1.17.0-next.1" + get-intrinsic "^1.1.0" has "^1.0.3" - side-channel "^1.0.2" + side-channel "^1.0.4" interpret@^2.2.0: version "2.2.0" @@ -4813,6 +4649,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" + integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -4827,7 +4668,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.0.1: +is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== @@ -4839,12 +4680,7 @@ is-buffer@^1.1.4, is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.4, is-callable@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" - integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== - -is-callable@^1.1.5: +is-callable@^1.1.4, is-callable@^1.1.5, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== @@ -4856,7 +4692,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.1.0, is-core-module@^2.2.0: +is-core-module@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== @@ -4968,10 +4804,10 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== -is-negative-zero@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" - integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== is-number-object@^1.0.4: version "1.0.4" @@ -5031,7 +4867,7 @@ is-potential-custom-element-name@^1.0.0: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= -is-regex@^1.0.4, is-regex@^1.0.5: +is-regex@^1.0.4, is-regex@^1.0.5, is-regex@^1.1.0, is-regex@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== @@ -5039,13 +4875,6 @@ is-regex@^1.0.4, is-regex@^1.0.5: call-bind "^1.0.2" has-symbols "^1.0.1" -is-regex@^1.1.0, is-regex@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" - integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== - dependencies: - has-symbols "^1.0.1" - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5066,7 +4895,7 @@ is-subset@^0.1.1: resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= -is-symbol@^1.0.2: +is-symbol@^1.0.2, is-symbol@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== @@ -5235,16 +5064,6 @@ jest-config@^26.6.3: micromatch "^4.0.2" pretty-format "^26.6.2" -jest-diff@^25.2.1: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" - integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== - dependencies: - chalk "^3.0.0" - diff-sequences "^25.2.6" - jest-get-type "^25.2.6" - pretty-format "^25.5.0" - jest-diff@^26.0.0, jest-diff@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" @@ -5303,11 +5122,6 @@ jest-environment-node@^26.6.2: jest-mock "^26.6.2" jest-util "^26.6.2" -jest-get-type@^25.2.6: - version "25.2.6" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" - integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== - jest-get-type@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" @@ -5521,19 +5335,7 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-util@^26.1.0: - version "26.5.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.5.2.tgz#8403f75677902cc52a1b2140f568e91f8ed4f4d7" - integrity sha512-WTL675bK+GSSAYgS8z9FWdCT2nccO1yTIplNLPlP0OD8tUk/H5IrWKMMRudIQQ0qp8bb4k+1Qa8CxGKq9qnYdg== - dependencies: - "@jest/types" "^26.5.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - -jest-util@^26.6.2: +jest-util@^26.1.0, jest-util@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== @@ -5599,9 +5401,9 @@ js-file-download@0.4.12: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5617,35 +5419,35 @@ jsdoctypeparser@^9.0.0: integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== + version "16.5.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.5.0.tgz#9e453505600cc5a70b385750d35256f380730cc4" + integrity sha512-QxZH0nmDTnTTVI0YDm4RUlaUPl5dcyn62G5TMDNfMmTW+J1u1v9gCR8WR+WZ6UghAa7nKJjDOFaI00eMMWvJFQ== dependencies: - abab "^2.0.3" - acorn "^7.1.1" + abab "^2.0.5" + acorn "^8.0.5" acorn-globals "^6.0.0" cssom "^0.4.4" - cssstyle "^2.2.0" + cssstyle "^2.3.0" data-urls "^2.0.0" - decimal.js "^10.2.0" + decimal.js "^10.2.1" domexception "^2.0.1" - escodegen "^1.14.1" + escodegen "^2.0.0" html-encoding-sniffer "^2.0.1" is-potential-custom-element-name "^1.0.0" nwsapi "^2.2.0" - parse5 "5.1.1" + parse5 "6.0.1" request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" + request-promise-native "^1.0.9" + saxes "^5.0.1" symbol-tree "^3.2.4" - tough-cookie "^3.0.1" + tough-cookie "^4.0.0" w3c-hr-time "^1.0.2" w3c-xmlserializer "^2.0.0" webidl-conversions "^6.1.0" whatwg-encoding "^1.0.5" whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" - ws "^7.2.3" + ws "^7.4.4" xml-name-validator "^3.0.0" jsesc@^2.5.1: @@ -5701,9 +5503,9 @@ json3@^3.3.3: integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: minimist "^1.2.5" @@ -5729,21 +5531,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz#1114a4c1209481db06c690c2b4f488cc665f657e" - integrity sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w== - dependencies: - array-includes "^3.1.1" - object.assign "^4.1.0" - -"jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.0.0.tgz#0f49d5093bafa4b45d3fe02147d8b40ffc6c7438" - integrity sha512-sPuicm6EPKYI/UnWpOatvg4pI50qaBo4dSOMGUPutmJ26ttedFKXr0It0XXPk4HKnQ/1X0st4eSS2w2jhFk9Ow== +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz#41108d2cec408c3453c1bbe8a4aae9e1e2bd8f82" + integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== dependencies: - array-includes "^3.1.1" - object.assign "^4.1.1" + array-includes "^3.1.2" + object.assign "^4.1.2" killable@^1.0.1: version "1.0.1" @@ -5785,9 +5579,9 @@ klona@^2.0.3, klona@^2.0.4: integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== language-subtag-registry@~0.3.2: - version "0.3.20" - resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz#a00a37121894f224f763268e431c55556b0c0755" - integrity sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg== + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== language-tags@^1.0.5: version "1.0.5" @@ -5888,9 +5682,9 @@ locate-path@^5.0.0: p-locate "^4.1.0" lodash-es@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.20.tgz#29f6332eefc60e849f869c264bc71126ad61e8f7" - integrity sha512-JD1COMZsq8maT6mnuz1UMV0jvYD0E0aUsSOdrr1/nAG3dhqQXwRRgeW0cSqH1U43INKcqxaiVIQNOUDld7gRDA== + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== lodash.assign@^4.1.0, lodash.assign@^4.2.0: version "4.2.0" @@ -5917,12 +5711,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -lodash@^4.17.0: +lodash@4.x, lodash@^4.17.0, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5944,12 +5733,12 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" - integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: - tslib "^1.10.0" + tslib "^2.0.3" lru-cache@^6.0.0: version "6.0.0" @@ -6067,34 +5856,17 @@ micromatch@^4.0.0, micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-db@1.45.0: - version "1.45.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" - integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== - -"mime-db@>= 1.43.0 < 2": +mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": version "1.46.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.24: - version "2.1.28" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" - integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.29" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" + integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== dependencies: - mime-db "1.45.0" + mime-db "1.46.0" mime@1.6.0: version "1.6.0" @@ -6102,9 +5874,9 @@ mime@1.6.0: integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz#2b4af934401779806ee98026bb42e8c1ae1876b1" - integrity sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag== + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== mimic-fn@^2.1.0: version "2.1.0" @@ -6120,9 +5892,9 @@ mini-create-react-context@^0.4.0: tiny-warning "^1.0.3" mini-css-extract-plugin@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.7.tgz#51848320f736bebccbe9875e38c776c364a4a8eb" - integrity sha512-NDyOUqdfKVIfWTludTcZ6JDOMsIdWgyTEECYbfvZszPpkMRyQLvukqtLr92tfukPQxVZNCKb8TkOilFBvS5RIw== + version "1.3.9" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz#47a32132b0fd97a119acd530e8421e8f6ab16d5e" + integrity sha512-Ac4s+xhVbqlyhXS5J/Vh/QXUz3ycXlCqoCPpg0vdfhsIBH9eg/It/9L1r1XhSCH737M1lqcWnMuWL13zcygn5A== dependencies: loader-utils "^2.0.0" schema-utils "^3.0.0" @@ -6241,15 +6013,14 @@ natural-compare@^1.4.0: integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= nearley@^2.7.10: - version "2.19.7" - resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.19.7.tgz#eafbe3e2d8ccfe70adaa5c026ab1f9709c116218" - integrity sha512-Y+KNwhBPcSJKeyQCFjn8B/MIe+DDlhaaDgjVldhy5xtFewIbiQgcbZV8k2gCVwkI1ZsKCnjIYZbR+0Fim5QYgg== + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== dependencies: commander "^2.19.0" moo "^0.5.0" railroad-diagrams "^1.0.0" randexp "0.4.6" - semver "^5.4.1" negotiator@0.6.2: version "0.6.2" @@ -6266,13 +6037,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" - integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: - lower-case "^2.0.1" - tslib "^1.10.0" + lower-case "^2.0.2" + tslib "^2.0.3" node-forge@^0.10.0: version "0.10.0" @@ -6290,9 +6061,9 @@ node-modules-regexp@^1.0.0: integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" - integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== + version "8.0.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1" + integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA== dependencies: growly "^1.3.0" is-wsl "^2.2.0" @@ -6302,9 +6073,9 @@ node-notifier@^8.0.0: which "^2.0.2" node-releases@^1.1.70: - version "1.1.70" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.70.tgz#66e0ed0273aa65666d7fe78febe7634875426a08" - integrity sha512-Slf2s69+2/uAD79pVVQo8uSiC34+g8GWY8UH2Qtqv34ZfhYrxpYpfzs9Js9d6O0mbDmALuxaTlplnBTnSELcrw== + version "1.1.71" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.71.tgz#cb1334b179896b1c89ecfdd4b725fb7bbdfc7dbb" + integrity sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" @@ -6342,6 +6113,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + nth-check@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" @@ -6349,13 +6127,6 @@ nth-check@^2.0.0: dependencies: boolbase "^1.0.0" -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - null-loader@4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-4.0.1.tgz#8e63bd3a2dd3c64236a4679428632edd0a6dbc6a" @@ -6393,30 +6164,17 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.7.0: +object-inspect@^1.7.0, object-inspect@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== -object-inspect@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.0.1, object-is@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" - integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - -object-is@^1.0.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.4.tgz#63d6c83c00a43f4cbc9434eb9757c8a5b8565068" - integrity sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg== +object-is@^1.0.1, object-is@^1.0.2, object-is@^1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" object-keys@^1.0.12, object-keys@^1.1.1: @@ -6431,17 +6189,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.1.tgz#303867a666cdd41936ecdedfb1f8f3e32a478cdd" - integrity sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.18.0-next.0" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.assign@^4.1.2: +object.assign@^4.1.0, object.assign@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== @@ -6451,7 +6199,7 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.entries@^1.1.1: +object.entries@^1.1.1, object.entries@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6" integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== @@ -6461,33 +6209,14 @@ object.entries@^1.1.1: es-abstract "^1.18.0-next.1" has "^1.0.3" -object.entries@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" - integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.3.tgz#13cefcffa702dc67750314a3305e8cb3fad1d072" - integrity sha512-IDUSMXs6LOSJBWE++L0lzIbSqHl9KDCfff2x/JSEIDtEUavUnyMYC2ZGay/04Zq4UT8lvd4xNhU4/YHKibAOlw== +object.fromentries@^2.0.2, object.fromentries@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" object.pick@^1.3.0: @@ -6497,24 +6226,14 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.values@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== +object.values@^1.1.1, object.values@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.3.tgz#eaa8b1e17589f02f698db093f7c62ee1699742ee" + integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" has "^1.0.3" obuf@^1.0.0, obuf@^1.1.2: @@ -6594,9 +6313,9 @@ os-locale@^1.4.0: lcid "^1.0.0" p-each-series@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" - integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" + integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== p-finally@^1.0.0: version "1.0.0" @@ -6668,12 +6387,12 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== param-case@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" - integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: - dot-case "^3.0.3" - tslib "^1.10.0" + dot-case "^3.0.4" + tslib "^2.0.3" parent-module@^1.0.0: version "1.0.1" @@ -6702,9 +6421,9 @@ parse-json@^2.2.0: error-ex "^1.2.0" parse-json@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" - integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" error-ex "^1.3.1" @@ -6730,12 +6449,7 @@ parse5-sax-parser@^6.0.1: dependencies: parse5 "^6.0.1" -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.0, parse5@^6.0.1: +parse5@6.0.1, parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -6745,13 +6459,13 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -pascal-case@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" - integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: - no-case "^3.0.3" - tslib "^1.10.0" + no-case "^3.0.4" + tslib "^2.0.3" pascalcase@^0.1.1: version "0.1.1" @@ -6960,7 +6674,7 @@ postcss-value-parser@^4.1.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== -postcss@^8.0.2: +postcss@^8.0.2, postcss@^8.2.4: version "8.2.7" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" integrity sha512-DsVLH3xJzut+VT+rYr0mtvOtpTjSyqDwPf5EZWXcb0uAKfitGpTY9Ec+afi2+TgdN8rWS9Cs88UDYehKo/RvOw== @@ -6969,15 +6683,6 @@ postcss@^8.0.2: nanoid "^3.1.20" source-map "^0.6.1" -postcss@^8.2.4: - version "8.2.6" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" - integrity sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg== - dependencies: - colorette "^1.2.1" - nanoid "^3.1.20" - source-map "^0.6.1" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7001,22 +6706,12 @@ prettier@^2.2.1: integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== pretty-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^25.2.1, pretty-format@^25.5.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" - integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== dependencies: - "@jest/types" "^25.5.0" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^16.12.0" + lodash "^4.17.20" + renderkid "^2.0.4" pretty-format@^26.0.0, pretty-format@^26.6.2: version "26.6.2" @@ -7039,12 +6734,12 @@ progress@^2.0.0: integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== prompts@^2.0.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" - integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== dependencies: kleur "^3.0.3" - sisteransi "^1.0.4" + sisteransi "^1.0.5" prop-types-exact@^1.2.0: version "1.2.0" @@ -7085,7 +6780,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -7133,6 +6828,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +queue-microtask@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" + integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== + raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -7200,9 +6900,9 @@ react-bootstrap@1.5.0: warning "^4.0.3" react-content-loader@>=3.4.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/react-content-loader/-/react-content-loader-5.1.2.tgz#75dcff30f2651c166c21433484081e7e70b44b6a" - integrity sha512-Kr4wWisiL0qcdbzVWZx/puyCfTP1PiTTtR7N4B7mikTeY2wf5TMgMykUQyaEUW422IDUU9VJWfewSm9hIRwTiw== + version "6.0.2" + resolved "https://registry.yarnpkg.com/react-content-loader/-/react-content-loader-6.0.2.tgz#7c72e5b133136c31c2f27036d1d7b39dab804026" + integrity sha512-eQrWT2KV1uPhFh9ErRhOLl4SBkzK9oxQiuEq6Dgq4D9oqKg9j/Ib8+aFoknvn1hYVx5fqSAI5BjxY9ukTOVPXw== react-dom@17.0.1: version "17.0.1" @@ -7229,12 +6929,12 @@ react-fast-compare@^2.0.0: integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== react-i18next@*: - version "11.7.3" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.7.3.tgz#256461c46baf5b3208c3c6860ca4e569fc7ed053" - integrity sha512-7sYZqVZgdaS9Z0ZH6nuJFErCD0zz5wK3jR4/xCrWjZcxHHF3GRu7BXdicbSPprZV4ZYz7LJzxxMHO7dg5Qb70A== + version "11.8.9" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.8.9.tgz#188039708f99a6114b4437f0e620bf99a6c3c7dd" + integrity sha512-HVW4/KtBvXcnzkYeS32IqdGBJJ1fksvqVDnnspsyruO99fhHQaAw1vTSrRpcNE5D8vrOu7B9c6sawfmQJ6OWRg== dependencies: - "@babel/runtime" "^7.3.1" - html-parse-stringify2 "2.0.1" + "@babel/runtime" "^7.13.6" + html-parse-stringify2 "^2.0.1" react-i18next@11.8.7: version "11.8.7" @@ -7322,9 +7022,9 @@ react-shallow-renderer@^16.13.1: react-is "^16.12.0 || ^17.0.0" react-test-renderer@^16.0.0-0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" - integrity sha512-Sn2VRyOK2YJJldOqoh8Tn/lWQ+ZiKhyZTPtaO0Q6yNj+QDbmRkVFap6pZPy3YQk8DScRDfyqm/KxKYP9gCMRiQ== + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.14.0.tgz#e98360087348e260c56d4fe2315e970480c228ae" + integrity sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg== dependencies: object-assign "^4.1.1" prop-types "^15.6.2" @@ -7443,10 +7143,10 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== dependencies: picomatch "^2.2.1" @@ -7488,7 +7188,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0: +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== @@ -7496,14 +7196,6 @@ regexp.prototype.flags@^1.2.0: call-bind "^1.0.2" define-properties "^1.1.3" -regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" @@ -7545,16 +7237,16 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== +renderkid@^2.0.4: + version "2.0.5" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.5.tgz#483b1ac59c6601ab30a7a596a5965cabccfdd0a5" + integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== dependencies: - css-select "^1.1.0" + css-select "^2.0.2" dom-converter "^0.2" - htmlparser2 "^3.3.0" + htmlparser2 "^3.10.1" + lodash "^4.17.20" strip-ansi "^3.0.0" - utila "^0.4.0" repeat-element@^1.1.2: version "1.1.3" @@ -7578,7 +7270,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise-native@^1.0.8: +request-promise-native@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== @@ -7677,22 +7369,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.18.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" - -resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.3, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -7743,9 +7420,11 @@ rsvp@^4.8.4: integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-parallel@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" - integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -7806,13 +7485,13 @@ sass-loader@^11.0.1: neo-async "^2.6.2" sass@^1.32.7: - version "1.32.7" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.7.tgz#632a9df2b85dc4b346977fcaf2d5e6f2b7039fd8" - integrity sha512-C8Z4bjqGWnsYa11o8hpKAuoyFdRhrSHcYjCr+XAWVPSIQqC8mp2f5Dx4em0dKYehPzg5XSekmCjqJnEZbIls9A== + version "1.32.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc" + integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ== dependencies: chokidar ">=2.0.0 <4.0.0" -saxes@^5.0.0: +saxes@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== @@ -7870,23 +7549,18 @@ selfsigned@^1.10.8: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.2.1, semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.4: +semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: version "7.3.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" +semver@^6.0.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -7997,20 +7671,21 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -side-channel@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" - integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: - es-abstract "^1.18.0-next.0" - object-inspect "^1.8.0" + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -sisteransi@^1.0.4: +sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== @@ -8105,9 +7780,9 @@ source-map-support@^0.5.6, source-map-support@~0.5.12, source-map-support@~0.5.1 source-map "^0.6.0" source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" @@ -8146,9 +7821,9 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" - integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + version "3.0.7" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== spdy-transport@^3.0.0: version "3.0.0" @@ -8201,9 +7876,9 @@ sshpk@^1.7.0: tweetnacl "~0.14.0" stack-utils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593" - integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" + integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== dependencies: escape-string-regexp "^2.0.0" @@ -8262,50 +7937,51 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + version "4.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz#608f255e93e072107f5de066f81a2dfb78cf6b29" + integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0" + es-abstract "^1.18.0-next.2" has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" string.prototype.trim@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.3.tgz#d23a22fde01c1e6571a7fadcb9be11decd8061a7" - integrity sha512-16IL9pIBA5asNOSukPfxX2W68BaBvxyiRK16H3RA/lWW9BDosh+w7f+LhomPHpXJ82QEe7w7/rY/S1CV97raLg== + version "1.2.4" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" + integrity sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" + es-abstract "^1.18.0-next.2" -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.5" string_decoder@^1.1.1: version "1.3.0" @@ -8414,9 +8090,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tabbable@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.1.4.tgz#5278929c16d0d909c2cfcdfcfa89dd86bce5dd1a" - integrity sha512-M1thgfxQ6NGuiSv6I+392zkDcyE5f0DbZPkUQaxnFNu9n9UR/GuE0ii2Hf3l7CQHNiraYhD8W3GBRp35W/+kXg== + version "5.1.6" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.1.6.tgz#dd495abe81d5e41e003fbfa70952e20d5e1e1e89" + integrity sha512-KSlGaSX9PbL7FHDTn2dB+zv61prkY8BeGioTsKfeN7dKhw5uz1S4U2iFaWMK4GR8oU+5OFBkFuxbMsaUxVVlrQ== table@^6.0.4: version "6.0.7" @@ -8572,14 +8248,14 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" + psl "^1.1.33" punycode "^2.1.1" + universalify "^0.1.2" tr46@^2.0.2: version "2.0.2" @@ -8589,9 +8265,9 @@ tr46@^2.0.2: punycode "^2.1.1" trim-trailing-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" - integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== trim@0.0.1: version "0.0.1" @@ -8655,20 +8331,20 @@ tslib@1.13.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" - integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== +tslib@^2.0.1, tslib@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" @@ -8743,6 +8419,16 @@ typescript@4.1.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.5.tgz#123a3b214aaff3be32926f0d8f1f6e704eb89a72" integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== +unbox-primitive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.0.tgz#eeacbc4affa28e9b3d36b5eaeccc50b3251b1d3f" + integrity sha512-P/51NX+JXyxK/aigg1/ZgyccdAxm5K1+n8+tvqSntjOivPt19gvm1VC49RWYetsiub8WViUchdxl/KWHHB0kzA== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.0" + has-symbols "^1.0.0" + which-boxed-primitive "^1.0.1" + uncontrollable@^7.0.0: version "7.2.1" resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" @@ -8819,6 +8505,11 @@ unist-util-visit@^1.1.0: dependencies: unist-util-visit-parents "^2.0.0" +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -8838,9 +8529,9 @@ upath@^1.1.1: integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== uri-js@^4.2.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" - integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" @@ -8850,9 +8541,9 @@ urix@^0.1.0: integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse@^1.4.3, url-parse@^1.4.7: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== dependencies: querystringify "^2.1.1" requires-port "^1.0.0" @@ -8875,7 +8566,7 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -utila@^0.4.0, utila@~0.4: +utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= @@ -8891,19 +8582,14 @@ uuid@^3.3.2, uuid@^3.4.0: integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== uuid@^8.3.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" - integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -v8-compile-cache@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" - integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== v8-to-istanbul@^7.0.0: version "7.1.0" @@ -8964,56 +8650,56 @@ vfile@^2.0.0: vfile-message "^1.0.0" victory-area@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-35.4.7.tgz#2ae23997212169bb6f8ccf123e681f6d96612fca" - integrity sha512-9feQ2qsVg8dvXxsJgxKCR7osKZgsDs4efdi40JzHEw/PIYnLoAMEObd3nbLL1nWko0jOdfLXIQxyj0Ngf1L1Aw== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-area/-/victory-area-35.4.11.tgz#482d69455574e20ba8b1b7e2b2d79166ae8c3d1e" + integrity sha512-5HHJhSe8sRUfvfGIC6U9UsbL9mkWCtbCCBjLFLkCb0STmLcaVd2hsahX7TqEIxvsRKgflGwRfd6MPKi64LYJrg== dependencies: d3-shape "^1.2.0" lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-axis@^35.4.4, victory-axis@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-35.4.7.tgz#7a70ee1718877f5f3fe227e0c940775f45730b1a" - integrity sha512-12g8eJ2ONiqayhmCWevkPevEHWTyBl5rHcPIfCG+ONQL3uB+W3/KuORkWl2xp2/QOoyg2vyB3bhK7QWMgEO+2A== +victory-axis@^35.4.11, victory-axis@^35.4.4: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-axis/-/victory-axis-35.4.11.tgz#07d9fbcf0b4aaf3479313f26de60308060e046e2" + integrity sha512-qrBWFXGCg3Nip0zZZxqjkPcrYSuIO44agXymNpLYey3XsNPSiQ/iwx6pcF6E34uENaB0wfDomQZgXIdGr8H6Qw== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-bar@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-35.4.7.tgz#f05b2018d13421abcd850bc66bea8b0382a7f1f7" - integrity sha512-WOORQFJQowIjcc1VBc47KJpcV2dFcG7bwOdsS61KX/fAtEyGOicP7LCpVYhDwfzvkRDxeKadD4N68F4ThMZ0qA== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-bar/-/victory-bar-35.4.11.tgz#402cf0571656f808e22a135c23fcb11a4098e441" + integrity sha512-/btO14sBFJjhqqi2f+MJ2nol4U272QanRPT6yAd9NGtIEeNXsxbjo6pD6se/fzX3BLMjeTP8Euif1xS0bmMjUA== dependencies: d3-shape "^1.2.0" lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-brush-container@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-35.4.7.tgz#9e5af4450401d1205b86168a8f508323fde30e43" - integrity sha512-xV0pq0+O9a0awowVpApsL2xXQN/Jfdn5RecjRC/mcRjM2o3+o7tIRbS0bm52r0BziCL9OtPCcT41qZpGdUK71g== +victory-brush-container@^35.4.11: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-brush-container/-/victory-brush-container-35.4.11.tgz#ec37ab020412e6ef94a76c471b25d776e3dcd9c2" + integrity sha512-eG1i58ddXRhCv4tibT+1p55aJs7f1RE4QyaAuYRNoIGtOAHc4tC5uImrU667N+q4KSUYreuKwC7r8sHxobGJNg== dependencies: lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-chart@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-35.4.7.tgz#52a21ab37769a05a582fc1465f28dee6c1d20b17" - integrity sha512-nptP4EOzenSsa8s/l29YN7nehbJ3JLTw/EbCsX4bdMqEgesew8fGGSNwEgmDHVx/0RFEsYEowrTAa7jWyyam7g== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-chart/-/victory-chart-35.4.11.tgz#604de7a357741769972e6a3c084004d4a4846695" + integrity sha512-LPdoVX8LVzmHjE6mQQMWNFfqy8WnuN5UnBiWiKhQB1HNiCwL2JPWsSqaDIdV8flGBKSZzKDgsLmMABxGjwfBcg== dependencies: lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-axis "^35.4.7" - victory-core "^35.4.7" - victory-polar-axis "^35.4.7" - victory-shared-events "^35.4.7" + victory-axis "^35.4.11" + victory-core "^35.4.11" + victory-polar-axis "^35.4.11" + victory-shared-events "^35.4.11" victory-core@35.4.4: version "35.4.4" @@ -9029,10 +8715,10 @@ victory-core@35.4.4: prop-types "^15.5.8" react-fast-compare "^2.0.0" -victory-core@^35.4.4, victory-core@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-35.4.7.tgz#eb9039e635b7b2e68c62ad21d3d30b6471f13711" - integrity sha512-C+F/7d2JgsDsCy8cFTZBz29tsydQ0kV6+d+ANk9ShqF85hbLib72C7mDzRgq+K4Re2bz5IuMYGLcLbkVunQxFA== +victory-core@^35.4.11, victory-core@^35.4.4: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-core/-/victory-core-35.4.11.tgz#61d6ee1e5f99655905a213e83b63cab1ac02a663" + integrity sha512-vXcX9pgZqUN7FLFn1Z2SfzBBBu3PyyN46kfKaNjcJbVnhdxtnmN8MfYtXx3eJGIJlv0FsTrPY8fpBYQpYHho4w== dependencies: d3-ease "^1.0.0" d3-interpolate "^1.1.1" @@ -9044,145 +8730,145 @@ victory-core@^35.4.4, victory-core@^35.4.7: react-fast-compare "^2.0.0" victory-create-container@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-35.4.7.tgz#8b2147ea6764d656ce748b5b4752443a472dbd8e" - integrity sha512-Pmmx2uSIoKvt5XImQGu2Pf0kSSFSo8lrQvJBIsxenF4eCkTPStCrUhV/J8MFMN44xa3PbFSVVqfcODu5ZBgPgg== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-create-container/-/victory-create-container-35.4.11.tgz#b013e02133f53568d22031e0ad61dd8aada6ad7e" + integrity sha512-v0CHqIvxupH76hBAcBe6nSwhqKOdnF7A94sLB0MCByeLI6ayWQ/PWRegjzYwYak2LjHvd9PvyChQkQhVstLGZw== dependencies: lodash "^4.17.19" - victory-brush-container "^35.4.7" - victory-core "^35.4.7" - victory-cursor-container "^35.4.7" - victory-selection-container "^35.4.7" - victory-voronoi-container "^35.4.7" - victory-zoom-container "^35.4.7" - -victory-cursor-container@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-35.4.7.tgz#feeeecd1f2e684ec5e2287ecb0bad04b56e8ebc4" - integrity sha512-CWeHetqD9xquiOXpxPC5TvRgpsTZ2XzESND01jb+ACfQB9TEiofcdah6/HDyDpEeDRb5StyOb0o89pcH8CZNlQ== + victory-brush-container "^35.4.11" + victory-core "^35.4.11" + victory-cursor-container "^35.4.11" + victory-selection-container "^35.4.11" + victory-voronoi-container "^35.4.11" + victory-zoom-container "^35.4.11" + +victory-cursor-container@^35.4.11: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-cursor-container/-/victory-cursor-container-35.4.11.tgz#e250c7d7faf8a92aa53813ab9b9cea179bae11a8" + integrity sha512-UUKzKUUAaiSqMgVQbY5Z/X4vwRMi3m6WVIhT+1NIv8q9SrLBY5qXb21WcuF2u5rKeq1hcyioC7ZiGG3j9ZkgOQ== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-group@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-35.4.7.tgz#f60f3787a1a9aa3b5e4a1b46dcc9e6a5add5298f" - integrity sha512-Qj4o9Eg54nTjml9M8WylrlXiJcOYdbv+FTtfdDMcbwF4b3zZLebH9fDTg54psSLuoEgiTz6vhF+z1BG1tb7ECQ== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-group/-/victory-group-35.4.11.tgz#f5742fade75a6bbea977643b4dc8613612411918" + integrity sha512-pqb4n77MvopvCrLY8twjoFk6ariJD8nFG08uTLA83Phqo28J2TfWZBGzGES4/uLL/FIms4h7gtGcq5qgwlaLTQ== dependencies: lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-core "^35.4.7" - victory-shared-events "^35.4.7" + victory-core "^35.4.11" + victory-shared-events "^35.4.11" victory-legend@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-35.4.7.tgz#baaef7300fdd3e407d67481aea5493b6bb653067" - integrity sha512-byN1hivruCBrAZGhZeUl2QYv2MHF/0V7BzO0Pjig6kdzKI9V9oFdYdGTFwsnCs+25GW9kzWs4hEOcdx4jmcyvw== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-legend/-/victory-legend-35.4.11.tgz#8d004e22e4d02f9e658f921b756839c98d9d1061" + integrity sha512-3E5DKYrkrqtC1YeqNHixRpfXYHo9qumBjLnfaP6IF/06R5sn5o5LdYHT0yz8ATXDL0AxZqRM2q6Au9Mwvcq2xg== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-line@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-35.4.7.tgz#79d14a8a6299a298134716dc57a4efb6d44f840b" - integrity sha512-DzMbNzr5RgnpXq22JGKfZ4eMyqHq14p73FcfnAlRCE5BaG17sJ81rhgW44ltvLfYrsHbAlh6/k1Iv6mQukDeDw== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-line/-/victory-line-35.4.11.tgz#67a9d26e0c06d125ac65a293c345410f2cca91ef" + integrity sha512-LmkvY1wMvXhBYvnafaZbSS7JiOgGEJ0+qy3HuTtT66THOKBuxAo0T66BsURFTN7LpFvjBz2QRehrtJ/KWfOz9A== dependencies: d3-shape "^1.2.0" lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-pie@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-35.4.7.tgz#d20d6773242f0c175719605c5f46035f049867fa" - integrity sha512-X/mUbttRSK9K3umoF/3blMiy7OKrF/XhGoSbPkN3DNPleWv/eD6dvaj4S/TNC2LaIG6Ts0BPEiQwyZPmgade7A== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-pie/-/victory-pie-35.4.11.tgz#228b7d17c9e172122f93bc79cacfd144b24a32b6" + integrity sha512-AAfm3oUQRTOMfMMWQh5spMq0YdnY+DU9V8NbU/TBmBmgvVwWcZQOZqHlYb4rd21HL26VwcHeRe+EfXdLLV7vHg== dependencies: d3-shape "^1.0.0" lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-polar-axis@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-35.4.7.tgz#77e8e198eb799b4f941d3175b1f65190c3f649e1" - integrity sha512-axTpN0FUocMmSsida4Sl3cJ48NYQF/XbHxKE5t9FqJZ5pWfnIq6bnwSnKqJ+S93LIpK8vUNlC2bKT+VQkk9k5A== +victory-polar-axis@^35.4.11: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-polar-axis/-/victory-polar-axis-35.4.11.tgz#e2fdd84d45abc318ba29e452382635094f88dbab" + integrity sha512-yLrZ/PfcCRvw98zUBPB+LK9EoiYLBjellnILI3nAT5vCvKg1AnmBdF0lLuz0tM9jfcFdCL+1o2IO+r+OHKWTnw== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-scatter@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-35.4.7.tgz#5ae0bd4dc711ba2d1749533e2fffd5e86a674c42" - integrity sha512-fc3AcUhWJ3SEWWbelmSxm8cqceLRPFAA/hrx+m1/6Cb+dcPjiE6m8w3EUa29fOgQK+HsRQhUcusfEaxy92hMTA== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-scatter/-/victory-scatter-35.4.11.tgz#ad60e4c08f0ddd6699ab95f94279bf678d626eeb" + integrity sha512-IKcYa9tYwO2OIn12AotySRzpQ+tWAy71i/sdckw3lh3FBWDk6Zq+PVlICYDgKLuTsV2bUDQixYZGDQ5lcNIcmw== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-selection-container@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-35.4.7.tgz#d0609b005ce0994e8a563d5a90ef1fa8d6b3b7ba" - integrity sha512-dN4YvT5+N4vtDcfo1NuYOMtlBWQEo0NVkprGlC+Pw8KgU9EHxklbalmE6maNdm/kLlNXCjWfTcpvIKnwMuxsNg== +victory-selection-container@^35.4.11: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-selection-container/-/victory-selection-container-35.4.11.tgz#205b249d4685882b96e7c8646f9edc30179e9308" + integrity sha512-+yuUd+Clt+BFD+moFgPCuU1pbiJrHwzncovUEnfKO668HKgEr1HbR67sd2ZDLVULhfG1JRwGnbzWAYnQBcjEoA== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-shared-events@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-35.4.7.tgz#23b05136241ad82002fa8248ff6c5aa1c7c35fba" - integrity sha512-OrIhL/3VltGbNOHjyW0eqtX5+PzYGbBpR2nWPkMTC9W5v/BEP3jT/LV9SS/215bTzNIfXyqmmyihSsXTvsa2CA== +victory-shared-events@^35.4.11: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-shared-events/-/victory-shared-events-35.4.11.tgz#28843d3c6d2165d15ee61ea5c70e0bc6a68c8229" + integrity sha512-OjoqLfIHX82iThVbZmytMDddzIKLTkIhfB2+qptGA7/2VKInmdQXi5IUjp904YJZls7oLLRMwXsGEwKKvZLLBw== dependencies: json-stringify-safe "^5.0.1" lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-core "^35.4.7" + victory-core "^35.4.11" victory-stack@^35.4.4: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-35.4.7.tgz#98d08daf72718e24b41c0919e9712337e88bb303" - integrity sha512-JetFOuxCxK0/NytGIO4gRWF7HBtD3rI2XwCydbudTQQhnvZm0Qd1QIF7V2eA5rcRNwvlhQ1wQDY6ViRhq7UIQQ== + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-stack/-/victory-stack-35.4.11.tgz#e7b2626313e7090566ba2e77ba673563d64e5af6" + integrity sha512-NVVe1CI+BsKinJEFIfinOFex3cESI/NbeVG6lSJmxHkmh56B3ICYJvXbgLSTS5WKcExbSe6bkB3mMJrEZf1+eA== dependencies: lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-core "^35.4.7" - victory-shared-events "^35.4.7" + victory-core "^35.4.11" + victory-shared-events "^35.4.11" -victory-tooltip@^35.4.4, victory-tooltip@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-35.4.7.tgz#647b1019a5f51ce6dab8be48097f94f3047f0392" - integrity sha512-V0NA8YzlC2/S261AiFnc8ogu7Dg//ephPvZPAmW9/3trmYpIaGtyJpWEMMKZeI7QYhvv+n4n9Q/MUbqx51RDSA== +victory-tooltip@^35.4.11, victory-tooltip@^35.4.4: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-tooltip/-/victory-tooltip-35.4.11.tgz#c4291b0517010f09bac7bda89d482ad690cf8f63" + integrity sha512-nyhENyuy5/7Swl3H/q9T9g04TniPyE6vNvN+xkJw+KIHL8FivajjY7xtZhcUoid6ZUKWjcaYI1wu/TUpX9uMCg== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" -victory-voronoi-container@^35.4.4, victory-voronoi-container@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-35.4.7.tgz#4ee511096edc3db6221e51eec64a3bd21547c8db" - integrity sha512-Hxx69q7xzleSukiu2p4XaMj0rNAT9vLi8ybLrNU26VnIrcoC+r2UceccMH01pOmPrzJq+YqTxOuTkNdcmvTOOw== +victory-voronoi-container@^35.4.11, victory-voronoi-container@^35.4.4: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-voronoi-container/-/victory-voronoi-container-35.4.11.tgz#d7c03f997de8e0129fbab38dbdb1dbca83647217" + integrity sha512-3KL5pN46+S0N1GSnNaTILgSXrmW/8Y6WryWhxlv/dgcDGd9j9V5gNF1OVBjqPeCYyu1jlszXB+PxMcE1CaCYEQ== dependencies: delaunay-find "0.0.5" lodash "^4.17.19" prop-types "^15.5.8" react-fast-compare "^2.0.0" - victory-core "^35.4.7" - victory-tooltip "^35.4.7" + victory-core "^35.4.11" + victory-tooltip "^35.4.11" -victory-zoom-container@^35.4.4, victory-zoom-container@^35.4.7: - version "35.4.7" - resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-35.4.7.tgz#9244946170b29fd10823879df2eaad8f2116038c" - integrity sha512-6ybc9ZzqGW9+l6WfhhRSC9inXb+gVDXSixESoTG4UjT2bMNJf11JZ/vKteJB5UfErcIAoCt7PBq49fI5Y20rsw== +victory-zoom-container@^35.4.11, victory-zoom-container@^35.4.4: + version "35.4.11" + resolved "https://registry.yarnpkg.com/victory-zoom-container/-/victory-zoom-container-35.4.11.tgz#42851b23e8d266a1d8a811f6382212b6eaef2816" + integrity sha512-iCbBU2enQLAkFmOC2rqV1xh8voC+kgDoaxjlXsh39dkK7bjkzGHS7N4zFcIN31tJtulSzR1w3X/owjK3dTzHkQ== dependencies: lodash "^4.17.19" prop-types "^15.5.8" - victory-core "^35.4.7" + victory-core "^35.4.11" void-elements@^2.0.1: version "2.0.1" @@ -9354,9 +9040,9 @@ webpack-sources@^2.1.1: source-map "^0.6.1" webpack@^5.24.3: - version "5.24.3" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.3.tgz#6ec0f5059f8d7c7961075fa553cfce7b7928acb3" - integrity sha512-x7lrWZ7wlWAdyKdML6YPvfVZkhD1ICuIZGODE5SzKJjqI9A4SpqGTjGJTc6CwaHqn19gGaoOR3ONJ46nYsn9rw== + version "5.24.4" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.24.4.tgz#37d8cf95841dd23c809ea02931294b3455d74a59" + integrity sha512-RXOdxF9hFFFhg47BryCgyFrEyyu7Y/75/uiI2DoUiTMqysK+WczVSTppvkR47oZcmI/DPaXCiCiaXBP8QjkNpA== dependencies: "@types/eslint-scope" "^3.7.0" "@types/estree" "^0.0.46" @@ -9417,6 +9103,17 @@ whatwg-url@^8.0.0: tr46 "^2.0.2" webidl-conversions "^6.1.0" +which-boxed-primitive@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -9504,10 +9201,10 @@ ws@^6.2.1: dependencies: async-limiter "~1.0.0" -ws@^7.2.3: - version "7.3.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" - integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== +ws@^7.4.4: + version "7.4.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" + integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== x-is-string@^0.1.0: version "0.1.0" @@ -9535,14 +9232,14 @@ xtend@^4.0.0, xtend@^4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yallist@^4.0.0: version "4.0.0" @@ -9550,9 +9247,9 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@20.x: - version "20.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.1.tgz#28f3773c546cdd8a69ddae68116b48a5da328e77" - integrity sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA== + version "20.2.6" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.6.tgz#69f920addf61aafc0b8b89002f5d66e28f2d8b20" + integrity sha512-AP1+fQIWSM/sMiET8fyayjx/J+JmTPt2Mr0FkrgqB4todtfa53sOsrSAcIrJRD5XS20bKUwaDIuMkWKCEiQLKA== yargs-parser@^13.1.2: version "13.1.2" From 87d36f93ba309b19616686269049180a319640b6 Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Mon, 8 Mar 2021 09:38:02 -0500 Subject: [PATCH 166/200] Update PatternFly pkgs https://issues.redhat.com/browse/COST-1130 --- koku-ui-manifest | 25 +++++------ package.json | 14 +++--- yarn.lock | 112 +++++++++++++++++------------------------------ 3 files changed, 59 insertions(+), 92 deletions(-) diff --git a/koku-ui-manifest b/koku-ui-manifest index e966c2732..5dc5ca41d 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -89,20 +89,17 @@ mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.scandir:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.stat:2.0.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@nodelib/fs.walk:1.2.6.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.87.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.97.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.2.yarnlock -mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.2.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/patternfly:4.90.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-charts:6.14.6.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.101.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-core:4.101.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-icons:4.9.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-styles:4.8.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-table:4.23.14.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.5.yarnlock +mgmt_services/cost-mgmt:koku-ui/@patternfly/react-tokens:4.10.5.yarnlock mgmt_services/cost-mgmt:koku-ui/@popperjs/core:2.9.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notifications:3.1.0.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock diff --git a/package.json b/package.json index 6cd81ed22..47a202c4f 100644 --- a/package.json +++ b/package.json @@ -31,13 +31,13 @@ }, "dependencies": { "@fortawesome/free-solid-svg-icons": "5.15.2", - "@patternfly/patternfly": "4.87.2", - "@patternfly/react-charts": "6.14.1", - "@patternfly/react-core": "4.97.1", - "@patternfly/react-icons": "4.9.1", - "@patternfly/react-styles": "4.8.1", - "@patternfly/react-table": "4.23.1", - "@patternfly/react-tokens": "4.10.1", + "@patternfly/patternfly": "4.90.5", + "@patternfly/react-charts": "6.14.6", + "@patternfly/react-core": "4.101.3", + "@patternfly/react-icons": "4.9.5", + "@patternfly/react-styles": "4.8.5", + "@patternfly/react-table": "4.23.14", + "@patternfly/react-tokens": "4.10.5", "@redhat-cloud-services/frontend-components": "^3.1.3", "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index 7ba454d44..82d81f6ff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -561,19 +561,18 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@patternfly/patternfly@4.87.2": - version "4.87.2" - resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.87.2.tgz#dca73dbd4c6b4a27864ce2f93cb649dc3a89f8e9" - integrity sha512-R0dfHtxSMcHxxtzw5K97YpPCP0zvmfFn7/jL9goHWmgkW6tFdCfrqLBE4+ntgVzk7EfgMXjS8+n80K0aDfbayg== - -"@patternfly/react-charts@6.14.1": - version "6.14.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.1.tgz#a1e42c66d1c9783be6155d2a9f521e1251dcf04d" - integrity sha512-7WKiyiY8fwYDwQDKJJjup0aTSU8AUmytLeXCjsWQ5MBy0QEYN8/3yQ21GdpbDp93VtE9YmyfXbgFTuNaq5cZSQ== - dependencies: - "@patternfly/patternfly" "4.87.2" - "@patternfly/react-styles" "^4.8.1" - "@patternfly/react-tokens" "^4.10.1" +"@patternfly/patternfly@4.90.5": + version "4.90.5" + resolved "https://registry.yarnpkg.com/@patternfly/patternfly/-/patternfly-4.90.5.tgz#49aca1c49837e5bf877cdb9ffe454d97bf48e587" + integrity sha512-Fe0C8UkzSjtacQ+fHXlFB/LHzrv/c2K4z479C6dboOgkGQE1FyB0wt1NBfxij0D++rhOy04OOYdE+Tr0JSlZKw== + +"@patternfly/react-charts@6.14.6": + version "6.14.6" + resolved "https://registry.yarnpkg.com/@patternfly/react-charts/-/react-charts-6.14.6.tgz#2702d45cf7461c8381ece9ca7e397a086dff193a" + integrity sha512-k+360HSlpBzA93QDmvqwUOL49kEtLLFxVIRZoYBKFjRXaVuuzajZB4b8kGckxumrq9PHkRbsN/XTn6FPXoqSCQ== + dependencies: + "@patternfly/react-styles" "^4.8.5" + "@patternfly/react-tokens" "^4.10.5" hoist-non-react-statics "^3.3.0" lodash "^4.17.19" tslib "1.13.0" @@ -593,74 +592,45 @@ victory-voronoi-container "^35.4.4" victory-zoom-container "^35.4.4" -"@patternfly/react-core@4.97.1": - version "4.97.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.97.1.tgz#d25e4b7e2306a1412fc2d5d6b08d257e14bf036e" - integrity sha512-t3Cfv8eWqfDpSjqlKixtat9bW82IKBVVwuO/XJ3CUbo7cQVacCBB1h8+q274Iz8ZQ7xx0iU79EzPEH8bs6FsZg== +"@patternfly/react-core@4.101.3", "@patternfly/react-core@^4.101.3": + version "4.101.3" + resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.101.3.tgz#aecf6c0e05f4e4811e5d1d55cae9725d51440026" + integrity sha512-xmBzwtpTHjykwahWVEc+xlqEJ7k+g90EYlLDSIFhNylnoq6iAka8cWbiRWuxOzAIwmk4UrKy2lOYP/Ff5A8ZCw== dependencies: - "@patternfly/react-icons" "^4.9.1" - "@patternfly/react-styles" "^4.8.1" - "@patternfly/react-tokens" "^4.10.1" + "@patternfly/react-icons" "^4.9.5" + "@patternfly/react-styles" "^4.8.5" + "@patternfly/react-tokens" "^4.10.5" focus-trap "6.2.2" react-dropzone "9.0.0" tippy.js "5.1.2" tslib "1.13.0" -"@patternfly/react-core@^4.97.1": - version "4.97.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-core/-/react-core-4.97.2.tgz#a389f6984d03ed730506fa3cdccb1355f37b04fc" - integrity sha512-Xl/l/+OjWVtWnbb9Kw//1bn+6KEM9aOc1nk+Vm6D8wlbuuz+RAFBc0rZjPWuq00YYnVA+sExESe0W2d3wdn/SQ== - dependencies: - "@patternfly/react-icons" "^4.9.2" - "@patternfly/react-styles" "^4.8.2" - "@patternfly/react-tokens" "^4.10.2" - focus-trap "6.2.2" - react-dropzone "9.0.0" - tippy.js "5.1.2" - tslib "1.13.0" +"@patternfly/react-icons@4.9.5", "@patternfly/react-icons@^4.9.5": + version "4.9.5" + resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.9.5.tgz#4f727ed1c161ba6932abd3fa7bddb0e03bca5ec1" + integrity sha512-5M6yBW2v0d7WDuW7AyR//84iFxz7CBp5clGReYS/2SNwBGX+TwWoedS8EM06xtLSKCMrTQG1lqeyZASn6KyoMA== -"@patternfly/react-icons@4.9.1": - version "4.9.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.9.1.tgz#b4de554b029f00e9061b92e574c5634e7ad1918f" - integrity sha512-+E571OPoTQsRejUj6kjfRCgGTYHp7zWY7T99xqMBDHTwTK9Ry9HZNW19VkeGW032ux5Commp6Dae0DBXmDommQ== - -"@patternfly/react-icons@^4.9.1", "@patternfly/react-icons@^4.9.2": - version "4.9.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-icons/-/react-icons-4.9.2.tgz#dcb2efa9727de97d5aa5d6be47a75daee49addb8" - integrity sha512-3PY81A9mj9YyUpznSWhcWMKHRyGWNgZ1IDYqbMva7Q8wgd0fjsiTJ+5zAp4YQLo1mA8KwYX9v5s37hK8XiTbAA== - -"@patternfly/react-styles@4.8.1": - version "4.8.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.1.tgz#c3ebc7bdbae67a77e2b8f9f4311bbc33fce98ab2" - integrity sha512-Mt+IGH6m4mDBVDOE/1CJ0Ij7jooLKuJEVFWXsE19J1pRSZ3ZmrDCibp6y8DrKdmsY7ky0RSs7ScMVyhwdCA/Nw== - -"@patternfly/react-styles@^4.8.1", "@patternfly/react-styles@^4.8.2": - version "4.8.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.2.tgz#4796a77b658541d75d616e2e2a00fc5d7ec42bc7" - integrity sha512-JLVZTUYa8LIyASLvfiAgByLgNcg+OPkuXSh8Za5KdjqrBaNVQ3Wlul+oWQGwlGjbq7KSiyDg1oWemxOuLJH1VQ== - -"@patternfly/react-table@4.23.1": - version "4.23.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.23.1.tgz#d123ca19cdb3e48c4794281cbf843df92b1ed5d1" - integrity sha512-elpSfw5TQvaTDiilQwh6rKclj5KAAfs1QyRDfFGi70xFVtwtrFJ3ToMEWzzZXXzRH0r2BrzvCDORZhOYmnpH1g== - dependencies: - "@patternfly/patternfly" "4.87.2" - "@patternfly/react-core" "^4.97.1" - "@patternfly/react-icons" "^4.9.1" - "@patternfly/react-styles" "^4.8.1" - "@patternfly/react-tokens" "^4.10.1" +"@patternfly/react-styles@4.8.5", "@patternfly/react-styles@^4.8.5": + version "4.8.5" + resolved "https://registry.yarnpkg.com/@patternfly/react-styles/-/react-styles-4.8.5.tgz#2e7579768d1b1e5d244ee9af6fd78524fc1e3e22" + integrity sha512-ANJoOJpcO0R7DY0CsTHMWaZfiLoMfMKu36ctnVnheJ3YfZievCo6O8mztNBB6QLhJvF/PrirJ8yffyVxOopT5w== + +"@patternfly/react-table@4.23.14": + version "4.23.14" + resolved "https://registry.yarnpkg.com/@patternfly/react-table/-/react-table-4.23.14.tgz#16a8f57571fbc11d8b3647ad04776b1e27d354c8" + integrity sha512-C+/kXj0ukopwJ3o74UK128EmxFXRW0o03S4lonMNAS+0EMoNQ+PqTlaaKqzGsYuMoQFWmziEsJ3H2yWUiluvdg== + dependencies: + "@patternfly/react-core" "^4.101.3" + "@patternfly/react-icons" "^4.9.5" + "@patternfly/react-styles" "^4.8.5" + "@patternfly/react-tokens" "^4.10.5" lodash "^4.17.19" tslib "1.13.0" -"@patternfly/react-tokens@4.10.1": - version "4.10.1" - resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.1.tgz#84374ac3000f0936e1381915d73ba24330559b06" - integrity sha512-Hte76yiEIG4Ligtmbiy+iGmFnT3fzmqUNk5LN0Hph4zFfgI0Mq35zgZGrKvkm/T1sXSmhMEcT4JmHcKcXI0RpA== - -"@patternfly/react-tokens@^4.10.1", "@patternfly/react-tokens@^4.10.2": - version "4.10.2" - resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.2.tgz#fd0054379ac81c8490b901b5b8fb408263ce91fe" - integrity sha512-/G1MENPxVY7X9UUuieO79yfjJ3g6KjBUBsBQVKOQplCxuvcRCF1MpmQKAxfg9Yb804MbPY+IVzVD3c4u9S3Iww== +"@patternfly/react-tokens@4.10.5", "@patternfly/react-tokens@^4.10.5": + version "4.10.5" + resolved "https://registry.yarnpkg.com/@patternfly/react-tokens/-/react-tokens-4.10.5.tgz#be8cccc1d350e0583a28b65914aefcfddfc8197c" + integrity sha512-/lJRrC1asoaMSJVt1e5eZNn+y87x0q9WzeKx+aMi44RmJLwRLSNYGe8CxZiOUP1gw45jpzjRAbLihU+AGESckg== "@popperjs/core@^2.5.3": version "2.9.1" From 9af6c14e95e94884b3343643745a0832f3e50423 Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Tue, 9 Mar 2021 19:31:36 -0500 Subject: [PATCH 167/200] Create utils to check source API for provider data flags --- src/api/providers.ts | 2 ++ src/pages/views/utils/providers.ts | 46 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/pages/views/utils/providers.ts diff --git a/src/api/providers.ts b/src/api/providers.ts index 2f03073e7..9b64ac3f0 100644 --- a/src/api/providers.ts +++ b/src/api/providers.ts @@ -39,7 +39,9 @@ export interface Provider { cost_models?: ProviderCostModel[]; current_month_data?: boolean; customer?: ProviderCustomer; + has_data?: boolean; name?: string; + previous_month_data?: boolean; type?: string; uuid?: string; } diff --git a/src/pages/views/utils/providers.ts b/src/pages/views/utils/providers.ts new file mode 100644 index 000000000..092e11125 --- /dev/null +++ b/src/pages/views/utils/providers.ts @@ -0,0 +1,46 @@ +import { Providers } from 'api/providers'; + +// Ensure at least one source provider has data available for the current month +export const hasCurrentMonthData = (providers: Providers) => { + let result = false; + + if (providers && providers.data) { + for (const provider of providers.data) { + if (provider.current_month_data) { + result = true; + break; + } + } + } + return result; +}; + +// Ensure at least one source provider has data available +export const hasData = (providers: Providers) => { + let result = false; + + if (providers && providers.data) { + for (const provider of providers.data) { + if (provider.has_data) { + result = true; + break; + } + } + } + return result; +}; + +// Ensure at least one source provider has data available for the previous month +export const hasPreviousMonthData = (providers: Providers) => { + let result = false; + + if (providers && providers.data) { + for (const provider of providers.data) { + if (provider.previous_month_data) { + result = true; + break; + } + } + } + return result; +}; From 8015194c03150a59c166f9cd7a7fb8222ab92440 Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Tue, 9 Mar 2021 19:32:27 -0500 Subject: [PATCH 168/200] No data states should check new previous_month_data and has_data flags https://issues.redhat.com/browse/COST-1107 --- .../ocpOverviewWidget/ocpOverviewWidget.tsx | 56 +++++++------------ .../views/details/awsDetails/awsDetails.tsx | 19 +------ .../details/azureDetails/azureDetails.tsx | 19 +------ .../components/breakdown/breakdownBase.tsx | 19 +------ .../views/details/gcpDetails/gcpDetails.tsx | 19 +------ .../views/details/ibmDetails/ibmDetails.tsx | 19 +------ .../views/details/ocpDetails/ocpDetails.tsx | 19 +------ src/pages/views/explorer/explorer.tsx | 26 ++------- src/pages/views/overview/overview.tsx | 50 ++++++++--------- 9 files changed, 62 insertions(+), 184 deletions(-) diff --git a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx index 5f6949b8c..8f0e43a57 100644 --- a/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx +++ b/src/modules/ocpOverviewWidget/ocpOverviewWidget.tsx @@ -8,6 +8,7 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { hasCurrentMonthData, hasPreviousMonthData } from 'pages/views/utils/providers'; import React from 'react'; import { connect } from 'react-redux'; import { createMapStateToProps, FetchStatus } from 'store/common'; @@ -23,10 +24,10 @@ interface OcpOverviewWidgetOwnProps { } interface OcpOverviewWidgetStateProps { - ocpProviders: Providers; - ocpProvidersError: AxiosError; - ocpProvidersFetchStatus: FetchStatus; - ocpProvidersQueryString: string; + providers: Providers; + providersError: AxiosError; + providersFetchStatus: FetchStatus; + providersQueryString: string; query: Query; queryString: string; title?: string; // This is just a test property @@ -67,21 +68,6 @@ class OcpOverviewWidgetBase extends React.Component<OcpOverviewWidgetProps> { } } - // Ensure at least one source provider has data available - private hasCurrentMonthData = (providers: Providers) => { - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { fetchProviders, fetchUserAccess, queryString } = this.props; @@ -91,30 +77,30 @@ class OcpOverviewWidgetBase extends React.Component<OcpOverviewWidgetProps> { public render() { const { - ocpProviders, - ocpProvidersError, - ocpProvidersFetchStatus, + providers, + providersError, + providersFetchStatus, userAccessError, userAccessFetchStatus, userAccess, } = this.props; const isLoading = - userAccessFetchStatus === FetchStatus.inProgress || ocpProvidersFetchStatus === FetchStatus.inProgress; + userAccessFetchStatus === FetchStatus.inProgress || providersFetchStatus === FetchStatus.inProgress; const title = this.props.title; // Test for no providers - const noProviders = !isOcpAvailable(ocpProviders, ocpProvidersFetchStatus, userAccess); + const noProviders = !isOcpAvailable(providers, providersFetchStatus, userAccess); // Note: Providers are fetched via the InactiveSources component used by all routes - if (ocpProvidersError || userAccessError) { + if (providersError || userAccessError) { return <NotAvailable title={title} />; } else if (isLoading) { return <Loading title={title} />; } else if (noProviders) { return <NoProviders title={title} />; - } else if (!this.hasCurrentMonthData(ocpProviders)) { + } else if (!(hasCurrentMonthData(providers) || hasPreviousMonthData(providers))) { return <NoData title={title} />; } @@ -143,13 +129,13 @@ const mapStateToProps = createMapStateToProps<OcpOverviewWidgetOwnProps, OcpOver dateRange: undefined, }); - const ocpProvidersQueryString = getProvidersQuery(ocpProvidersQuery); - const ocpProviders = providersSelectors.selectProviders(state, ProviderType.ocp, ocpProvidersQueryString); - const ocpProvidersError = providersSelectors.selectProvidersError(state, ProviderType.ocp, ocpProvidersQueryString); - const ocpProvidersFetchStatus = providersSelectors.selectProvidersFetchStatus( + const providersQueryString = getProvidersQuery(ocpProvidersQuery); + const providers = providersSelectors.selectProviders(state, ProviderType.ocp, providersQueryString); + const providersError = providersSelectors.selectProvidersError(state, ProviderType.ocp, providersQueryString); + const providersFetchStatus = providersSelectors.selectProvidersFetchStatus( state, ProviderType.ocp, - ocpProvidersQueryString + providersQueryString ); const userAccessQueryString = getUserAccessQuery(allUserAccessQuery); @@ -162,10 +148,10 @@ const mapStateToProps = createMapStateToProps<OcpOverviewWidgetOwnProps, OcpOver ); return { - ocpProviders, - ocpProvidersError, - ocpProvidersFetchStatus, - ocpProvidersQueryString, + providers, + providersError, + providersFetchStatus, + providersQueryString, query, queryString, userAccess, diff --git a/src/pages/views/details/awsDetails/awsDetails.tsx b/src/pages/views/details/awsDetails/awsDetails.tsx index d7fc57d68..6e096ae2c 100644 --- a/src/pages/views/details/awsDetails/awsDetails.tsx +++ b/src/pages/views/details/awsDetails/awsDetails.tsx @@ -12,6 +12,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -354,22 +355,6 @@ class AwsDetails extends React.Component<AwsDetailsProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { query, location, fetchReport, history, queryString } = this.props; if (!location.search) { @@ -405,7 +390,7 @@ class AwsDetails extends React.Component<AwsDetailsProps> { if (noProviders) { return <NoProviders providerType={ProviderType.aws} title={title} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/details/azureDetails/azureDetails.tsx b/src/pages/views/details/azureDetails/azureDetails.tsx index 4d5ec5ca5..16611c6db 100644 --- a/src/pages/views/details/azureDetails/azureDetails.tsx +++ b/src/pages/views/details/azureDetails/azureDetails.tsx @@ -12,6 +12,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -344,22 +345,6 @@ class AzureDetails extends React.Component<AzureDetailsProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { query, location, fetchReport, history, queryString } = this.props; if (!location.search) { @@ -395,7 +380,7 @@ class AzureDetails extends React.Component<AzureDetailsProps> { if (noProviders) { return <NoProviders providerType={ProviderType.azure} title={title} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/details/components/breakdown/breakdownBase.tsx b/src/pages/views/details/components/breakdown/breakdownBase.tsx index 7fd211cb0..4ab62a28e 100644 --- a/src/pages/views/details/components/breakdown/breakdownBase.tsx +++ b/src/pages/views/details/components/breakdown/breakdownBase.tsx @@ -8,6 +8,7 @@ import Loading from 'pages/state/loading'; import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import React from 'react'; import { WithTranslation } from 'react-i18next'; import { RouteComponentProps } from 'react-router-dom'; @@ -181,22 +182,6 @@ class BreakdownBase extends React.Component<BreakdownProps> { } }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { location, fetchReport, queryString, reportPathsType, reportType } = this.props; if (location.search) { @@ -236,7 +221,7 @@ class BreakdownBase extends React.Component<BreakdownProps> { if (noProviders) { return <NoProviders providerType={providerType} title={emptyStateTitle} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/details/gcpDetails/gcpDetails.tsx b/src/pages/views/details/gcpDetails/gcpDetails.tsx index a205d076c..c5e5d16dd 100644 --- a/src/pages/views/details/gcpDetails/gcpDetails.tsx +++ b/src/pages/views/details/gcpDetails/gcpDetails.tsx @@ -12,6 +12,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -343,22 +344,6 @@ class GcpDetails extends React.Component<GcpDetailsProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { query, location, fetchReport, history, queryString } = this.props; if (!location.search) { @@ -394,7 +379,7 @@ class GcpDetails extends React.Component<GcpDetailsProps> { if (noProviders) { return <NoProviders providerType={ProviderType.gcp} title={title} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/details/ibmDetails/ibmDetails.tsx b/src/pages/views/details/ibmDetails/ibmDetails.tsx index 91ca9be18..3033a9178 100644 --- a/src/pages/views/details/ibmDetails/ibmDetails.tsx +++ b/src/pages/views/details/ibmDetails/ibmDetails.tsx @@ -12,6 +12,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -343,22 +344,6 @@ class IbmDetails extends React.Component<IbmDetailsProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { query, location, fetchReport, history, queryString } = this.props; if (!location.search) { @@ -394,7 +379,7 @@ class IbmDetails extends React.Component<IbmDetailsProps> { if (noProviders) { return <NoProviders providerType={ProviderType.ibm} title={title} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/details/ocpDetails/ocpDetails.tsx b/src/pages/views/details/ocpDetails/ocpDetails.tsx index df22b2fc6..e71f49eed 100644 --- a/src/pages/views/details/ocpDetails/ocpDetails.tsx +++ b/src/pages/views/details/ocpDetails/ocpDetails.tsx @@ -12,6 +12,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasCurrentMonthData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -344,22 +345,6 @@ class OcpDetails extends React.Component<OcpDetailsProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = () => { - const { providers } = this.props; - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { query, location, fetchReport, history, queryString } = this.props; if (!location.search) { @@ -395,7 +380,7 @@ class OcpDetails extends React.Component<OcpDetailsProps> { if (noProviders) { return <NoProviders providerType={ProviderType.ocp} title={title} />; } - if (!this.hasCurrentMonthData()) { + if (!hasCurrentMonthData(providers)) { return <NoData title={title} />; } } diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index b829ad37a..adba0a8d5 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -13,6 +13,7 @@ import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; import { getGroupByOrg, getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { hasData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; @@ -370,21 +371,6 @@ class Explorer extends React.Component<ExplorerProps> { history.replace(filteredQuery); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = (providers: Providers) => { - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private updateReport = () => { const { dateRange, fetchReport, history, location, perspective, query, queryString } = this.props; if (!location.search) { @@ -455,11 +441,11 @@ class Explorer extends React.Component<ExplorerProps> { return <NoProviders title={title} />; } else if ( !( - this.hasCurrentMonthData(awsProviders) || - this.hasCurrentMonthData(azureProviders) || - this.hasCurrentMonthData(gcpProviders) || - this.hasCurrentMonthData(ibmProviders) || - this.hasCurrentMonthData(ocpProviders) + hasData(awsProviders) || + hasData(azureProviders) || + hasData(gcpProviders) || + hasData(ibmProviders) || + hasData(ocpProviders) ) ) { return <NoData title={title} />; diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index 96fee3d0c..f7d7a48a1 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -21,6 +21,7 @@ import OcpCloudDashboard from 'pages/views/overview/ocpCloudDashboard'; import OcpDashboard from 'pages/views/overview/ocpDashboard'; import OcpSupplementaryDashboard from 'pages/views/overview/ocpSupplementaryDashboard'; import OcpUsageDashboard from 'pages/views/overview/ocpUsageDashboard'; +import { hasCurrentMonthData, hasPreviousMonthData } from 'pages/views/utils/providers'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -337,21 +338,6 @@ class OverviewBase extends React.Component<OverviewProps> { }); }; - // Ensure at least one source provider has data available - private hasCurrentMonthData = (providers: Providers) => { - let result = false; - - if (providers && providers.data) { - for (const provider of providers.data) { - if (provider.current_month_data) { - result = true; - break; - } - } - } - return result; - }; - private getTabItem = (tab: OverviewTab, index: number) => { const { awsProviders, azureProviders, gcpProviders, ibmProviders, ocpProviders } = this.props; const { activeTabKey, currentInfrastructurePerspective, currentOcpPerspective } = this.state; @@ -364,31 +350,41 @@ class OverviewBase extends React.Component<OverviewProps> { const currentTab = getIdKeyForTab(tab); if (currentTab === OverviewTab.infrastructure) { if (currentInfrastructurePerspective === InfrastructurePerspective.allCloud) { - return this.hasCurrentMonthData(ocpProviders) ? <OcpCloudDashboard /> : noData; + const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); + return hasData ? <OcpCloudDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.aws) { - return this.hasCurrentMonthData(awsProviders) ? <AwsDashboard /> : noData; + const hasData = hasCurrentMonthData(awsProviders) || hasPreviousMonthData(awsProviders); + return hasData ? <AwsDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.awsCloud) { - return this.hasCurrentMonthData(awsProviders) ? <AwsCloudDashboard /> : noData; + const hasData = hasCurrentMonthData(awsProviders) || hasPreviousMonthData(awsProviders); + return hasData ? <AwsCloudDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.gcp) { - return this.hasCurrentMonthData(gcpProviders) ? <GcpDashboard /> : noData; + const hasData = hasCurrentMonthData(gcpProviders) || hasPreviousMonthData(gcpProviders); + return hasData ? <GcpDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.ibm) { - return this.hasCurrentMonthData(ibmProviders) ? <IbmDashboard /> : noData; + const hasData = hasCurrentMonthData(ibmProviders) || hasPreviousMonthData(ibmProviders); + return hasData ? <IbmDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.azure) { - return this.hasCurrentMonthData(azureProviders) ? <AzureDashboard /> : noData; + const hasData = hasCurrentMonthData(azureProviders) || hasPreviousMonthData(azureProviders); + return hasData ? <AzureDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.azureCloud) { - return this.hasCurrentMonthData(azureProviders) ? <AzureCloudDashboard /> : noData; + const hasData = hasCurrentMonthData(azureProviders) || hasPreviousMonthData(azureProviders); + return hasData ? <AzureCloudDashboard /> : noData; } else if (currentInfrastructurePerspective === InfrastructurePerspective.ocpUsage) { - return this.hasCurrentMonthData(ocpProviders) ? <OcpUsageDashboard /> : noData; + const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); + return hasData ? <OcpUsageDashboard /> : noData; } else { - return this.hasCurrentMonthData(ocpProviders) ? <OcpCloudDashboard /> : noData; // default + const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); + return hasData ? <OcpCloudDashboard /> : noData; // default } } else if (currentTab === OverviewTab.ocp) { + const hasData = hasCurrentMonthData(ocpProviders) || hasPreviousMonthData(ocpProviders); if (currentOcpPerspective === OcpPerspective.all) { - return this.hasCurrentMonthData(ocpProviders) ? <OcpDashboard /> : noData; + return hasData ? <OcpDashboard /> : noData; } else if (currentOcpPerspective === OcpPerspective.supplementary) { - return this.hasCurrentMonthData(ocpProviders) ? <OcpSupplementaryDashboard /> : noData; + return hasData ? <OcpSupplementaryDashboard /> : noData; } else { - return this.hasCurrentMonthData(ocpProviders) ? <OcpDashboard /> : noData; // default + return hasData ? <OcpDashboard /> : noData; // default } } else { return emptyTab; From 766e0815b5a917252e5c6c01459f74f97ad2be72 Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Wed, 10 Mar 2021 06:46:10 -0500 Subject: [PATCH 169/200] Reset export modal's default state upon close (#1908) https://issues.redhat.com/browse/COST-1134 --- src/pages/views/components/export/exportModal.tsx | 14 +++++--------- src/pages/views/components/export/exportSubmit.tsx | 5 ----- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/pages/views/components/export/exportModal.tsx b/src/pages/views/components/export/exportModal.tsx index e5de12f65..9bd1961a9 100644 --- a/src/pages/views/components/export/exportModal.tsx +++ b/src/pages/views/components/export/exportModal.tsx @@ -70,19 +70,15 @@ export class ExportModalBase extends React.Component<ExportModalProps, ExportMod constructor(stateProps, dispatchProps) { super(stateProps, dispatchProps); + this.handleMonthChange = this.handleMonthChange.bind(this); this.handleResolutionChange = this.handleResolutionChange.bind(this); } - public componentDidUpdate(prevProps: ExportModalProps) { - const { isOpen } = this.props; - - if (isOpen && !prevProps.isOpen) { - this.setState({ ...this.defaultState }); - } - } - + // Reset defult state upon close -- see https://issues.redhat.com/browse/COST-1134 private handleClose = () => { - this.props.onClose(false); + this.setState({ ...this.defaultState }, () => { + this.props.onClose(false); + }); }; public handleMonthChange = (_, event) => { diff --git a/src/pages/views/components/export/exportSubmit.tsx b/src/pages/views/components/export/exportSubmit.tsx index 5dbf46639..988f1ca96 100644 --- a/src/pages/views/components/export/exportSubmit.tsx +++ b/src/pages/views/components/export/exportSubmit.tsx @@ -55,7 +55,6 @@ export class ExportSubmitBase extends React.Component<ExportSubmitProps> { constructor(stateProps, dispatchProps) { super(stateProps, dispatchProps); - this.handleResolutionChange = this.handleResolutionChange.bind(this); } public componentDidUpdate(prevProps: ExportSubmitProps) { @@ -107,10 +106,6 @@ export class ExportSubmitBase extends React.Component<ExportSubmitProps> { ); }; - public handleResolutionChange = (_, event) => { - this.setState({ resolution: event.currentTarget.value }); - }; - public render() { const { reportFetchStatus, t } = this.props; From 9abbda4c100a3f020fc48ea6d0d37d3fb62d9046 Mon Sep 17 00:00:00 2001 From: Doug Donahue <ddonahue@redhat.com> Date: Wed, 10 Mar 2021 09:27:45 -0500 Subject: [PATCH 170/200] consolidated "Cost Management Overview" key value --- src/locales/en.json | 28 ++++++++----------- .../details/ocpDetails/detailsHeader.tsx | 2 +- src/pages/views/overview/overview.tsx | 4 +-- src/routes.tsx | 2 +- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index c4e5f7250..5f9928d2d 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -127,6 +127,7 @@ }, "cost": "Cost", "cost_management": "Cost Management", + "cost_management_overview": "$t(cost_management) Overview", "cost_models": { "add_rate_form": { "calculation_type": "Calculation type", @@ -671,7 +672,7 @@ "sources_title": "Looking for sources..." }, "maintenance": { - "empty_state_desc": "Cost Management is currently undergoing scheduled maintenance and will be unavailable from 13:00 - 19:00 UTC (09:00 AM - 03:00 PM EDT).", + "empty_state_desc": "$t(cost_management) is currently undergoing scheduled maintenance and will be unavailable from 13:00 - 19:00 UTC (09:00 AM - 03:00 PM EDT).", "empty_state_info": "For more information visit ", "empty_state_thanks": "We will be back soon. Thank you for your patience!." }, @@ -715,16 +716,15 @@ "ibm_details": "IBM Cloud Details", "ibm_details_breakdown": "IBM Cloud Details Breakdown", "ocp_details": "OpenShift Details", - "ocp_details_breakdown": "OpenShift Details Breakdown", - "overview": "Cost Management Overview" + "ocp_details_breakdown": "OpenShift Details Breakdown" }, "no_auth_state": { - "aws_service_name": "Amazon Web Services in Cost Management", - "azure_service_name": "Microsoft Azure in Cost Management", - "cost_models_service_name": "Cost Models in Cost Management", - "gcp_service_name": "Google Cloud Platform in Cost Management", - "ibm_service_name": "IBM Cloud in Cost Management", - "ocp_service_name": "OpenShift in Cost Management" + "aws_service_name": "Amazon Web Services in $t(cost_management)", + "azure_service_name": "Microsoft Azure in $t(cost_management)", + "cost_models_service_name": "Cost Models in $t(cost_management)", + "gcp_service_name": "Google Cloud Platform in $t(cost_management)", + "ibm_service_name": "IBM Cloud in $t(cost_management)", + "ocp_service_name": "OpenShift in $t(cost_management)" }, "no_data_for_date": "No data available for {{startDate}} $t(months_abbr.{{month}})", "no_data_for_date_plural": "No data available for {{startDate}}-{{endDate}} $t(months_abbr.{{month}})", @@ -747,7 +747,7 @@ "get_started": "Get started with Sources", "ibm_desc": "Add an IBM Cloud account to see a total cost breakdown of your spend by accounts, services, regions, or tags.", "ibm_title": "Track your IBM Cloud spending!", - "ocp_add_sources": "Add an OpenShift cluster to Cost Management", + "ocp_add_sources": "Add an OpenShift cluster to $t(cost_management)", "ocp_desc": "Add an OpenShift Container Platform cluster to see a total cost breakdown of your pods by cluster, node, project, or labels.", "ocp_title": "Track your OpenShift spending!", "overview_desc": "Add a source, like an OpenShift Container Platform cluster or a cloud services account, to see a total cost breakdown as well as usage information like instance counts and storage.", @@ -781,8 +781,7 @@ "supplementary_aria_label": "A description of infrastructure and supplementary cost", "supplementary_cost": "Supplementary cost", "supplementary_cost_desc": "All costs not directly attributed to the infrastructure. These costs are determined by applying a price list within a cost model to OpenShift cluster metrics.", - "title": "OpenShift details", - "total_cost_tooltip": "This total cost is the sum of the infrastructure cost: {{infrastructureCost}} and supplementary cost: {{supplementaryCost}}" + "title": "OpenShift details" }, "ocp_supplementary_dashboard": { "cost_title": "OpenShift supplementary cost", @@ -797,7 +796,6 @@ "volume_title": "OpenShift volume usage and requests" }, "onboarding": { - "type_label": "Type", "type_options": { "aws": "Amazon Web Services (AWS)", "azure": "Microsoft Azure", @@ -831,9 +829,7 @@ "label": "Perspective", "ocp_usage": "OpenShift usage", "supplementary": "Supplementary" - }, - "title": "Cost Management overview", - "title_aria_label": "A description of OpenShift on AWS, OpenShift, AWS, and Azure" + } }, "page_cost_models": { "assigned_sources": "Assigned sources", diff --git a/src/pages/views/details/ocpDetails/detailsHeader.tsx b/src/pages/views/details/ocpDetails/detailsHeader.tsx index 9e6ad6ae3..9625daf14 100644 --- a/src/pages/views/details/ocpDetails/detailsHeader.tsx +++ b/src/pages/views/details/ocpDetails/detailsHeader.tsx @@ -106,7 +106,7 @@ class DetailsHeaderBase extends React.Component<DetailsHeaderProps> { <div style={styles.cost}> <Title headingLevel="h2" style={styles.costValue} size="4xl"> <Tooltip - content={t('details.total_cost_tooltip', { + content={t('dashboard.total_cost_tooltip', { supplementaryCost, infrastructureCost, })} diff --git a/src/pages/views/overview/overview.tsx b/src/pages/views/overview/overview.tsx index f7d7a48a1..f8a23003d 100644 --- a/src/pages/views/overview/overview.tsx +++ b/src/pages/views/overview/overview.tsx @@ -536,7 +536,7 @@ class OverviewBase extends React.Component<OverviewProps> { const noOcpProviders = !this.isOcpAvailable() && ocpProvidersFetchStatus === FetchStatus.complete; const noProviders = noAwsProviders && noAzureProviders && noGcpProviders && noIbmProviders && noOcpProviders; - const title = t('navigation.overview'); + const title = t('cost_management_overview'); if (noProviders) { return <NoProviders title={title} />; @@ -550,7 +550,7 @@ class OverviewBase extends React.Component<OverviewProps> { > <header className="pf-u-display-flex pf-u-justify-content-space-between pf-u-align-items-center"> <Title headingLevel="h2" size="2xl"> - {t('overview.title')} + {t('cost_management_overview')} <span style={styles.infoIcon}> <Popover aria-label={t('ocp_details.supplementary_aria_label')} diff --git a/src/routes.tsx b/src/routes.tsx index b694c2575..acd8a8dca 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -44,7 +44,7 @@ const paths = { const routes = [ { path: paths.overview, - labelKey: 'navigation.overview', + labelKey: 'cost_management_overview', component: permissionsComponent(Overview), exact: true, }, From 500541d4d1a0917bbbfe10c3d5f5707899b98c1c Mon Sep 17 00:00:00 2001 From: Dan Labrecque <dlabrecq@redhat.com> Date: Wed, 10 Mar 2021 13:08:46 -0500 Subject: [PATCH 171/200] Replace PageHeaderTitle with frontend-components https://issues.redhat.com/browse/COST-1146 --- koku-ui-manifest | 2 +- package.json | 2 +- .../pageHeaderTitle/pageHeaderTitle.tsx | 22 ------------------- src/pages/costModels/costModel/index.tsx | 3 +-- src/pages/state/loading/loading.tsx | 3 +-- src/pages/state/noData/noData.tsx | 3 +-- src/pages/state/noProviders/noProviders.tsx | 3 +-- .../state/notAuthorized/notAuthorized.tsx | 3 +-- src/pages/state/notAvailable/notAvailable.tsx | 3 +-- yarn.lock | 8 +++---- 10 files changed, 12 insertions(+), 40 deletions(-) delete mode 100644 src/components/pageHeaderTitle/pageHeaderTitle.tsx diff --git a/koku-ui-manifest b/koku-ui-manifest index 5dc5ca41d..1a931ceed 100644 --- a/koku-ui-manifest +++ b/koku-ui-manifest @@ -105,7 +105,7 @@ mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-notif mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components-utilities:3.1.1.yarnlock -mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.3.yarnlock +mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/frontend-components:3.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@redhat-cloud-services/rbac-client:1.0.94.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/context:2.1.4.yarnlock mgmt_services/cost-mgmt:koku-ui/@restart/hooks:0.3.26.yarnlock diff --git a/package.json b/package.json index 47a202c4f..fa6710613 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "@patternfly/react-styles": "4.8.5", "@patternfly/react-table": "4.23.14", "@patternfly/react-tokens": "4.10.5", - "@redhat-cloud-services/frontend-components": "^3.1.3", + "@redhat-cloud-services/frontend-components": "^3.1.4", "@redhat-cloud-services/frontend-components-notifications": "^3.1.0", "@redhat-cloud-services/frontend-components-utilities": "^3.1.1", "@redhat-cloud-services/rbac-client": "^1.0.94", diff --git a/src/components/pageHeaderTitle/pageHeaderTitle.tsx b/src/components/pageHeaderTitle/pageHeaderTitle.tsx deleted file mode 100644 index 1c2635a34..000000000 --- a/src/components/pageHeaderTitle/pageHeaderTitle.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { Title } from '@patternfly/react-core'; -import classNames from 'classnames'; -import React from 'react'; - -// Note: Temp workaround for PageHeaderTitle not exported via @redhat-cloud-services/frontend-components/PageHeader - -interface PageHeaderProps { - className?: string; - title: string; -} - -const PageHeaderTitle: React.SFC<PageHeaderProps> = ({ className, title }) => { - const pageHeaderTitleClasses = classNames(className); - - return ( - <Title headingLevel="h1" size="2xl" className={pageHeaderTitleClasses}> - {title} - - ); -}; - -export { PageHeaderTitle }; diff --git a/src/pages/costModels/costModel/index.tsx b/src/pages/costModels/costModel/index.tsx index ff3bfb440..376a62e8a 100644 --- a/src/pages/costModels/costModel/index.tsx +++ b/src/pages/costModels/costModel/index.tsx @@ -1,10 +1,9 @@ import { EmptyState, EmptyStateBody, EmptyStateIcon, TabContent, Title } from '@patternfly/react-core'; import { ErrorCircleOIcon } from '@patternfly/react-icons/dist/js/icons/error-circle-o-icon'; import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import { CostModel } from 'api/costModels'; import { AxiosError } from 'axios'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import MarkupCard from 'pages/costModels/costModel/markup'; import PriceListTable from 'pages/costModels/costModel/priceListTable'; import SourceTable from 'pages/costModels/costModel/sourceTable'; diff --git a/src/pages/state/loading/loading.tsx b/src/pages/state/loading/loading.tsx index e7c2fcd88..f84405b64 100644 --- a/src/pages/state/loading/loading.tsx +++ b/src/pages/state/loading/loading.tsx @@ -1,6 +1,5 @@ import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import { LoadingState } from 'components/state/loadingState/loadingState'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/noData/noData.tsx b/src/pages/state/noData/noData.tsx index c5e73eab7..a43661ad3 100644 --- a/src/pages/state/noData/noData.tsx +++ b/src/pages/state/noData/noData.tsx @@ -1,6 +1,5 @@ import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/noProviders/noProviders.tsx b/src/pages/state/noProviders/noProviders.tsx index 9167e91f1..2e5103438 100644 --- a/src/pages/state/noProviders/noProviders.tsx +++ b/src/pages/state/noProviders/noProviders.tsx @@ -1,7 +1,6 @@ import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import { ProviderType } from 'api/providers'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/notAuthorized/notAuthorized.tsx b/src/pages/state/notAuthorized/notAuthorized.tsx index 29ebcaa0b..6cc7c5cf9 100644 --- a/src/pages/state/notAuthorized/notAuthorized.tsx +++ b/src/pages/state/notAuthorized/notAuthorized.tsx @@ -1,6 +1,5 @@ import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/src/pages/state/notAvailable/notAvailable.tsx b/src/pages/state/notAvailable/notAvailable.tsx index 12c086e50..13d2f2f2e 100644 --- a/src/pages/state/notAvailable/notAvailable.tsx +++ b/src/pages/state/notAvailable/notAvailable.tsx @@ -1,7 +1,6 @@ import Main from '@redhat-cloud-services/frontend-components/Main'; -import PageHeader from '@redhat-cloud-services/frontend-components/PageHeader'; +import PageHeader, { PageHeaderTitle } from '@redhat-cloud-services/frontend-components/PageHeader'; import Unavailable from '@redhat-cloud-services/frontend-components/Unavailable'; -import { PageHeaderTitle } from 'components/pageHeaderTitle/pageHeaderTitle'; import React from 'react'; import { RouteComponentProps, withRouter } from 'react-router-dom'; diff --git a/yarn.lock b/yarn.lock index 82d81f6ff..98632aa89 100644 --- a/yarn.lock +++ b/yarn.lock @@ -655,10 +655,10 @@ commander ">=2.20.0" react-content-loader ">=3.4.1" -"@redhat-cloud-services/frontend-components@^3.1.3": - version "3.1.3" - resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.3.tgz#4ed5312fb62c2505d9ff934212720631f2581fd2" - integrity sha512-2c0CBTKJ8MRA1SvlPBWWTb6XVH25MnuDJ0Fc3aDWvMlmAtxcNuWPeDe5TCHN20k0Qvj6DoaU0c6XrtyneTW9Fw== +"@redhat-cloud-services/frontend-components@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@redhat-cloud-services/frontend-components/-/frontend-components-3.1.4.tgz#75ea0abec380b49d1069a72d2ed853ab7e0fcf40" + integrity sha512-0iosp+M0sg1qw34pYFsI5CWbGy3lrOaaXenHM6JD2BPeQbh6js4XojEUkmn/5yA3zZvmeZETwayWoWJhB3IO6A== dependencies: "@redhat-cloud-services/frontend-components-utilities" ">=3.0.0" "@scalprum/core" "^0.0.11" From 451805372957f4042adcce48950d1834eadff13c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Wed, 10 Mar 2021 17:57:39 -0500 Subject: [PATCH 172/200] Apply filter_by params as filters instead of group_by https://issues.redhat.com/browse/COST-1132 --- src/api/queries/query.ts | 74 ++++--- .../details/awsBreakdown/awsBreakdown.tsx | 6 +- .../details/azureBreakdown/azureBreakdown.tsx | 4 +- .../historicalDataCostChart.tsx | 8 +- .../historicalDataTrendChart.tsx | 17 +- .../historicalDataUsageChart.tsx | 8 +- .../components/summary/summaryCard.tsx | 6 +- .../components/summary/summaryModalView.tsx | 6 +- .../components/summary/summaryView.tsx | 200 ------------------ .../components/usageChart/usageChart.tsx | 4 +- .../details/gcpBreakdown/gcpBreakdown.tsx | 4 +- .../details/ibmBreakdown/ibmBreakdown.tsx | 4 +- .../details/ocpBreakdown/ocpBreakdown.tsx | 4 +- 13 files changed, 96 insertions(+), 249 deletions(-) delete mode 100644 src/pages/views/details/components/summary/summaryView.tsx diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index caf9c7f31..6b3ac3424 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -39,6 +39,22 @@ export interface Query { start_date?: any; } +// Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 +export function addFilterByPrifix(query: Query, prefix: string = groupByOrPrefix) { + if (!(query && query.filter_by)) { + return query; + } + const newQuery = { + ...JSON.parse(JSON.stringify(query)), + ...(!(query && query.filter) && { filte: {} }), + }; + for (const key of Object.keys(query.filter_by)) { + newQuery.filter_by[key] = undefined; + newQuery.filter_by[`${prefix}${key}`] = query.filter_by[key]; + } + return newQuery; +} + // Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 export function addGroupByPrifix(query: Query, prefix: string = groupByOrPrefix) { if (!(query && query.group_by)) { @@ -54,8 +70,8 @@ export function addGroupByPrifix(query: Query, prefix: string = groupByOrPrefix) return newQuery; } -// Converts filter_by props to group_by -export function convertFilterByToGroupBy(query: Query) { +// Converts filter_by props to filter +export function convertFilterBy(query: Query) { if (!(query && query.filter_by)) { return query; } @@ -64,16 +80,16 @@ export function convertFilterByToGroupBy(query: Query) { filter_by: {}, }; for (const key of Object.keys(query.filter_by)) { - if (!newQuery.group_by) { - newQuery.group_by = {}; + if (!newQuery.filter) { + newQuery.filter = {}; } - if (newQuery.group_by[key]) { - if (!Array.isArray(newQuery.group_by[key])) { - newQuery.group_by[key] = newQuery.group_by[key] !== '*' ? [newQuery.group_by[key]] : []; + if (newQuery.filter[key]) { + if (!Array.isArray(newQuery.filter[key])) { + newQuery.filter[key] = newQuery.filter[key] !== '*' ? [newQuery.filter[key]] : []; } - newQuery.group_by[key].push(query.filter_by[key]); + newQuery.filter[key].push(query.filter_by[key]); } else { - newQuery.group_by[key] = query.filter_by[key]; + newQuery.filter[key] = query.filter_by[key]; } } return newQuery; @@ -86,30 +102,32 @@ export function getQueryRoute(query: Query) { // Returns query and adds group_by prefix export function getQuery(query: Query, prefix: string = groupByOrPrefix) { - const newQuery = convertFilterByToGroupBy(query); - let addGroupByPrefix = false; - // Workaround for https://github.com/project-koku/koku/issues/1596 - if (newQuery && newQuery.group_by) { - const keys = Object.keys(newQuery.group_by); - if (keys && keys.length > 1) { - addGroupByPrefix = true; - } else { - // Find a tag (#1596) or group_by with multiple keys - for (const key of keys) { - if ( - (Array.isArray(newQuery.group_by[key]) && newQuery.group_by[key].length > 1) || - key.indexOf(tagPrefix) !== -1 - ) { - addGroupByPrefix = true; + const hasMultipleBys = prop => { + if (query && query[prop]) { + const keys = Object.keys(query[prop]); + if (keys && keys.length > 1) { + return true; + } else { + // Find a tag (#1596) or group_by with multiple keys + for (const key of keys) { + if ((Array.isArray(query[prop][key]) && query[prop][key].length > 1) || key.indexOf(tagPrefix) !== -1) { + return true; + } } } } - } + }; + + // Skip adding logical OR/AND prefix for a single group_by / filter_by + const addGroupByPrefix = hasMultipleBys('group_by'); + const addFilterByPrefix = hasMultipleBys('filter_by'); + + const filterByPrefixQuery = addFilterByPrefix ? addFilterByPrifix(query, prefix) : query; + const groupByPrefixQuery = addGroupByPrefix ? addGroupByPrifix(filterByPrefixQuery, prefix) : filterByPrefixQuery; + const newQuery = convertFilterBy(groupByPrefixQuery); - // Skip adding group_by prefix for a single group_by - const q = addGroupByPrefix ? addGroupByPrifix(newQuery, prefix) : newQuery; - return stringify(q, { encode: false, indices: false }); + return stringify(newQuery, { encode: false, indices: false }); } // Returns query without filter_by prefix diff --git a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 02415e3c1..1a7f3afb0 100644 --- a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -55,10 +55,12 @@ const mapStateToProps = createMapStateToProps { - public state: SummaryViewState = { - isSummaryModalOpen: false, - }; - - public componentDidMount() { - const { fetchReport, queryString, reportPathsType } = this.props; - fetchReport(reportPathsType, reportType, queryString); - } - - public componentDidUpdate(prevProps: SummaryModalViewProps) { - const { fetchReport, queryString, reportPathsType } = this.props; - if (prevProps.queryString !== queryString) { - fetchReport(reportPathsType, reportType, queryString); - } - } - - private getItems = () => { - const { report, reportGroupBy } = this.props; - - const computedItems = getComputedReportItems({ - report, - idKey: reportGroupBy as any, - }); - return computedItems; - }; - - private getTabItem = reportItem => { - const { report } = this.props; - - return ( - - ); - }; - - private getViewAll = () => { - const { groupBy, groupByValue, reportGroupBy, reportPathsType, t } = this.props; - const { isSummaryModalOpen } = this.state; - const computedItems = this.getItems(); - - const otherIndex = computedItems.findIndex(i => { - const id = i.id; - if (id && id !== null) { - return id.toString().includes('Other'); - } - }); - - if (otherIndex !== -1) { - return ( -
- - -
- ); - } else { - return null; - } - }; - - private handleSummaryModalClose = (isOpen: boolean) => { - this.setState({ isSummaryModalOpen: isOpen }); - }; - - private handleSummaryModalOpen = event => { - this.setState({ isSummaryModalOpen: true }); - event.preventDefault(); - }; - - public render() { - const { report, reportGroupBy, reportFetchStatus } = this.props; - - return ( - <> - {reportFetchStatus === FetchStatus.inProgress ? ( - <> - - - - - - ) : ( - <> -
- - {({ items }) => items.map(reportItem => this.getTabItem(reportItem))} - -
- {this.getViewAll()} - - )} - - ); - } -} - -const mapStateToProps = createMapStateToProps( - (state, { groupBy, groupByValue, query, reportGroupBy, reportPathsType }) => { - const newQuery: Query = { - filter: { - limit: 3, - time_scope_units: 'month', - time_scope_value: -1, - resolution: 'monthly', - ...(query && query.filter && query.filter.account && { account: query.filter.account }), - ...(groupBy && { [groupBy]: groupByValue }), // details page "group_by" must be applied here - }, - ...(query && query.filter_by && { filter_by: query.filter_by }), - group_by: { [reportGroupBy]: '*' }, // Group by specific account, project, etc. - }; - const queryString = getQuery(newQuery); - const report = reportSelectors.selectReport(state, reportPathsType, reportType, queryString); - const reportFetchStatus = reportSelectors.selectReportFetchStatus(state, reportPathsType, reportType, queryString); - return { - queryString, - report, - reportFetchStatus, - }; - } -); - -const mapDispatchToProps: SummaryViewDispatchProps = { - fetchReport: reportActions.fetchReport, -}; - -const SummaryView = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(SummaryViewBase)); - -export { SummaryView, SummaryViewProps }; diff --git a/src/pages/views/details/components/usageChart/usageChart.tsx b/src/pages/views/details/components/usageChart/usageChart.tsx index 96ce055f8..2ce58d91e 100644 --- a/src/pages/views/details/components/usageChart/usageChart.tsx +++ b/src/pages/views/details/components/usageChart/usageChart.tsx @@ -409,9 +409,11 @@ const mapStateToProps = createMapStateToProps Date: Wed, 10 Mar 2021 18:21:32 -0500 Subject: [PATCH 173/200] Clean up query functions and comments --- src/api/queries/query.ts | 11 +++++------ src/pages/views/details/awsBreakdown/awsBreakdown.tsx | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index 6b3ac3424..1b353ff69 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -70,7 +70,7 @@ export function addGroupByPrifix(query: Query, prefix: string = groupByOrPrefix) return newQuery; } -// Converts filter_by props to filter +// Converts filter_by props to filter props export function convertFilterBy(query: Query) { if (!(query && query.filter_by)) { return query; @@ -119,15 +119,14 @@ export function getQuery(query: Query, prefix: string = groupByOrPrefix) { } }; - // Skip adding logical OR/AND prefix for a single group_by / filter_by + // Skip adding logical OR/AND prefix for a single group_by / filter_by params const addGroupByPrefix = hasMultipleBys('group_by'); const addFilterByPrefix = hasMultipleBys('filter_by'); - const filterByPrefixQuery = addFilterByPrefix ? addFilterByPrifix(query, prefix) : query; - const groupByPrefixQuery = addGroupByPrefix ? addGroupByPrifix(filterByPrefixQuery, prefix) : filterByPrefixQuery; - const newQuery = convertFilterBy(groupByPrefixQuery); + const _newQuery = addFilterByPrefix ? addFilterByPrifix(query, prefix) : query; + const newQuery = addGroupByPrefix ? addGroupByPrifix(_newQuery, prefix) : _newQuery; - return stringify(newQuery, { encode: false, indices: false }); + return stringify(convertFilterBy(newQuery), { encode: false, indices: false }); } // Returns query without filter_by prefix diff --git a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 1a7f3afb0..1b0c46518 100644 --- a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -59,7 +59,7 @@ const mapStateToProps = createMapStateToProps Date: Thu, 11 Mar 2021 03:22:06 -0500 Subject: [PATCH 174/200] Modified query to support logical OR/AND prefixes externally --- src/api/queries/query.ts | 40 ++--- .../views/details/components/tag/tag.tsx | 166 ------------------ 2 files changed, 18 insertions(+), 188 deletions(-) delete mode 100644 src/pages/views/details/components/tag/tag.tsx diff --git a/src/api/queries/query.ts b/src/api/queries/query.ts index 1b353ff69..d2a46a6e9 100644 --- a/src/api/queries/query.ts +++ b/src/api/queries/query.ts @@ -1,7 +1,7 @@ import { parse, stringify } from 'qs'; -export const groupByOrPrefix = 'or:'; // logical OR prefix for group_by -export const groupByAndPrefix = 'and:'; // logical AND prefix for group_by +export const logicalOrPrefix = 'or:'; // logical OR prefix for group_by +export const logicalAndPrefix = 'and:'; // logical AND prefix for group_by export const tagPrefix = 'tag:'; // Tag prefix for group_by export const breakdownDescKey = 'breakdown_desc'; // Used to display a description in the breakdown header @@ -11,12 +11,6 @@ export const orgUnitIdKey = 'org_unit_id'; // Org unit ID for group_by export const orgUnitNameKey = 'org_unit_name'; // Org unit name for group_by export const tagKey = 'tag'; // Tag key prefix for group_by -type FilterByValue = string | string[]; - -interface FilterBys { - tag?: FilterByValue; -} - export interface Filters { limit?: number; offset?: number; @@ -31,7 +25,7 @@ export interface Query { dateRange?: any; end_date?: any; filter?: any; - filter_by?: FilterBys; + filter_by?: any; group_by?: any; key_only?: boolean; order_by?: any; @@ -40,23 +34,25 @@ export interface Query { } // Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 -export function addFilterByPrifix(query: Query, prefix: string = groupByOrPrefix) { +export function addFilterByPrifix(query: Query, prefix: string = logicalOrPrefix) { if (!(query && query.filter_by)) { return query; } const newQuery = { ...JSON.parse(JSON.stringify(query)), - ...(!(query && query.filter) && { filte: {} }), + filter_by: {}, }; for (const key of Object.keys(query.filter_by)) { - newQuery.filter_by[key] = undefined; - newQuery.filter_by[`${prefix}${key}`] = query.filter_by[key]; + // Prefix may be set externally + const newKey = + key.indexOf(logicalOrPrefix) === -1 && key.indexOf(logicalAndPrefix) === -1 ? `${prefix}${key}` : key; + newQuery.filter_by[newKey] = query.filter_by[key]; } return newQuery; } // Adds group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 -export function addGroupByPrifix(query: Query, prefix: string = groupByOrPrefix) { +export function addGroupByPrifix(query: Query, prefix: string = logicalOrPrefix) { if (!(query && query.group_by)) { return query; } @@ -77,7 +73,7 @@ export function convertFilterBy(query: Query) { } const newQuery = { ...JSON.parse(JSON.stringify(query)), - filter_by: {}, + filter_by: undefined, }; for (const key of Object.keys(query.filter_by)) { if (!newQuery.filter) { @@ -101,17 +97,17 @@ export function getQueryRoute(query: Query) { } // Returns query and adds group_by prefix -export function getQuery(query: Query, prefix: string = groupByOrPrefix) { +export function getQuery(query: Query, prefix: string = logicalOrPrefix) { // Workaround for https://github.com/project-koku/koku/issues/1596 - const hasMultipleBys = prop => { - if (query && query[prop]) { - const keys = Object.keys(query[prop]); + const hasMultipleBys = param => { + if (query && query[param]) { + const keys = Object.keys(query[param]); if (keys && keys.length > 1) { return true; } else { // Find a tag (#1596) or group_by with multiple keys for (const key of keys) { - if ((Array.isArray(query[prop][key]) && query[prop][key].length > 1) || key.indexOf(tagPrefix) !== -1) { + if ((Array.isArray(query[param][key]) && query[param][key].length > 1) || key.indexOf(tagPrefix) !== -1) { return true; } } @@ -130,7 +126,7 @@ export function getQuery(query: Query, prefix: string = groupByOrPrefix) { } // Returns query without filter_by prefix -export function parseFilterByPrefix(query: Query, prefix: string = groupByOrPrefix) { +export function parseFilterByPrefix(query: Query, prefix: string = logicalOrPrefix) { if (!(query && query.filter_by)) { return query; } @@ -147,7 +143,7 @@ export function parseFilterByPrefix(query: Query, prefix: string = groupByOrPref } // Returns query without group_by prefix -- https://github.com/project-koku/koku-ui/issues/704 -export function parseGroupByPrefix(query: Query, prefix: string = groupByOrPrefix) { +export function parseGroupByPrefix(query: Query, prefix: string = logicalOrPrefix) { if (!(query && query.group_by)) { return query; } diff --git a/src/pages/views/details/components/tag/tag.tsx b/src/pages/views/details/components/tag/tag.tsx deleted file mode 100644 index c6792bb57..000000000 --- a/src/pages/views/details/components/tag/tag.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { getQuery, parseQuery, Query } from 'api/queries/query'; -import { Tag, TagPathsType, TagType } from 'api/tags/tag'; -import React from 'react'; -import { WithTranslation, withTranslation } from 'react-i18next'; -import { connect } from 'react-redux'; -import { createMapStateToProps, FetchStatus } from 'store/common'; -import { tagActions, tagSelectors } from 'store/tags'; -import { getTestProps, testIds } from 'testIds'; - -import { styles } from './tag.styles'; -import { TagModal } from './tagModal'; - -interface TagOwnProps { - filterBy: string | number; - groupBy: string; - id?: string; - tagReportPathsType: TagPathsType; -} - -interface TagState { - isOpen: boolean; - showAll: boolean; -} - -interface TagStateProps { - queryString?: string; - tagReport?: Tag; - tagReportFetchStatus?: FetchStatus; -} - -interface TagDispatchProps { - fetchTag?: typeof tagActions.fetchTag; -} - -type TagProps = TagOwnProps & TagStateProps & TagDispatchProps & WithTranslation; - -const tagReportType = TagType.tag; - -class TagBase extends React.Component { - protected defaultState: TagState = { - isOpen: false, - showAll: false, - }; - public state: TagState = { ...this.defaultState }; - - constructor(props: TagProps) { - super(props); - this.handleClose = this.handleClose.bind(this); - this.handleOpen = this.handleOpen.bind(this); - } - - public componentDidMount() { - const { fetchTag, queryString, tagReportPathsType } = this.props; - fetchTag(tagReportPathsType, tagReportType, queryString); - } - - public componentDidUpdate(prevProps: TagProps) { - const { fetchTag, queryString, tagReportPathsType } = this.props; - if (prevProps.queryString !== queryString) { - fetchTag(tagReportPathsType, tagReportType, queryString); - } - } - - public handleClose = (isOpen: boolean) => { - this.setState({ isOpen }); - }; - - public handleOpen = event => { - this.setState({ isOpen: true }); - event.preventDefault(); - return false; - }; - - public render() { - const { filterBy, groupBy, id, tagReport, tagReportPathsType, t } = this.props; - const { isOpen, showAll } = this.state; - - let charCount = 0; - const maxChars = 50; - const someTags = []; - const allTags = []; - - if (tagReport) { - for (const item of tagReport.data) { - for (const val of item.values) { - const prefix = someTags.length > 0 ? ', ' : ''; - const tagString = `${prefix}${(item as any).key}: ${val}`; - if (showAll) { - someTags.push(tagString); - } else if (charCount <= maxChars) { - if (charCount + tagString.length > maxChars) { - someTags.push( - tagString - .slice(0, maxChars - charCount) - .trim() - .concat('...') - ); - } else { - someTags.push(tagString); - } - } - charCount += tagString.length; - allTags.push(`${(item as any).key}: ${val}`); - } - } - } - - return ( -
- {Boolean(someTags) && someTags.map((val, tagIndex) => {val})} - {Boolean(someTags.length < allTags.length) && ( - - {t('details.more_tags', { - value: allTags.length - someTags.length, - })} - - )} - -
- ); - } -} - -const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, tagReportPathsType }) => { - const queryFromRoute = parseQuery(location.search); - const queryString = getQuery({ - filter: { - [groupBy]: filterBy, - resolution: 'monthly', - time_scope_units: 'month', - time_scope_value: -1, - ...(queryFromRoute.filter.account && { - account: queryFromRoute.filter.account, - }), - }, - }); - const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); - const tagReportFetchStatus = tagSelectors.selectTagFetchStatus( - state, - tagReportPathsType, - tagReportType, - queryString - ); - return { - filterBy, - queryString, - tagReport, - tagReportFetchStatus, - }; - } -); - -const mapDispatchToProps: TagDispatchProps = { - fetchTag: tagActions.fetchTag, -}; - -const Tag = withTranslation()(connect(mapStateToProps, mapDispatchToProps)(TagBase)); - -export { Tag, TagProps }; From 1e063feac5bc7d1b4773b8f8a8ba2ff92bfb9c3b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Mar 2021 03:24:29 -0500 Subject: [PATCH 175/200] Renamed getGroupOrg to getGroupOrgValue --- .../views/details/awsDetails/detailsTable.tsx | 38 +++---------------- .../components/breakdown/breakdownBase.tsx | 3 -- .../components/breakdown/breakdownHeader.tsx | 23 ++--------- src/pages/views/explorer/explorer.tsx | 4 +- src/pages/views/explorer/explorerChart.tsx | 34 ++--------------- src/pages/views/utils/groupBy.ts | 2 +- .../computedReport/getComputedReportItems.ts | 2 +- 7 files changed, 18 insertions(+), 88 deletions(-) diff --git a/src/pages/views/details/awsDetails/detailsTable.tsx b/src/pages/views/details/awsDetails/detailsTable.tsx index 4312e7d77..9b3f9f26c 100644 --- a/src/pages/views/details/awsDetails/detailsTable.tsx +++ b/src/pages/views/details/awsDetails/detailsTable.tsx @@ -4,12 +4,13 @@ import { Bullseye, EmptyState, EmptyStateBody, EmptyStateIcon, Spinner } from '@ import { CalculatorIcon } from '@patternfly/react-icons/dist/js/icons/calculator-icon'; import { sortable, SortByDirection, Table, TableBody, TableHeader } from '@patternfly/react-table'; import { AwsQuery, getQuery, getQueryRoute } from 'api/queries/awsQuery'; -import { breakdownDescKey, breakdownTitleKey, orgUnitIdKey, tagPrefix } from 'api/queries/query'; +import { breakdownDescKey, breakdownTitleKey, orgUnitIdKey } from 'api/queries/query'; import { AwsReport } from 'api/reports/awsReports'; import { ReportPathsType } from 'api/reports/report'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { EmptyValueState } from 'components/state/emptyValueState/emptyValueState'; import { Actions } from 'pages/views/details/components/actions/actions'; +import { getGroupByOrgValue, getGroupByTagKey } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { Link } from 'react-router-dom'; @@ -120,8 +121,8 @@ class DetailsTableBase extends React.Component { } const groupById = getIdKeyForGroupBy(query.group_by); - const groupByOrg = this.getGroupByOrg(); - const groupByTagKey = this.getGroupByTagKey(); + const groupByOrg = getGroupByOrgValue(query); + const groupByTagKey = getGroupByTagKey(query); const total = formatCurrency( report && report.meta && report.meta.total && report.meta.total.cost && report.meta.total.cost.total @@ -184,7 +185,7 @@ class DetailsTableBase extends React.Component { description: item.id, groupByOrg, id: item.id, - orgUnitId: this.getGroupByOrg(), + orgUnitId: getGroupByOrgValue(query), title: item.label, type: item.type, })} @@ -257,7 +258,7 @@ class DetailsTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( @@ -268,33 +269,6 @@ class DetailsTableBase extends React.Component { ); }; - private getGroupByOrg = () => { - const { query } = this.props; - let groupByOrg; - - for (const groupBy of Object.keys(query.group_by)) { - if (groupBy === orgUnitIdKey) { - groupByOrg = query.group_by[orgUnitIdKey]; - break; - } - } - return groupByOrg; - }; - - private getGroupByTagKey = () => { - const { query } = this.props; - let groupByTagKey; - - for (const groupBy of Object.keys(query.group_by)) { - const tagIndex = groupBy.indexOf(tagPrefix); - if (tagIndex !== -1) { - groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; - break; - } - } - return groupByTagKey; - }; - private getMonthOverMonthCost = (item: ComputedReportItem, index: number) => { const { t } = this.props; const value = formatCurrency(Math.abs(item.cost.total.value - item.delta_value)); diff --git a/src/pages/views/details/components/breakdown/breakdownBase.tsx b/src/pages/views/details/components/breakdown/breakdownBase.tsx index 4ab62a28e..9843e9ee9 100644 --- a/src/pages/views/details/components/breakdown/breakdownBase.tsx +++ b/src/pages/views/details/components/breakdown/breakdownBase.tsx @@ -38,7 +38,6 @@ interface BreakdownStateProps { description?: string; detailsURL: string; emptyStateTitle: string; - filterBy: string; groupBy: string; historicalDataComponent?: React.ReactNode; providers: Providers; @@ -194,7 +193,6 @@ class BreakdownBase extends React.Component { description, detailsURL, emptyStateTitle, - filterBy, groupBy, providers, providersFetchStatus, @@ -230,7 +228,6 @@ class BreakdownBase extends React.Component { { return `${detailsURL}?${getQueryRoute(newQuery)}`; }; - private getGroupByOrg = () => { - const { query } = this.props; - let groupByOrg; - - for (const groupBy of Object.keys(query.group_by)) { - if (groupBy === orgUnitIdKey) { - groupByOrg = query.group_by[orgUnitIdKey]; - break; - } - } - return groupByOrg; - }; - private getTotalCost = () => { const { report } = this.props; @@ -84,10 +71,10 @@ class BreakdownHeaderBase extends React.Component { }; public render() { - const { description, filterBy, groupBy, query, t, tabs, tagReportPathsType, title } = this.props; + const { description, groupBy, query, t, tabs, tagReportPathsType, title } = this.props; const filterByAccount = query && query.filter ? query.filter.account : undefined; - const groupByOrg = this.getGroupByOrg(); + const groupByOrg = getGroupByOrgValue(query); const showTags = filterByAccount || groupBy === 'account' || groupBy === 'project' || groupBy === 'subscription_guid'; @@ -119,9 +106,7 @@ class BreakdownHeaderBase extends React.Component {
{tabs}
- {Boolean(showTags) && ( - - )} + {Boolean(showTags) && }
diff --git a/src/pages/views/explorer/explorer.tsx b/src/pages/views/explorer/explorer.tsx index adba0a8d5..1a01e170f 100644 --- a/src/pages/views/explorer/explorer.tsx +++ b/src/pages/views/explorer/explorer.tsx @@ -12,7 +12,7 @@ import NoData from 'pages/state/noData'; import NoProviders from 'pages/state/noProviders'; import NotAvailable from 'pages/state/notAvailable'; import { ExportModal } from 'pages/views/components/export/exportModal'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { getGroupByOrgValue, getGroupByTagKey } from 'pages/views/utils/groupBy'; import { hasData } from 'pages/views/utils/providers'; import { addQueryFilter, removeQueryFilter } from 'pages/views/utils/query'; import React from 'react'; @@ -148,7 +148,7 @@ class Explorer extends React.Component { const { query, report } = this.props; const groupById = getIdKeyForGroupBy(query.group_by); - const groupByOrg = getGroupByOrg(query); + const groupByOrg = getGroupByOrgValue(query); const groupByTagKey = getGroupByTagKey(query); const computedItems = getUnsortedComputedReportItems({ diff --git a/src/pages/views/explorer/explorerChart.tsx b/src/pages/views/explorer/explorerChart.tsx index 74a816da8..f5efdc947 100644 --- a/src/pages/views/explorer/explorerChart.tsx +++ b/src/pages/views/explorer/explorerChart.tsx @@ -1,11 +1,12 @@ import { Title } from '@patternfly/react-core'; import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; -import { getQuery, orgUnitIdKey, parseQuery, Query, tagPrefix } from 'api/queries/query'; +import { getQuery, parseQuery, Query } from 'api/queries/query'; import { Report } from 'api/reports/report'; import { AxiosError } from 'axios'; import { ChartDatum, ComputedReportItemType, isFloat, isInt } from 'components/charts/common/chartDatumUtils'; import { CostExplorerChart } from 'components/charts/costExplorerChart'; import { format, getDate, getMonth } from 'date-fns'; +import { getGroupByOrgValue, getGroupByTagKey } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -186,39 +187,12 @@ class ExplorerChartBase extends React.Component { const { query } = this.props; const groupById = getIdKeyForGroupBy(query.group_by); - const groupByOrg = this.getGroupByOrg(); - const groupByTagKey = this.getGroupByTagKey(); + const groupByOrg = getGroupByOrgValue(query); + const groupByTagKey = getGroupByTagKey(query); return groupByTagKey ? groupByTagKey : groupByOrg ? 'org_entities' : groupById; }; - private getGroupByOrg = () => { - const { query } = this.props; - let groupByOrg; - - for (const groupBy of Object.keys(query.group_by)) { - if (groupBy === orgUnitIdKey) { - groupByOrg = query.group_by[orgUnitIdKey]; - break; - } - } - return groupByOrg; - }; - - private getGroupByTagKey = () => { - const { query } = this.props; - let groupByTagKey; - - for (const groupBy of Object.keys(query.group_by)) { - const tagIndex = groupBy.indexOf(tagPrefix); - if (tagIndex !== -1) { - groupByTagKey = groupBy.substring(tagIndex + tagPrefix.length) as any; - break; - } - } - return groupByTagKey; - }; - private getSkeleton = () => { return ( <> diff --git a/src/pages/views/utils/groupBy.ts b/src/pages/views/utils/groupBy.ts index 52cbeb89c..b05262266 100644 --- a/src/pages/views/utils/groupBy.ts +++ b/src/pages/views/utils/groupBy.ts @@ -10,7 +10,7 @@ export const getGroupByValue = (query: Query) => { return groupById ? query.group_by[groupById] : undefined; }; -export const getGroupByOrg = (query: Query) => { +export const getGroupByOrgValue = (query: Query) => { let groupByOrg; for (const groupBy of Object.keys(query.group_by)) { diff --git a/src/utils/computedReport/getComputedReportItems.ts b/src/utils/computedReport/getComputedReportItems.ts index 80b62a3e2..1904cf89d 100644 --- a/src/utils/computedReport/getComputedReportItems.ts +++ b/src/utils/computedReport/getComputedReportItems.ts @@ -210,7 +210,7 @@ export function getUnsortedComputedReportItems Date: Thu, 11 Mar 2021 03:26:32 -0500 Subject: [PATCH 176/200] Fix empty state filter type --- src/pages/views/details/azureDetails/detailsTable.tsx | 2 +- src/pages/views/details/gcpDetails/detailsTable.tsx | 2 +- src/pages/views/details/ibmDetails/detailsTable.tsx | 2 +- src/pages/views/details/ocpDetails/detailsTable.tsx | 2 +- src/pages/views/explorer/explorerTable.tsx | 6 +++--- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/pages/views/details/azureDetails/detailsTable.tsx b/src/pages/views/details/azureDetails/detailsTable.tsx index 6798a781d..ff7387c9b 100644 --- a/src/pages/views/details/azureDetails/detailsTable.tsx +++ b/src/pages/views/details/azureDetails/detailsTable.tsx @@ -214,7 +214,7 @@ class DetailsTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( diff --git a/src/pages/views/details/gcpDetails/detailsTable.tsx b/src/pages/views/details/gcpDetails/detailsTable.tsx index 8ce1fbca3..ed9d4387c 100644 --- a/src/pages/views/details/gcpDetails/detailsTable.tsx +++ b/src/pages/views/details/gcpDetails/detailsTable.tsx @@ -214,7 +214,7 @@ class DetailsTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( diff --git a/src/pages/views/details/ibmDetails/detailsTable.tsx b/src/pages/views/details/ibmDetails/detailsTable.tsx index a33d30c8a..f9668d298 100644 --- a/src/pages/views/details/ibmDetails/detailsTable.tsx +++ b/src/pages/views/details/ibmDetails/detailsTable.tsx @@ -214,7 +214,7 @@ class DetailsTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( diff --git a/src/pages/views/details/ocpDetails/detailsTable.tsx b/src/pages/views/details/ocpDetails/detailsTable.tsx index de6860c32..aa35f7719 100644 --- a/src/pages/views/details/ocpDetails/detailsTable.tsx +++ b/src/pages/views/details/ocpDetails/detailsTable.tsx @@ -248,7 +248,7 @@ class DetailsTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( diff --git a/src/pages/views/explorer/explorerTable.tsx b/src/pages/views/explorer/explorerTable.tsx index 6167101ca..bc63186d3 100644 --- a/src/pages/views/explorer/explorerTable.tsx +++ b/src/pages/views/explorer/explorerTable.tsx @@ -9,7 +9,7 @@ import { AwsReport } from 'api/reports/awsReports'; import { ComputedReportItemType } from 'components/charts/common/chartDatumUtils'; import { EmptyFilterState } from 'components/state/emptyFilterState/emptyFilterState'; import { format, getDate, getMonth } from 'date-fns'; -import { getGroupByOrg, getGroupByTagKey } from 'pages/views/utils/groupBy'; +import { getGroupByOrgValue, getGroupByTagKey } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -105,7 +105,7 @@ class ExplorerTableBase extends React.Component { } const groupById = getIdKeyForGroupBy(query.group_by); - const groupByOrg = getGroupByOrg(query); + const groupByOrg = getGroupByOrgValue(query); const groupByTagKey = getGroupByTagKey(query); const rows = []; @@ -251,7 +251,7 @@ class ExplorerTableBase extends React.Component { for (const val of Object.values(query.filter_by)) { if (val !== '*') { - return ; + return ; } } return ( From e43455f410eceee0668fc9383557574834f7c39b Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Mar 2021 03:28:08 -0500 Subject: [PATCH 177/200] Modified breakdown pages to apply filter_by using filter instead of group_by params --- .../details/awsBreakdown/awsBreakdown.tsx | 20 ++++++++++--------- .../details/azureBreakdown/azureBreakdown.tsx | 2 +- .../details/gcpBreakdown/gcpBreakdown.tsx | 3 +-- .../details/ibmBreakdown/ibmBreakdown.tsx | 3 +-- .../details/ocpBreakdown/ocpBreakdown.tsx | 2 +- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx index 1b0c46518..1a257b3c4 100644 --- a/src/pages/views/details/awsBreakdown/awsBreakdown.tsx +++ b/src/pages/views/details/awsBreakdown/awsBreakdown.tsx @@ -1,12 +1,12 @@ import { ProviderType } from 'api/providers'; import { AwsQuery, getQuery, parseQuery } from 'api/queries/awsQuery'; import { getProvidersQuery } from 'api/queries/providersQuery'; -import { breakdownDescKey, breakdownTitleKey, orgUnitIdKey, Query } from 'api/queries/query'; +import { breakdownDescKey, breakdownTitleKey, logicalAndPrefix, orgUnitIdKey, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { TagPathsType } from 'api/tags/tag'; import { AxiosError } from 'axios'; import BreakdownBase from 'pages/views/details/components/breakdown/breakdownBase'; -import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; +import { getGroupById, getGroupByOrgValue, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -45,21 +45,23 @@ const reportPathsType = ReportPathsType.aws; const mapStateToProps = createMapStateToProps((state, props) => { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const groupBy = getGroupById(query); - const groupByValue = getGroupByValue(query); - const groupByOrg = query && query.group_by && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; + const groupByOrgValue = getGroupByOrgValue(query); + const groupBy = groupByOrgValue ? orgUnitIdKey : getGroupById(query); + const groupByValue = groupByOrgValue ? groupByOrgValue : getGroupByValue(query); const newQuery: Query = { filter: { resolution: 'monthly', time_scope_units: 'month', time_scope_value: -1, - ...(query && query.filter && query.filter.account && { ['account']: query.filter.account }), }, - ...(query && query.filter_by && { filter_by: query.filter_by }), + filter_by: { + // Add filters here to apply logical OR/AND + ...(query && query.filter && query.filter.account && { [`${logicalAndPrefix}account`]: query.filter.account }), + ...(query && query.filter_by && query.filter_by), + }, group_by: { ...(groupBy && { [groupBy]: groupByValue }), - ...(groupByOrg && ({ [orgUnitIdKey]: groupByOrg } as any)), }, }; const queryString = getQuery(newQuery); @@ -77,7 +79,7 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.aws_details'), diff --git a/src/pages/views/details/azureBreakdown/azureBreakdown.tsx b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx index 1338f3c3a..d6abd2b85 100644 --- a/src/pages/views/details/azureBreakdown/azureBreakdown.tsx +++ b/src/pages/views/details/azureBreakdown/azureBreakdown.tsx @@ -74,7 +74,7 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.azure_details'), diff --git a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx index ab199ee99..a6ebb5d4b 100644 --- a/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx +++ b/src/pages/views/details/gcpBreakdown/gcpBreakdown.tsx @@ -53,7 +53,6 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.gcp_details'), diff --git a/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx index 107e8d5d6..1572ef629 100644 --- a/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx +++ b/src/pages/views/details/ibmBreakdown/ibmBreakdown.tsx @@ -53,7 +53,6 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.ibm_details'), diff --git a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx index a6c11da9f..a92b62af7 100644 --- a/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx +++ b/src/pages/views/details/ocpBreakdown/ocpBreakdown.tsx @@ -74,7 +74,7 @@ const mapStateToProps = createMapStateToProps, + costOverviewComponent: , description: query[breakdownDescKey], detailsURL, emptyStateTitle: props.t('navigation.ocp_details'), From c380f84d9845c5a08bef8787d0b63b50bf36e10f Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Mar 2021 03:28:33 -0500 Subject: [PATCH 178/200] Modified summary cards to apply filter_by using filter instead of group_by params --- .../components/summary/summaryCard.tsx | 37 +++++++++++++------ .../components/summary/summaryModal.tsx | 10 +---- .../components/summary/summaryModalView.tsx | 27 ++++++++------ 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index 260820f0a..98e2fbf26 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -9,11 +9,12 @@ import { Title, } from '@patternfly/react-core'; import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; -import { getQuery, groupByAndPrefix, orgUnitIdKey, Query } from 'api/queries/query'; +import { getQuery, logicalAndPrefix, orgUnitIdKey, parseQuery, Query } from 'api/queries/query'; import { OcpReport } from 'api/reports/ocpReports'; import { ReportPathsType, ReportType } from 'api/reports/report'; import { ReportSummaryItem, ReportSummaryItems } from 'components/reports/reportSummary'; import { SummaryModal } from 'pages/views/details/components/summary/summaryModal'; +import { getGroupById, getGroupByOrgValue, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -26,15 +27,15 @@ import { formatValue } from 'utils/formatValue'; import { styles } from './summaryCard.styles'; interface SummaryOwnProps { - groupBy: string; - groupByValue: string | number; - query?: Query; reportGroupBy?: string; reportPathsType: ReportPathsType; reportType: ReportType; } interface SummaryStateProps { + groupBy: string; + groupByValue: string | number; + query?: Query; queryString?: string; report?: OcpReport; reportFetchStatus?: FetchStatus; @@ -99,7 +100,7 @@ class SummaryBase extends React.Component { }; private getViewAll = () => { - const { groupBy, groupByValue, query, reportGroupBy, reportPathsType, t } = this.props; + const { groupBy, query, reportGroupBy, reportPathsType, t } = this.props; const { isBulletChartModalOpen } = this.state; const computedItems = this.getItems(); @@ -111,6 +112,8 @@ class SummaryBase extends React.Component { }); if (otherIndex !== -1) { + // Match page header description + const groupByValue = query && query.filter && query.filter.account ? query.filter.account : this.props.groupByValue; return (
); } } -const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, tagReportPathsType }) => { - const queryFromRoute = parseQuery(location.search); - const queryString = getQuery({ - filter: { - [groupBy]: filterBy, - resolution: 'monthly', - time_scope_units: 'month', - time_scope_value: -1, - ...(queryFromRoute.filter.account && { - account: queryFromRoute.filter.account, - }), - }, - }); - const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); - const tagReportFetchStatus = tagSelectors.selectTagFetchStatus( - state, - tagReportPathsType, - tagReportType, - queryString - ); - return { - filterBy, - queryString, - tagReport, - tagReportFetchStatus, - }; - } -); +const mapStateToProps = createMapStateToProps((state, { tagReportPathsType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupByOrgValue = getGroupByOrgValue(query); + const groupBy = groupByOrgValue ? orgUnitIdKey : getGroupById(query); + const groupByValue = groupByOrgValue ? groupByOrgValue : getGroupByValue(query); + + const newQuery: Query = { + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, + filter_by: { + // Add filters here to apply logical OR/AND + ...(groupBy && { [groupBy]: groupByValue }), // Note: Cannot use group_by with tags + ...(query && query.filter && query.filter.account && { [`${logicalAndPrefix}account`]: query.filter.account }), + ...(query && query.filter_by && query.filter_by), + }, + }; + const queryString = getQuery(newQuery); + + const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); + const tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, queryString); + + return { + groupBy, + groupByValue, + query, + queryString, + tagReport, + tagReportFetchStatus, + }; +}); const mapDispatchToProps: TagLinkDispatchProps = { fetchTag: tagActions.fetchTag, diff --git a/src/pages/views/details/components/tag/tagModal.tsx b/src/pages/views/details/components/tag/tagModal.tsx index 2df97084b..f07fdee51 100644 --- a/src/pages/views/details/components/tag/tagModal.tsx +++ b/src/pages/views/details/components/tag/tagModal.tsx @@ -1,6 +1,7 @@ import { Modal } from '@patternfly/react-core'; -import { getQuery, parseQuery, Query } from 'api/queries/query'; +import { getQuery, logicalAndPrefix, orgUnitIdKey, parseQuery, Query } from 'api/queries/query'; import { Tag, TagPathsType, TagType } from 'api/tags/tag'; +import { getGroupById, getGroupByOrgValue, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -10,14 +11,15 @@ import { tagActions, tagSelectors } from 'store/tags'; import { TagView } from './tagView'; interface TagModalOwnProps { - filterBy: string | number; - groupBy: string; isOpen: boolean; onClose(isOpen: boolean); tagReportPathsType: TagPathsType; } interface TagModalStateProps { + groupBy: string; + groupByValue: string | number; + query?: Query; queryString?: string; tagReport?: Tag; tagReportFetchStatus?: FetchStatus; @@ -50,8 +52,8 @@ class TagModalBase extends React.Component { } public shouldComponentUpdate(nextProps: TagModalProps) { - const { filterBy, isOpen } = this.props; - return nextProps.filterBy !== filterBy || nextProps.isOpen !== isOpen; + const { groupByValue, isOpen } = this.props; + return nextProps.groupByValue !== groupByValue || nextProps.isOpen !== isOpen; } private getTagValueCount = () => { @@ -73,7 +75,10 @@ class TagModalBase extends React.Component { }; public render() { - const { filterBy, groupBy, isOpen, tagReport, t } = this.props; + const { groupBy, isOpen, query, tagReport, t } = this.props; + + // Match page header description + const groupByValue = query && query.filter && query.filter.account ? query.filter.account : this.props.groupByValue; return ( { })} width={'50%'} > - + ); } } -const mapStateToProps = createMapStateToProps( - (state, { filterBy, groupBy, tagReportPathsType }) => { - const queryFromRoute = parseQuery(location.search); - const queryString = getQuery({ - filter: { - [groupBy]: filterBy, - resolution: 'monthly', - time_scope_units: 'month', - time_scope_value: -1, - ...(queryFromRoute.filter.account && { - account: queryFromRoute.filter.account, - }), - }, - }); - const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); - const tagReportFetchStatus = tagSelectors.selectTagFetchStatus( - state, - tagReportPathsType, - tagReportType, - queryString - ); - return { - queryString, - tagReport, - tagReportFetchStatus, - }; - } -); +const mapStateToProps = createMapStateToProps((state, { tagReportPathsType }) => { + const queryFromRoute = parseQuery(location.search); + const query = queryFromRoute; + const groupByOrgValue = getGroupByOrgValue(query); + const groupBy = groupByOrgValue ? orgUnitIdKey : getGroupById(query); + const groupByValue = groupByOrgValue ? groupByOrgValue : getGroupByValue(query); + + const newQuery: Query = { + filter: { + resolution: 'monthly', + time_scope_units: 'month', + time_scope_value: -1, + }, + filter_by: { + // Add filters here to apply logical OR/AND + ...(groupBy && { [groupBy]: groupByValue }), // Note: Cannot use group_by with tags + ...(query && query.filter && query.filter.account && { [`${logicalAndPrefix}account`]: query.filter.account }), + ...(query && query.filter_by && query.filter_by), + }, + }; + const queryString = getQuery(newQuery); + + const tagReport = tagSelectors.selectTag(state, tagReportPathsType, tagReportType, queryString); + const tagReportFetchStatus = tagSelectors.selectTagFetchStatus(state, tagReportPathsType, tagReportType, queryString); + + return { + groupBy, + groupByValue, + query, + queryString, + tagReport, + tagReportFetchStatus, + }; +}); const mapDispatchToProps: TagModalDispatchProps = { fetchTag: tagActions.fetchTag, diff --git a/src/pages/views/details/components/tag/tagView.tsx b/src/pages/views/details/components/tag/tagView.tsx index 1c21be071..aab360da5 100644 --- a/src/pages/views/details/components/tag/tagView.tsx +++ b/src/pages/views/details/components/tag/tagView.tsx @@ -7,8 +7,8 @@ import { connect } from 'react-redux'; import { styles } from './tag.styles'; interface TagViewOwnProps { - filterBy: string | number; groupBy: string; + groupByValue: string | number; tagReport?: Tag; } @@ -44,7 +44,7 @@ class TagViewBase extends React.Component { }; public render() { - const { filterBy, groupBy, t } = this.props; + const { groupBy, groupByValue, t } = this.props; const dataListItems = this.getDataListItems(); return ( @@ -53,7 +53,7 @@ class TagViewBase extends React.Component { {t(`group_by.values.${groupBy}`)}
- {filterBy} + {groupByValue}
From 800bafa6e9ad9b390966f08789cadfd23d4f909c Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Mar 2021 03:30:13 -0500 Subject: [PATCH 180/200] Modified historical charts to apply filter_by using filter instead of group_by params https://github.com/project-koku/koku-ui/pull/1911 --- .../historicalDataCostChart.tsx | 22 ++++----- .../historicalDataTrendChart.tsx | 47 ++++++++----------- .../historicalDataUsageChart.tsx | 36 ++++++++------ 3 files changed, 52 insertions(+), 53 deletions(-) diff --git a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx index b13017516..528405db7 100644 --- a/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataCostChart.tsx @@ -125,29 +125,27 @@ const mapStateToProps = createMapStateToProps { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; - const groupBy = getGroupById(query); - const groupByValue = getGroupByValue(query); - const groupByOrg = query && query.group_by[orgUnitIdKey] ? query.group_by[orgUnitIdKey] : undefined; - - // instance-types and storage APIs must filter org units - const useFilter = reportType === ReportType.instanceType || reportType === ReportType.storage; - + const groupByOrgValue = getGroupByOrgValue(query); + const groupBy = groupByOrgValue ? orgUnitIdKey : getGroupById(query); + const groupByValue = groupByOrgValue ? groupByOrgValue : getGroupByValue(query); + + const baseQuery: Query = { + filter_by: { + // Add filters here to apply logical OR/AND + ...(query && query.filter && query.filter.account && { [`${logicalAndPrefix}account`]: query.filter.account }), + ...(query && query.filter_by && query.filter_by), + }, + group_by: { + ...(groupBy && { [groupBy]: groupByValue }), + }, + }; const currentQuery: Query = { + ...baseQuery, filter: { + resolution: 'daily', time_scope_units: 'month', time_scope_value: -1, - resolution: 'daily', - limit: 3, - ...(query && query.filter && query.filter.account && { account: query.filter.account }), - ...(groupByOrg && useFilter && ({ [orgUnitIdKey]: groupByOrg } as any)), - }, - ...(query && query.filter_by && { filter_by: query.filter_by }), - group_by: { - ...(groupBy && { [groupBy]: groupByValue }), - ...(groupByOrg && !useFilter && ({ [orgUnitIdKey]: groupByOrg } as any)), }, }; const currentQueryString = getQuery(currentQuery); const previousQuery: Query = { + ...baseQuery, filter: { + resolution: 'daily', time_scope_units: 'month', time_scope_value: -2, - resolution: 'daily', - limit: 3, - ...(query && query.filter && query.filter.account && { account: query.filter.account }), - ...(groupByOrg && useFilter && ({ [orgUnitIdKey]: groupByOrg } as any)), - }, - ...(query && query.filter_by && { filter_by: query.filter_by }), - group_by: { - ...(groupBy && { [groupBy]: groupByValue }), - ...(groupByOrg && !useFilter && ({ [orgUnitIdKey]: groupByOrg } as any)), }, }; const previousQueryString = getQuery(previousQuery); diff --git a/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx b/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx index 559c39768..1738238c3 100644 --- a/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx +++ b/src/pages/views/details/components/historicalData/historicalDataUsageChart.tsx @@ -1,9 +1,9 @@ import Skeleton from '@redhat-cloud-services/frontend-components/Skeleton'; -import { getQuery, parseQuery, Query } from 'api/queries/query'; +import { getQuery, logicalAndPrefix, orgUnitIdKey, parseQuery, Query } from 'api/queries/query'; import { Report, ReportPathsType, ReportType } from 'api/reports/report'; import { ChartType, transformReport } from 'components/charts/common/chartDatumUtils'; import { HistoricalUsageChart } from 'components/charts/historicalUsageChart'; -import { getGroupById, getGroupByValue } from 'pages/views/utils/groupBy'; +import { getGroupById, getGroupByOrgValue, getGroupByValue } from 'pages/views/utils/groupBy'; import React from 'react'; import { WithTranslation, withTranslation } from 'react-i18next'; import { connect } from 'react-redux'; @@ -119,32 +119,40 @@ const mapStateToProps = createMapStateToProps { const queryFromRoute = parseQuery(location.search); const query = queryFromRoute; + const groupByOrgValue = getGroupByOrgValue(query); const groupBy = getGroupById(query); const groupByValue = getGroupByValue(query); + // instance-types and storage APIs must filter org units + const useFilter = reportType === ReportType.instanceType || reportType === ReportType.storage; + + const baseQuery: Query = { + filter_by: { + // Add filters here to apply logical OR/AND + ...(groupByOrgValue && useFilter && { [`${logicalAndPrefix}${orgUnitIdKey}`]: groupByOrgValue }), + ...(query && query.filter && query.filter.account && { [`${logicalAndPrefix}account`]: query.filter.account }), + ...(query && query.filter_by && query.filter_by), + }, + group_by: { + ...(groupByOrgValue && !useFilter && { [orgUnitIdKey]: groupByOrgValue }), + ...(groupBy && !groupByOrgValue && { [groupBy]: groupByValue }), + }, + }; const currentQuery: Query = { + ...baseQuery, filter: { + resolution: 'daily', time_scope_units: 'month', time_scope_value: -1, - resolution: 'daily', - limit: 3, - }, - ...(query && query.filter_by && { filter_by: query.filter_by }), - group_by: { - ...(groupBy && { [groupBy]: groupByValue }), }, }; const currentQueryString = getQuery(currentQuery); const previousQuery: Query = { + ...baseQuery, filter: { + resolution: 'daily', time_scope_units: 'month', time_scope_value: -2, - resolution: 'daily', - limit: 3, - }, - ...(query && query.filter_by && { filter_by: query.filter_by }), - group_by: { - ...(groupBy && { [groupBy]: groupByValue }), }, }; const previousQueryString = getQuery(previousQuery); From 4a38f3fd09036f2d9d085658e65494601f9548f0 Mon Sep 17 00:00:00 2001 From: Dan Labrecque Date: Thu, 11 Mar 2021 04:03:59 -0500 Subject: [PATCH 181/200] Formatting fix for linter --- src/pages/views/details/components/summary/summaryCard.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/views/details/components/summary/summaryCard.tsx b/src/pages/views/details/components/summary/summaryCard.tsx index 98e2fbf26..0c6e00dc9 100644 --- a/src/pages/views/details/components/summary/summaryCard.tsx +++ b/src/pages/views/details/components/summary/summaryCard.tsx @@ -113,7 +113,8 @@ class SummaryBase extends React.Component { if (otherIndex !== -1) { // Match page header description - const groupByValue = query && query.filter && query.filter.account ? query.filter.account : this.props.groupByValue; + const groupByValue = + query && query.filter && query.filter.account ? query.filter.account : this.props.groupByValue; return (