diff --git a/app/configurator/configurator-state.spec.tsx b/app/configurator/configurator-state.spec.tsx index 2a3fec9ad3..a3b942cbd4 100644 --- a/app/configurator/configurator-state.spec.tsx +++ b/app/configurator/configurator-state.spec.tsx @@ -86,7 +86,9 @@ afterEach(() => { describe("initChartStateFromChart", () => { const setup = ({ chartConfig }: { chartConfig: object }) => { - mockedApi.fetchChartConfig.mockResolvedValue(chartConfig); + mockedApi.fetchChartConfig.mockResolvedValue( + chartConfig as ReturnType + ); }; it("should fetch work if existing chart is valid", async () => { setup({ diff --git a/app/utils/chart-config/versioning.spec.ts b/app/utils/chart-config/versioning.spec.ts index 16cc697f5c..accecb681f 100644 --- a/app/utils/chart-config/versioning.spec.ts +++ b/app/utils/chart-config/versioning.spec.ts @@ -1,4 +1,4 @@ -import { decodeChartConfig } from "@/configurator/config-types"; +import { decodeChartConfig, MapConfig } from "@/configurator/config-types"; import { migrateChartConfig } from "./versioning"; @@ -56,17 +56,19 @@ describe("config migrations", () => { const migratedOldConfig = migrateChartConfig(decodedConfig, { toVersion: "1.0.0", - }); + }) as MapConfig; expect(migratedOldConfig.version).toEqual("1.0.0"); - expect(migratedOldConfig.fields.symbolLayer.show).toEqual(false); + const symbolLayer = migratedOldConfig.fields.symbolLayer!; + // @ts-ignore - show does not existing in the newer version of the types + expect(symbolLayer.show).toEqual(false); // Should migrate "GeoCoordinatesDimensionIri" to iri defined in Area Layer. - expect(migratedOldConfig.fields.symbolLayer.componentIri).toEqual( + expect(symbolLayer.componentIri).toEqual( oldConfig.fields.areaLayer.componentIri ); - expect(migratedOldConfig.fields.symbolLayer.measureIri).toEqual( + expect(symbolLayer.measureIri).toEqual( oldConfig.fields.areaLayer.measureIri ); - expect(migratedOldConfig.fields.symbolLayer.color).toEqual("#1f77b4"); + expect(symbolLayer.color).toEqual("#1f77b4"); }); it("should migrate to initial config from migrated config for minor version changes", () => { diff --git a/app/utils/chart-config/versioning.ts b/app/utils/chart-config/versioning.ts index 9f0230ab88..d26d866651 100644 --- a/app/utils/chart-config/versioning.ts +++ b/app/utils/chart-config/versioning.ts @@ -1,5 +1,7 @@ import produce from "immer"; +import { ChartConfig } from "@/configurator"; + export const CHART_CONFIG_VERSION = "1.3.0"; type Migration = { @@ -484,25 +486,33 @@ export const migrateChartConfig = ( fromVersion, toVersion = CHART_CONFIG_VERSION, }: { fromVersion?: string; toVersion?: string } = {} -): any => { - const fromVersionFinal = fromVersion || config.version || "1.0.0"; - const direction = upOrDown(fromVersionFinal, toVersion); - - if (direction === "same") { - return config; - } +): ChartConfig => { + const _migrateChartConfig = ( + config: any, + { + fromVersion, + toVersion = CHART_CONFIG_VERSION, + }: { fromVersion?: string; toVersion?: string } = {} + ): any => { + const fromVersionFinal = fromVersion || config.version || "1.0.0"; + const direction = upOrDown(fromVersionFinal, toVersion); + + if (direction === "same") { + return config; + } - const currentMigration = migrations.find( - (migration) => - migration[direction === "up" ? "from" : "to"] === fromVersionFinal - ); + const currentMigration = migrations.find( + (migration) => + migration[direction === "up" ? "from" : "to"] === fromVersionFinal + ); - if (currentMigration) { - const newConfig = currentMigration[direction](config); - return migrateChartConfig(newConfig, { fromVersion, toVersion }); - } + if (currentMigration) { + const newConfig = currentMigration[direction](config); + return _migrateChartConfig(newConfig, { fromVersion, toVersion }); + } + }; - return config; + return _migrateChartConfig(config, { fromVersion, toVersion }); }; const upOrDown = (