PromucFlow_constructor/app/client/src/widgets/ChartWidget/component/index.tsx

380 lines
11 KiB
TypeScript
Raw Normal View History

import { get } from "lodash";
2020-03-13 12:06:41 +00:00
import React from "react";
import styled from "styled-components";
import * as echarts from "echarts";
feat: App Theming (#9714) * fix style bugs * fix select styles * test: fix font size issue for cypress tests * incorporate ashit feedback * test: addresed review comments for cypress tests * add analytics events * height issue in view mode * incorporate code review feedbacks * incorporate code review feedbacks * refactor: addressed review comments; removed border radius and box shadow for text widget; Updated migrations * feat: Makes shadow and radius controls keyboard accessible (#11547) * makes shadow and radius controls keyboard accessible * removes unused imports * moves options out of render method * fix: changed the misnomer background property name to the relevant property name * fix: border radius issue for the map widget * address qa bugs * address qa bugs * fix ux of theming pane when widget is selected * fix: * added backgroundColor to the video widget * restricted pop-over border radius to 0.375rem * added box shadow for the input group for select widget * fix: added delete icon in the delete theme modal * address qa bugs * change checkbox column size in config * add js convertible to button color * remove unused imports * test: fixed jest tests * fix primary color typo * fix: migrations for the theming * fix: * Removed background color from MultiTreeSelect and TreeSelect component. * grouped button's menu button pop over border radius restricting to 0.375rem. * test: updated Dsl migration UT * address qa bugs * address qa bugs * fix: address qa comments * address qa bugs * fix: * migration issue; * unit test cases; * fix rating widget scroll issue * fix youtube video border radius bug * fix select widget * fix select widgets styles * address qa bugs * merge conflicts * makes the reset button keyboard accessible (#12134) * -resolved merge conflicts * address qa bugs * fix: labelTextSize migration fixes * refactor: * made changes to the fontSizeUtils function * fixed the issue related to unit tests * fix button group widget * remove unused imports * fix: fixed the text size migration for the table widget * refactor: addressed review comments for the table widget theming migration * fix button group widget * add init calls for view mode * json form init theme changes * fix: added migration for boxShadow, borderRadius and textSizes for table widget * fix broken fields * test: fixed unit tests * wip * inconsistancy fixes and schemaItem update in updateHook/fieldConfiguration * feat: init json form migration theming * json form primaryColor -> accentColor * update table widget * update table widget * object field label styling * fix: migration related to the JSON form * fix: fixed labelTextSize migration for JSON form nested widgets * property control nested stylesheet lookup * JSONForm label styles form array items * show label for checkbox field array item * fix button group widget * wip * refactor: addressed table widget review comments * refactor: addressed ashit review comments; * added childStylesheet for widgets * feat: Keyboard navigable Color Picker control (#11797) * Makes ColorPicker keyboard accessible * seperate out keyboard and mouse interactions * fix issue with not focusing back to input * Adds test for Color picker * chore: added comment for the boxShadow property * fix: * added unit test cases for the widget and property utils * resolved warning messages * wip * theme config update * fix merge conflicts * refactor: moved theming migration inside the migrations folder * fix qa bugs * fix jest test * fix: unit test cases * fix table column creation logic * refactor: addressed review comments for migrations * fix: Overriding margin and padding for custom render in the dropdown component (#12875) * * fix for custom render padding and margin in ADS dropdown * * fix for removing padding from normal render options * refactor: moved the boxShadow condition to the variable * fix qa bugs * fix: migration QA callouts for audio recorder widget * refactor: added updated comments for boxShadow migration for table widget * fix theme binfings for JSONForm fields under Object * fix table widget theming bug * fix: addressed code review comments * fix: unit test cases * fix: qa migration callouts * fix table widget theming bug * fix JSONForm currency input dropdown not submit form * Added new tests - AppThemingSpec * fix qa bugs * fix unit test * fix JSONForm cellBorderWidth to have default value post migration * fix unit test * fix qa bugs * remove unused imports * fix qa bugs * fix JSONForm input height issue * fix qa bugs * Updating Theming spec * * dropdown color fixes (#13249) * fix caching issue ; * Fixed Theming tests * fix tests * fix tab widget tests * fix: json form children level migration issue * fix table widget tests * Updated test * updated tests * updated test * updated tests * updated tests * updated pageload * fix cypress tests * remove cypress created files * fix color picker issues * Failure fixes * Fixed some more tests * fix: cypress test failures * fix tests * remove consoles * fix table tests * fix qa bugs * updating snapshots for AppPageLayout_spec as per new UI * fix rating widget bug * fix qa bugs * fix: * cypress failing tests * Migration QA callouts * Removed unused imports * update constract check algo * fix color contrast issue * fix: cypress failure test cases * update font sizes labels * fix regression bugs * fix: * JSON form labelTextSize issue fix * Updated comment for the fontSizeUtility function * migrations issues related to table widget borderRadius and boxShadow * fix: default labelTextSize issue for the Input and Select families * fix regression bugs * fix regression bugs * PassingParams spec - added wait time * fix: font family default value issue on JS toggle * fix js toggle issue in text widget * fix tests * fix tests * fix tests * fix cypress tests * fix regression bugs * fix regression bugs * fix: * refactored table widget migration function as per review comments, * added default value to the widget * fix: failing unit test cases * fix theming spec * fix cypress tests * test: fixed failed cypress test * incorporate ashit feedback * fix cypress tests * fix: addressed review comments * comment out table cypress test * fix merge conflicts * comment out color picker tests Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local> Co-authored-by: keyurparalkar <keyur@appsmith.com> Co-authored-by: Aswath K <aswath@appsmith.com> Co-authored-by: Nayan <nayan@appsmith.com> Co-authored-by: Ashit Rath <ashit@appsmith.com> Co-authored-by: balajisoundar <balaji@appsmith.com> Co-authored-by: albinAppsmith <87797149+albinAppsmith@users.noreply.github.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: apple <nandan@thinkify.io> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2022-05-04 09:45:57 +00:00
import { invisible } from "constants/DefaultTheme";
import { getAppsmithConfigs } from "@appsmith/configs";
chore: upgrade to prettier v2 + enforce import types (#21013)Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com> ## Description This PR upgrades Prettier to v2 + enforces TypeScript’s [`import type`](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export) syntax where applicable. It’s submitted as a separate PR so we can merge it easily. As a part of this PR, we reformat the codebase heavily: - add `import type` everywhere where it’s required, and - re-format the code to account for Prettier 2’s breaking changes: https://prettier.io/blog/2020/03/21/2.0.0.html#breaking-changes This PR is submitted against `release` to make sure all new code by team members will adhere to new formatting standards, and we’ll have fewer conflicts when merging `bundle-optimizations` into `release`. (I’ll merge `release` back into `bundle-optimizations` once this PR is merged.) ### Why is this needed? This PR is needed because, for the Lodash optimization from https://github.com/appsmithorg/appsmith/commit/7cbb12af886621256224be0c93e6a465dd710ad3, we need to use `import type`. Otherwise, `babel-plugin-lodash` complains that `LoDashStatic` is not a lodash function. However, just using `import type` in the current codebase will give you this: <img width="962" alt="Screenshot 2023-03-08 at 17 45 59" src="https://user-images.githubusercontent.com/2953267/223775744-407afa0c-e8b9-44a1-90f9-b879348da57f.png"> That’s because Prettier 1 can’t parse `import type` at all. To parse it, we need to upgrade to Prettier 2. ### Why enforce `import type`? Apart from just enabling `import type` support, this PR enforces specifying `import type` everywhere it’s needed. (Developers will get immediate TypeScript and ESLint errors when they forget to do so.) I’m doing this because I believe `import type` improves DX and makes refactorings easier. Let’s say you had a few imports like below. Can you tell which of these imports will increase the bundle size? (Tip: it’s not all of them!) ```ts // app/client/src/workers/Linting/utils.ts import { Position } from "codemirror"; import { LintError as JSHintError, LintOptions } from "jshint"; import { get, isEmpty, isNumber, keys, last, set } from "lodash"; ``` It’s pretty hard, right? What about now? ```ts // app/client/src/workers/Linting/utils.ts import type { Position } from "codemirror"; import type { LintError as JSHintError, LintOptions } from "jshint"; import { get, isEmpty, isNumber, keys, last, set } from "lodash"; ``` Now, it’s clear that only `lodash` will be bundled. This helps developers to see which imports are problematic, but it _also_ helps with refactorings. Now, if you want to see where `codemirror` is bundled, you can just grep for `import \{.*\} from "codemirror"` – and you won’t get any type-only imports. This also helps (some) bundlers. Upon transpiling, TypeScript erases type-only imports completely. In some environment (not ours), this makes the bundle smaller, as the bundler doesn’t need to bundle type-only imports anymore. ## Type of change - Chore (housekeeping or task changes that don't impact user perception) ## How Has This Been Tested? This was tested to not break the build. ### Test Plan > Add Testsmith test cases links that relate to this PR ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [x] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [ ] Test plan has been approved by relevant developers - [ ] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test --------- Co-authored-by: Satish Gandham <hello@satishgandham.com> Co-authored-by: Satish Gandham <satish.iitg@gmail.com>
2023-03-16 11:41:47 +00:00
import type {
ChartType,
CustomFusionChartConfig,
AllChartData,
ChartSelectedDataPoint,
LabelOrientation,
} from "../constants";
import log from "loglevel";
import equal from "fast-deep-equal/es6";
import type { WidgetPositionProps } from "widgets/BaseWidget";
import { ChartErrorComponent } from "./ChartErrorComponent";
import { EChartsConfigurationBuilder } from "./EChartsConfigurationBuilder";
import { EChartsDatasetBuilder } from "./EChartsDatasetBuilder";
// Leaving this require here. Ref: https://stackoverflow.com/questions/41292559/could-not-find-a-declaration-file-for-module-module-name-path-to-module-nam/42505940#42505940
// FusionCharts comes with its own typings so there is no need to separately import them. But an import from fusioncharts/core still requires a declaration file.
const FusionCharts = require("fusioncharts");
const plugins: Record<string, any> = {
Charts: require("fusioncharts/fusioncharts.charts"),
FusionTheme: require("fusioncharts/themes/fusioncharts.theme.fusion"),
Widgets: require("fusioncharts/fusioncharts.widgets"),
ZoomScatter: require("fusioncharts/fusioncharts.zoomscatter"),
ZoomLine: require("fusioncharts/fusioncharts.zoomline"),
PowerCharts: require("fusioncharts/fusioncharts.powercharts"),
TimeSeries: require("fusioncharts/fusioncharts.timeseries"),
OverlappedColumn: require("fusioncharts/fusioncharts.overlappedcolumn2d"),
OverlappedBar: require("fusioncharts/fusioncharts.overlappedbar2d"),
TreeMap: require("fusioncharts/fusioncharts.treemap"),
Maps: require("fusioncharts/fusioncharts.maps"),
Gantt: require("fusioncharts/fusioncharts.gantt"),
VML: require("fusioncharts/fusioncharts.vml"),
};
// Enable all plugins.
// This is needed to support custom chart configs
Object.keys(plugins).forEach((key: string) =>
(plugins[key] as any)(FusionCharts),
);
const { fusioncharts } = getAppsmithConfigs();
FusionCharts.options.license({
key: fusioncharts.licenseKey,
creditLabel: false,
});
2020-03-13 12:06:41 +00:00
export interface ChartComponentState {
eChartsError: Error | undefined;
chartType: ChartType;
}
export interface ChartComponentProps extends WidgetPositionProps {
allowScroll: boolean;
chartData: AllChartData;
2020-03-13 12:06:41 +00:00
chartName: string;
chartType: ChartType;
customFusionChartConfig: CustomFusionChartConfig;
fix: clickable containers in the List widget (#21987) ## Description This fix primarily targets the List Widget. It enables the List Widget Containers/Items to be selected when clicking on an empty space or a plain widget/element. For instance, if a Text widget is clicked, the onItemClick action on the list container is triggered. However, if the Text widget contains a clickable link, only the link is activated, and the OnClick event doesn't propagate to the List Widget Container. The triggeredItems functionality remains unaffected. Fixes #21409 ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Cypress ### Test Plan > https://github.com/appsmithorg/TestSmith/issues/2372 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-14 13:55:44 +00:00
hasOnDataPointClick: boolean;
2020-03-13 12:06:41 +00:00
isVisible?: boolean;
isLoading: boolean;
setAdaptiveYMin: boolean;
labelOrientation?: LabelOrientation;
onDataPointClick: (selectedDataPoint: ChartSelectedDataPoint) => void;
widgetId: string;
xAxisName: string;
yAxisName: string;
feat: App Theming (#9714) * fix style bugs * fix select styles * test: fix font size issue for cypress tests * incorporate ashit feedback * test: addresed review comments for cypress tests * add analytics events * height issue in view mode * incorporate code review feedbacks * incorporate code review feedbacks * refactor: addressed review comments; removed border radius and box shadow for text widget; Updated migrations * feat: Makes shadow and radius controls keyboard accessible (#11547) * makes shadow and radius controls keyboard accessible * removes unused imports * moves options out of render method * fix: changed the misnomer background property name to the relevant property name * fix: border radius issue for the map widget * address qa bugs * address qa bugs * fix ux of theming pane when widget is selected * fix: * added backgroundColor to the video widget * restricted pop-over border radius to 0.375rem * added box shadow for the input group for select widget * fix: added delete icon in the delete theme modal * address qa bugs * change checkbox column size in config * add js convertible to button color * remove unused imports * test: fixed jest tests * fix primary color typo * fix: migrations for the theming * fix: * Removed background color from MultiTreeSelect and TreeSelect component. * grouped button's menu button pop over border radius restricting to 0.375rem. * test: updated Dsl migration UT * address qa bugs * address qa bugs * fix: address qa comments * address qa bugs * fix: * migration issue; * unit test cases; * fix rating widget scroll issue * fix youtube video border radius bug * fix select widget * fix select widgets styles * address qa bugs * merge conflicts * makes the reset button keyboard accessible (#12134) * -resolved merge conflicts * address qa bugs * fix: labelTextSize migration fixes * refactor: * made changes to the fontSizeUtils function * fixed the issue related to unit tests * fix button group widget * remove unused imports * fix: fixed the text size migration for the table widget * refactor: addressed review comments for the table widget theming migration * fix button group widget * add init calls for view mode * json form init theme changes * fix: added migration for boxShadow, borderRadius and textSizes for table widget * fix broken fields * test: fixed unit tests * wip * inconsistancy fixes and schemaItem update in updateHook/fieldConfiguration * feat: init json form migration theming * json form primaryColor -> accentColor * update table widget * update table widget * object field label styling * fix: migration related to the JSON form * fix: fixed labelTextSize migration for JSON form nested widgets * property control nested stylesheet lookup * JSONForm label styles form array items * show label for checkbox field array item * fix button group widget * wip * refactor: addressed table widget review comments * refactor: addressed ashit review comments; * added childStylesheet for widgets * feat: Keyboard navigable Color Picker control (#11797) * Makes ColorPicker keyboard accessible * seperate out keyboard and mouse interactions * fix issue with not focusing back to input * Adds test for Color picker * chore: added comment for the boxShadow property * fix: * added unit test cases for the widget and property utils * resolved warning messages * wip * theme config update * fix merge conflicts * refactor: moved theming migration inside the migrations folder * fix qa bugs * fix jest test * fix: unit test cases * fix table column creation logic * refactor: addressed review comments for migrations * fix: Overriding margin and padding for custom render in the dropdown component (#12875) * * fix for custom render padding and margin in ADS dropdown * * fix for removing padding from normal render options * refactor: moved the boxShadow condition to the variable * fix qa bugs * fix: migration QA callouts for audio recorder widget * refactor: added updated comments for boxShadow migration for table widget * fix theme binfings for JSONForm fields under Object * fix table widget theming bug * fix: addressed code review comments * fix: unit test cases * fix: qa migration callouts * fix table widget theming bug * fix JSONForm currency input dropdown not submit form * Added new tests - AppThemingSpec * fix qa bugs * fix unit test * fix JSONForm cellBorderWidth to have default value post migration * fix unit test * fix qa bugs * remove unused imports * fix qa bugs * fix JSONForm input height issue * fix qa bugs * Updating Theming spec * * dropdown color fixes (#13249) * fix caching issue ; * Fixed Theming tests * fix tests * fix tab widget tests * fix: json form children level migration issue * fix table widget tests * Updated test * updated tests * updated test * updated tests * updated tests * updated pageload * fix cypress tests * remove cypress created files * fix color picker issues * Failure fixes * Fixed some more tests * fix: cypress test failures * fix tests * remove consoles * fix table tests * fix qa bugs * updating snapshots for AppPageLayout_spec as per new UI * fix rating widget bug * fix qa bugs * fix: * cypress failing tests * Migration QA callouts * Removed unused imports * update constract check algo * fix color contrast issue * fix: cypress failure test cases * update font sizes labels * fix regression bugs * fix: * JSON form labelTextSize issue fix * Updated comment for the fontSizeUtility function * migrations issues related to table widget borderRadius and boxShadow * fix: default labelTextSize issue for the Input and Select families * fix regression bugs * fix regression bugs * PassingParams spec - added wait time * fix: font family default value issue on JS toggle * fix js toggle issue in text widget * fix tests * fix tests * fix tests * fix cypress tests * fix regression bugs * fix regression bugs * fix: * refactored table widget migration function as per review comments, * added default value to the widget * fix: failing unit test cases * fix theming spec * fix cypress tests * test: fixed failed cypress test * incorporate ashit feedback * fix cypress tests * fix: addressed review comments * comment out table cypress test * fix merge conflicts * comment out color picker tests Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local> Co-authored-by: keyurparalkar <keyur@appsmith.com> Co-authored-by: Aswath K <aswath@appsmith.com> Co-authored-by: Nayan <nayan@appsmith.com> Co-authored-by: Ashit Rath <ashit@appsmith.com> Co-authored-by: balajisoundar <balaji@appsmith.com> Co-authored-by: albinAppsmith <87797149+albinAppsmith@users.noreply.github.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: apple <nandan@thinkify.io> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2022-05-04 09:45:57 +00:00
borderRadius: string;
boxShadow?: string;
primaryColor?: string;
fontFamily?: string;
dimensions: {
componentWidth: number;
componentHeight: number;
};
2020-03-13 12:06:41 +00:00
}
const ChartsContainer = styled.div`
position: relative;
height: 100%;
width: 100%;
`;
const CanvasContainer = styled.div<
fix: clickable containers in the List widget (#21987) ## Description This fix primarily targets the List Widget. It enables the List Widget Containers/Items to be selected when clicking on an empty space or a plain widget/element. For instance, if a Text widget is clicked, the onItemClick action on the list container is triggered. However, if the Text widget contains a clickable link, only the link is activated, and the OnClick event doesn't propagate to the List Widget Container. The triggeredItems functionality remains unaffected. Fixes #21409 ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Cypress ### Test Plan > https://github.com/appsmithorg/TestSmith/issues/2372 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-14 13:55:44 +00:00
Omit<ChartComponentProps, "onDataPointClick" | "hasOnDataPointClick">
>`
feat: App Theming (#9714) * fix style bugs * fix select styles * test: fix font size issue for cypress tests * incorporate ashit feedback * test: addresed review comments for cypress tests * add analytics events * height issue in view mode * incorporate code review feedbacks * incorporate code review feedbacks * refactor: addressed review comments; removed border radius and box shadow for text widget; Updated migrations * feat: Makes shadow and radius controls keyboard accessible (#11547) * makes shadow and radius controls keyboard accessible * removes unused imports * moves options out of render method * fix: changed the misnomer background property name to the relevant property name * fix: border radius issue for the map widget * address qa bugs * address qa bugs * fix ux of theming pane when widget is selected * fix: * added backgroundColor to the video widget * restricted pop-over border radius to 0.375rem * added box shadow for the input group for select widget * fix: added delete icon in the delete theme modal * address qa bugs * change checkbox column size in config * add js convertible to button color * remove unused imports * test: fixed jest tests * fix primary color typo * fix: migrations for the theming * fix: * Removed background color from MultiTreeSelect and TreeSelect component. * grouped button's menu button pop over border radius restricting to 0.375rem. * test: updated Dsl migration UT * address qa bugs * address qa bugs * fix: address qa comments * address qa bugs * fix: * migration issue; * unit test cases; * fix rating widget scroll issue * fix youtube video border radius bug * fix select widget * fix select widgets styles * address qa bugs * merge conflicts * makes the reset button keyboard accessible (#12134) * -resolved merge conflicts * address qa bugs * fix: labelTextSize migration fixes * refactor: * made changes to the fontSizeUtils function * fixed the issue related to unit tests * fix button group widget * remove unused imports * fix: fixed the text size migration for the table widget * refactor: addressed review comments for the table widget theming migration * fix button group widget * add init calls for view mode * json form init theme changes * fix: added migration for boxShadow, borderRadius and textSizes for table widget * fix broken fields * test: fixed unit tests * wip * inconsistancy fixes and schemaItem update in updateHook/fieldConfiguration * feat: init json form migration theming * json form primaryColor -> accentColor * update table widget * update table widget * object field label styling * fix: migration related to the JSON form * fix: fixed labelTextSize migration for JSON form nested widgets * property control nested stylesheet lookup * JSONForm label styles form array items * show label for checkbox field array item * fix button group widget * wip * refactor: addressed table widget review comments * refactor: addressed ashit review comments; * added childStylesheet for widgets * feat: Keyboard navigable Color Picker control (#11797) * Makes ColorPicker keyboard accessible * seperate out keyboard and mouse interactions * fix issue with not focusing back to input * Adds test for Color picker * chore: added comment for the boxShadow property * fix: * added unit test cases for the widget and property utils * resolved warning messages * wip * theme config update * fix merge conflicts * refactor: moved theming migration inside the migrations folder * fix qa bugs * fix jest test * fix: unit test cases * fix table column creation logic * refactor: addressed review comments for migrations * fix: Overriding margin and padding for custom render in the dropdown component (#12875) * * fix for custom render padding and margin in ADS dropdown * * fix for removing padding from normal render options * refactor: moved the boxShadow condition to the variable * fix qa bugs * fix: migration QA callouts for audio recorder widget * refactor: added updated comments for boxShadow migration for table widget * fix theme binfings for JSONForm fields under Object * fix table widget theming bug * fix: addressed code review comments * fix: unit test cases * fix: qa migration callouts * fix table widget theming bug * fix JSONForm currency input dropdown not submit form * Added new tests - AppThemingSpec * fix qa bugs * fix unit test * fix JSONForm cellBorderWidth to have default value post migration * fix unit test * fix qa bugs * remove unused imports * fix qa bugs * fix JSONForm input height issue * fix qa bugs * Updating Theming spec * * dropdown color fixes (#13249) * fix caching issue ; * Fixed Theming tests * fix tests * fix tab widget tests * fix: json form children level migration issue * fix table widget tests * Updated test * updated tests * updated test * updated tests * updated tests * updated pageload * fix cypress tests * remove cypress created files * fix color picker issues * Failure fixes * Fixed some more tests * fix: cypress test failures * fix tests * remove consoles * fix table tests * fix qa bugs * updating snapshots for AppPageLayout_spec as per new UI * fix rating widget bug * fix qa bugs * fix: * cypress failing tests * Migration QA callouts * Removed unused imports * update constract check algo * fix color contrast issue * fix: cypress failure test cases * update font sizes labels * fix regression bugs * fix: * JSON form labelTextSize issue fix * Updated comment for the fontSizeUtility function * migrations issues related to table widget borderRadius and boxShadow * fix: default labelTextSize issue for the Input and Select families * fix regression bugs * fix regression bugs * PassingParams spec - added wait time * fix: font family default value issue on JS toggle * fix js toggle issue in text widget * fix tests * fix tests * fix tests * fix cypress tests * fix regression bugs * fix regression bugs * fix: * refactored table widget migration function as per review comments, * added default value to the widget * fix: failing unit test cases * fix theming spec * fix cypress tests * test: fixed failed cypress test * incorporate ashit feedback * fix cypress tests * fix: addressed review comments * comment out table cypress test * fix merge conflicts * comment out color picker tests Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local> Co-authored-by: keyurparalkar <keyur@appsmith.com> Co-authored-by: Aswath K <aswath@appsmith.com> Co-authored-by: Nayan <nayan@appsmith.com> Co-authored-by: Ashit Rath <ashit@appsmith.com> Co-authored-by: balajisoundar <balaji@appsmith.com> Co-authored-by: albinAppsmith <87797149+albinAppsmith@users.noreply.github.com> Co-authored-by: Aishwarya UR <aishwarya@appsmith.com> Co-authored-by: apple <nandan@thinkify.io> Co-authored-by: Parthvi Goswami <parthvigoswami@Parthvis-MacBook-Pro.local>
2022-05-04 09:45:57 +00:00
border-radius: ${({ borderRadius }) => borderRadius};
box-shadow: ${({ boxShadow }) => `${boxShadow}`} !important;
2020-03-13 12:06:41 +00:00
height: 100%;
width: 100%;
background: var(--ads-v2-color-bg);
overflow: hidden;
2020-03-13 12:06:41 +00:00
position: relative;
2020-12-24 04:32:25 +00:00
${(props) => (!props.isVisible ? invisible : "")};
2020-04-15 11:42:11 +00:00
padding: 10px 0 0 0;
2020-03-13 12:06:41 +00:00
}`;
class ChartComponent extends React.Component<
ChartComponentProps,
ChartComponentState
> {
fusionChartsInstance: any = null;
echartsInstance: echarts.ECharts | undefined;
2020-03-13 12:06:41 +00:00
customFusionChartContainerId =
this.props.widgetId + "custom-fusion-chart-container";
eChartsContainerId = this.props.widgetId + "echart-container";
eChartsHTMLContainer: HTMLElement | null = null;
eChartsData: AllChartData = {};
echartsConfigurationBuilder: EChartsConfigurationBuilder;
echartConfiguration: Record<string, any> = {};
constructor(props: ChartComponentProps) {
super(props);
this.echartsConfigurationBuilder = new EChartsConfigurationBuilder();
this.state = {
eChartsError: undefined,
chartType: this.props.chartType,
};
}
getEChartsOptions = () => {
const options = {
...this.echartsConfigurationBuilder.prepareEChartConfig(
this.props,
this.eChartsData,
),
dataset: {
...EChartsDatasetBuilder.datasetFromData(this.eChartsData),
},
};
return options;
2020-03-13 12:06:41 +00:00
};
dataClickCallback = (params: echarts.ECElementEvent) => {
const eventData: unknown[] = params.data as unknown[];
const x: unknown = eventData[0];
const index = (params.seriesIndex ?? 0) + 1;
const y: unknown = eventData[index];
const seriesName =
params.seriesName && params.seriesName?.length > 0
? params.seriesName
: "null";
this.props.onDataPointClick({
x: x,
y: y,
seriesTitle: seriesName,
});
2020-04-15 11:42:11 +00:00
};
initializeEchartsInstance = () => {
this.eChartsHTMLContainer = document.getElementById(
this.eChartsContainerId,
);
if (!this.eChartsHTMLContainer) {
return;
}
if (!this.echartsInstance || this.echartsInstance.isDisposed()) {
this.echartsInstance = echarts.init(
this.eChartsHTMLContainer,
undefined,
{
renderer: "svg",
},
);
2020-04-29 10:29:02 +00:00
}
2020-04-15 11:42:11 +00:00
};
resizeEchartsIfNeeded = () => {
if (this.echartsInstance) {
if (
this.echartsInstance.getHeight() !=
this.props.dimensions.componentHeight ||
this.echartsInstance.getWidth() != this.props.dimensions.componentWidth
) {
this.echartsInstance.resize({
width: this.props.dimensions.componentWidth,
height: this.props.dimensions.componentHeight,
});
}
}
};
renderECharts = () => {
this.initializeEchartsInstance();
if (!this.echartsInstance) {
return;
}
const newConfiguration = this.getEChartsOptions();
let needsNewConfig = true;
2020-04-15 11:42:11 +00:00
if (
this.state.eChartsError &&
equal(newConfiguration, this.echartConfiguration)
) {
// this check is required if chartError is present and the code shouldn't calculate the same error again
needsNewConfig = false;
} else {
this.echartConfiguration = newConfiguration;
}
try {
this.echartsInstance.off("click");
this.echartsInstance.on("click", this.dataClickCallback);
if (needsNewConfig) {
this.echartsInstance.setOption(this.echartConfiguration, true);
if (this.state.eChartsError) {
this.setState({ eChartsError: undefined });
}
}
this.resizeEchartsIfNeeded();
} catch (error) {
this.disposeECharts();
this.setState({ eChartsError: error as Error });
2020-04-15 11:42:11 +00:00
}
};
disposeECharts = () => {
this.echartsInstance?.dispose();
};
componentDidMount() {
this.eChartsData = EChartsDatasetBuilder.chartData(this.props);
this.renderChartingLibrary();
}
componentWillUnmount() {
this.disposeECharts();
this.disposeFusionCharts();
}
2020-04-15 11:42:11 +00:00
renderChartingLibrary() {
if (this.state.chartType === "CUSTOM_FUSION_CHART") {
this.disposeECharts();
this.renderFusionCharts();
} else {
this.disposeFusionCharts();
this.initializeEchartsInstance();
this.renderECharts();
}
}
componentDidUpdate() {
if (
this.props.chartType == "CUSTOM_FUSION_CHART" &&
this.state.chartType != "CUSTOM_FUSION_CHART"
) {
this.setState({
eChartsError: undefined,
chartType: "CUSTOM_FUSION_CHART",
});
} else if (
this.props.chartType != "CUSTOM_FUSION_CHART" &&
this.state.chartType === "CUSTOM_FUSION_CHART"
) {
// User has selected one of the ECharts option
this.setState({ chartType: "AREA_CHART" });
} else {
this.eChartsData = EChartsDatasetBuilder.chartData(this.props);
this.renderChartingLibrary();
}
}
disposeFusionCharts = () => {
this.fusionChartsInstance = null;
};
renderFusionCharts = () => {
if (this.fusionChartsInstance) {
const { dataSource, type } = this.getCustomFusionChartDataSource();
this.fusionChartsInstance.chartType(type);
this.fusionChartsInstance.setChartData(dataSource);
} else {
const config = this.customFusionChartConfig();
this.fusionChartsInstance = new FusionCharts(config);
FusionCharts.ready(() => {
/* Component could be unmounted before FusionCharts is ready,
this check ensure we don't render on unmounted component */
if (this.fusionChartsInstance) {
try {
this.fusionChartsInstance.render();
} catch (e) {
log.error(e);
}
}
});
}
};
customFusionChartConfig() {
const chartConfig = {
renderAt: this.customFusionChartContainerId,
width: "100%",
height: "100%",
events: {
dataPlotClick: (evt: any) => {
const data = evt.data;
const seriesTitle = get(data, "datasetName", "");
this.props.onDataPointClick({
x: data.categoryLabel,
y: data.dataValue,
seriesTitle,
});
},
},
...this.getCustomFusionChartDataSource(),
};
return chartConfig;
}
getCustomFusionChartDataSource = () => {
// in case of evaluation error, customFusionChartConfig can be undefined
let config = this.props.customFusionChartConfig as CustomFusionChartConfig;
2020-08-28 09:52:18 +00:00
if (config && config.dataSource) {
config = {
...config,
dataSource: {
chart: {
...config.dataSource.chart,
caption: this.props.chartName || config.dataSource.chart.caption,
setAdaptiveYMin: this.props.setAdaptiveYMin ? "1" : "0",
},
...config.dataSource,
},
};
}
return config || {};
};
render() {
//eslint-disable-next-line @typescript-eslint/no-unused-vars
fix: clickable containers in the List widget (#21987) ## Description This fix primarily targets the List Widget. It enables the List Widget Containers/Items to be selected when clicking on an empty space or a plain widget/element. For instance, if a Text widget is clicked, the onItemClick action on the list container is triggered. However, if the Text widget contains a clickable link, only the link is activated, and the OnClick event doesn't propagate to the List Widget Container. The triggeredItems functionality remains unaffected. Fixes #21409 ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Cypress ### Test Plan > https://github.com/appsmithorg/TestSmith/issues/2372 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-14 13:55:44 +00:00
const { hasOnDataPointClick, onDataPointClick, ...rest } = this.props;
// Avoid propagating the click events to upwards
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const onClick = hasOnDataPointClick
? (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => e.stopPropagation()
: undefined;
return (
<CanvasContainer
className={this.props.isLoading ? "bp3-skeleton" : ""}
fix: clickable containers in the List widget (#21987) ## Description This fix primarily targets the List Widget. It enables the List Widget Containers/Items to be selected when clicking on an empty space or a plain widget/element. For instance, if a Text widget is clicked, the onItemClick action on the list container is triggered. However, if the Text widget contains a clickable link, only the link is activated, and the OnClick event doesn't propagate to the List Widget Container. The triggeredItems functionality remains unaffected. Fixes #21409 ## Type of change > Please delete options that are not relevant. - Bug fix (non-breaking change which fixes an issue) - New feature (non-breaking change which adds functionality) ## How Has This Been Tested? - Cypress ### Test Plan > https://github.com/appsmithorg/TestSmith/issues/2372 ### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) ## Checklist: ### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag ### QA activity: - [x] Test plan has been approved by relevant developers - [x] Test plan has been peer reviewed by QA - [ ] Cypress test cases have been added and approved by either SDET or manual QA - [ ] Organized project review call with relevant stakeholders after Round 1/2 of QA - [ ] Added Test Plan Approved label after reveiwing all Cypress test
2023-04-14 13:55:44 +00:00
onClick={onClick}
{...rest}
>
{this.state.chartType !== "CUSTOM_FUSION_CHART" && (
<ChartsContainer id={this.eChartsContainerId} />
)}
{this.state.chartType === "CUSTOM_FUSION_CHART" && (
<ChartsContainer id={this.customFusionChartContainerId} />
)}
{this.state.eChartsError && (
<ChartErrorComponent error={this.state.eChartsError} />
)}
</CanvasContainer>
);
}
}
2020-03-13 12:06:41 +00:00
export default ChartComponent;