mirror of
https://github.com/apache/superset.git
synced 2026-05-30 04:39:20 +00:00
Introduce `defineChart()` — a declarative pattern that bundles metadata,
arguments (control-panel config), buildQuery, transform, and render into
a single chart-plugin file. Migrate every chart plugin to this pattern:
* plugin-chart-echarts: Pie, Funnel, Gauge, Sankey, Waterfall,
Histogram, Tree, Bubble, BoxPlot, Sunburst, Radar, Treemap, Graph,
Heatmap, Gantt, BigNumber (Total, WithTrendline, PoP, Glyph demo),
MixedTimeseries, and the Timeseries family (Generic, Scatter,
SmoothLine, Step, Area, Line, Bar)
* legacy-plugin-chart-*: calendar, horizon, chord, country-map,
world-map, paired-t-test, parallel-coordinates, partition, rose,
map-box
* other plugins: handlebars, word-cloud, pivot-table, table,
ag-grid-table, cartodiagram
* legacy-preset-chart-nvd3: Bubble, Bullet, Compare, TimePivot
* legacy-preset-chart-deckgl: Grid, Hex, Polygon, Scatter (single-file
defineChart); Arc, Contour, Geojson, Heatmap, Path, Screengrid kept
on the original multi-file ChartPlugin pattern pending follow-up
Glyph-core lives as @superset-ui/glyph-core (extracted package) and
provides: defineChart, ~14 argument types (Metric, Dimension, Select,
Checkbox, Text, Int, Slider, etc.), reusable presets (ShowLegend,
HeaderFontSize, Subtitle, etc.), cross-filter utilities
(extractCrossFilterProps, createSelectedValuesMap, isDataPointFiltered,
createLabelMap), and visibility-condition helpers
(resolveArgClass, getArgVisibleWhen, evaluateGlyphCondition).
Customize-tab rendering uses a new GlyphOptionsPanel — a native React
renderer that hybrids glyph args with additionalControls, with
inlined sharedControls in the Query section.
Imports are routed through @apache-superset/core subpath entrypoints
(/translation for t, /common for GenericDataType).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
99 lines
4.3 KiB
JavaScript
99 lines
4.3 KiB
JavaScript
/**
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
// timezone for unit tests
|
|
process.env.TZ = 'America/New_York';
|
|
module.exports = {
|
|
testRegex:
|
|
'\\/superset-frontend\\/(spec|src|plugins|packages|tools)\\/.*(_spec|\\.test)\\.[jt]sx?$',
|
|
moduleNameMapper: {
|
|
'\\.(css|less|geojson)$': '<rootDir>/spec/__mocks__/mockExportObject.js',
|
|
'\\.(gif|ttf|eot|png|jpg)$': '<rootDir>/spec/__mocks__/mockExportString.js',
|
|
'\\.svg$': '<rootDir>/spec/__mocks__/svgrMock.tsx',
|
|
'^src/(.*)$': '<rootDir>/src/$1',
|
|
'^spec/(.*)$': '<rootDir>/spec/$1',
|
|
// mapping glyph-core to local package source
|
|
'^@superset-ui/glyph-core$':
|
|
'<rootDir>/packages/superset-ui-glyph-core/src',
|
|
'^@superset-ui/glyph-core/(.*)$':
|
|
'<rootDir>/packages/superset-ui-glyph-core/src/$1',
|
|
// mapping plugins of superset-ui to source code
|
|
'^@superset-ui/([^/]+)/(.*)$':
|
|
'<rootDir>/node_modules/@superset-ui/$1/src/$2',
|
|
'^@superset-ui/([^/]+)$': '<rootDir>/node_modules/@superset-ui/$1/src',
|
|
// mapping @apache-superset/core to local package
|
|
'^@apache-superset/core$': '<rootDir>/packages/superset-core/src',
|
|
'^@apache-superset/core/(.*)$': '<rootDir>/packages/superset-core/src/$1',
|
|
},
|
|
testEnvironment: '<rootDir>/spec/helpers/jsDomWithFetchAPI.ts',
|
|
modulePathIgnorePatterns: [
|
|
'<rootDir>/packages/generator-superset',
|
|
'<rootDir>/packages/.*/esm',
|
|
'<rootDir>/packages/.*/lib',
|
|
'<rootDir>/plugins/.*/esm',
|
|
'<rootDir>/plugins/.*/lib',
|
|
// Ignore build artifacts that contain duplicate package.json or mock files
|
|
'<rootDir>/storybook-static',
|
|
// Ignore duplicate __mocks__ at package root level (e.g., packages/superset-ui-core/__mocks__)
|
|
// but not test __mocks__ directories (e.g., packages/superset-ui-core/test/__mocks/)
|
|
'<rootDir>/packages/[^/]+/__mocks__',
|
|
],
|
|
setupFilesAfterEnv: ['<rootDir>/spec/helpers/setup.ts'],
|
|
snapshotSerializers: ['@emotion/jest/serializer'],
|
|
testEnvironmentOptions: {
|
|
globalsCleanup: true,
|
|
url: 'http://localhost',
|
|
},
|
|
collectCoverageFrom: [
|
|
'src/**/*.{js,jsx,ts,tsx}',
|
|
'{packages,plugins}/**/src/**/*.{js,jsx,ts,tsx}',
|
|
'!**/*.stories.*',
|
|
],
|
|
coverageDirectory: '<rootDir>/coverage/',
|
|
coveragePathIgnorePatterns: [
|
|
'coverage/',
|
|
'node_modules/',
|
|
'public/',
|
|
'tmp/',
|
|
'dist/',
|
|
],
|
|
coverageReporters: ['lcov', 'json-summary', 'html', 'text'],
|
|
transformIgnorePatterns: [
|
|
'node_modules/(?!d3-(array|interpolate|color|time|scale|time-format|format)|internmap|@mapbox/tiny-sdf|remark-gfm|(?!@ngrx|(?!deck.gl)|d3-scale)|markdown-table|micromark-*.|decode-named-character-reference|character-entities|mdast-util-*.|unist-util-*.|ccount|escape-string-regexp|nanoid|uuid|@rjsf/*.|echarts|zrender|fetch-mock|pretty-ms|parse-ms|ol|@babel/runtime|@emotion|cheerio|cheerio/lib|parse5|dom-serializer|entities|htmlparser2|rehype-sanitize|hast-util-sanitize|unified|unist-.*|hast-.*|rehype-.*|remark-.*|mdast-.*|micromark-.*|parse-entities|property-information|space-separated-tokens|comma-separated-tokens|bail|devlop|zwitch|longest-streak|geostyler|geostyler-.*|(?!geostyler)lodash|react-error-boundary|react-json-tree|react-base16-styling|lodash-es|rbush|quickselect|react-diff-viewer-continued)',
|
|
],
|
|
preset: 'ts-jest',
|
|
transform: {
|
|
'^.+\\.(js|jsx|ts|tsx)$': 'babel-jest',
|
|
},
|
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
|
|
globals: {
|
|
__DEV__: true,
|
|
caches: true,
|
|
},
|
|
reporters: [
|
|
'default',
|
|
[
|
|
'./node_modules/jest-html-reporter',
|
|
{
|
|
pageTitle: 'Test Report',
|
|
},
|
|
],
|
|
],
|
|
testTimeout: 20000,
|
|
};
|