fix: [map chart widget] create unique instance of map loader per widget to avoi… (#31822)

…d cross cancelling loader calls

## Description
Create an instance of map loader per widget to avoid one widget
cancelling calls of another widget.


Fixes https://github.com/appsmithorg/appsmith/issues/31819
## Automation

/ok-to-test tags="@tag.Maps"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!IMPORTANT]  
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/8292557044>
> Commit: `cd13c989d8b911a064629bf1d8c683e09927d3b2`
> Cypress dashboard url: <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=8292557044&attempt=1"
target="_blank">Click here!</a>
> All cypress tests have passed 🎉🎉🎉

<!-- end of auto-generated comment: Cypress test results  -->










<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Enhanced the Map Widget to load maps more efficiently with the
introduction of `loadMapGenerator`.
- **Tests**
- Added Cypress tests to ensure the Map Widget loads correctly on the
canvas.
- **Refactor**
- Updated the Map Widget loading process for better performance and
flexibility.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
balajisoundar 2024-03-15 13:17:11 +05:30 committed by GitHub
parent fbfbdd34d6
commit e20cf7d2b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 3 deletions

View File

@ -0,0 +1,23 @@
/// <reference types="Cypress" />
import {
agHelper,
entityExplorer,
draggableWidgets,
} from "../../../../../support/Objects/ObjectsCore";
describe(
"Map chart Widget",
{ tags: ["@tag.Widget", "@tag.Maps"] },
function () {
it("1.Drag two Map Widget and Verify the Map Widget is loading", () => {
//Add map and verify
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MAPCHART, 200, 200);
entityExplorer.DragDropWidgetNVerify(draggableWidgets.MAPCHART, 600, 200);
agHelper.RefreshPage();
agHelper.AssertElementLength(
".t--draggable-mapchartwidget svg text:contains('Global Population')",
2,
);
});
},
);

View File

@ -2,7 +2,7 @@ import React, { useEffect, useMemo, useRef, useState } from "react";
import styled from "styled-components";
import type { MapColorObject, MapTypes } from "../constants";
import type { MapData } from "./types";
import { getChartOption, loadMap } from "./utilities";
import { getChartOption, loadMapGenerator } from "./utilities";
import * as echarts from "echarts";
import countryDetails from "./countryDetails";
import clsx from "clsx";
@ -27,6 +27,8 @@ const MapChartContainer = styled.div<{
export default function EchartComponent(props: MapChartComponentProps) {
const [isLoading, setIsLoading] = useState(false);
const loadMap = useMemo(loadMapGenerator, []);
const [key, setKey] = useState(0);
const { caption, colorRange, data, onDataPointClick, showLabels, type } =

View File

@ -43,7 +43,7 @@ export function getSpecialAreas(map: MapTypes): GeoSpecialAreas {
/*
* Function to load the map geojson file and register it with echarts
*/
export const loadMap = (() => {
export const loadMapGenerator = () => {
let abortController: AbortController | null = null;
return async (type: MapTypes) => {
@ -85,7 +85,7 @@ export const loadMap = (() => {
return Promise.resolve();
}
};
})();
};
function getProjection(type: string) {
switch (type) {