diff --git a/db/migration/1737580227406-RetainMultiEntitySelectionForChartsSplitByMetric.ts b/db/migration/1737580227406-RetainMultiEntitySelectionForChartsSplitByMetric.ts new file mode 100644 index 0000000000..0038e1ed57 --- /dev/null +++ b/db/migration/1737580227406-RetainMultiEntitySelectionForChartsSplitByMetric.ts @@ -0,0 +1,48 @@ +import { MigrationInterface, QueryRunner } from "typeorm" + +// As part of the migration, we'll update all charts that are split by metric +// and have a 'change-country' setting to use the 'add-country' setting instead. +// These charts should be excluded from the migration since the 'change-country' +// is more appropriate for them. +const slugs = [ + "cancer-death-rates-by-age", + "neonatal-deaths-by-cause", + "dealing-with-anxiety-depression-approaches", + "mental-illness-estimated-cases", + "deaths-from-cardiovascular-disease-type", + "country-level-monthly-temperature-anomalies", + "summer-temperature-anomalies", + "winter-temperature-anomalies", + "autumn-temperature-anomalies", + "spring-temperature-anomalies", + "5-year-survival-rate-of-cancers-among-female-patients-in-england", +] + +export class RetainMultiEntitySelectionForChartsSplitByMetric1737580227406 + implements MigrationInterface +{ + public async up(queryRunner: QueryRunner): Promise { + // Charts faceted by metric used to ignore the 'change-country' setting + // and offer multi-entity selection always. The code change that comes + // with this migration makes it so that the 'change-country' setting + // is respected. This migration updates all existing charts that relied + // on the old behavior to use the 'add-country' setting explicitly. + await queryRunner.query( + ` + UPDATE chart_configs + SET + patch = JSON_SET(patch, '$.addCountryMode', 'add-country'), + full = JSON_SET(full, '$.addCountryMode', 'add-country') + WHERE + full ->> '$.addCountryMode' = 'change-country' + AND full ->> '$.selectedFacetStrategy' = 'metric' + AND slug NOT IN (?); + `, + [slugs] + ) + } + + public async down(): Promise { + // no-op + } +} diff --git a/packages/@ourworldindata/grapher/src/core/Grapher.tsx b/packages/@ourworldindata/grapher/src/core/Grapher.tsx index ed5a9b2c2b..704dfb3185 100644 --- a/packages/@ourworldindata/grapher/src/core/Grapher.tsx +++ b/packages/@ourworldindata/grapher/src/core/Grapher.tsx @@ -3689,19 +3689,15 @@ export class Grapher @computed get canSelectMultipleEntities(): boolean { if (this.numSelectableEntityNames < 2) return false + if (this.selection.numSelectedEntities > 1) return true if (this.addCountryMode === EntitySelectionMode.MultipleEntities) return true + // if the chart is currently faceted by entity, then use multi-entity + // selection, even if the author specified single-entity-selection if ( - // we force multi-entity selection mode when the chart is faceted this.addCountryMode === EntitySelectionMode.SingleEntity && - this.facetStrategy !== FacetStrategy.none && - // unless the author explicitly configured the chart to be split - // by metric and hid the facet control - !( - this.facetStrategy === FacetStrategy.metric && - this.hideFacetControl - ) + this.facetStrategy === FacetStrategy.entity ) return true