Compare commits

...

134 Commits

Author SHA1 Message Date
Michael S. Molina
2c99366333 chore: Updates CHANGELOG.md 2023-08-24 14:11:50 -03:00
Michael S. Molina
e4affbfc95 fix: Cross filters initial scope (#25074)
(cherry picked from commit f584c8462b)
2023-08-24 13:06:53 -03:00
Stepan
f5d2075ace fix(table): condition formatting can't formate 0 values (#24008)
(cherry picked from commit 0d5be8e3f6)
2023-08-24 13:06:53 -03:00
Rémy DUBOIS
2554a89cc9 fix(cli): import-directory is missing the application context (#21255)
(cherry picked from commit 80fcbfab7c)
2023-08-24 13:06:53 -03:00
John Bodley
ad89ea549b fix: Ensure SQLAlchemy sessions are closed (#25031)
(cherry picked from commit adaab3550c)
2023-08-24 13:06:53 -03:00
Daniel Vaz Gaspar
931e1b2139 fix: dataset safe URL for explore_url (#24686)
(cherry picked from commit a9efd4b2e3)
2023-08-23 09:55:50 -03:00
Michael S. Molina
b5f7f54c7f fix: Error when using the legacy dataset editor (#25057)
Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com>
(cherry picked from commit c92a975e4b)
2023-08-23 09:55:50 -03:00
John Bodley
1af6df3190 fix: Native filter dashboard RBAC aware dataset permission (#25029)
(cherry picked from commit 60889d27ed)
2023-08-22 17:39:55 -03:00
Michael S. Molina
8cb5142f87 fix: docker-compose non-dev (#25055)
(cherry picked from commit 7317d9c0b2)
2023-08-22 17:39:55 -03:00
Daniel Vaz Gaspar
6003aa2485 fix: extend user email size (#25053)
(cherry picked from commit 6975084ea5)
2023-08-22 17:39:55 -03:00
Sebastian Liebscher
80f1eaf6d7 chore: use os.getenv to simplify superset_config.py (#25016)
(cherry picked from commit 969cd664cb)
2023-08-22 17:39:55 -03:00
Yuval Moshe
34bc86a484 fix(mssql): avoid trying to return a resultset for DML queries with not resultset (#24999)
(cherry picked from commit 66eabc253f)
2023-08-21 11:12:57 -03:00
Daniel Vaz Gaspar
994fd2301f fix: CTE queries with non-SELECT statements (#25014)
(cherry picked from commit 357986103b)
2023-08-21 10:46:15 -03:00
Michael S. Molina
a5a027d8d1 fix: Dashboard fullscreen is removing custom URL params (#25028)
(cherry picked from commit 0be1754666)
2023-08-21 10:46:15 -03:00
John Bodley
fad872fffb fix: Address regression introduced in #24789 (#25008)
(cherry picked from commit 3f93755be2)
2023-08-21 10:46:15 -03:00
Michael S. Molina
88383ded80 chore: Pass the dashboard id when requesting filter values (#25025)
(cherry picked from commit 52c7186b56)
2023-08-21 10:46:15 -03:00
Jack Fragassi
9ff1a63c3b fix: Don't let users see dashboards only because it's favorited (#24991)
(cherry picked from commit 258e56285a)
2023-08-18 10:32:39 -03:00
Michael S. Molina
696917905e fix: Downgrades Prophet to 1.1.1 and Holidays to 0.23 (#25017) 2023-08-18 10:28:11 -03:00
Michael S. Molina
f63cb47f35 fix: Date column in Heatmap is displayed as unix timestamp (#25009) 2023-08-17 16:38:59 -03:00
Daniel Vaz Gaspar
c2c5f232c8 chore: isolate examples database by default (#25003)
(cherry picked from commit 269c99293f)
2023-08-17 16:36:42 -03:00
Elizabeth Thompson
ea27cf13d3 fix: update permalink schema (#24970)
(cherry picked from commit bc1c5c2f84)
2023-08-17 16:36:42 -03:00
Elizabeth Thompson
e20c2967c4 fix: Revert "fix(chart): Time Series set showMaxLabel as null for time xAxis (#20627) (#24995)
(cherry picked from commit 2b63577046)
2023-08-17 16:36:42 -03:00
Ville Brofeldt
387549f69c fix(snowflake): opt-in denormalization of column names (#24982) 2023-08-16 11:29:03 -03:00
Gyuil Han
1569f0177f chore: modify UPDATING.md for logs table migrations (#24923)
Co-authored-by: John Bodley <4567245+john-bodley@users.noreply.github.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
2023-08-16 10:58:09 -03:00
JUST.in DO IT
8d3a919f5e fix(sqllab): scroll position after run current sql (#24965)
(cherry picked from commit 155cf54c15)
2023-08-16 10:56:53 -03:00
Michael S. Molina
3ffc5b69f8 fix: Calendar Heatmap day offset (#24989)
(cherry picked from commit 025e4d4772)
2023-08-16 10:56:53 -03:00
Michael S. Molina
4b07b5d628 feat: Adds options to show subtotals in Pivot Table (#24960)
(cherry picked from commit be11556799)
2023-08-14 09:26:21 -03:00
Michael S. Molina
dd53b334d6 fix: Duplicated options in Select when using numerical values (#24906)
(cherry picked from commit b621ee92c9)
2023-08-14 09:26:21 -03:00
Michael S. Molina
5c931b1951 fix: Tooltips don't disappear on the Heatmap chart (#24959)
(cherry picked from commit 9703490129)
2023-08-14 09:26:21 -03:00
Beto Dealmeida
52319201f9 chore: rate limit requests (#24324)
(cherry picked from commit 4bc46003b5)
2023-08-14 09:26:21 -03:00
Beto Dealmeida
ff2ec23102 fix: calls to _get_sqla_engine (#24953)
(cherry picked from commit 6f24a4e7a8)
2023-08-14 09:26:20 -03:00
Rob Moore
5d8c65ae6f fix(charts): View in SQL Lab with relevant perm (#24903)
(cherry picked from commit ce65a3b9cd)
2023-08-14 09:26:20 -03:00
Multazim Deshmukh
7a7fa748f5 fix: remove unused file (#24946)
(cherry picked from commit bcd24936bc)
2023-08-10 13:37:21 -03:00
Michael S. Molina
2574e11544 chore: Removes duplicated featureFlags.ts (#24935)
(cherry picked from commit 284c12697b)
2023-08-10 13:15:58 -03:00
John Bodley
1e20c0bf8a chore: Add explicit ON DELETE CASCADE for embedded_dashboards (#24939)
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
2023-08-10 13:14:56 -03:00
John Bodley
9b3ec806cd chore: Add explicit ON DELETE CASCADE for dashboard_slices (#24938) 2023-08-10 13:14:08 -03:00
John Bodley
309582516d fix: Dashboard aware RBAC "Save as" menu item (#24806)
(cherry picked from commit f6c3f0cbbb)
2023-08-10 10:12:49 -03:00
John Bodley
dba72c4197 chore: Refine native dashboard cleanup logic (#24864)
(cherry picked from commit 34586648a5)
2023-08-10 10:12:48 -03:00
John Bodley
804cc36080 chore: Refactor dashboard security access (#24804)
(cherry picked from commit 5522facdc6)
2023-08-10 10:12:48 -03:00
Michael S. Molina
df92cc2d55 fix: Tooltip of area chart shows undefined total (#24916)
(cherry picked from commit ec9e9a46f2)
2023-08-10 10:12:48 -03:00
JUST.in DO IT
42451880a8 fix(explore): double resize triggered (#24886)
(cherry picked from commit 340bfd88ae)
2023-08-10 10:12:48 -03:00
Gyuil Han
ed56375d5f fix(logs): increase json field for logs table (#24911)
(cherry picked from commit eb7c14561e)
2023-08-10 10:12:48 -03:00
Jack Fragassi
abead484e1 fix: Migration to fix out of sync schema_perm in charts and datasets (#24884)
(cherry picked from commit 07992c11e7)
2023-08-07 16:29:30 -03:00
John Bodley
c8c7539ff1 fix: Dashboard aware RBAC dataset permission (#24789)
(cherry picked from commit 7397ab36f2)
2023-08-07 16:19:56 -03:00
John Bodley
215b3b5a4b fix: revert "fix(embedded): adding logic to check dataset used by filters (#24808) (#24892)
(cherry picked from commit 9f7f2c60d6)
2023-08-07 16:19:56 -03:00
Michael S. Molina
7fe61ccf7d fix: Pylint errors from cherry-picking 2023-08-07 16:17:10 -03:00
Elizabeth Thompson
e46f10a8a6 chore: add talisman env var to config (#24774)
(cherry picked from commit d23b20ea75)
2023-08-04 14:12:35 -03:00
JUST.in DO IT
b272814ff5 fix(dataset): resizable dataset layout left column (#24829)
(cherry picked from commit 6ff7fae0b0)
2023-08-04 14:12:35 -03:00
JUST.in DO IT
84035badab fix(explore): invalid "No Filter" applied (#24876)
(cherry picked from commit 371bffbfea)
2023-08-04 14:12:35 -03:00
John Bodley
21764f9ae3 fix(annotation): Address regression from #24694 (#24874)
(cherry picked from commit f05638ba84)
2023-08-04 14:12:35 -03:00
Hugh A. Miles II
8cf702bf3d fix: validation errors appearing after ssh tunnel switch (#24849)
(cherry picked from commit b71541fb7f)
2023-08-04 14:12:35 -03:00
Michael S. Molina
e47377e576 fix: Explore misleading save action (#24862)
(cherry picked from commit bf1b1a4c46)
2023-08-04 14:12:35 -03:00
JUST.in DO IT
21ded992ad fix(sqllab): Add docText for long keyword (#24847)
(cherry picked from commit 1a9c559a8f)
2023-08-04 14:12:35 -03:00
JUST.in DO IT
29528e9783 fix(legacy-chart): corrupted raw chart data (#24850)
(cherry picked from commit 1c5971d3af)
2023-08-02 08:38:09 -03:00
Michael S. Molina
34adeb4f4f fix: Links in tooltips of dashboard chart cards (#24846)
(cherry picked from commit ea17dd637c)
2023-08-01 10:54:41 -03:00
Vitor Avila
bbe4e016d8 fix(embedded): adding logic to check dataset used by filters (#24808)
(cherry picked from commit 7f9b0380e0)
2023-08-01 10:54:41 -03:00
EugeneTorap
161e05445c fix: Python3.11 (str, Enum) issue (#24803) 2023-08-01 10:54:20 -03:00
Stepan
b5df3f9e4e fix(datasets): give possibility to add dataset with slashes in name (#24796) 2023-07-31 09:25:24 -03:00
Jack Fragassi
a9b8c8e3ec fix: Allow chart import to update the dataset an existing chart points to (#24821)
(cherry picked from commit 77889b29fb)
2023-07-31 09:23:03 -03:00
John Bodley
1a0d270e5b fix(migration): Ensure cascadeParentIds key exists (#24831)
(cherry picked from commit caffe3cb1f)
2023-07-31 09:23:03 -03:00
Michael S. Molina
7d2da96e81 fix: Removes unnecessary query on filters (#24814)
(cherry picked from commit 5bb8e0da89)
2023-07-31 09:23:02 -03:00
Beto Dealmeida
b89d7387a2 fix: pass schema on dataset creation (#24815)
(cherry picked from commit ba508a786c)
2023-07-31 09:23:02 -03:00
Michael S. Molina
571f33536e chore: Updates CHANGELOG.md 2023-07-26 19:35:07 -03:00
Michael S. Molina
651c13b934 chore: Updates helm files 2023-07-26 18:39:24 -03:00
dependabot[bot]
af8c813cb6 build(deps): bump tox from 4.6.3 to 4.6.4 in /requirements (#24613)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-07-26 18:03:46 -03:00
Michael S. Molina
ad1a425269 fix: Filters alert width (#24801)
(cherry picked from commit 4b1f1d49d6)
2023-07-26 16:50:57 -03:00
JUST.in DO IT
84488b7c5e fix(sqllab): Replace autocomplete logic by a hook (#24677)
(cherry picked from commit 77505173ae)
2023-07-26 16:50:57 -03:00
Daniel Vaz Gaspar
d86ae30958 fix: docs invalid client redirect (#24816)
(cherry picked from commit d1eb9ea982)
2023-07-26 16:50:57 -03:00
Daniel Vaz Gaspar
d92f9a73d2 docs: update security policy and add CVE info (#24769)
(cherry picked from commit 165afee55a)
2023-07-26 16:50:57 -03:00
xavier-GitHub76
98ec90938d fix: Department names fixed for CountryMap of France (#23988)
(cherry picked from commit a9c4472d25)
2023-07-26 16:50:57 -03:00
Gyuil Han
25d42538d1 fix(dashboard): increase json_metadata field (#24510)
(cherry picked from commit ff7c1528db)
2023-07-26 16:50:57 -03:00
Stepan
a85da81815 fix(chore): switching between languages should be without timeout 60 seconds (#24798)
(cherry picked from commit 761fec2574)
2023-07-26 16:50:57 -03:00
JUST.in DO IT
d95241df9d fix(sqllab): Replace margin style by gap on query results (#24772)
(cherry picked from commit 4a81284056)
2023-07-25 15:24:40 -03:00
Michael S. Molina
d336431559 fix: Select onChange is being fired without explicit selection (#24698)
Co-authored-by: JUST.in DO IT <justin.park@airbnb.com>
(cherry picked from commit 6089b5fdae)
2023-07-25 15:24:40 -03:00
Zef Lin
e3d8ecb478 chore(view_api): return application/json as content-type for api/v1/form_data endpoint (#24758)
(cherry picked from commit 0631a8086c)
2023-07-24 09:47:23 -03:00
Elizabeth Thompson
a066ebbb5e fix: update svgr webpack config to use svg dimensions (#24747) 2023-07-24 09:47:04 -03:00
Beto Dealmeida
6947983d5f feat: migrate charts on import (#24703)
(cherry picked from commit abb8e28e49)
2023-07-24 09:43:52 -03:00
Evan Rusackas
00516c2088 chore(docs): Adding link to additional visualization content (#24759)
(cherry picked from commit e210da963d)
2023-07-24 09:43:52 -03:00
mattitoo
2e978bba14 docs: Fix STANDARD_ROLES.md for Gamma role permissions on tableschemaview (#24766)
(cherry picked from commit d642288092)
2023-07-24 09:43:52 -03:00
karsten-wagner
a8f808f7a8 fix(docs): respect no_proxy environment variable (#23816)
(cherry picked from commit a80ec15f4c)
2023-07-24 09:43:52 -03:00
Michael S. Molina
dd002a8cf6 fix: Tooltip no longer highlights hovered data series (#24756)
(cherry picked from commit ac19f58cf6)
2023-07-24 09:43:52 -03:00
Maxime Beauchemin
157cc621c5 fix: column/metric type icons look too small (#24740)
(cherry picked from commit 341b8d41c5)
2023-07-24 09:43:52 -03:00
Maxime Beauchemin
299dbb7012 chore: make control panel sub sections look better (#24736)
(cherry picked from commit 22a0fe555c)
2023-07-24 09:43:51 -03:00
Beto Dealmeida
2e222865bf fix: search_path in RDS (#24739)
(cherry picked from commit 7675e0db10)
2023-07-24 09:43:51 -03:00
JUST.in DO IT
d87724a6e3 fix(datasets): Replace left panel layout by TableSelector (#24599)
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit b2831b419e)
2023-07-24 09:43:51 -03:00
Stepan
6281f50bab fix(pvt2): migrations from legacy pivot table error when form_data have pieces of pvt2 (#24710)
(cherry picked from commit df106aa708)
2023-07-24 09:43:51 -03:00
JUST.in DO IT
06258a06ed chore(native filters): Expandable filter config modal (#24559)
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit 05e724f3d7)
2023-07-24 09:43:51 -03:00
Michael S. Molina
a7221c6dd4 fix: Dashboard time grain in Table (#24746)
(cherry picked from commit 317aa989c2)
2023-07-24 09:43:51 -03:00
JUST.in DO IT
66792beb8b fix(native filter): clean deleted parent filter ids (#24749)
Co-authored-by: John Bodley <john.bodley@gmail.com>
(cherry picked from commit 4086514fa5)
2023-07-24 09:43:51 -03:00
Maxime Beauchemin
aa5f0b1019 chore: make antd table font size same as data table (#24741)
(cherry picked from commit d1d5ff6f9f)
2023-07-24 09:43:51 -03:00
Daniel Vaz Gaspar
cc7983cd4a fix: import database engine validation (#24697)
(cherry picked from commit cb9b865a53)
2023-07-20 12:00:26 -03:00
Elizabeth Thompson
1625fe4104 chore: turn off talisman for ephemeral environments in ci (#24627)
(cherry picked from commit 1a9724582f)
2023-07-20 12:00:26 -03:00
Arjun Devarajan
91919569ba feat: use Scarf Gateway for Superset npm downloads (#24433)
Co-authored-by: Arjun Devarajan <arjun.devarajan@scarf.sh>
Co-authored-by: Evan Rusackas <evan@preset.io>
Co-authored-by: Evan Rusackas <evan@rusackas.com>
2023-07-20 12:00:04 -03:00
Stepan
befe41df14 fix(range-slider): removed localization of metric key (#24716)
(cherry picked from commit 2d58dddbdc)
2023-07-20 11:55:54 -03:00
John Bodley
a3138f2bbe fix(cache): Add cache warmup for non-legacy charts (#24671)
(cherry picked from commit 5f49e0fdd0)
2023-07-20 11:55:54 -03:00
John Bodley
82311edaf6 fix(druid): Delete obsolete Druid NoSQL slice parameters (#24737)
(cherry picked from commit 4c5ada421c)
2023-07-20 11:55:53 -03:00
Arjun Devarajan
757741942d feat: use Scarf Gateway for Superset helm charts/Docker compose downloads (#24432) 2023-07-19 10:56:54 -03:00
John Bodley
65822cab13 chore: Bump pyyaml bounds (#24731) 2023-07-19 10:53:05 -03:00
John Bodley
4390968dd7 chore: Remove obsolete legacy visualizations (#24694)
(cherry picked from commit 1b5a6790f0)
2023-07-19 10:50:30 -03:00
Lily Kuang
2e913492c9 fix: color collision in dashboard with tabs (#24670)
(cherry picked from commit 0328dd2704)
2023-07-19 10:50:30 -03:00
Vitor Avila
c94bee47aa fix(dataset-import): support empty strings for extra fields (#24663)
(cherry picked from commit 65fb8e10ba)
2023-07-19 10:50:30 -03:00
Daniel Vaz Gaspar
c6ecbc81ac chore: move deprecated default version to 4.0.0 (#24689)
(cherry picked from commit ca68250adf)
2023-07-19 10:50:30 -03:00
Beto Dealmeida
60385ed059 fix: embedded dashboard check (#24690)
(cherry picked from commit 9844b15e07)
2023-07-19 10:50:30 -03:00
Michael S. Molina
b0c90cb261 fix: Dashboard time grain in Pivot Table (#24665)
(cherry picked from commit 6e59f11f4c)
2023-07-19 10:50:30 -03:00
John Bodley
49605e763c chore(command): Condense delete/bulk-delete operations (#24607)
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
(cherry picked from commit a156816064)
2023-07-13 13:36:20 -03:00
Arkadii Yakovets
7243332082 chore: Bump holidays to 0.28 (#24647)
(cherry picked from commit 767afef398)
2023-07-13 13:36:20 -03:00
John Bodley
1872a651da chore: Bump/relax Flask libs (#24652)
(cherry picked from commit 462418ba82)
2023-07-12 11:20:05 -03:00
JUST.in DO IT
f60ab456f3 feat(sqllab): add shortcut for run current sql (#24329)
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit 1473d97055)
2023-07-12 11:20:05 -03:00
John Bodley
96cf6406f1 chore(dao): Add explicit ON DELETE CASCADE for ownership (#24628) 2023-07-12 11:19:43 -03:00
John Bodley
71eff954ba chore(dao): Condense delete/bulk-delete operations (#24466)
Co-authored-by: Michael S. Molina <70410625+michael-s-molina@users.noreply.github.com>
(cherry picked from commit 7409289762)
2023-07-12 11:17:04 -03:00
JUST.in DO IT
79a42c6509 fix(sqllab): missing column meta on autocomplete (#24611)
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit ca8c8d2ad3)
2023-07-12 11:03:47 -03:00
Jack Fragassi
d8bf955515 fix: Chart can be added to dashboard by non-owner via save as option (#24630)
(cherry picked from commit 4caf33b41d)
2023-07-12 11:03:47 -03:00
Kamil Gabryjelski
a2fdc84073 fix: Ensure config is a dict in cross filters scope migration (#24661)
(cherry picked from commit 2e4d9f2e2a)
2023-07-12 11:03:47 -03:00
Kamil Gabryjelski
5a4996c226 fix: Incorrect initial global scoping of cross filters (#24642)
(cherry picked from commit bbffc4c1f8)
2023-07-12 11:03:46 -03:00
Michael S. Molina
359bbe26f7 fix: Validation of out of scope filters and interaction with Clear All (#24610)
(cherry picked from commit 0efb88479e)
2023-07-12 11:03:46 -03:00
John Bodley
27dcc3e025 chore: Drop rouge constraints and tables (#24629)
(cherry picked from commit 65291a00c6)
2023-07-12 11:03:46 -03:00
Daniel Vaz Gaspar
d6296c1ad1 fix: CSP, bump FAB to 4.3.4 (#24646)
(cherry picked from commit 4881328fbf)
2023-07-12 11:03:46 -03:00
Hugh A. Miles II
846d3c03aa fix: fix extra insert for count on dataset creation (#24625)
(cherry picked from commit e6e8276a20)
2023-07-12 11:03:46 -03:00
Kamil Gabryjelski
2bd9ca3c94 fix: Ensure metrics is an array in Mixed Chart (#24643)
(cherry picked from commit fe2c14ff3a)
2023-07-12 11:03:46 -03:00
Daniel Vaz Gaspar
a15e809c0f fix: remove spaces and EOL from nonce attr (#24644)
(cherry picked from commit b809815436)
2023-07-12 11:03:46 -03:00
Michael S. Molina
b81ee82d3c fix: Wrong positioning of filter tooltips on scroll (#24617)
(cherry picked from commit c53b249998)
2023-07-10 10:27:25 -03:00
Kamil Gabryjelski
6b366a2cff feat: Implement support for currencies in more charts (#24594)
(cherry picked from commit d74d7eca23)
2023-07-10 10:27:25 -03:00
Hugh A. Miles II
9a96d8cf8b fix: change naming convention for count metric on Dataset creation (#24609)
(cherry picked from commit c573cfcd12)
2023-07-10 10:27:25 -03:00
Gyuil Han
744cf2ec29 chore: remove underscore from builtin_time_grains label (#24567)
(cherry picked from commit a6e749da87)
2023-07-10 10:27:25 -03:00
Michael S. Molina
26909bf517 fix: Incorrect dependency between filters related feature flags (#24608)
(cherry picked from commit 781a20423a)
2023-07-07 09:48:45 -03:00
Beto Dealmeida
967ca0470b fix(report): edit without custom width (#24612)
(cherry picked from commit 93ba4ade09)
2023-07-07 09:48:45 -03:00
Hugh A. Miles II
0976b5e51e fix(ssh): Editting Database w/ SSH Tunneling (#24552)
(cherry picked from commit d041648ad4)
2023-07-07 09:48:45 -03:00
jwilliams-ocient
67008f2c35 fix: set max version for pyocient (#24556)
(cherry picked from commit 64d728f80f)
2023-07-07 09:48:45 -03:00
John Bodley
af2689d501 fix: Bump prophet, re-enable tests, and remedy column eligibility logic (#24129)
(cherry picked from commit 383dac6a5e)
2023-07-07 09:48:45 -03:00
JUST.in DO IT
a5f3cfc726 chore(sqllab): Log current local storage usage (#24554)
Co-authored-by: Justin Park <justinpark@apache.org>
(cherry picked from commit 0836000f9f)
2023-07-07 09:48:45 -03:00
Michael S. Molina
9ab61c1103 fix: Clicking on a tag in the dashboard and charts lists does not work (#24593)
(cherry picked from commit 04ae259f3d)
2023-07-05 13:02:50 -03:00
Ville Brofeldt
6de6f47728 chore(metastore-cache): add codec support (#24586)
(cherry picked from commit a4880cabd4)
2023-07-05 11:50:50 -03:00
Hugh A. Miles II
1b41653d3b fix: SSH Tunnel creation with dynamic form (#24196)
(cherry picked from commit 226c7f807d)
2023-07-05 11:50:50 -03:00
Michael S. Molina
eb42fa7a2e chore: Updates CHANGELOG.md and UPDATING.md 2023-06-30 09:27:24 -03:00
432 changed files with 12533 additions and 4907 deletions

38
.github/SECURITY.md vendored Normal file
View File

@@ -0,0 +1,38 @@
# Security Policy
This is a project of the [Apache Software Foundation](https://apache.org) and follows the
ASF [vulnerability handling process](https://apache.org/security/#vulnerability-handling).
## Reporting Vulnerabilities
**⚠️ Please do not file GitHub issues for security vulnerabilities as they are public! ⚠️**
Apache Software Foundation takes a rigorous standpoint in annihilating the security issues
in its software projects. Apache Superset is highly sensitive and forthcoming to issues
pertaining to its features and functionality.
If you have any concern or believe you have found a vulnerability in Apache Superset,
please get in touch with the Apache Security Team privately at
e-mail address [security@apache.org](mailto:security@apache.org).
More details can be found on the ASF website at
[ASF vulnerability reporting process](https://apache.org/security/#reporting-a-vulnerability)
We kindly ask you to include the following information in your report:
- Apache Superset version that you are using
- A sanitized copy of your `superset_config.py` file or any config overrides
- Detailed steps to reproduce the vulnerability
Note that Apache Superset is not responsible for any third-party dependencies that may
have security issues. Any vulnerabilities found in third-party dependencies should be
reported to the maintainers of those projects. Results from security scans of Apache
Superset dependencies found on its official Docker image can be remediated at release time
by extending the image itself.
**Your responsible disclosure and collaboration are invaluable.**
## Extra Information
- [Apache Superset documentation](https://superset.apache.org/docs/security)
- [Common Vulnerabilities and Exposures by release](https://superset.apache.org/docs/security/cves)
- [How Security Vulnerabilities are Reported & Handled in Apache Superset (Blog)](https://preset.io/blog/how-security-vulnerabilities-are-reported-and-handled-in-apache-superset/)

View File

@@ -25,8 +25,12 @@
"value": "8080"
},
{
"name": "SUPERSET_SECRET_KEY",
"value": "super-secret-for-ephemerals"
"name": "SUPERSET_SECRET_KEY",
"value": "super-secret-for-ephemerals"
},
{
"name": "TALISMAN_ENABLED",
"value": "False"
}
],
"mountPoints": [],

View File

@@ -42,12 +42,13 @@ repos:
hooks:
- id: mypy
args: [--check-untyped-defs]
additional_dependencies:
[
additional_dependencies: [
types-simplejson,
types-python-dateutil,
types-requests,
types-redis,
# types-redis 4.6.0.5 is failing mypy
# because of https://github.com/python/typeshed/pull/10531
types-redis==4.6.0.4,
types-pytz,
types-croniter,
types-PyYAML,

View File

@@ -83,6 +83,7 @@ enable=
# no Warning level messages displayed, use"--disable=all --enable=classes
# --disable=W"
disable=
no-member, # re-enable once this no longer raises false positives. This will become redundant after the min required version is 3.11
missing-docstring,
duplicate-code,
unspecified-encoding,

View File

@@ -19,16 +19,797 @@ under the License.
## Change Log
- [3.0.0](#300-thu-aug-24-133627-2023--0600)
- [2.1.1](#211-sun-apr-23-154421-2023-0100)
- [2.1.0](#210-thu-mar-16-211305-2023--0700)
- [2.0.1](#201-fri-nov-4-103402-2022--0400)
- [2.0.0](#200-tue-jun-28-085302-2022--0400)
- [1.5.3 (LTS)](#153-thu-jan-5-150544-2023--0500)
- [1.5.3](#153-thu-jan-5-150544-2023--0500)
- [1.5.2](#152-wed-sep-14-171151-2022-0530)
- [1.5.1](#151-thu-may-26-144520-2022-0300)
- [1.5.0](#150-fri-apr-22-172330-2022--0400)
- [1.4.2](#142-sat-mar-19-000806-2022-0200)
- [1.4.1](#141)
### 3.0.0 (Thu Aug 24 13:36:27 2023 -0600)
**Database Migrations**
- [#25053](https://github.com/apache/superset/pull/25053) fix: extend user email size (@dpgaspar)
- [#24982](https://github.com/apache/superset/pull/24982) fix(snowflake): opt-in denormalization of column names (@villebro)
- [#24939](https://github.com/apache/superset/pull/24939) chore: Add explicit ON DELETE CASCADE for embedded_dashboards (@john-bodley)
- [#24938](https://github.com/apache/superset/pull/24938) chore: Add explicit ON DELETE CASCADE for dashboard_slices (@john-bodley)
- [#24911](https://github.com/apache/superset/pull/24911) fix(logs): increase json field for logs table (@cnabro)
- [#24884](https://github.com/apache/superset/pull/24884) fix: Migration to fix out of sync schema_perm in charts and datasets (@jfrag1)
- [#24831](https://github.com/apache/superset/pull/24831) fix(migration): Ensure cascadeParentIds key exists (@john-bodley)
- [#24510](https://github.com/apache/superset/pull/24510) fix(dashboard): increase json_metadata field (@cnabro)
- [#24749](https://github.com/apache/superset/pull/24749) fix(native filter): clean deleted parent filter ids (@justinpark)
- [#24737](https://github.com/apache/superset/pull/24737) fix(druid): Delete obsolete Druid NoSQL slice parameters (@john-bodley)
- [#24628](https://github.com/apache/superset/pull/24628) chore(dao): Add explicit ON DELETE CASCADE for ownership (@john-bodley)
- [#24661](https://github.com/apache/superset/pull/24661) fix: Ensure config is a dict in cross filters scope migration (@kgabryje)
- [#24629](https://github.com/apache/superset/pull/24629) chore: Drop rouge constraints and tables (@john-bodley)
- [#24558](https://github.com/apache/superset/pull/24558) chore: better styling alerts/reports modal (@betodealmeida)
- [#24547](https://github.com/apache/superset/pull/24547) feat: customize screenshot width for alerts/reports (@betodealmeida)
- [#24553](https://github.com/apache/superset/pull/24553) feat: add description column to Tags (@hughhhh)
- [#24548](https://github.com/apache/superset/pull/24548) fix: heads (@betodealmeida)
- [#24488](https://github.com/apache/superset/pull/24488) chore(dao): Add explicit ON DELETE CASCADE when deleting datasets (@john-bodley)
- [#24517](https://github.com/apache/superset/pull/24517) feat: Implement currencies formatter for saved metrics (@kgabryje)
- [#24266](https://github.com/apache/superset/pull/24266) chore: Remove deprecated ENABLE_ACCESS_REQUEST workflow (@john-bodley)
- [#23910](https://github.com/apache/superset/pull/23910) feat: Migrates Dual Line Chart to Mixed Chart (@michael-s-molina)
- [#23741](https://github.com/apache/superset/pull/23741) feat: Migrates TreeMap chart (@michael-s-molina)
- [#23712](https://github.com/apache/superset/pull/23712) feat: Migrates Pivot Table v1 to v2 (@michael-s-molina)
- [#24306](https://github.com/apache/superset/pull/24306) chore: reorder k-v migration for 2.1.1 (@villebro)
- [#24280](https://github.com/apache/superset/pull/24280) fix: ensure json is not None (@eschutho)
- [#24197](https://github.com/apache/superset/pull/24197) chore(pre-commit): Add pyupgrade and pycln hooks (@john-bodley)
- [#24127](https://github.com/apache/superset/pull/24127) chore: Embrace the walrus operator (@john-bodley)
- [#24020](https://github.com/apache/superset/pull/24020) feat: Cross filters scoping (@kgabryje)
- [#23942](https://github.com/apache/superset/pull/23942) fix: update migration chart_ds_constraint to have seperate batch op (@hughhhh)
- [#23925](https://github.com/apache/superset/pull/23925) fix(migration): add log for values unseen in `Slice.datasource_type` (@hughhhh)
- [#23614](https://github.com/apache/superset/pull/23614) chore: add check constraint to restrict `Slice` models datasource_type != "table" (@hughhhh)
- [#23650](https://github.com/apache/superset/pull/23650) fix(migration): Only attempt to drop types if they exist (@jfrag1)
- [#23526](https://github.com/apache/superset/pull/23526) fix(tags): convert postgres enum type to varchar (@nytai)
- [#23410](https://github.com/apache/superset/pull/23410) feat(echarts): Implement stream graph for Echarts Timeseries (@kgabryje)
- [#23173](https://github.com/apache/superset/pull/23173) chore: Update pre-commit packages (@hughhhh)
- [#23276](https://github.com/apache/superset/pull/23276) fix(migration): Address issue in #23228 (@john-bodley)
- [#23273](https://github.com/apache/superset/pull/23273) fix(plugin-chart-echarts): render horizontal categories from top (@villebro)
- [#23228](https://github.com/apache/superset/pull/23228) chore: Deprecate show_native_filters (@john-bodley)
- [#19677](https://github.com/apache/superset/pull/19677) chore(backend): Spelling (@jsoref)
**Features**
- [#24960](https://github.com/apache/superset/pull/24960) feat: Adds options to show subtotals in Pivot Table (@michael-s-molina)
- [#24703](https://github.com/apache/superset/pull/24703) feat: migrate charts on import (@betodealmeida)
- [#24433](https://github.com/apache/superset/pull/24433) feat: use Scarf Gateway for Superset npm downloads (@arjundevarajan)
- [#24432](https://github.com/apache/superset/pull/24432) feat: use Scarf Gateway for Superset helm charts/Docker compose downloads (@arjundevarajan)
- [#24329](https://github.com/apache/superset/pull/24329) feat(sqllab): add shortcut for run current sql (@justinpark)
- [#24594](https://github.com/apache/superset/pull/24594) feat: Implement support for currencies in more charts (@kgabryje)
- [#24549](https://github.com/apache/superset/pull/24549) feat: screenshot reports with custom width (@betodealmeida)
- [#24518](https://github.com/apache/superset/pull/24518) feat(tags): move tags from navbar to settings (@hughhhh)
- [#24277](https://github.com/apache/superset/pull/24277) feat(docker): Add support LDAP/AD authorization (@alekseyolg)
- [#24388](https://github.com/apache/superset/pull/24388) feat: Allows new values for single value filters (@michael-s-molina)
- [#24287](https://github.com/apache/superset/pull/24287) feat: add dashboard page full xlsx export (@vitoldi)
- [#24368](https://github.com/apache/superset/pull/24368) feat: make data tables support html (@mistercrunch)
- [#24369](https://github.com/apache/superset/pull/24369) feat(sshtunnel): add configuration for SSH_TIMEOUT (@hughhhh)
- [#24348](https://github.com/apache/superset/pull/24348) feat: add a tooltip to clarify metric_name in the DatasetEditor (@mistercrunch)
- [#24043](https://github.com/apache/superset/pull/24043) feat: Configurable default row limit for native filters (@cleslie)
- [#24345](https://github.com/apache/superset/pull/24345) feat: Convert ENABLE_BROAD_ACTIVITY_ACCESS and MENU_HIDE_USER_INFO into feature flags (@michael-s-molina)
- [#23943](https://github.com/apache/superset/pull/23943) feat: Removes the preset-chart-xy plugin (@michael-s-molina)
- [#23933](https://github.com/apache/superset/pull/23933) feat: Removes the Multiple Line Charts (@michael-s-molina)
- [#24237](https://github.com/apache/superset/pull/24237) feat: support complex types and use get_columns implementation of starrrocks python client (@miomiocat)
- [#24205](https://github.com/apache/superset/pull/24205) feat(sqllab): SQLEditor Extension (@Antonio-RiveroMartnez)
- [#24232](https://github.com/apache/superset/pull/24232) feat(flags): enabling and deprecating a few feature flags (@rusackas)
- [#24191](https://github.com/apache/superset/pull/24191) feat: extension hook for DB delete (@betodealmeida)
- [#23209](https://github.com/apache/superset/pull/23209) feat: Add StarRocks support (@miomiocat)
- [#24067](https://github.com/apache/superset/pull/24067) feat: split database information (@betodealmeida)
- [#23551](https://github.com/apache/superset/pull/23551) feat: Add deck.gl Heatmap Visualization (@Mattc1221)
- [#24005](https://github.com/apache/superset/pull/24005) feat: dashboard page xlsx export (@vitoldi)
- [#23174](https://github.com/apache/superset/pull/23174) feat: database extension registry (@betodealmeida)
- [#24048](https://github.com/apache/superset/pull/24048) feat: Make time shifted series colors match the original series (@michael-s-molina)
- [#23035](https://github.com/apache/superset/pull/23035) feat: Use AntD table in FilterableTable (@EugeneTorap)
- [#24035](https://github.com/apache/superset/pull/24035) feat: implement time grain in temporal filters (@villebro)
- [#23970](https://github.com/apache/superset/pull/23970) feat(chart-controls): Show detailed data type tooltip when hovering type icon (@ved-kashyap-samsung)
- [#23890](https://github.com/apache/superset/pull/23890) feat!: bump to Python3.9 (@sebastianliebscher)
- [#23975](https://github.com/apache/superset/pull/23975) feat: Allows dynamic type on viz migrations (@michael-s-molina)
- [#23917](https://github.com/apache/superset/pull/23917) feat: Adds a control to set the Secondary Y-axis bounds in Mixed charts (@michael-s-molina)
- [#23905](https://github.com/apache/superset/pull/23905) feat: Considers GENERIC_CHART_AXES in viz migrations (@michael-s-molina)
- [#20075](https://github.com/apache/superset/pull/20075) feat: custom d3 number locale (@ebaratte)
- [#23869](https://github.com/apache/superset/pull/23869) feat: Changes the Select component to preserve the search value when selecting (@michael-s-molina)
- [#23064](https://github.com/apache/superset/pull/23064) feat: conditional coloring for big number chart (@gbusch)
- [#23698](https://github.com/apache/superset/pull/23698) feat: format timestamps in drill by breadcrumbs (@lilykuang)
- [#23655](https://github.com/apache/superset/pull/23655) feat: add verbose map to get /dataset/ endpoint (@lilykuang)
- [#23716](https://github.com/apache/superset/pull/23716) feat: create dtype option for csv upload (@eschutho)
- [#23777](https://github.com/apache/superset/pull/23777) feat(revert): Re-introduces the RLS page (@michael-s-molina)
- [#22812](https://github.com/apache/superset/pull/22812) feat: Add Ocient support (@alexclavel-ocient)
- [#23768](https://github.com/apache/superset/pull/23768) feat: Display both queries result in Table mode for Mixed Chart in drill by modal (@kgabryje)
- [#23269](https://github.com/apache/superset/pull/23269) feat(native-filters): Add legacy (filter-box) to native filter migration script (@john-bodley)
- [#23748](https://github.com/apache/superset/pull/23748) feat(adhoc-column): add resize option (@villebro)
- [#23724](https://github.com/apache/superset/pull/23724) feat: Drill by error management (@kgabryje)
- [#23634](https://github.com/apache/superset/pull/23634) feat: Makes "Add to dashboard" in Save chart modal paginated (@michael-s-molina)
- [#23697](https://github.com/apache/superset/pull/23697) feat: Add loading state to sqllab save/overwrite dataset modal (@jfrag1)
- [#23720](https://github.com/apache/superset/pull/23720) feat(sqllab): add headers when copying results to clipboard (@villebro)
- [#23707](https://github.com/apache/superset/pull/23707) feat(helm): update redis version due to critical CVE (HIGH PRIORITY) (@justmike1)
- [#23664](https://github.com/apache/superset/pull/23664) feat: Implement breadcrumbs in Drill By modal (@kgabryje)
- [#23644](https://github.com/apache/superset/pull/23644) feat(plugin-chart-echarts): add x-axis sort to multi series (@villebro)
- [#23615](https://github.com/apache/superset/pull/23615) feat: Support further drill by in the modal (@kgabryje)
- [#23657](https://github.com/apache/superset/pull/23657) feat(dashboard): make color indices referable (@villebro)
- [#23603](https://github.com/apache/superset/pull/23603) feat: implement drill by table (@lilykuang)
- [#23402](https://github.com/apache/superset/pull/23402) feat(lang): update messages.po(t) and add missing German translations (@hbruch)
- [#23328](https://github.com/apache/superset/pull/23328) feat(wrap-text): Wrap text support for specific columns in Grid (@SamraHanifCareem)
- [#23601](https://github.com/apache/superset/pull/23601) feat(helm): ability to disable helm hooks (@justmike1)
- [#23602](https://github.com/apache/superset/pull/23602) feat(snowflake): `get_catalog_names` (@betodealmeida)
- [#23599](https://github.com/apache/superset/pull/23599) feat(presto): `get_catalog_names` (@betodealmeida)
- [#23547](https://github.com/apache/superset/pull/23547) feat: Shows user charts by default when editing a dashboard (@michael-s-molina)
- [#23590](https://github.com/apache/superset/pull/23590) feat: Enables ECharts legend selector (@michael-s-molina)
- [#23594](https://github.com/apache/superset/pull/23594) feat(helm): Upgrade default Superset version to 2.1.0 (@dnskr)
- [#23461](https://github.com/apache/superset/pull/23461) feat(bigquery): `get_catalog_names` (@betodealmeida)
- [#23575](https://github.com/apache/superset/pull/23575) feat: Drill by open in Explore (@kgabryje)
- [#23542](https://github.com/apache/superset/pull/23542) feat: Add metadata bar to drill by modal (@kgabryje)
- [#23524](https://github.com/apache/superset/pull/23524) feat: drill by display chart (@lilykuang)
- [#23509](https://github.com/apache/superset/pull/23509) feat(cross-filters): using verbose map in applied cross-filters (@Always-prog)
- [#23439](https://github.com/apache/superset/pull/23439) feat: add ability to disable cache (@villebro)
- [#23458](https://github.com/apache/superset/pull/23458) feat: drill by modal (@lilykuang)
- [#23454](https://github.com/apache/superset/pull/23454) feat: Implement context menu for drill by (@kgabryje)
- [#23416](https://github.com/apache/superset/pull/23416) feat(helm): add nodeselector and tolerations to init job (@dim-ops)
- [#23459](https://github.com/apache/superset/pull/23459) feat: Allows reload on default filter value error (@michael-s-molina)
- [#23447](https://github.com/apache/superset/pull/23447) feat(DB engine spec): `get_catalog_names` (@betodealmeida)
- [#23450](https://github.com/apache/superset/pull/23450) feat(echarts): Add x axis sort by to all series charts (@kgabryje)
- [#23415](https://github.com/apache/superset/pull/23415) feat: add new cache_query_by_user key (@eschutho)
- [#23377](https://github.com/apache/superset/pull/23377) feat(sqllab): log error_detail on fetch failed (@justinpark)
- [#23338](https://github.com/apache/superset/pull/23338) feat(chart): Added SriLanka country map (@rukshn)
- [#23401](https://github.com/apache/superset/pull/23401) feat(postgresql): dynamic schema (@betodealmeida)
- [#23392](https://github.com/apache/superset/pull/23392) feat(plugin-chart-echarts): add series sorting (@villebro)
- [#23319](https://github.com/apache/superset/pull/23319) feat(native-filters): allow cascading from time and numeric filters (@villebro)
- [#23350](https://github.com/apache/superset/pull/23350) feat(dashboard): Change default opacity of icon in FiltersBadge (@kgabryje)
- [#23286](https://github.com/apache/superset/pull/23286) feat(dashboard): Refactor FiltersBadge (@kgabryje)
- [#23287](https://github.com/apache/superset/pull/23287) feat(docs): adds BugHerd to documentation site. (@rusackas)
- [#23274](https://github.com/apache/superset/pull/23274) feat(generic-x-axis): add x sorting on series limit metric (@villebro)
- [#23138](https://github.com/apache/superset/pull/23138) feat: Cross Filters in FilterBar (@geido)
- [#23099](https://github.com/apache/superset/pull/23099) feat(ssh_tunnel): Import/Export Databases with SSHTunnel credentials (@Antonio-RiveroMartnez)
- [#23141](https://github.com/apache/superset/pull/23141) feat(dashboard): Add cross filter from context menu (@kgabryje)
- [#22886](https://github.com/apache/superset/pull/22886) feat: Enable cross fitlers in WorldMap and Graph charts (@kgabryje)
- [#23143](https://github.com/apache/superset/pull/23143) feat: return UUID on database creation (@betodealmeida)
- [#20876](https://github.com/apache/superset/pull/20876) feat: Frontend tagging (@cccs-RyanK)
**Fixes**
- [#25074](https://github.com/apache/superset/pull/25074) fix: Cross filters initial scope (@michael-s-molina)
- [#24008](https://github.com/apache/superset/pull/24008) fix(table): condition formatting can't formate 0 values (@Always-prog)
- [#21255](https://github.com/apache/superset/pull/21255) fix(cli): import-directory is missing the application context (@rdubois)
- [#25031](https://github.com/apache/superset/pull/25031) fix: Ensure SQLAlchemy sessions are closed (@john-bodley)
- [#24686](https://github.com/apache/superset/pull/24686) fix: dataset safe URL for explore_url (@dpgaspar)
- [#25057](https://github.com/apache/superset/pull/25057) fix: Error when using the legacy dataset editor (@michael-s-molina)
- [#25029](https://github.com/apache/superset/pull/25029) fix: Native filter dashboard RBAC aware dataset permission (@john-bodley)
- [#25055](https://github.com/apache/superset/pull/25055) fix: docker-compose non-dev (@michael-s-molina)
- [#24999](https://github.com/apache/superset/pull/24999) fix(mssql): avoid trying to return a resultset for DML queries with not resultset (@Yuval-Moshe)
- [#25014](https://github.com/apache/superset/pull/25014) fix: CTE queries with non-SELECT statements (@dpgaspar)
- [#25028](https://github.com/apache/superset/pull/25028) fix: Dashboard fullscreen is removing custom URL params (@michael-s-molina)
- [#25008](https://github.com/apache/superset/pull/25008) fix: Address regression introduced in #24789 (@john-bodley)
- [#24991](https://github.com/apache/superset/pull/24991) fix: Don't let users see dashboards only because it's favorited (@jfrag1)
- [#25017](https://github.com/apache/superset/pull/25017) fix: Downgrades Prophet to 1.1.1 and Holidays to 0.23 (@michael-s-molina)
- [#25009](https://github.com/apache/superset/pull/25009) fix: Date column in Heatmap is displayed as unix timestamp (@michael-s-molina)
- [#24965](https://github.com/apache/superset/pull/24965) fix(sqllab): scroll position after run current sql (@justinpark)
- [#24989](https://github.com/apache/superset/pull/24989) fix: Calendar Heatmap day offset (@michael-s-molina)
- [#24906](https://github.com/apache/superset/pull/24906) fix: Duplicated options in Select when using numerical values (@michael-s-molina)
- [#24959](https://github.com/apache/superset/pull/24959) fix: Tooltips don't disappear on the Heatmap chart (@michael-s-molina)
- [#24953](https://github.com/apache/superset/pull/24953) fix: calls to `_get_sqla_engine` (@betodealmeida)
- [#24903](https://github.com/apache/superset/pull/24903) fix(charts): View in SQL Lab with relevant perm (@giftig)
- [#24946](https://github.com/apache/superset/pull/24946) fix: remove unused file (@mdeshmu)
- [#24806](https://github.com/apache/superset/pull/24806) fix: Dashboard aware RBAC "Save as" menu item (@john-bodley)
- [#24916](https://github.com/apache/superset/pull/24916) fix: Tooltip of area chart shows undefined total (@michael-s-molina)
- [#24886](https://github.com/apache/superset/pull/24886) fix(explore): double resize triggered (@justinpark)
- [#24789](https://github.com/apache/superset/pull/24789) fix: Dashboard aware RBAC dataset permission (@john-bodley)
- [#24892](https://github.com/apache/superset/pull/24892) fix: revert "fix(embedded): adding logic to check dataset used by filters (#24808) (@john-bodley)
- [#24829](https://github.com/apache/superset/pull/24829) fix(dataset): resizable dataset layout left column (@justinpark)
- [#24876](https://github.com/apache/superset/pull/24876) fix(explore): invalid "No Filter" applied (@justinpark)
- [#24874](https://github.com/apache/superset/pull/24874) fix(annotation): Address regression from #24694 (@john-bodley)
- [#24849](https://github.com/apache/superset/pull/24849) fix: validation errors appearing after ssh tunnel switch (@hughhhh)
- [#24862](https://github.com/apache/superset/pull/24862) fix: Explore misleading save action (@michael-s-molina)
- [#24847](https://github.com/apache/superset/pull/24847) fix(sqllab): Add docText for long keyword (@justinpark)
- [#24850](https://github.com/apache/superset/pull/24850) fix(legacy-chart): corrupted raw chart data (@justinpark)
- [#24846](https://github.com/apache/superset/pull/24846) fix: Links in tooltips of dashboard chart cards (@michael-s-molina)
- [#24808](https://github.com/apache/superset/pull/24808) fix(embedded): adding logic to check dataset used by filters (@Vitor-Avila)
- [#24803](https://github.com/apache/superset/pull/24803) fix: Python3.11 (str, Enum) issue (@EugeneTorap)
- [#24796](https://github.com/apache/superset/pull/24796) fix(datasets): give possibility to add dataset with slashes in name (@Always-prog)
- [#24821](https://github.com/apache/superset/pull/24821) fix: Allow chart import to update the dataset an existing chart points to (@jfrag1)
- [#24814](https://github.com/apache/superset/pull/24814) fix: Removes unnecessary query on filters (@michael-s-molina)
- [#24815](https://github.com/apache/superset/pull/24815) fix: pass schema on dataset creation (@betodealmeida)
- [#24801](https://github.com/apache/superset/pull/24801) fix: Filters alert width (@michael-s-molina)
- [#24677](https://github.com/apache/superset/pull/24677) fix(sqllab): Replace autocomplete logic by a hook (@justinpark)
- [#24816](https://github.com/apache/superset/pull/24816) fix: docs invalid client redirect (@dpgaspar)
- [#23988](https://github.com/apache/superset/pull/23988) fix: Department names fixed for CountryMap of France (@xavier-GitHub76)
- [#24798](https://github.com/apache/superset/pull/24798) fix(chore): switching between languages should be without timeout 60 seconds (@Always-prog)
- [#24772](https://github.com/apache/superset/pull/24772) fix(sqllab): Replace margin style by gap on query results (@justinpark)
- [#24698](https://github.com/apache/superset/pull/24698) fix: Select onChange is being fired without explicit selection (@michael-s-molina)
- [#24747](https://github.com/apache/superset/pull/24747) fix: update svgr webpack config to use svg dimensions (@eschutho)
- [#23816](https://github.com/apache/superset/pull/23816) fix(docs): respect no_proxy environment variable (@karsten-wagner)
- [#24756](https://github.com/apache/superset/pull/24756) fix: Tooltip no longer highlights hovered data series (@michael-s-molina)
- [#24740](https://github.com/apache/superset/pull/24740) fix: column/metric type icons look too small (@mistercrunch)
- [#24739](https://github.com/apache/superset/pull/24739) fix: `search_path` in RDS (@betodealmeida)
- [#24599](https://github.com/apache/superset/pull/24599) fix(datasets): Replace left panel layout by TableSelector (@justinpark)
- [#24710](https://github.com/apache/superset/pull/24710) fix(pvt2): migrations from legacy pivot table error when form_data have pieces of pvt2 (@Always-prog)
- [#24746](https://github.com/apache/superset/pull/24746) fix: Dashboard time grain in Table (@michael-s-molina)
- [#24716](https://github.com/apache/superset/pull/24716) fix(range-slider): removed localization of metric key (@Always-prog)
- [#24671](https://github.com/apache/superset/pull/24671) fix(cache): Add cache warmup for non-legacy charts (@john-bodley)
- [#24670](https://github.com/apache/superset/pull/24670) fix: color collision in dashboard with tabs (@lilykuang)
- [#24663](https://github.com/apache/superset/pull/24663) fix(dataset-import): support empty strings for extra fields (@Vitor-Avila)
- [#24690](https://github.com/apache/superset/pull/24690) fix: embedded dashboard check (@betodealmeida)
- [#24665](https://github.com/apache/superset/pull/24665) fix: Dashboard time grain in Pivot Table (@michael-s-molina)
- [#24611](https://github.com/apache/superset/pull/24611) fix(sqllab): missing column meta on autocomplete (@justinpark)
- [#24630](https://github.com/apache/superset/pull/24630) fix: Chart can be added to dashboard by non-owner via save as option (@jfrag1)
- [#24642](https://github.com/apache/superset/pull/24642) fix: Incorrect initial global scoping of cross filters (@kgabryje)
- [#24610](https://github.com/apache/superset/pull/24610) fix: Validation of out of scope filters and interaction with Clear All (@michael-s-molina)
- [#24646](https://github.com/apache/superset/pull/24646) fix: CSP, bump FAB to 4.3.4 (@dpgaspar)
- [#24625](https://github.com/apache/superset/pull/24625) fix: fix extra insert for count on dataset creation (@hughhhh)
- [#24643](https://github.com/apache/superset/pull/24643) fix: Ensure metrics is an array in Mixed Chart (@kgabryje)
- [#24644](https://github.com/apache/superset/pull/24644) fix: remove spaces and EOL from nonce attr (@dpgaspar)
- [#24617](https://github.com/apache/superset/pull/24617) fix: Wrong positioning of filter tooltips on scroll (@michael-s-molina)
- [#24609](https://github.com/apache/superset/pull/24609) fix: change naming convention for count metric on Dataset creation (@hughhhh)
- [#24567](https://github.com/apache/superset/pull/24567) fix: remove underscore from builtin_time_grains label (@cnabro)
- [#24608](https://github.com/apache/superset/pull/24608) fix: Incorrect dependency between filters related feature flags (@michael-s-molina)
- [#24612](https://github.com/apache/superset/pull/24612) fix(report): edit without custom width (@betodealmeida)
- [#24552](https://github.com/apache/superset/pull/24552) fix(ssh): Editting Database w/ SSH Tunneling (@hughhhh)
- [#24556](https://github.com/apache/superset/pull/24556) fix: set max version for pyocient (@jwilliams-ocient)
- [#24129](https://github.com/apache/superset/pull/24129) fix: Bump prophet, re-enable tests, and remedy column eligibility logic (@john-bodley)
- [#24593](https://github.com/apache/superset/pull/24593) fix: Clicking on a tag in the dashboard and charts lists does not work (@michael-s-molina)
- [#24196](https://github.com/apache/superset/pull/24196) fix: SSH Tunnel creation with dynamic form (@hughhhh)
- [#24555](https://github.com/apache/superset/pull/24555) fix: Metric is truncated in tooltip (@michael-s-molina)
- [#24565](https://github.com/apache/superset/pull/24565) fix: docker compose refusing to start (@dpgaspar)
- [#24536](https://github.com/apache/superset/pull/24536) fix(sqllab): Add threshold for checking inactive queries (@justinpark)
- [#24546](https://github.com/apache/superset/pull/24546) fix: Error when searching for a dashboard in the chart list (@michael-s-molina)
- [#24550](https://github.com/apache/superset/pull/24550) fix: Deque mutated during iteration (@michael-s-molina)
- [#24541](https://github.com/apache/superset/pull/24541) fix(docs): Typo in filter migration. (@Hikari)
- [#24475](https://github.com/apache/superset/pull/24475) fix(translations): typo mistake (translation to Spanish) (@santi-pragma)
- [#24519](https://github.com/apache/superset/pull/24519) fix: SQL Lab - correct setting name from DISPLAY_MAX_ROWS to DISPLAY_MAX_ROW (@jgillick)
- [#24537](https://github.com/apache/superset/pull/24537) fix: Use Celery task ETA for alert/report schedule (@john-bodley)
- [#24545](https://github.com/apache/superset/pull/24545) fix: Revert enable strong session protection by default (#24256) (@michael-s-molina)
- [#24544](https://github.com/apache/superset/pull/24544) fix: Release scripts Python version (@michael-s-molina)
- [#24542](https://github.com/apache/superset/pull/24542) fix(native-filters): Infinite load when filter with default first value is out of scope in horizontal bar (@kgabryje)
- [#24492](https://github.com/apache/superset/pull/24492) fix(charts): big-number display broken in echarts (@curious86)
- [#24506](https://github.com/apache/superset/pull/24506) fix: Native filter dynamic numeric search (@john-bodley)
- [#24477](https://github.com/apache/superset/pull/24477) fix: Total calculation in stacked Timeseries charts (@michael-s-molina)
- [#24471](https://github.com/apache/superset/pull/24471) fix(oracle): denormalize column names where applicable (@villebro)
- [#24476](https://github.com/apache/superset/pull/24476) fix: Revert enabling CSP (@kgabryje)
- [#24418](https://github.com/apache/superset/pull/24418) fix: Native filter dynamic numeric search (@john-bodley)
- [#24447](https://github.com/apache/superset/pull/24447) fix(charts): Fix chart load task error handling (@giftig)
- [#24405](https://github.com/apache/superset/pull/24405) fix: creating a new chart with dashboard time filters but filter can't apply again (@lilykuang)
- [#24434](https://github.com/apache/superset/pull/24434) fix: Revert to old endpoint temporarily to enable sharing saved queries (@jfrag1)
- [#24248](https://github.com/apache/superset/pull/24248) fix: save columns reference from sqllab save datasets flow (@hughhhh)
- [#24429](https://github.com/apache/superset/pull/24429) fix: Viz migration adjustments - 2 (@michael-s-molina)
- [#24440](https://github.com/apache/superset/pull/24440) fix(translations): regularise the capitalisation of 'CSV' in en localisation (@stuartyeates)
- [#24410](https://github.com/apache/superset/pull/24410) fix: force data load on import examples (@eschutho)
- [#24422](https://github.com/apache/superset/pull/24422) fix(sql-lab): remove redundant onChange schema property (@villebro)
- [#24420](https://github.com/apache/superset/pull/24420) fix: FE call to changed recent_activity endpoint (@dpgaspar)
- [#24428](https://github.com/apache/superset/pull/24428) fix: deck.gl Geojson path not visible (@kgabryje)
- [#24392](https://github.com/apache/superset/pull/24392) fix: Fixes #24391 (Problems with celery beat running with docker when the machine is rebooted suddenly) (@alvarolmedo)
- [#24221](https://github.com/apache/superset/pull/24221) fix(helm): Add fullname prefix to init job (@NickLarsenNZ)
- [#24121](https://github.com/apache/superset/pull/24121) fix: Address regression introduced in #22853 (@john-bodley)
- [#24143](https://github.com/apache/superset/pull/24143) fix: Ensure "Import Dashboard" menu item adheres to PVM (@john-bodley)
- [#24350](https://github.com/apache/superset/pull/24350) fix: Address dashboard permission regression in #23586 (@john-bodley)
- [#24363](https://github.com/apache/superset/pull/24363) fix: deck.gl Scatterplot min/max radius (@kgabryje)
- [#24344](https://github.com/apache/superset/pull/24344) fix(sqllab): Inefficient SqlaTable query (#24343) (@giftig)
- [#24341](https://github.com/apache/superset/pull/24341) fix: Viz migration adjustments - 1 (@michael-s-molina)
- [#24317](https://github.com/apache/superset/pull/24317) fix: update order of build for testing a release (@eschutho)
- [#24303](https://github.com/apache/superset/pull/24303) fix: Copy dashboard filters when copying dashboard (@jfrag1)
- [#24176](https://github.com/apache/superset/pull/24176) fix: Time shifts with different granularity for ECharts (@michael-s-molina)
- [#24315](https://github.com/apache/superset/pull/24315) fix: DB extension collapse (@betodealmeida)
- [#19808](https://github.com/apache/superset/pull/19808) fix(sql-lab): SQL Lab commit connection even if no CTA query is made (@snt1017)
- [#24265](https://github.com/apache/superset/pull/24265) fix(capitalization): Capitalizing the 'metric' label in Pivot Tables (@rusackas)
- [#24304](https://github.com/apache/superset/pull/24304) fix(dashboard): max call size stack error (@justinpark)
- [#24293](https://github.com/apache/superset/pull/24293) fix: Removes file extension from textUtils (@michael-s-molina)
- [#24291](https://github.com/apache/superset/pull/24291) fix: Text utils null value when reading module (@michael-s-molina)
- [#24279](https://github.com/apache/superset/pull/24279) fix(migrations): Fixing cross filter migration (@craig-rueda)
- [#24279](https://github.com/apache/superset/pull/24279) fix(migrations): Fixing cross filter migration (@craig-rueda)
- [#24256](https://github.com/apache/superset/pull/24256) fix: enable strong session protection by default (@dpgaspar)
- [#23562](https://github.com/apache/superset/pull/23562) fix(docs): Update databricks.mdx with correct pip package name (@amosdoublec)
- [#24217](https://github.com/apache/superset/pull/24217) fix: Typescript warnings when importing types (@michael-s-molina)
- [#24222](https://github.com/apache/superset/pull/24222) fix(helm): Use correct default hostnames for postgres and redis (@NickLarsenNZ)
- [#24242](https://github.com/apache/superset/pull/24242) fix(dataset-api): allow undefined schema in post (@villebro)
- [#24207](https://github.com/apache/superset/pull/24207) fix: removing problematic "formattable" tag (@rusackas)
- [#24223](https://github.com/apache/superset/pull/24223) fix: Tag link issue from CRUD page (@hughhhh)
- [#24181](https://github.com/apache/superset/pull/24181) fix(translation): complete portuguese(brazilian) translation (@lucas1221)
- [#24177](https://github.com/apache/superset/pull/24177) fix(explore): rendering regression on standalone (@justinpark)
- [#24186](https://github.com/apache/superset/pull/24186) fix(plugin-chart-echarts): force min y-tick for log axis with zero (@villebro)
- [#24060](https://github.com/apache/superset/pull/24060) fix: always allow tags to be returned via the API (@hughhhh)
- [#24142](https://github.com/apache/superset/pull/24142) fix(sqllab): Table options rendering regression (@justinpark)
- [#24113](https://github.com/apache/superset/pull/24113) fix: Errors when saving dataset (@jfrag1)
- [#24158](https://github.com/apache/superset/pull/24158) fix(table): percentage metric should use verbose map (@Always-prog)
- [#24159](https://github.com/apache/superset/pull/24159) fix(reports): error when creation alert/report with localization (@Always-prog)
- [#23762](https://github.com/apache/superset/pull/23762) fix: repeated color in the same chart (@lilykuang)
- [#24124](https://github.com/apache/superset/pull/24124) fix: Revert tox basepython (@john-bodley)
- [#24134](https://github.com/apache/superset/pull/24134) fix(plugin-chart-echarts): normalize temporal string groupbys (@villebro)
- [#24120](https://github.com/apache/superset/pull/24120) fix(sqllab): Disable Select All on table selector (@justinpark)
- [#24114](https://github.com/apache/superset/pull/24114) fix(ci): remove username from owner (@villebro)
- [#23814](https://github.com/apache/superset/pull/23814) fix(ocient): convert pyocient GIS data types to geoJSON (@jwilliams-ocient)
- [#23867](https://github.com/apache/superset/pull/23867) fix(docs): Installation instruction changes (@artofcomputing)
- [#24070](https://github.com/apache/superset/pull/24070) fix(alert modal): set current user as default alert owner during new alert initialization (@curious86)
- [#24068](https://github.com/apache/superset/pull/24068) fix: Handle python_date_format in ExploreMixin (@john-bodley)
- [#24062](https://github.com/apache/superset/pull/24062) fix: handle `python_date_format` in ExploreMixin (@betodealmeida)
- [#24028](https://github.com/apache/superset/pull/24028) fix: typing and using enter to select the table on sql lab layout (@lilykuang)
- [#24009](https://github.com/apache/superset/pull/24009) fix(sqllab): rollback clean comments out (@justinpark)
- [#23971](https://github.com/apache/superset/pull/23971) fix: MySQL et al. super calls (@john-bodley)
- [#23715](https://github.com/apache/superset/pull/23715) fix(filters): Stop breaking if translateToSql returns an object (@Antonio-RiveroMartnez)
- [#23952](https://github.com/apache/superset/pull/23952) fix(sqllab): custom url params disappeared (@justinpark)
- [#23935](https://github.com/apache/superset/pull/23935) fix: methods incorrect type and update deprecated targets (@dpgaspar)
- [#23908](https://github.com/apache/superset/pull/23908) fix(sqllab): clean comments within quotes (@justinpark)
- [#23924](https://github.com/apache/superset/pull/23924) fix: timeout should be an integer (@betodealmeida)
- [#23892](https://github.com/apache/superset/pull/23892) fix(sql-editor): Fix run stop button color to improve usability (@curious86)
- [#23909](https://github.com/apache/superset/pull/23909) fix: remove feature flag for tags on Dashboard API for `Tags` (@hughhhh)
- [#23881](https://github.com/apache/superset/pull/23881) fix(native-filters): Address spelling mistakes (@john-bodley)
- [#23778](https://github.com/apache/superset/pull/23778) fix(chart): scrollbar keep flusing on and off (@justinpark)
- [#23868](https://github.com/apache/superset/pull/23868) fix: move dynamic schema out of base Postgres class (@hughhhh)
- [#23702](https://github.com/apache/superset/pull/23702) fix: npm run dev-server error resolved (@Abhishek-kumar-samsung)
- [#23872](https://github.com/apache/superset/pull/23872) fix(dremio): query with alias (@betodealmeida)
- [#23860](https://github.com/apache/superset/pull/23860) fix(alerts): flaky test error (@justinpark)
- [#23832](https://github.com/apache/superset/pull/23832) fix(native-filters): Address spelling mistakes (@john-bodley)
- [#23856](https://github.com/apache/superset/pull/23856) fix(tests): Ensure deterministic SELECT ordering for CSV upload tests (@john-bodley)
- [#23627](https://github.com/apache/superset/pull/23627) fix(chart): chart updates are not retained (@justinpark)
- [#23857](https://github.com/apache/superset/pull/23857) fix(ephemerals): Quick fix for ephemeral spin-up (@craig-rueda)
- [#23831](https://github.com/apache/superset/pull/23831) fix: Preserve filters from previous drillings in drill by (@kgabryje)
- [#23830](https://github.com/apache/superset/pull/23830) fix: Loading state when cols for drill by are loading (@kgabryje)
- [#23818](https://github.com/apache/superset/pull/23818) fix(revert): Reverts storybook-addon-mock inclusion (@michael-s-molina)
- [#23685](https://github.com/apache/superset/pull/23685) fix(utils): evaluate date parser multiple holiday results correctly (@arkid15r)
- [#23811](https://github.com/apache/superset/pull/23811) fix: Hide FiltersPanel in standalone mode 3 (@geido)
- [#23731](https://github.com/apache/superset/pull/23731) fix: pivot v2 charts created before `GENERIC_CHART_AXES` is enabled (@betodealmeida)
- [#23819](https://github.com/apache/superset/pull/23819) fix: Clean up docker-ephemeral-env secrets command (@michael-s-molina)
- [#23817](https://github.com/apache/superset/pull/23817) fix(rls api): Add missing init file (@jfrag1)
- [#23805](https://github.com/apache/superset/pull/23805) fix(sqllab): test failed due to legacy api url (@justinpark)
- [#23783](https://github.com/apache/superset/pull/23783) fix(datasource): saving new calculated columns (@Always-prog)
- [#23786](https://github.com/apache/superset/pull/23786) fix: Docker ephemeral env (@michael-s-molina)
- [#23797](https://github.com/apache/superset/pull/23797) fix: Context menu crashing when there is no dimension in Echarts Series charts (@kgabryje)
- [#23776](https://github.com/apache/superset/pull/23776) fix: [chart power query] error show when user input column with x-axis (@hughhhh)
- [#23779](https://github.com/apache/superset/pull/23779) fix(native-filters): Fix encoding of non-temporal default values (@john-bodley)
- [#23087](https://github.com/apache/superset/pull/23087) fix(sqllab): Persisting tab state for saved query (@piyush9923)
- [#23757](https://github.com/apache/superset/pull/23757) fix: Drill by modal resizing (@kgabryje)
- [#23754](https://github.com/apache/superset/pull/23754) fix: Further drilling by different groupby fields (@kgabryje)
- [#23758](https://github.com/apache/superset/pull/23758) fix: Make sure the DeprecatedSelect label is always a string (@michael-s-molina)
- [#23157](https://github.com/apache/superset/pull/23157) fix(cache): coerce schema_cache_timeout to None (@cemremengu)
- [#23747](https://github.com/apache/superset/pull/23747) fix(ace-editor): use monospace fonts by default (@villebro)
- [#23737](https://github.com/apache/superset/pull/23737) fix: get or create db with an existing invalid URL (@dpgaspar)
- [#23669](https://github.com/apache/superset/pull/23669) fix(sqllab): infinite running state on disconnect (@justinpark)
- [#22370](https://github.com/apache/superset/pull/22370) fix: is_select check for lowercase select with "WITH" clauses (@fcomuniz)
- [#23695](https://github.com/apache/superset/pull/23695) fix(sqllab): rendering performance regression (@justinpark)
- [#23686](https://github.com/apache/superset/pull/23686) fix: Database modal parameter inputs persisting after modal closed and reopened (@jfrag1)
- [#23675](https://github.com/apache/superset/pull/23675) fix(plugin-chart-echarts): reorder totals and support multimetric sort (@villebro)
- [#23117](https://github.com/apache/superset/pull/23117) fix(ci): Fix GitHub workflow behavior for forks (@jsoref)
- [#23692](https://github.com/apache/superset/pull/23692) fix: Further drill by in Pivot Table (@kgabryje)
- [#23649](https://github.com/apache/superset/pull/23649) fix: Zero values on Dual Line axis bounds (@michael-s-molina)
- [#23641](https://github.com/apache/superset/pull/23641) fix: url_params cache miss with global async query (@kekwan)
- [#23682](https://github.com/apache/superset/pull/23682) fix: allow for dependencies that could be undefined (@eschutho)
- [#23624](https://github.com/apache/superset/pull/23624) fix(docker): optimize docker build by better utilizing build cache (@sebastianliebscher)
- [#23671](https://github.com/apache/superset/pull/23671) fix(sqllab): Revert "rendering performance regression (#23653)" (@justinpark)
- [#23666](https://github.com/apache/superset/pull/23666) fix: presto CI failed test (@hughhhh)
- [#23604](https://github.com/apache/superset/pull/23604) fix: update log message for ALERT_REPORTS_NOTIFICATION_DRY_RUN (@nytai)
- [#23653](https://github.com/apache/superset/pull/23653) fix(sqllab): rendering performance regression (@justinpark)
- [#23637](https://github.com/apache/superset/pull/23637) fix: Removes Redux state mutations - iteration 3 (@michael-s-molina)
- [#23611](https://github.com/apache/superset/pull/23611) fix(saved_queries): wrong enum for object_type of saved_query (@akzarma)
- [#23396](https://github.com/apache/superset/pull/23396) fix(Gauge echart): displaying column label (@AkashBoora)
- [#22677](https://github.com/apache/superset/pull/22677) fix(localization): localize legacy pivot table (@artemonsh)
- [#23589](https://github.com/apache/superset/pull/23589) fix(charts): Time range filters are not being applied to charts that were overwritten (@Antonio-RiveroMartnez)
- [#23421](https://github.com/apache/superset/pull/23421) fix(#23176): adding URL decoding to SQLAlchemy URI (@RekhaZemoso)
- [#23617](https://github.com/apache/superset/pull/23617) fix: Error on Cypress test (@michael-s-molina)
- [#23588](https://github.com/apache/superset/pull/23588) fix: Disables email reports for unsaved charts (@michael-s-molina)
- [#23597](https://github.com/apache/superset/pull/23597) fix: Ensure verbose mapping exists for SQL Lab Query model (@john-bodley)
- [#23613](https://github.com/apache/superset/pull/23613) fix: Increases the options limit for Annotation Layers (@michael-s-molina)
- [#23587](https://github.com/apache/superset/pull/23587) fix(docker-compose): Make worker use correct healthcheck (#23455) (@sebastianliebscher)
- [#23129](https://github.com/apache/superset/pull/23129) fix(translation): correct translation errors for Chinese(zh) (@zRich)
- [#23585](https://github.com/apache/superset/pull/23585) fix: Ensure the reporting framework handles charts with no data (@john-bodley)
- [#23579](https://github.com/apache/superset/pull/23579) fix(revert): "fix: cache warmup solution non legacy charts. (#23012)" (@john-bodley)
- [#23535](https://github.com/apache/superset/pull/23535) fix: Removes Redux state mutations - iteration 2 (@michael-s-molina)
- [#23576](https://github.com/apache/superset/pull/23576) fix(dashboard): Cross filters badge for cols with verbose names (@kgabryje)
- [#23567](https://github.com/apache/superset/pull/23567) fix: QueryParamProvider error on backend rendered views (@michael-s-molina)
- [#23548](https://github.com/apache/superset/pull/23548) fix: tags features flag on base models (@hughhhh)
- [#23565](https://github.com/apache/superset/pull/23565) fix: Add default empty array to filter dependencies (@dayknightmare)
- [#23533](https://github.com/apache/superset/pull/23533) fix(plugin-chart-table): Include time control (@kgabryje)
- [#23549](https://github.com/apache/superset/pull/23549) fix(sqllab): undefined issue_codes on query error (@justinpark)
- [#23543](https://github.com/apache/superset/pull/23543) fix: Hide FilterBar for Reports (@geido)
- [#23514](https://github.com/apache/superset/pull/23514) fix(sqllab): dedupe table_schemas in active_tab (@justinpark)
- [#23522](https://github.com/apache/superset/pull/23522) fix: Removes Redux state mutations - iteration 1 (@michael-s-molina)
- [#22880](https://github.com/apache/superset/pull/22880) fix: moved alerts and reports default values to config (@Always-prog)
- [#23469](https://github.com/apache/superset/pull/23469) fix(area chart legacy): tool tip shows actual value rather than y axi… (@AkashBoora)
- [#23137](https://github.com/apache/superset/pull/23137) fix(conditional formatting): controls looses on save (@Always-prog)
- [#23517](https://github.com/apache/superset/pull/23517) fix(word cloud): series label format fixed for custom sql queries (@ashgorithm)
- [#23513](https://github.com/apache/superset/pull/23513) fix(plugin-generator): Addresses linter errors in newly generated Superset plugin (@alex-bain)
- [#23521](https://github.com/apache/superset/pull/23521) fix(dashboards): apply tag filter correctly (@akzarma)
- [#23515](https://github.com/apache/superset/pull/23515) fix(plugin-chart-table): Invalid d3Formatter on String column (@justinpark)
- [#23475](https://github.com/apache/superset/pull/23475) fix: Preserves selected scopes when toggling between scope types (@michael-s-molina)
- [#23502](https://github.com/apache/superset/pull/23502) fix(dashboard): Add remark plugin on markdown (@justinpark)
- [#23480](https://github.com/apache/superset/pull/23480) fix: Chart crashing if timeseries_limit_metric is an empty array (@kgabryje)
- [#23378](https://github.com/apache/superset/pull/23378) fix(sqllab): throw errors of commented out query (@justinpark)
- [#23471](https://github.com/apache/superset/pull/23471) fix: broken helm chart ingress (@paulinjo)
- [#23452](https://github.com/apache/superset/pull/23452) fix(chart): add missing toleration for init-job (@ZeJ0hn)
- [#23265](https://github.com/apache/superset/pull/23265) fix(sqllab): dedupe active_tab in tabHistory (@justinpark)
- [#23446](https://github.com/apache/superset/pull/23446) fix: Allow setting ingress hosts directly through yaml (@paulinjo)
- [#23414](https://github.com/apache/superset/pull/23414) fix: prevent ForeignKeyViolation error on delete (@betodealmeida)
- [#23386](https://github.com/apache/superset/pull/23386) fix: schedule query option showing up (@betodealmeida)
- [#23432](https://github.com/apache/superset/pull/23432) fix: safe check when computing chart thumbnail (@zephyring)
- [#23433](https://github.com/apache/superset/pull/23433) fix: database dropdown keys (@betodealmeida)
- [#23389](https://github.com/apache/superset/pull/23389) fix(dashboard): `show_native_filters` leftover (@betodealmeida)
- [#23409](https://github.com/apache/superset/pull/23409) fix(docker): multi-architecture image build (@EugeneTorap)
- [#23330](https://github.com/apache/superset/pull/23330) fix: revert back to use security manager authz for dashboard when get by uuid (@zephyring)
- [#23318](https://github.com/apache/superset/pull/23318) fix: Table sorting reset (@geido)
- [#23376](https://github.com/apache/superset/pull/23376) fix: dataset_macro (@betodealmeida)
- [#23356](https://github.com/apache/superset/pull/23356) fix: table schema permissions (@betodealmeida)
- [#23314](https://github.com/apache/superset/pull/23314) fix(native-filters): Caching scope (@john-bodley)
- [#23365](https://github.com/apache/superset/pull/23365) fix(chart-controls): Error if x_axis_sort and timeseries_limit_metric are included in main metrics (@kgabryje)
- [#23361](https://github.com/apache/superset/pull/23361) fix(safari): remove autocomplete in table select (@villebro)
- [#23302](https://github.com/apache/superset/pull/23302) fix(sqllab): empty large query results from localStorage (@justinpark)
- [#23322](https://github.com/apache/superset/pull/23322) fix(examples): Cleanup granularity_sqla column (@john-bodley)
- [#23324](https://github.com/apache/superset/pull/23324) fix(trino): Disallow alias to source column (@john-bodley)
- [#23329](https://github.com/apache/superset/pull/23329) fix(dashboard): deepmerge htmlSchemaOverrides (@justinpark)
- [#23348](https://github.com/apache/superset/pull/23348) fix: dashboard DAO small code improvement (@dpgaspar)
- [#23347](https://github.com/apache/superset/pull/23347) fix(dashboard): Cross filters with time shifted series (@kgabryje)
- [#23339](https://github.com/apache/superset/pull/23339) fix(trino): normalize non-iso timestamps (@villebro)
- [#23296](https://github.com/apache/superset/pull/23296) fix(clickhouse): Update to working clickhouse-connect version (@genzgd)
- [#23260](https://github.com/apache/superset/pull/23260) fix(examples): Cleanup dashboard filter scopes (@john-bodley)
- [#23283](https://github.com/apache/superset/pull/23283) fix(dashboard): Allow selecting text in cells in Table and PivotTable without triggering cross filters (@kgabryje)
- [#23262](https://github.com/apache/superset/pull/23262) fix: ignore ts warnings from older typescript versions (@eschutho)
- [#23256](https://github.com/apache/superset/pull/23256) fix(dashboard): Missing filter card styles (@kgabryje)
- [#23250](https://github.com/apache/superset/pull/23250) fix(dashboard): Cross-filter search icon in filter bar (@kgabryje)
- [#23242](https://github.com/apache/superset/pull/23242) fix: Video Game Sales dashboard default filters (@john-bodley)
- [#23239](https://github.com/apache/superset/pull/23239) fix(explore): Dashboard filters on adhoc cols not working in Explore (@kgabryje)
- [#23194](https://github.com/apache/superset/pull/23194) fix(dashboard): Cross-filters not working properly for new dashboards (@kgabryje)
- [#23215](https://github.com/apache/superset/pull/23215) fix(dashboard): Page crashing when cross filter applied on adhoc column (@kgabryje)
- [#23202](https://github.com/apache/superset/pull/23202) fix(docs): Change postgres to postgresql in brew install command (@lyndsiWilliams)
- [#23130](https://github.com/apache/superset/pull/23130) fix: Pagination of VirtualTable (@EugeneTorap)
- [#23022](https://github.com/apache/superset/pull/23022) fix(dashboard): Chart's empty state not centered (@kgabryje)
- [#23135](https://github.com/apache/superset/pull/23135) fix: gamma sql_json test (@dpgaspar)
- [#23126](https://github.com/apache/superset/pull/23126) fix(ci): explicity set yaml Loader (@villebro)
**Others**
- [#25016](https://github.com/apache/superset/pull/25016) chore: use os.getenv to simplify superset_config.py (@sebastianliebscher)
- [#25025](https://github.com/apache/superset/pull/25025) chore: Pass the dashboard id when requesting filter values (@michael-s-molina)
- [#25003](https://github.com/apache/superset/pull/25003) chore: isolate examples database by default (@dpgaspar)
- [#24923](https://github.com/apache/superset/pull/24923) chore: modify UPDATING.md for logs table migrations (@cnabro)
- [#24324](https://github.com/apache/superset/pull/24324) chore: rate limit requests (@betodealmeida)
- [#24935](https://github.com/apache/superset/pull/24935) chore: Removes duplicated featureFlags.ts (@michael-s-molina)
- [#24864](https://github.com/apache/superset/pull/24864) chore: Refine native dashboard cleanup logic (@john-bodley)
- [#24804](https://github.com/apache/superset/pull/24804) chore: Refactor dashboard security access (@john-bodley)
- [#24774](https://github.com/apache/superset/pull/24774) chore: add talisman env var to config (@eschutho)
- [#24613](https://github.com/apache/superset/pull/24613) build(deps): bump tox from 4.6.3 to 4.6.4 in /requirements (@dependabot[bot])
- [#24769](https://github.com/apache/superset/pull/24769) docs: update security policy and add CVE info (@dpgaspar)
- [#24758](https://github.com/apache/superset/pull/24758) chore(view_api): return application/json as content-type for api/v1/form_data endpoint (@zephyring)
- [#24759](https://github.com/apache/superset/pull/24759) chore(docs): Adding link to additional visualization content (@rusackas)
- [#24766](https://github.com/apache/superset/pull/24766) docs: Fix STANDARD_ROLES.md for Gamma role permissions on tableschemaview (@mattitoo)
- [#24736](https://github.com/apache/superset/pull/24736) chore: make control panel sub sections look better (@mistercrunch)
- [#24559](https://github.com/apache/superset/pull/24559) chore(native filters): Expandable filter config modal (@justinpark)
- [#24741](https://github.com/apache/superset/pull/24741) chore: make antd table font size same as data table (@mistercrunch)
- [#24627](https://github.com/apache/superset/pull/24627) chore: turn off talisman for ephemeral environments in ci (@eschutho)
- [#24731](https://github.com/apache/superset/pull/24731) chore: Bump PyYAML bounds (@john-bodley)
- [#24694](https://github.com/apache/superset/pull/24694) chore: Remove obsolete legacy visualizations (@john-bodley)
- [#24689](https://github.com/apache/superset/pull/24689) chore: move deprecated default version to 4.0.0 (@dpgaspar)
- [#24607](https://github.com/apache/superset/pull/24607) chore(command): Condense delete/bulk-delete operations (@john-bodley)
- [#24647](https://github.com/apache/superset/pull/24647) chore: Bump holidays to 0.28 (@arkid15r)
- [#24652](https://github.com/apache/superset/pull/24652) chore: Bump/relax Flask libs (@john-bodley)
- [#24466](https://github.com/apache/superset/pull/24466) chore(dao): Condense delete/bulk-delete operations (@john-bodley)
- [#24554](https://github.com/apache/superset/pull/24554) chore(sqllab): Log current local storage usage (@justinpark)
- [#24452](https://github.com/apache/superset/pull/24452) build(deps): bump tox from 4.6.1 to 4.6.3 in /requirements (@dependabot[bot])
- [#24524](https://github.com/apache/superset/pull/24524) build(deps-dev): bump @types/node from 20.3.1 to 20.3.2 in /superset-websocket (@dependabot[bot])
- [#24522](https://github.com/apache/superset/pull/24522) build(deps-dev): bump @typescript-eslint/parser from 5.60.0 to 5.60.1 in /superset-websocket (@dependabot[bot])
- [#24501](https://github.com/apache/superset/pull/24501) build(deps): bump semver from 7.3.8 to 7.5.3 in /superset-websocket/utils/client-ws-app (@dependabot[bot])
- [#24404](https://github.com/apache/superset/pull/24404) chore: deprecate FLASK_ENV and improve conf.ENVIRONMENT_TAG_CONFIG (@mistercrunch)
- [#24534](https://github.com/apache/superset/pull/24534) build(docker): add dockerize image (@alekseyolg)
- [#24462](https://github.com/apache/superset/pull/24462) docs: updating images and markdown (@rusackas)
- [#24543](https://github.com/apache/superset/pull/24543) chore: Un-revert enabling CSP by default (@kgabryje)
- [#24514](https://github.com/apache/superset/pull/24514) refactor: pkg_resources -> importlib.metadata (@cwegener)
- [#24538](https://github.com/apache/superset/pull/24538) chore: Constrain selenium version (@john-bodley)
- [#24505](https://github.com/apache/superset/pull/24505) chore: update d3-colors (@hughhhh)
- [#24499](https://github.com/apache/superset/pull/24499) chore: remove marshmallow-enum dependency and bump FAB (@dpgaspar)
- [#24504](https://github.com/apache/superset/pull/24504) build(docker): simplification of assembly to facilitate further support (@alekseyolg)
- [#24503](https://github.com/apache/superset/pull/24503) chore: update ansi-regex (@hughhhh)
- [#24489](https://github.com/apache/superset/pull/24489) chore(sqllab): add extra_json on tabstate (@justinpark)
- [#24497](https://github.com/apache/superset/pull/24497) build(docker): pin the underlying debain base image (@boenshao)
- [#24371](https://github.com/apache/superset/pull/24371) chore(sqllab): Remove table metadata from state (@justinpark)
- [#24443](https://github.com/apache/superset/pull/24443) build(deps-dev): bump eslint from 8.42.0 to 8.43.0 in /superset-websocket (@dependabot[bot])
- [#24454](https://github.com/apache/superset/pull/24454) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.11 to 5.60.0 in /superset-websocket (@dependabot[bot])
- [#24474](https://github.com/apache/superset/pull/24474) docs: Add CTA to community calendar subscription (@thiagorossener)
- [#24465](https://github.com/apache/superset/pull/24465) chore(dao): Add generic type for better type checking (@john-bodley)
- [#24397](https://github.com/apache/superset/pull/24397) build(deps): bump pre-commit from 3.3.2 to 3.3.3 in /requirements (@dependabot[bot])
- [#24453](https://github.com/apache/superset/pull/24453) build(deps-dev): bump @typescript-eslint/parser from 5.59.11 to 5.60.0 in /superset-websocket (@dependabot[bot])
- [#24262](https://github.com/apache/superset/pull/24262) chore: Enable CSP by default (@kgabryje)
- [#23853](https://github.com/apache/superset/pull/23853) chore: Migrate warm up cache endpoint to api v1 (@jfrag1)
- [#24331](https://github.com/apache/superset/pull/24331) chore(dao): Organize DAOs according to SIP-92 (@john-bodley)
- [#23835](https://github.com/apache/superset/pull/23835) docs: Show clickable link instead of code-formatting (@rusackas)
- [#24437](https://github.com/apache/superset/pull/24437) chore: toning down grayscale on X icon (@mistercrunch)
- [#24415](https://github.com/apache/superset/pull/24415) chore: Remove obsolete Druid NoSQL REGEX operator (@john-bodley)
- [#24419](https://github.com/apache/superset/pull/24419) build(deps): bump tox from 4.6.0 to 4.6.1 in /requirements (@dependabot[bot])
- [#24378](https://github.com/apache/superset/pull/24378) build(deps-dev): bump @types/node from 20.2.5 to 20.3.1 in /superset-websocket (@dependabot[bot])
- [#24403](https://github.com/apache/superset/pull/24403) chore: cleanup sqlalchemy warnings (@mistercrunch)
- [#24430](https://github.com/apache/superset/pull/24430) chore(ci): make eslint and jest run in --quiet mode (@mistercrunch)
- [#24423](https://github.com/apache/superset/pull/24423) chore: remove deprecated apis /slice_json/ and /annotation_json/ (@dpgaspar)
- [#24400](https://github.com/apache/superset/pull/24400) chore: remove deprecated apis and ENABLE_BROAD_ACTIVITY_ACCESS (@dpgaspar)
- [#24393](https://github.com/apache/superset/pull/24393) docs: Restyle documentation landing page and community page (@thiagorossener)
- [#24401](https://github.com/apache/superset/pull/24401) chore: Remove previously deprecated dataset metrics column from RESTful API (@john-bodley)
- [#24375](https://github.com/apache/superset/pull/24375) chore: remove deprecated apis on superset, get_or_create_table, sqllab_viz (@dpgaspar)
- [#24379](https://github.com/apache/superset/pull/24379) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.9 to 5.59.11 in /superset-websocket (@dependabot[bot])
- [#24310](https://github.com/apache/superset/pull/24310) chore: Update GitHub issue templates (@john-bodley)
- [#24365](https://github.com/apache/superset/pull/24365) build(deps-dev): bump @typescript-eslint/parser from 5.59.8 to 5.59.11 in /superset-websocket (@dependabot[bot])
- [#24360](https://github.com/apache/superset/pull/24360) chore: remove deprecated apis stop_query, queries, search_queries (@dpgaspar)
- [#24353](https://github.com/apache/superset/pull/24353) chore: remove deprecated apis copy_dash, save_dash and add_slices (@dpgaspar)
- [#24198](https://github.com/apache/superset/pull/24198) chore: remove user registrations menu for non-admins (@villebro)
- [#24354](https://github.com/apache/superset/pull/24354) chore: remove deprecated apis on superset, testconn, validate_sql_json, schemas_access_for_file_upload (@dpgaspar)
- [#24381](https://github.com/apache/superset/pull/24381) chore: remove deprecated api /superset/available_domains (@dpgaspar)
- [#24359](https://github.com/apache/superset/pull/24359) chore: remove deprecated apis estimate_query_cost, results, sql_json, csv (@dpgaspar)
- [#24286](https://github.com/apache/superset/pull/24286) build(deps-dev): bump eslint from 8.41.0 to 8.42.0 in /superset-websocket (@dependabot[bot])
- [#24338](https://github.com/apache/superset/pull/24338) build(deps-dev): bump @types/uuid from 9.0.1 to 9.0.2 in /superset-websocket (@dependabot[bot])
- [#24337](https://github.com/apache/superset/pull/24337) build(deps-dev): bump @types/ws from 8.5.4 to 8.5.5 in /superset-websocket (@dependabot[bot])
- [#24362](https://github.com/apache/superset/pull/24362) chore: Disable redux errors (@kgabryje)
- [#24342](https://github.com/apache/superset/pull/24342) chore: remove deprecated api /superset/tables/<int:db_id>/... (@dpgaspar)
- [#24335](https://github.com/apache/superset/pull/24335) chore: remove deprecated api /superset/filter/... (@dpgaspar)
- [#24333](https://github.com/apache/superset/pull/24333) chore: remove deprecated api /superset/datasources (@dpgaspar)
- [#23997](https://github.com/apache/superset/pull/23997) chore(druid): Remove legacy Druid NoSQL logic (@john-bodley)
- [#24330](https://github.com/apache/superset/pull/24330) chore: Removes getUiOverrideRegistry (@michael-s-molina)
- [#24339](https://github.com/apache/superset/pull/24339) docs: Add BurdaForward to "In the Wild" and merge "News" and "Entertainment" to "Media & Entertainment" (@mattitoo)
- [#24082](https://github.com/apache/superset/pull/24082) chore(sqllab): Remove validation result from state (@justinpark)
- [#24322](https://github.com/apache/superset/pull/24322) chore: Deprecates some NVD3 charts in 3.0 (@michael-s-molina)
- [#24313](https://github.com/apache/superset/pull/24313) docs: add link to intro with supported database types (@sfirke)
- [#24312](https://github.com/apache/superset/pull/24312) chore: Remove unused sliceCanEdit logic (@john-bodley)
- [#24299](https://github.com/apache/superset/pull/24299) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.8 to 5.59.9 in /superset-websocket (@dependabot[bot])
- [#24297](https://github.com/apache/superset/pull/24297) build(deps): bump tox from 4.5.2 to 4.6.0 in /requirements (@dependabot[bot])
- [#24295](https://github.com/apache/superset/pull/24295) chore: Adds #24029 breaking change to UPDATING.md (@michael-s-molina)
- [#24288](https://github.com/apache/superset/pull/24288) docs: Adds new permissions from 2.1.0 and fixes some sql_lab permissions (@mattitoo)
- [#24250](https://github.com/apache/superset/pull/24250) chore(build): creating default superset_text.yaml placeholder file (@rusackas)
- [#24118](https://github.com/apache/superset/pull/24118) chore(docs): upgrading docusaurus (fixes header links) (@rusackas)
- [#24110](https://github.com/apache/superset/pull/24110) build(deps): bump pre-commit from 3.3.1 to 3.3.2 in /requirements (@dependabot[bot])
- [#24246](https://github.com/apache/superset/pull/24246) build(deps-dev): bump @typescript-eslint/parser from 5.59.7 to 5.59.8 in /superset-websocket (@dependabot[bot])
- [#24253](https://github.com/apache/superset/pull/24253) docs: fix broken link in the security page (@eltimen)
- [#24251](https://github.com/apache/superset/pull/24251) chore: tests for #24249 (@betodealmeida)
- [#24206](https://github.com/apache/superset/pull/24206) chore(native-filters): Ensure consistent error handling (@john-bodley)
- [#24231](https://github.com/apache/superset/pull/24231) docs: removed extra ` from documentation (@SaishNarvekar)
- [#24235](https://github.com/apache/superset/pull/24235) docs: point the reader to "setup.py" for latest package version (@boenshao)
- [#24245](https://github.com/apache/superset/pull/24245) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.7 to 5.59.8 in /superset-websocket (@dependabot[bot])
- [#24240](https://github.com/apache/superset/pull/24240) build(deps-dev): bump @types/node from 20.2.3 to 20.2.5 in /superset-websocket (@dependabot[bot])
- [#24239](https://github.com/apache/superset/pull/24239) build(deps): bump winston from 3.8.2 to 3.9.0 in /superset-websocket (@dependabot[bot])
- [#24238](https://github.com/apache/superset/pull/24238) build(deps): bump tox from 4.5.1 to 4.5.2 in /requirements (@dependabot[bot])
- [#24214](https://github.com/apache/superset/pull/24214) refactor: Extracts type definitions from ExtensionsRegistry (@michael-s-molina)
- [#24184](https://github.com/apache/superset/pull/24184) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.6 to 5.59.7 in /superset-websocket (@dependabot[bot])
- [#24167](https://github.com/apache/superset/pull/24167) build(deps-dev): bump eslint from 8.40.0 to 8.41.0 in /superset-websocket (@dependabot[bot])
- [#24183](https://github.com/apache/superset/pull/24183) build(deps-dev): bump @typescript-eslint/parser from 5.59.6 to 5.59.7 in /superset-websocket (@dependabot[bot])
- [#24202](https://github.com/apache/superset/pull/24202) chore(ssh): Allow users to set TUNNEL_TIMEOUT from config (@hughhhh)
- [#24026](https://github.com/apache/superset/pull/24026) chore(sqllab): Remove functionNames from sqlLab state (@justinpark)
- [#24045](https://github.com/apache/superset/pull/24045) chore: Bump sqlparse to 0.4.4 (@EugeneTorap)
- [#24168](https://github.com/apache/superset/pull/24168) build(deps-dev): bump @types/node from 20.2.0 to 20.2.3 in /superset-websocket (@dependabot[bot])
- [#24135](https://github.com/apache/superset/pull/24135) chore(sqllab): remove deprecated PyArrow API (@sebastianliebscher)
- [#24128](https://github.com/apache/superset/pull/24128) chore: deprecate rls base related filters (@villebro)
- [#24117](https://github.com/apache/superset/pull/24117) chore: Refactor command exceptions (@john-bodley)
- [#24029](https://github.com/apache/superset/pull/24029) chore: Update QUERY_LOGGER and SQL_QUERY_MUTATOR signatures (@john-bodley)
- [#24107](https://github.com/apache/superset/pull/24107) chore(report): Use for/else clause (@john-bodley)
- [#24111](https://github.com/apache/superset/pull/24111) build(deps-dev): bump @types/node from 20.1.7 to 20.2.0 in /superset-websocket (@dependabot[bot])
- [#23941](https://github.com/apache/superset/pull/23941) build: helm template to set init job annotations (@ybudweiser)
- [#24106](https://github.com/apache/superset/pull/24106) chore: update packages for vanta FE security concerns (@hughhhh)
- [#24087](https://github.com/apache/superset/pull/24087) build(deps-dev): bump @types/node from 20.1.4 to 20.1.7 in /superset-websocket (@dependabot[bot])
- [#22801](https://github.com/apache/superset/pull/22801) chore(thumbnails): change default executor to logged in user (@villebro)
- [#24081](https://github.com/apache/superset/pull/24081) chore(docs): Updating DB connection instructions in 1st Dash instruct… (@rusackas)
- [#22799](https://github.com/apache/superset/pull/22799) chore(reports): change default executor to owner (@villebro)
- [#24073](https://github.com/apache/superset/pull/24073) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.5 to 5.59.6 in /superset-websocket (@dependabot[bot])
- [#24050](https://github.com/apache/superset/pull/24050) chore: add extension for related DB assets on delete (@betodealmeida)
- [#24074](https://github.com/apache/superset/pull/24074) build(deps-dev): bump @typescript-eslint/parser from 5.59.2 to 5.59.6 in /superset-websocket (@dependabot[bot])
- [#24080](https://github.com/apache/superset/pull/24080) chore(docs): tidy up supported DB engines for metadata store (@sfirke)
- [#24079](https://github.com/apache/superset/pull/24079) chore(docs): Updated awkward phrase in FAQ, "force" (@kikobarr)
- [#24069](https://github.com/apache/superset/pull/24069) chore(trino): Bump Trino version to address an IANA time zone issue (@john-bodley)
- [#23581](https://github.com/apache/superset/pull/23581) chore: bump dependencies (@betodealmeida)
- [#24065](https://github.com/apache/superset/pull/24065) build(deps): bump vm2 from 3.9.15 to 3.9.18 in /superset-frontend/cypress-base (@dependabot[bot])
- [#24066](https://github.com/apache/superset/pull/24066) build(deps): bump vm2 from 3.9.17 to 3.9.18 in /superset-frontend (@dependabot[bot])
- [#24058](https://github.com/apache/superset/pull/24058) chore: add log for ssh tunnel information (@hughhhh)
- [#24025](https://github.com/apache/superset/pull/24025) chore(docs): add version for postgres when doing brew install (@rusackas)
- [#24052](https://github.com/apache/superset/pull/24052) build(deps-dev): bump @types/node from 20.1.2 to 20.1.4 in /superset-websocket (@dependabot[bot])
- [#23965](https://github.com/apache/superset/pull/23965) chore: bump werkzeug and Flask (@dpgaspar)
- [#24033](https://github.com/apache/superset/pull/24033) chore: Update mypy and fix stubs issue (@EugeneTorap)
- [#24023](https://github.com/apache/superset/pull/24023) chore: remove duplicates of `validate_adhoc_subquery` (@betodealmeida)
- [#24001](https://github.com/apache/superset/pull/24001) chore: remove deprecated distutils (@sebastianliebscher)
- [#24017](https://github.com/apache/superset/pull/24017) build(deps-dev): bump @types/node from 20.1.1 to 20.1.2 in /superset-websocket (@dependabot[bot])
- [#23756](https://github.com/apache/superset/pull/23756) test: cover empty AdvancedDataTypes internet_address and internet_port (@sebastianliebscher)
- [#23770](https://github.com/apache/superset/pull/23770) chore: fix deprecation warnings for SQLALchemy URL (@sebastianliebscher)
- [#23976](https://github.com/apache/superset/pull/23976) chore: mark explore_json as deprecated in 3.0 (@betodealmeida)
- [#23981](https://github.com/apache/superset/pull/23981) chore: Deprecate DND feature flags (@kgabryje)
- [#23984](https://github.com/apache/superset/pull/23984) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.2 to 5.59.5 in /superset-websocket (@dependabot[bot])
- [#23983](https://github.com/apache/superset/pull/23983) build(deps-dev): bump @types/node from 20.1.0 to 20.1.1 in /superset-websocket (@dependabot[bot])
- [#23951](https://github.com/apache/superset/pull/23951) chore(deps): Add dependency-review action (@rusackas)
- [#23974](https://github.com/apache/superset/pull/23974) chore(actions): adding JavaScript to CodeQL config (@rusackas)
- [#24002](https://github.com/apache/superset/pull/24002) chore: Comment 3.8 PY required CI checks (@EugeneTorap)
- [#23986](https://github.com/apache/superset/pull/23986) chore: Bump python libs (@EugeneTorap)
- [#23994](https://github.com/apache/superset/pull/23994) docs(feature flags): remove the conflicting entry for DRILL_BY (@sfirke)
- [#23760](https://github.com/apache/superset/pull/23760) chore(sqllab): Refactor react-query by redux-toolkit query (@justinpark)
- [#23961](https://github.com/apache/superset/pull/23961) build(deps-dev): bump eslint from 8.39.0 to 8.40.0 in /superset-websocket (@dependabot[bot])
- [#23962](https://github.com/apache/superset/pull/23962) build(deps-dev): bump @types/node from 20.0.0 to 20.1.0 in /superset-websocket (@dependabot[bot])
- [#23744](https://github.com/apache/superset/pull/23744) chore(slack): use recommended method for file upload (@betodealmeida)
- [#23923](https://github.com/apache/superset/pull/23923) chore(helm): Split service templates into separate files (@dnskr)
- [#23936](https://github.com/apache/superset/pull/23936) chore: deprecate /superset/add_slices (@dpgaspar)
- [#23911](https://github.com/apache/superset/pull/23911) docs: fixing a broken markdown link about SSH tunneling (@rusackas)
- [#23949](https://github.com/apache/superset/pull/23949) chore: add codeQL to CI (@dpgaspar)
- [#23947](https://github.com/apache/superset/pull/23947) build(deps-dev): bump @types/node from 18.16.3 to 20.0.0 in /superset-websocket (@dependabot[bot])
- [#23926](https://github.com/apache/superset/pull/23926) chore(helm): Declare missing properties (@dnskr)
- [#23934](https://github.com/apache/superset/pull/23934) chore: Deprecates viz.py (@michael-s-molina)
- [#23795](https://github.com/apache/superset/pull/23795) docs: Add description of standard Superset roles (@mattitoo)
- [#23871](https://github.com/apache/superset/pull/23871) refactor: useEffectEvent for efficient deps (@justinpark)
- [#23913](https://github.com/apache/superset/pull/23913) build(deps): bump pre-commit from 3.2.2 to 3.3.1 in /requirements (@dependabot[bot])
- [#23895](https://github.com/apache/superset/pull/23895) chore(ci): bump actions (@sebastianliebscher)
- [#23841](https://github.com/apache/superset/pull/23841) build(deps-dev): bump @types/jsonwebtoken from 9.0.1 to 9.0.2 in /superset-websocket (@dependabot[bot])
- [#23894](https://github.com/apache/superset/pull/23894) build(deps-dev): bump @typescript-eslint/parser from 5.59.0 to 5.59.2 in /superset-websocket (@dependabot[bot])
- [#23891](https://github.com/apache/superset/pull/23891) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.59.0 to 5.59.2 in /superset-websocket (@dependabot[bot])
- [#23726](https://github.com/apache/superset/pull/23726) chore(helm): Use template comments for the chart license header (@dnskr)
- [#23887](https://github.com/apache/superset/pull/23887) build(deps-dev): bump @types/node from 18.16.0 to 18.16.3 in /superset-websocket (@dependabot[bot])
- [#23849](https://github.com/apache/superset/pull/23849) chore: Add Cypress tests for drill by (@kgabryje)
- [#23680](https://github.com/apache/superset/pull/23680) chore: bump wtforms and add missing flask-limiter (@dpgaspar)
- [#23862](https://github.com/apache/superset/pull/23862) chore: Use nh3 lib instead of bleach (@EugeneTorap)
- [#23844](https://github.com/apache/superset/pull/23844) chore: Bump polyline to 2.0.0 (@EugeneTorap)
- [#23845](https://github.com/apache/superset/pull/23845) chore: Bump redis to 4.5.4 (@EugeneTorap)
- [#23854](https://github.com/apache/superset/pull/23854) chore: Add logging events for drill by (@kgabryje)
- [#23729](https://github.com/apache/superset/pull/23729) chore: migrate `sqllab_viz` endpoint to api v1 (@hughhhh)
- [#23813](https://github.com/apache/superset/pull/23813) chore: Upgrade Cypress to 10.11.0 (@kgabryje)
- [#23794](https://github.com/apache/superset/pull/23794) docs: discourage the use of SQLite (@dpgaspar)
- [#23785](https://github.com/apache/superset/pull/23785) chore: Deprecates 3.0 consented feature flags (@michael-s-molina)
- [#23820](https://github.com/apache/superset/pull/23820) docs: Add Superset Overview Video to README (@satokonak)
- [#23796](https://github.com/apache/superset/pull/23796) docs: cleanup references to `apache-superset/superset-ui` (@charpeni)
- [#22916](https://github.com/apache/superset/pull/22916) chore: Add tests to SQL lab button components (@diegomedina248)
- [#23791](https://github.com/apache/superset/pull/23791) build(deps-dev): bump @types/node from 18.15.13 to 18.16.0 in /superset-websocket (@dependabot[bot])
- [#23790](https://github.com/apache/superset/pull/23790) build(deps-dev): bump eslint from 8.38.0 to 8.39.0 in /superset-websocket (@dependabot[bot])
- [#23789](https://github.com/apache/superset/pull/23789) build(deps-dev): bump prettier from 2.8.7 to 2.8.8 in /superset-websocket (@dependabot[bot])
- [#23798](https://github.com/apache/superset/pull/23798) chore: Add DRILL_BY to FEATURE_FLAGS.md (@kgabryje)
- [#23784](https://github.com/apache/superset/pull/23784) chore: Deprecates FilterBox (@michael-s-molina)
- [#23765](https://github.com/apache/superset/pull/23765) build(deps-dev): bump @types/node from 18.15.12 to 18.15.13 in /superset-websocket (@dependabot[bot])
- [#23772](https://github.com/apache/superset/pull/23772) chore(e2e): skip the worst offender of flaky tests. (@rusackas)
- [#23670](https://github.com/apache/superset/pull/23670) chore(feature flags): updating the status of a few flags (@rusackas)
- [#23704](https://github.com/apache/superset/pull/23704) chore: remove RemovedInMarshmallow4 warnings (@sebastianliebscher)
- [#23759](https://github.com/apache/superset/pull/23759) chore(actions): Fix for Chromatic action using actions/checkout@v3 (@rusackas)
- [#23725](https://github.com/apache/superset/pull/23725) chore(docs): copy change submitted through BugHerd (@rusackas)
- [#23488](https://github.com/apache/superset/pull/23488) refactor(sqllab): Remove tableOptions from redux state (@justinpark)
- [#23746](https://github.com/apache/superset/pull/23746) build(deps-dev): bump @types/node from 18.15.11 to 18.15.12 in /superset-websocket (@dependabot[bot])
- [#23753](https://github.com/apache/superset/pull/23753) build(deps): bump vm2 from 3.9.15 to 3.9.17 in /superset-frontend (@dependabot[bot])
- [#23718](https://github.com/apache/superset/pull/23718) build(deps-dev): bump @typescript-eslint/parser from 5.58.0 to 5.59.0 in /superset-websocket (@dependabot[bot])
- [#23734](https://github.com/apache/superset/pull/23734) chore(chart-data): add post processing error message to response (@villebro)
- [#23678](https://github.com/apache/superset/pull/23678) chore(api v1): Deprecate datasource/save and datasource/get endpoints (@jfrag1)
- [#23714](https://github.com/apache/superset/pull/23714) chore(api v1): Deprecate superset/override_role_permissions endpoint (@jfrag1)
- [#23681](https://github.com/apache/superset/pull/23681) chore(helm): Reformat helm chart templates (@dnskr)
- [#23719](https://github.com/apache/superset/pull/23719) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.58.0 to 5.59.0 in /superset-websocket (@dependabot[bot])
- [#23663](https://github.com/apache/superset/pull/23663) chore: Removes deprecated feature flags for 3.0 (@michael-s-molina)
- [#23683](https://github.com/apache/superset/pull/23683) docs(translations): point broken tutorial link to Internet Archive copy (@sfirke)
- [#23674](https://github.com/apache/superset/pull/23674) chore(presto): Expose schema and indexes to \_partition_query method (@john-bodley)
- [#23609](https://github.com/apache/superset/pull/23609) docs: nvm error while local setup (@Abhishek-kumar-samsung)
- [#23654](https://github.com/apache/superset/pull/23654) chore: Update cross-filter tooltip text (@yousoph)
- [#23651](https://github.com/apache/superset/pull/23651) chore: Removes the UX_BETA feature flag (@michael-s-molina)
- [#23652](https://github.com/apache/superset/pull/23652) chore: Enables GENERIC_CHART_AXES by default (@michael-s-molina)
- [#23656](https://github.com/apache/superset/pull/23656) chore(db_engine_specs): Refactor get_index (@john-bodley)
- [#23460](https://github.com/apache/superset/pull/23460) refactor: introduce redux toolkit (@justinpark)
- [#23642](https://github.com/apache/superset/pull/23642) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.57.1 to 5.58.0 in /superset-websocket (@dependabot[bot])
- [#23643](https://github.com/apache/superset/pull/23643) build(deps-dev): bump @typescript-eslint/parser from 5.57.1 to 5.58.0 in /superset-websocket (@dependabot[bot])
- [#23646](https://github.com/apache/superset/pull/23646) docs: update CHANGELOG with 2.1.0 (@dpgaspar)
- [#23640](https://github.com/apache/superset/pull/23640) chore(feature flag): removing unused ENFORCE_DB_ENCRYPTION_UI flag (@rusackas)
- [#22853](https://github.com/apache/superset/pull/22853) chore: Refactor ExploreMixin to power both Datasets (SqlaTable) and Query models (@hughhhh)
- [#22853](https://github.com/apache/superset/pull/22853) chore: Refactor ExploreMixin to power both Datasets (SqlaTable) and Query models (@hughhhh)
- [#23633](https://github.com/apache/superset/pull/23633) build(deps-dev): bump eslint from 8.36.0 to 8.38.0 in /superset-websocket (@dependabot[bot])
- [#23625](https://github.com/apache/superset/pull/23625) build(deps): bump vm2 from 3.9.14 to 3.9.15 in /superset-frontend/cypress-base (@dependabot[bot])
- [#19733](https://github.com/apache/superset/pull/19733) docs(contributing): add local vscode config for backend debugging (@cemremengu)
- [#23626](https://github.com/apache/superset/pull/23626) build(deps): bump vm2 from 3.9.13 to 3.9.15 in /superset-frontend (@dependabot[bot])
- [#23572](https://github.com/apache/superset/pull/23572) build(deps-dev): bump @typescript-eslint/parser from 5.55.0 to 5.57.1 in /superset-websocket (@dependabot[bot])
- [#23112](https://github.com/apache/superset/pull/23112) chore: Migrate copy_dash endpoint to api v1 (@jfrag1)
- [#23596](https://github.com/apache/superset/pull/23596) chore(deps): bump kind-of dependency (@rusackas)
- [#23595](https://github.com/apache/superset/pull/23595) chore(deps): bumps ansi-regex to 5.0.1 (@rusackas)
- [#23482](https://github.com/apache/superset/pull/23482) refactor: Moves CRUD features to src/features (@michael-s-molina)
- [#23537](https://github.com/apache/superset/pull/23537) docs(security): more context around Talisman, note side effect of force_https on Alerts & Reports (@sfirke)
- [#23573](https://github.com/apache/superset/pull/23573) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.55.0 to 5.57.1 in /superset-websocket (@dependabot[bot])
- [#23518](https://github.com/apache/superset/pull/23518) build(deps-dev): bump @types/node from 18.15.5 to 18.15.11 in /superset-websocket (@dependabot[bot])
- [#23571](https://github.com/apache/superset/pull/23571) build(deps): bump pre-commit from 3.2.0 to 3.2.2 in /requirements (@dependabot[bot])
- [#23496](https://github.com/apache/superset/pull/23496) build(deps-dev): bump prettier from 2.8.6 to 2.8.7 in /superset-websocket (@dependabot[bot])
- [#23544](https://github.com/apache/superset/pull/23544) chore: Remove wrong information from the Alerts & Reports docs (@geido)
- [#22964](https://github.com/apache/superset/pull/22964) chore: Migrate /superset/user_slices and /superset/fave_slices to API v1 (@diegomedina248)
- [#23491](https://github.com/apache/superset/pull/23491) perf(sqla): avoid unnecessary type check on adhoc column (@villebro)
- [#22803](https://github.com/apache/superset/pull/22803) chore(welcome): harmonize submenu with other routes (@villebro)
- [#23527](https://github.com/apache/superset/pull/23527) ci: disable flaky async test (@villebro)
- [#23536](https://github.com/apache/superset/pull/23536) chore: allow logs to show error levels for ssh tunnel (@hughhhh)
- [#23481](https://github.com/apache/superset/pull/23481) chore: Adds a tooltip to pre-filter in native filters modal (@michael-s-molina)
- [#23165](https://github.com/apache/superset/pull/23165) chore: Migrate /superset/favstar to API v1 (@diegomedina248)
- [#23501](https://github.com/apache/superset/pull/23501) docs: Adds notes to Superset plugin generator about TypeScript errors (@alex-bain)
- [#23477](https://github.com/apache/superset/pull/23477) chore: Changes the inputs of native filters modal to have the same width (@michael-s-molina)
- [#23429](https://github.com/apache/superset/pull/23429) chore: Dataset specific MetadataBar (@kgabryje)
- [#23465](https://github.com/apache/superset/pull/23465) perf(postprocessing): improve pivot postprocessing operation (@Usiel)
- [#23420](https://github.com/apache/superset/pull/23420) docs(contributing): How create or change SECRET_KEY (@pankajsoni22)
- [#23437](https://github.com/apache/superset/pull/23437) build(deps-dev): bump eslint-config-prettier from 8.7.0 to 8.8.0 in /superset-websocket (@dependabot[bot])
- [#23257](https://github.com/apache/superset/pull/23257) chore(sqllab): Remove schemaOptions from redux store (@justinpark)
- [#23417](https://github.com/apache/superset/pull/23417) docs(contributing): added note for creating SECRET_KEY (@Govindarajan-D)
- [#23438](https://github.com/apache/superset/pull/23438) build(deps-dev): bump @types/node from 18.15.3 to 18.15.5 in /superset-websocket (@dependabot[bot])
- [#23451](https://github.com/apache/superset/pull/23451) build(deps-dev): bump prettier from 2.8.4 to 2.8.6 in /superset-websocket (@dependabot[bot])
- [#23430](https://github.com/apache/superset/pull/23430) chore: Add DRILL_BY feature flag (@kgabryje)
- [#23398](https://github.com/apache/superset/pull/23398) chore: Update typing for `Table` component (@hughhhh)
- [#23422](https://github.com/apache/superset/pull/23422) build(deps): bump pre-commit from 3.1.0 to 3.2.0 in /requirements (@dependabot[bot])
- [#23342](https://github.com/apache/superset/pull/23342) build(deps-dev): bump eslint from 8.35.0 to 8.36.0 in /superset-websocket (@dependabot[bot])
- [#23431](https://github.com/apache/superset/pull/23431) docs(security): note the need to set TALISMAN_ENABLED = True (@sfirke)
- [#23303](https://github.com/apache/superset/pull/23303) chore(native-filters): Fetch only the required dataset fields (@john-bodley)
- [#23331](https://github.com/apache/superset/pull/23331) chore: update releasing process for testing (@eschutho)
- [#23226](https://github.com/apache/superset/pull/23226) chore: Hugh/migrate estimate query cost to v1 (@hughhhh)
- [#23359](https://github.com/apache/superset/pull/23359) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.53.0 to 5.55.0 in /superset-websocket (@dependabot[bot])
- [#23366](https://github.com/apache/superset/pull/23366) build(deps-dev): bump webpack from 5.52.1 to 5.76.0 in /superset-frontend (@dependabot[bot])
- [#23343](https://github.com/apache/superset/pull/23343) build(deps): bump ws from 8.12.1 to 8.13.0 in /superset-websocket (@dependabot[bot])
- [#23403](https://github.com/apache/superset/pull/23403) chore(docs): three typos (@rusackas)
- [#23385](https://github.com/apache/superset/pull/23385) chore: improve schema security (@betodealmeida)
- [#23368](https://github.com/apache/superset/pull/23368) build(deps-dev): bump webpack from 5.64.0 to 5.76.0 in /docs (@dependabot[bot])
- [#23367](https://github.com/apache/superset/pull/23367) build(deps-dev): bump webpack from 5.67.0 to 5.76.0 in /superset-embedded-sdk (@dependabot[bot])
- [#23379](https://github.com/apache/superset/pull/23379) build(deps-dev): bump @typescript-eslint/parser from 5.54.1 to 5.55.0 in /superset-websocket (@dependabot[bot])
- [#23369](https://github.com/apache/superset/pull/23369) build(deps): bump @sideway/formula from 3.0.0 to 3.0.1 in /docs (@dependabot[bot])
- [#23261](https://github.com/apache/superset/pull/23261) chore(dashboard): Disable 'Set filter mapping' when appropriate (@john-bodley)
- [#23371](https://github.com/apache/superset/pull/23371) chore: Add code-owners to Select, MetadataBar and DropdownContainer (@geido)
- [#23227](https://github.com/apache/superset/pull/23227) chore: Migrate /superset/schemas_access_for_file_upload to v1 (@hughhhh)
- [#23360](https://github.com/apache/superset/pull/23360) build(deps-dev): bump @types/node from 18.14.6 to 18.15.3 in /superset-websocket (@dependabot[bot])
- [#23216](https://github.com/apache/superset/pull/23216) chore: Remove Cross Filter scoping modal (@geido)
- [#23294](https://github.com/apache/superset/pull/23294) build(deps-dev): bump @typescript-eslint/parser from 5.53.0 to 5.54.1 in /superset-websocket (@dependabot[bot])
- [#23323](https://github.com/apache/superset/pull/23323) docs(alerts and reports): Update ExecutorType class (@mrmooon)
- [#23290](https://github.com/apache/superset/pull/23290) chore: log different selenium timeout errors differently (@eschutho)
- [#23316](https://github.com/apache/superset/pull/23316) docs: add lost \_filters param docs (@villebro)
- [#23317](https://github.com/apache/superset/pull/23317) chore: bump docusaurus to latest stable (@villebro)
- [#23281](https://github.com/apache/superset/pull/23281) build(deps-dev): bump @types/node from 18.14.1 to 18.14.6 in /superset-websocket (@dependabot[bot])
- [#23292](https://github.com/apache/superset/pull/23292) build(deps-dev): bump eslint-config-prettier from 8.6.0 to 8.7.0 in /superset-websocket (@dependabot[bot])
- [#23166](https://github.com/apache/superset/pull/23166) docs: typo 'admnistrators' in security.mdx (@camac)
- [#22890](https://github.com/apache/superset/pull/22890) chore: upgrade @ant-design/icons for react upgrade (@lilykuang)
- [#23266](https://github.com/apache/superset/pull/23266) chore(cache): Tuning logging in cache manager (@craig-rueda)
- [#23255](https://github.com/apache/superset/pull/23255) chore(webdriver): Tuning the Webdriver logging a bit (@craig-rueda)
- [#23142](https://github.com/apache/superset/pull/23142) chore: Remove the ability to add filter-box charts when DASHBOARD_NATIVE_FILTERS feature is enabled (@john-bodley)
- [#23241](https://github.com/apache/superset/pull/23241) refactor: Organizes the pages in their own folder (@michael-s-molina)
- [#23122](https://github.com/apache/superset/pull/23122) build(deps): bump pip-compile-multi from 2.6.1 to 2.6.2 in /requirements (@dependabot[bot])
- [#23225](https://github.com/apache/superset/pull/23225) chore: Add statsd logger for ssh tunneling creation (@hughhhh)
- [#23168](https://github.com/apache/superset/pull/23168) build(deps): bump pre-commit from 3.0.4 to 3.1.0 in /requirements (@dependabot[bot])
- [#22859](https://github.com/apache/superset/pull/22859) build(deps): bump ua-parser-js from 0.7.28 to 0.7.33 in /superset-frontend (@dependabot[bot])
- [#23201](https://github.com/apache/superset/pull/23201) chore: adding code owners for github actions/workflows (@rusackas)
- [#23211](https://github.com/apache/superset/pull/23211) build(deps-dev): bump eslint from 8.34.0 to 8.35.0 in /superset-websocket (@dependabot[bot])
- [#23152](https://github.com/apache/superset/pull/23152) build(deps-dev): bump @types/uuid from 9.0.0 to 9.0.1 in /superset-websocket (@dependabot[bot])
- [#23207](https://github.com/apache/superset/pull/23207) docs: fix typo (@vivekDebugs)
- [#22342](https://github.com/apache/superset/pull/22342) build(deps): bump express and @applitools/eyes-cypress in /superset-frontend/cypress-base (@dependabot[bot])
- [#23132](https://github.com/apache/superset/pull/23132) build(deps-dev): bump @typescript-eslint/eslint-plugin from 5.52.0 to 5.53.0 in /superset-websocket (@dependabot[bot])
- [#23203](https://github.com/apache/superset/pull/23203) test: Remove test playgrounds (@lyndsiWilliams)
- [#23180](https://github.com/apache/superset/pull/23180) build(deps-dev): bump @types/node from 18.13.0 to 18.14.1 in /superset-websocket (@dependabot[bot])
- [#23133](https://github.com/apache/superset/pull/23133) build(deps-dev): bump @typescript-eslint/parser from 5.51.0 to 5.53.0 in /superset-websocket (@dependabot[bot])
- [#23145](https://github.com/apache/superset/pull/23145) chore: refactor SparklineCell for react 17 and react 18 upgrade (@lilykuang)
- [#23160](https://github.com/apache/superset/pull/23160) build: Add helm chart option to deploy sidecars with node and worker (@mkramer5454)
- [#23144](https://github.com/apache/superset/pull/23144) chore: revert "feat(native_filter_migration): add transition mode (#16992)" (@john-bodley)
- [#23158](https://github.com/apache/superset/pull/23158) chore: Bump cryptography to 39.0.1 (@EugeneTorap)
- [#23108](https://github.com/apache/superset/pull/23108) chore: Remove yarn.lock from the root folder (@EugeneTorap)
### 2.1.1 (Sun Apr 23 15:44:21 2023 +0100)
**Database Migrations**
- [#23980](https://github.com/apache/superset/pull/23980) fix(migration): handle permalink edge cases correctly (@villebro)
- [#23888](https://github.com/apache/superset/pull/23888) chore(key-value): use json serialization for main resources (@villebro)
**Fixes**
- [#23723](https://github.com/apache/superset/pull/23723) fix: add enforce URI query params with a specific for MySQL (@dpgaspar)
- [#24970](https://github.com/apache/superset/pull/24970) fix: update permalink schema (@eschutho)
- [#24995](https://github.com/apache/superset/pull/24995) fix: Revert "fix(chart): Time Series set showMaxLabel as null for time xAxis (#20627) (@eschutho)
- [#24513](https://github.com/apache/superset/pull/24513) fix(sqllab): normalize changedOn timestamp (@villebro)
- [#23512](https://github.com/apache/superset/pull/23512) fix: Dashboard not loading with default first value in filter (@geido)
- [#24482](https://github.com/apache/superset/pull/24482) fix(permalink): Incorrect component schema reference (@Nisden)
- [#24166](https://github.com/apache/superset/pull/24166) fix(permalink): migrate to marshmallow codec (@villebro)
- [#24697](https://github.com/apache/superset/pull/24697) fix: import database engine validation (@dpgaspar)
- [#24390](https://github.com/apache/superset/pull/24390) fix: FAB CSS on Superset (@dpgaspar)
- [#24249](https://github.com/apache/superset/pull/24249) fix: dashboard ownership check (@betodealmeida)
- [#23801](https://github.com/apache/superset/pull/23801) fix(plugin-chart-handlebars): Fix TypeError when using handlebars columns raw mode (@fmannhardt)
- [#23566](https://github.com/apache/superset/pull/23566) fix: Filter values are not updating when dependencies are set (@michael-s-molina)
- [#23400](https://github.com/apache/superset/pull/23400) fix: Select all issue with "Dynamically search all filter values" in FilterBar (@geido)
- [#23865](https://github.com/apache/superset/pull/23865) fix: Native time range filter in legacy charts (@kgabryje)
- [#24054](https://github.com/apache/superset/pull/24054) fix: handle temporal columns in presto partitions (@giftig)
- [#23882](https://github.com/apache/superset/pull/23882) fix: handle comments in `has_table_query` (@betodealmeida)
- [#24137](https://github.com/apache/superset/pull/24137) fix: disable SHOW_STACKTRACE by default (@dpgaspar)
- [#24185](https://github.com/apache/superset/pull/24185) fix: db validate parameters permission (@dpgaspar)
- [#23769](https://github.com/apache/superset/pull/23769) fix: allow db driver distinction on enforced URI params (@dpgaspar)
- [#23600](https://github.com/apache/superset/pull/23600) fix: load examples as anon user (@betodealmeida)
- [#23200](https://github.com/apache/superset/pull/23200) fix: permission checks on import (@betodealmeida)
- [#23901](https://github.com/apache/superset/pull/23901) fix: check sqlalchemy_uri (@dpgaspar)
- [#23751](https://github.com/apache/superset/pull/23751) fix(mssql): apply top after distinct (@villebro)
- [#23586](https://github.com/apache/superset/pull/23586) fix(dashboard-rbac): use normal rbac when no roles chosen (@villebro)
- [#23582](https://github.com/apache/superset/pull/23582) fix(dash import): Ensure old datasource ids are not referenced in imported charts (@jfrag1)
- [#23506](https://github.com/apache/superset/pull/23506) fix(generic-x-axis): skip initial time filter for legacy charts (@villebro)
- [#23507](https://github.com/apache/superset/pull/23507) fix(legacy-plugin-chart-heatmap): fix adhoc column tooltip (@villebro)
- [#23441](https://github.com/apache/superset/pull/23441) fix(chart): non existent time grain no longer breaks the application (@rdubois)
- [#23393](https://github.com/apache/superset/pull/23393) fix(Pivot Table v2): resolved full width issue (@AkashBoora)
- [#22851](https://github.com/apache/superset/pull/22851) fix: Validate jinja rendered query (@geido)
**Others**
- [#24586](https://github.com/apache/superset/pull/24586) chore(metastore-cache): add codec support (@villebro)
- [#23113](https://github.com/apache/superset/pull/23113) chore(sqla): Address performance tradeoff with eager loading (@john-bodley)
- [#24294](https://github.com/apache/superset/pull/24294) chore: update UPDATING for 2.1.0 (@eschutho)
- [#24056](https://github.com/apache/superset/pull/24056) chore: Remove unnecessary information from response (@geido)
### 2.1.0 (Thu Mar 16 21:13:05 2023 -0700)
**Database Migrations**
@@ -36,7 +817,7 @@ under the License.
- [#23139](https://github.com/apache/superset/pull/23139) fix: memoized decorator memory leak (@dpgaspar)
- [#19676](https://github.com/apache/superset/pull/19676) chore(frontend): Spelling (@jsoref)
- [#22852](https://github.com/apache/superset/pull/22852) chore: removing unnecessary double spaces, a.k.a. "shotgun holes" (@rusackas)
- [#21912](https://github.com/apache/superset/pull/21912) feat(ssh-tunnelling): Setup SSH Tunneling Commands for Database Connections (@hughhhh)
- [#21912](https://github.com/apache/superset/pull/21912) feat(ssh-tunnelling): Setup SSH Tunneling Commands for Database Connections (@hughhhh)
- [#22248](https://github.com/apache/superset/pull/22248) chore: Add a migration that removes filter_bar_orientation from dashboard's json_metadata (@kgabryje)
- [#21417](https://github.com/apache/superset/pull/21417) fix(db-migration): new_dataset_models_take_2 error on postgres (@micsbot)
- [#21778](https://github.com/apache/superset/pull/21778) fix(migration): Ensure the paginated update is deterministic (@john-bodley)
@@ -181,7 +962,7 @@ under the License.
- [#21322](https://github.com/apache/superset/pull/21322) feat: add snowflake keypair authentication (@xiayanzheng)
- [#21343](https://github.com/apache/superset/pull/21343) feat: Adds MetadataBar to Drill to Detail modal (@michael-s-molina)
- [#21245](https://github.com/apache/superset/pull/21245) feat: Update nav bar with new data information architecture for SQL Lab + SQL (@hughhhh)
- [#21075](https://github.com/apache/superset/pull/21075) feat: add tableselector to dataset creation page (@pkdotson)
- [#21075](https://github.com/apache/superset/pull/21075) feat: add tableselector to dataset creation page (@pkdotson)
- [#21163](https://github.com/apache/superset/pull/21163) feat: apply Time Grain to X-Axis column (@zhaoyongjie)
- [#20837](https://github.com/apache/superset/pull/20837) feat: only show active user for chart/dashboard/datasource owner drop… (@zephyring)
- [#21321](https://github.com/apache/superset/pull/21321) feat(explore): standardized controls for time pivot chart (@stephenLYZ)
@@ -241,7 +1022,7 @@ under the License.
- [#19383](https://github.com/apache/superset/pull/19383) feat: truncate long values in table viz, a per-column setting (@stevetracvc)
- [#20600](https://github.com/apache/superset/pull/20600) feat: add hooks on set_perm for new data permissions (@dpgaspar)
- [#20509](https://github.com/apache/superset/pull/20509) feat(HelmChart): Configurable securityContext in Pods (@miloszbednarzak)
- [#20017](https://github.com/apache/superset/pull/20017) feat: hack db connection modal ctabtns (@pkdotson)
- [#20017](https://github.com/apache/superset/pull/20017) feat: hack db connection modal ctabtns (@pkdotson)
- [#20586](https://github.com/apache/superset/pull/20586) feat: drop missing columns control (@zhaoyongjie)
- [#19520](https://github.com/apache/superset/pull/19520) feat(deck.gl): add color range for deck.gl 3D chart (@stephenLYZ)
- [#20512](https://github.com/apache/superset/pull/20512) feat(sql lab): Save Dataset Modal Autocomplete should display list when overwritting (@Antonio-RiveroMartnez)
@@ -277,7 +1058,7 @@ under the License.
- [#23195](https://github.com/apache/superset/pull/23195) fix(ssh_tunnel): Display SSHTunnel Switch when editing a DB that was created with the Dynamic Form (@Antonio-RiveroMartnez)
- [#23196](https://github.com/apache/superset/pull/23196) fix(sshtunnel): argument params to properly setting `server_port` (@hughhhh)
- [#23096](https://github.com/apache/superset/pull/23096) fix: reorganize role permissions (@dpgaspar)
- [#23107](https://github.com/apache/superset/pull/23107) fix: missing __init__ on module sqllab commands (@dpgaspar)
- [#23107](https://github.com/apache/superset/pull/23107) fix: missing **init** on module sqllab commands (@dpgaspar)
- [#23101](https://github.com/apache/superset/pull/23101) fix: removing pyproject.toml (@zephyring)
- [#23093](https://github.com/apache/superset/pull/23093) fix: dict bug on QueryContextFactory (@okayhooni)
- [#23083](https://github.com/apache/superset/pull/23083) fix: css template permissions for gamma role (@dpgaspar)
@@ -318,7 +1099,7 @@ under the License.
- [#22907](https://github.com/apache/superset/pull/22907) fix: bump isort to fix pre-commit CI (@EugeneTorap)
- [#22818](https://github.com/apache/superset/pull/22818) fix: revert RESTful apis and react view for RLS (@mayurnewase)
- [#22861](https://github.com/apache/superset/pull/22861) fix(sqllab): reverts #22695 (@justinpark)
- [#22872](https://github.com/apache/superset/pull/22872) fix: Convert TIMESTAMP_* to TIMESTAMP in Snowflake (@geido)
- [#22872](https://github.com/apache/superset/pull/22872) fix: Convert TIMESTAMP\_\* to TIMESTAMP in Snowflake (@geido)
- [#22453](https://github.com/apache/superset/pull/22453) fix(Annotation Layers): Error when render options with renamed columns (@Always-prog)
- [#22791](https://github.com/apache/superset/pull/22791) fix(cpq): Add `schema` to Query.data() payload (@hughhhh)
- [#22813](https://github.com/apache/superset/pull/22813) fix(sqllab): type error on renderBigIntStr (@justinpark)
@@ -328,7 +1109,7 @@ under the License.
- [#22792](https://github.com/apache/superset/pull/22792) fix: better logic to extract errors on databricks (@eschutho)
- [#22695](https://github.com/apache/superset/pull/22695) fix(sqllab): Invalid schema fetch for deprecated value (@justinpark)
- [#22764](https://github.com/apache/superset/pull/22764) fix(ssh-tunnel): update fields for open tunnel with private + private key passwords (@hughhhh)
- [#16926](https://github.com/apache/superset/pull/16926) fix: Read MAPBOX_API_KEY from environment (@Lawful2002)
- [#16926](https://github.com/apache/superset/pull/16926) fix: Read MAPBOX_API_KEY from environment (@Lawful2002)
- [#22763](https://github.com/apache/superset/pull/22763) fix(ssh-tunnel): wrap pkey into StringIO buffer before creating the tunnel (@hughhhh)
- [#22727](https://github.com/apache/superset/pull/22727) fix: pass in slack error messages properly (@eschutho)
- [#22614](https://github.com/apache/superset/pull/22614) fix: Report screenshot cut off on left and right sides (@lyndsiWilliams)
@@ -361,10 +1142,10 @@ under the License.
- [#22565](https://github.com/apache/superset/pull/22565) fix(explore): support saving undefined time grain (@villebro)
- [#22567](https://github.com/apache/superset/pull/22567) fix(cypress): make test chart time range deterministic (@villebro)
- [#22563](https://github.com/apache/superset/pull/22563) fix(websocket): bump ts-node to fix startup error (@villebro)
- [#22507](https://github.com/apache/superset/pull/22507) fix(localization): pybabel doesn't extract plural forms from frontend (@artemonsh)
- [#22507](https://github.com/apache/superset/pull/22507) fix(localization): pybabel doesn't extract plural forms from frontend (@artemonsh)
- [#22523](https://github.com/apache/superset/pull/22523) fix: adding missing examples for bubble chart, bullet chart, calendar heatmap chart and country map chart in the gallery (@yash-samsung)
- [#22543](https://github.com/apache/superset/pull/22543) fix(explore): datasource_type typo (@Musa10)
- [#22314](https://github.com/apache/superset/pull/22314) fix(init): Initialize _jwt_cookie_name in AsyncQueryManager __init__ (@xneg)
- [#22314](https://github.com/apache/superset/pull/22314) fix(init): Initialize \_jwt_cookie_name in AsyncQueryManager **init** (@xneg)
- [#22512](https://github.com/apache/superset/pull/22512) fix(cypress): disable flaky tests (@villebro)
- [#22208](https://github.com/apache/superset/pull/22208) fix(assets api): import replaces dashboard (@Stanhoucke)
- [#22475](https://github.com/apache/superset/pull/22475) fix(chart-list): Hide 'Dashboards added to' column. (@codyml)
@@ -399,7 +1180,7 @@ under the License.
- [#22337](https://github.com/apache/superset/pull/22337) fix: Styling fixes for horizontal filter bar (@kgabryje)
- [#22329](https://github.com/apache/superset/pull/22329) fix(sqllab): Fix autocomplete for SQL Lab (@Antonio-RiveroMartnez)
- [#22320](https://github.com/apache/superset/pull/22320) fix: add columns back into SQL Lab to Explore Flow (@AAfghahi)
- [#22200](https://github.com/apache/superset/pull/22200) fix: Display Error Messages in DB Connection Modal (@AAfghahi)
- [#22200](https://github.com/apache/superset/pull/22200) fix: Display Error Messages in DB Connection Modal (@AAfghahi)
- [#22319](https://github.com/apache/superset/pull/22319) fix(dashboard): Fix dashboard's left side being cut off (@kgabryje)
- [#22323](https://github.com/apache/superset/pull/22323) fix(dashboard): dashboard actions fail when bad component id exists in children array (@eric-briscoe)
- [#22318](https://github.com/apache/superset/pull/22318) fix: DropdownContainer resize algorithm (@michael-s-molina)
@@ -428,7 +1209,7 @@ under the License.
- [#22218](https://github.com/apache/superset/pull/22218) fix(plugin-chart-echarts): tooltip overflow bug (@villebro)
- [#22082](https://github.com/apache/superset/pull/22082) fix: Drill to detail blocked by tooltip (@michael-s-molina)
- [#22207](https://github.com/apache/superset/pull/22207) fix(explore): Value undefined and Unhashable type errors (@kgabryje)
- [#22186](https://github.com/apache/superset/pull/22186) fix: Empty Error Alert Modal (@AAfghahi)
- [#22186](https://github.com/apache/superset/pull/22186) fix: Empty Error Alert Modal (@AAfghahi)
- [#22171](https://github.com/apache/superset/pull/22171) fix: don't stringify extraJson in form (@eschutho)
- [#22179](https://github.com/apache/superset/pull/22179) fix: chart id mapping in dashboard api (@villebro)
- [#22172](https://github.com/apache/superset/pull/22172) fix: SQL Lab QuerySource via referrer (@john-bodley)
@@ -438,7 +1219,7 @@ under the License.
- [#22167](https://github.com/apache/superset/pull/22167) fix(alerts): execute query as report executor (@villebro)
- [#22115](https://github.com/apache/superset/pull/22115) fix: Add scrollTopOnPagination property to Table (@geido)
- [#22118](https://github.com/apache/superset/pull/22118) fix: slug is empty if filename is non-ASCII (@EugeneTorap)
- [#22137](https://github.com/apache/superset/pull/22137) fix: Missing applied filters indicator (@john-bodley)
- [#22137](https://github.com/apache/superset/pull/22137) fix: Missing applied filters indicator (@john-bodley)
- [#22129](https://github.com/apache/superset/pull/22129) fix: add back database lookup from sip 68 revert (@eschutho)
- [#22013](https://github.com/apache/superset/pull/22013) fix(sqllab): Add templateParams on kv store (@justinpark)
- [#22081](https://github.com/apache/superset/pull/22081) fix: Right click on country map with code filter (@michael-s-molina)
@@ -522,7 +1303,7 @@ under the License.
- [#21539](https://github.com/apache/superset/pull/21539) fix(dashboard): fix Pivot Table V2 dragPreview in the dashboard (@stephenLYZ)
- [#21501](https://github.com/apache/superset/pull/21501) fix(table-chart): don't color empty cells in table chart with color formatters (@mayurnewase)
- [#21358](https://github.com/apache/superset/pull/21358) fix: Dataset duplication fatal error (@reesercollins)
- [#21591](https://github.com/apache/superset/pull/21591) fix(tags): Adding __init__ to tags (@craig-rueda)
- [#21591](https://github.com/apache/superset/pull/21591) fix(tags): Adding **init** to tags (@craig-rueda)
- [#21576](https://github.com/apache/superset/pull/21576) fix(dashboard): dashboard doesn't load properly if it has tabs (@stephenLYZ)
- [#21544](https://github.com/apache/superset/pull/21544) fix(explore): Fix datasource switch for table chart (@codyml)
- [#21065](https://github.com/apache/superset/pull/21065) fix(databases): GSheets and Clickhouse DBs are not allowed to upload files (@Antonio-RiveroMartnez)
@@ -609,7 +1390,7 @@ under the License.
- [#21029](https://github.com/apache/superset/pull/21029) fix: take form_data reference for metrics for pivot_v2 table reports (@hughhhh)
- [#21003](https://github.com/apache/superset/pull/21003) fix: Validate required fields in sql_json API (@EugeneTorap)
- [#21045](https://github.com/apache/superset/pull/21045) fix: add plain postgres alias (@betodealmeida)
- [#21034](https://github.com/apache/superset/pull/21034) fix: [sc-54864] Adds safety check to provide near term fix to save query (@eric-briscoe)
- [#21034](https://github.com/apache/superset/pull/21034) fix: [sc-54864] Adds safety check to provide near term fix to save query (@eric-briscoe)
- [#21025](https://github.com/apache/superset/pull/21025) fix: unable to show view as table modal (@zhaoyongjie)
- [#21030](https://github.com/apache/superset/pull/21030) fix: making crossFilter.chartsInScope optional (@rusackas)
- [#20970](https://github.com/apache/superset/pull/20970) fix: forwardRef warnings in selects (@michael-s-molina)
@@ -622,7 +1403,7 @@ under the License.
- [#20977](https://github.com/apache/superset/pull/20977) fix: series limit solution for source is query (@AAfghahi)
- [#20975](https://github.com/apache/superset/pull/20975) fix: Columns not passing properly from SQL Lab to Explore (@lyndsiWilliams)
- [#20959](https://github.com/apache/superset/pull/20959) fix: remove extra line for link (@pkdotson)
- [#20938](https://github.com/apache/superset/pull/20938) fix: add timegrains to data payload (@hughhhh)
- [#20938](https://github.com/apache/superset/pull/20938) fix: add timegrains to data payload (@hughhhh)
- [#20964](https://github.com/apache/superset/pull/20964) fix: No back button in save dataset modal (@AAfghahi)
- [#20966](https://github.com/apache/superset/pull/20966) fix: BigQuery get_parameters_from_uri (@betodealmeida)
- [#20941](https://github.com/apache/superset/pull/20941) fix: Use SPA Dataset link in Chart and Dashboard (@EugeneTorap)
@@ -679,7 +1460,7 @@ under the License.
- [#20725](https://github.com/apache/superset/pull/20725) fix: datasourcedao datasource not found error (@pkdotson)
- [#20673](https://github.com/apache/superset/pull/20673) fix(explore): Fix chart standalone URL for report/thumbnail generation (@codyml)
- [#20760](https://github.com/apache/superset/pull/20760) fix(csv): Do not coerce persisted data integer columns to float (@john-bodley)
- [#20757](https://github.com/apache/superset/pull/20757) fix: PrestoEngineSpec._show_columns return type (@john-bodley)
- [#20757](https://github.com/apache/superset/pull/20757) fix: PrestoEngineSpec.\_show_columns return type (@john-bodley)
- [#20706](https://github.com/apache/superset/pull/20706) fix(sql lab): MultiSelector component render twice (@diegomedina248)
- [#20727](https://github.com/apache/superset/pull/20727) fix(docker): Fixing broken node build (@craig-rueda)
- [#20751](https://github.com/apache/superset/pull/20751) fix: change dataset functionality in Explore (@hughhhh)
@@ -716,6 +1497,7 @@ under the License.
- [#20496](https://github.com/apache/superset/pull/20496) fix: change permissions on action (@eschutho)
**Others**
- [#23325](https://github.com/apache/superset/pull/23325) chore: use util test env for init check (@eschutho)
- [#23298](https://github.com/apache/superset/pull/23298) docs: improve API v1 migration documentation (@dpgaspar)
- [#23199](https://github.com/apache/superset/pull/23199) docs: update installation docs to include frontend asset build (@eschutho)
@@ -769,7 +1551,7 @@ under the License.
- [#22798](https://github.com/apache/superset/pull/22798) chore(welcome): change default last tab to "all" (@villebro)
- [#22927](https://github.com/apache/superset/pull/22927) chore: Bump Flask-AppBuilder constraints (@john-bodley)
- [#22915](https://github.com/apache/superset/pull/22915) test: Clean up AdhocFilterOption test warnings (@lyndsiWilliams)
- [#22501](https://github.com/apache/superset/pull/22501) chore: Migrate /superset/tables/* to API v1 (@diegomedina248)
- [#22501](https://github.com/apache/superset/pull/22501) chore: Migrate /superset/tables/\* to API v1 (@diegomedina248)
- [#22902](https://github.com/apache/superset/pull/22902) build(deps-dev): bump eslint from 8.32.0 to 8.33.0 in /superset-websocket (@dependabot[bot])
- [#22878](https://github.com/apache/superset/pull/22878) chore: upgrade react-router-dom to 5.3.4 (@lilykuang)
- [#22914](https://github.com/apache/superset/pull/22914) chore: upgrade packages for react v17 upgrade (@lilykuang)
@@ -798,7 +1580,7 @@ under the License.
- [#22844](https://github.com/apache/superset/pull/22844) chore(tests): Streamline Cypress login to fix fails/flakes (@codyml)
- [#20872](https://github.com/apache/superset/pull/20872) docs(alerts & reports): add, prune, reorganize (@sfirke)
- [#22617](https://github.com/apache/superset/pull/22617) chore(issue templates): discouraging Issues for feature requests (@rusackas)
- [#22585](https://github.com/apache/superset/pull/22585) chore: upgrade react-datetime, react-intersection-observer and react-checkbox-tree (@lilykuang)
- [#22585](https://github.com/apache/superset/pull/22585) chore: upgrade react-datetime, react-intersection-observer and react-checkbox-tree (@lilykuang)
- [#22516](https://github.com/apache/superset/pull/22516) chore: Convert direct uses of antd icons to 'Icons' component (@codyml)
- [#22413](https://github.com/apache/superset/pull/22413) chore(sqla): Add explicit bidirectional performant relationships for SQLA model (@john-bodley)
- [#22796](https://github.com/apache/superset/pull/22796) docs: link docker readme in docker config section (@nytai)
@@ -970,7 +1752,7 @@ under the License.
- [#21816](https://github.com/apache/superset/pull/21816) chore: Added translate functions (@AndVK)
- [#21818](https://github.com/apache/superset/pull/21818) chore: Add `USER_CLIENT_ERRORS` to stop logging exceptions that are user driven (@hughhhh)
- [#21523](https://github.com/apache/superset/pull/21523) refactor: serialize extra json in state (@eschutho)
- [#21714](https://github.com/apache/superset/pull/21714) chore: add more logging for alerts and reports (@pkdotson)
- [#21714](https://github.com/apache/superset/pull/21714) chore: add more logging for alerts and reports (@pkdotson)
- [#21787](https://github.com/apache/superset/pull/21787) chore: stop logging "SyntaxError" as exceptions (@hughhhh)
- [#21766](https://github.com/apache/superset/pull/21766) refactor: preparation for time section migration (@zhaoyongjie)
- [#21738](https://github.com/apache/superset/pull/21738) chore: cleanup on catalog check for Gsheets (@hughhhh)

View File

@@ -577,6 +577,18 @@ cd superset-frontend
npm ci
```
Note that Superset uses [Scarf](https://docs.scarf.sh) to capture telemetry/analytics about versions being installed, including the `scarf-js` npm package. As noted elsewhere in this documentation, Scarf gathers aggregated stats for the sake of security/release strategy, and does not capture/retain PII. [You can read here](https://docs.scarf.sh/package-analytics/) about the package, and various means to opt out of it, but one easy way to opt out is to add this setting in `superset-frontent/package.json`:
```json
// your-package/package.json
{
// ...
"scarfSettings": {
"enabled": false
}
// ...
}
```
#### Build assets
There are three types of assets you can build:

View File

@@ -81,9 +81,9 @@
|can available domains on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can request access on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can dashboard on Superset|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can post on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can expanded on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can delete on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|O|
|can post on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|O|O|
|can expanded on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|O|O|
|can delete on TableSchemaView|:heavy_check_mark:|:heavy_check_mark:|O|O|
|can get on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|can post on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
|can delete query on TabStateView|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|

View File

@@ -24,9 +24,20 @@ assists people when migrating to a new version.
## Next
### Breaking Changes
### Potential Downtime
### Other
## 3.0.0
- [24911](https://github.com/apache/superset/pull/24911): Changes the column type from `TEXT` to `MediumText` in table `logs`, potentially requiring a table lock on MySQL dbs or taking some time to complete on large deployments.
- [24939](https://github.com/apache/superset/pull/24939): Augments the foreign key constraints for the `embedded_dashboards` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard is deleted. Scheduled downtime may be advised.
- [24938](https://github.com/apache/superset/pull/24938): Augments the foreign key constraints for the `dashboard_slices` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dashboard or slice is deleted. Scheduled downtime may be advised.
- [24628]https://github.com/apache/superset/pull/24628): Augments the foreign key constraints for the `dashboard_owner`, `report_schedule_owner`, and `slice_owner` tables to include an explicit CASCADE ON DELETE to ensure the relevant ownership records are deleted when a dataset is deleted. Scheduled downtime may be advised.
- [24488](https://github.com/apache/superset/pull/24488): Augments the foreign key constraints for the `sql_metrics`, `sqlatable_user`, and `table_columns` tables which reference the `tables` table to include an explicit CASCADE ON DELETE to ensure the relevant records are deleted when a dataset is deleted. Scheduled downtime may be advised.
- [24335](https://github.com/apache/superset/pull/24335): Removed deprecated API `/superset/filter/<datasource_type>/<int:datasource_id>/<column>/`
- [24185](https://github.com/apache/superset/pull/24185): `/api/v1/database/test_connection` and `api/v1/database/validate_parameters` permissions changed from `can_read` to `can_write`. Only Admin user's have access.
- [24232](https://github.com/apache/superset/pull/24232): Enables ENABLE_TEMPLATE_REMOVE_FILTERS, DRILL_TO_DETAIL, DASHBOARD_CROSS_FILTERS by default, marks VERSIONED_EXPORT and ENABLE_TEMPLATE_REMOVE_FILTERS as deprecated.
- [23652](https://github.com/apache/superset/pull/23652): Enables GENERIC_CHART_AXES feature flag by default.
- [23226](https://github.com/apache/superset/pull/23226): Migrated endpoint `/estimate_query_cost/<int:database_id>` to `/api/v1/sqllab/estimate/`. Corresponding permissions are can estimate query cost on SQLLab. Make sure you add/replace the necessary permissions on any custom roles you may have.
@@ -40,6 +51,7 @@ assists people when migrating to a new version.
### Breaking Changes
- [24686]https://github.com/apache/superset/pull/24686): All dataset's custom explore_url are handled as relative URLs on the frontend, behaviour controlled by PREVENT_UNSAFE_DEFAULT_URLS_ON_DATASET.
- [24262](https://github.com/apache/superset/pull/24262): Enabled `TALISMAN_ENABLED` flag by default and provided stricter default Content Security Policy
- [24415](https://github.com/apache/superset/pull/24415): Removed the obsolete Druid NoSQL REGEX operator.
- [24423](https://github.com/apache/superset/pull/24423): Removed deprecated APIs `/superset/slice_json/...`, `/superset/annotation_json/...`
@@ -70,10 +82,16 @@ assists people when migrating to a new version.
- [23663](https://github.com/apache/superset/pull/23663): Removes deprecated feature flags `ALLOW_DASHBOARD_DOMAIN_SHARDING`, `DISPLAY_MARKDOWN_HTML`, and `FORCE_DATABASE_CONNECTIONS_SSL`.
- [22325](https://github.com/apache/superset/pull/22325): "RLS_FORM_QUERY_REL_FIELDS" is replaced by "RLS_BASE_RELATED_FIELD_FILTERS" feature flag. Its value format stays same.
### Potential Downtime
## 2.1.1
- [24185](https://github.com/apache/superset/pull/24185): `/api/v1/database/test_connection` and `api/v1/database/validate_parameters` permissions changed from `can_read` to `can_write`. Only Admin user's have access.
- [24256](https://github.com/apache/superset/pull/24256): `Flask-Login` session validation is now set to `strong` by default. Previous setting was `basic`.
### Other
- [24982](https://github.com/apache/superset/pull/24982): By default, physical datasets on Oracle-like dialects like Snowflake will now use denormalized column names. However, existing datasets won't be affected. To change this behavior, the "Advanced" section on the dataset modal has a "Normalize column names" flag which can be changed to change this behavior.
- [23888](https://github.com/apache/superset/pull/23888): Database Migration for json serialization instead of pickle should upgrade/downgrade correctly when bumping to/from this patch version
## 2.1.0
- [22809](https://github.com/apache/superset/pull/22809): Migrated endpoint `/superset/sql_json` and `/superset/results/` to `/api/v1/sqllab/execute/` and `/api/v1/sqllab/results/` respectively. Corresponding permissions are `can sql_json on Superset` to `can execute on SQLLab`, `can results on Superset` to `can results on SQLLab`. Make sure you add/replace the necessary permissions on any custom roles you may have.

View File

@@ -14,12 +14,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
x-superset-depends-on: &superset-depends-on
- db
- redis
x-superset-volumes: &superset-volumes
# /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
x-superset-volumes:
&superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
- ./docker:/app/docker
- superset_home:/app/superset_home
@@ -39,6 +39,7 @@ services:
restart: unless-stopped
volumes:
- db_home:/var/lib/postgresql/data
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
superset:
env_file: docker/.env-non-dev
@@ -73,7 +74,11 @@ services:
user: "root"
volumes: *superset-volumes
healthcheck:
test: ["CMD-SHELL", "celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME"]
test:
[
"CMD-SHELL",
"celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME",
]
superset-worker-beat:
image: *superset-image

View File

@@ -14,7 +14,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
x-superset-image: &superset-image apache/superset:${TAG:-latest-dev}
x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
x-superset-user: &superset-user root
x-superset-depends-on: &superset-depends-on
- db
@@ -47,6 +47,7 @@ services:
- "127.0.0.1:5432:5432"
volumes:
- db_home:/var/lib/postgresql/data
- ./docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
superset:
env_file: docker/.env

View File

@@ -22,6 +22,12 @@ DATABASE_HOST=db
DATABASE_PASSWORD=superset
DATABASE_USER=superset
EXAMPLES_DB=examples
EXAMPLES_HOST=db
EXAMPLES_USER=examples
EXAMPLES_PASSWORD=examples
EXAMPLES_PORT=5432
# database engine specific environment variables
# change the below if you prefer another database engine
DATABASE_PORT=5432

View File

@@ -21,11 +21,17 @@ DATABASE_DB=superset
DATABASE_HOST=db
DATABASE_PASSWORD=superset
DATABASE_USER=superset
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql
EXAMPLES_DB=examples
EXAMPLES_HOST=db
EXAMPLES_USER=examples
EXAMPLES_PASSWORD=examples
EXAMPLES_PORT=5432
# database engine specific environment variables
# change the below if you prefer another database engine
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql
POSTGRES_DB=superset
POSTGRES_USER=superset
POSTGRES_PASSWORD=superset

View File

@@ -0,0 +1,15 @@
# ------------------------------------------------------------------------
# Creates the examples database and repective user. This database location
# and access credentials are defined on the environment variables
# ------------------------------------------------------------------------
set -e
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" <<-EOSQL
CREATE USER ${EXAMPLES_USER} WITH PASSWORD '${EXAMPLES_PASSWORD}';
CREATE DATABASE ${EXAMPLES_DB};
GRANT ALL PRIVILEGES ON DATABASE ${EXAMPLES_DB} TO ${EXAMPLES_USER};
EOSQL
psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" -d "${EXAMPLES_DB}" <<-EOSQL
GRANT ALL ON SCHEMA public TO ${EXAMPLES_USER};
EOSQL

View File

@@ -22,49 +22,42 @@
#
import logging
import os
from typing import Optional
from cachelib.file import FileSystemCache
from celery.schedules import crontab
logger = logging.getLogger()
DATABASE_DIALECT = os.getenv("DATABASE_DIALECT")
DATABASE_USER = os.getenv("DATABASE_USER")
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD")
DATABASE_HOST = os.getenv("DATABASE_HOST")
DATABASE_PORT = os.getenv("DATABASE_PORT")
DATABASE_DB = os.getenv("DATABASE_DB")
def get_env_variable(var_name: str, default: Optional[str] = None) -> str:
"""Get the environment variable or raise exception."""
try:
return os.environ[var_name]
except KeyError:
if default is not None:
return default
else:
error_msg = "The environment variable {} was missing, abort...".format(
var_name
)
raise OSError(error_msg)
DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT")
DATABASE_USER = get_env_variable("DATABASE_USER")
DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD")
DATABASE_HOST = get_env_variable("DATABASE_HOST")
DATABASE_PORT = get_env_variable("DATABASE_PORT")
DATABASE_DB = get_env_variable("DATABASE_DB")
EXAMPLES_USER = os.getenv("EXAMPLES_USER")
EXAMPLES_PASSWORD = os.getenv("EXAMPLES_PASSWORD")
EXAMPLES_HOST = os.getenv("EXAMPLES_HOST")
EXAMPLES_PORT = os.getenv("EXAMPLES_PORT")
EXAMPLES_DB = os.getenv("EXAMPLES_DB")
# The SQLAlchemy connection string.
SQLALCHEMY_DATABASE_URI = "{}://{}:{}@{}:{}/{}".format(
DATABASE_DIALECT,
DATABASE_USER,
DATABASE_PASSWORD,
DATABASE_HOST,
DATABASE_PORT,
DATABASE_DB,
SQLALCHEMY_DATABASE_URI = (
f"{DATABASE_DIALECT}://"
f"{DATABASE_USER}:{DATABASE_PASSWORD}@"
f"{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_DB}"
)
REDIS_HOST = get_env_variable("REDIS_HOST")
REDIS_PORT = get_env_variable("REDIS_PORT")
REDIS_CELERY_DB = get_env_variable("REDIS_CELERY_DB", "0")
REDIS_RESULTS_DB = get_env_variable("REDIS_RESULTS_DB", "1")
SQLALCHEMY_EXAMPLES_URI = (
f"{DATABASE_DIALECT}://"
f"{EXAMPLES_USER}:{EXAMPLES_PASSWORD}@"
f"{EXAMPLES_HOST}:{EXAMPLES_PORT}/{EXAMPLES_DB}"
)
REDIS_HOST = os.getenv("REDIS_HOST", "redis")
REDIS_PORT = os.getenv("REDIS_PORT", "6379")
REDIS_CELERY_DB = os.getenv("REDIS_CELERY_DB", "0")
REDIS_RESULTS_DB = os.getenv("REDIS_RESULTS_DB", "1")
RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")

2
docs/.gitignore vendored
View File

@@ -18,3 +18,5 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
docs/.zshrc

View File

@@ -15,6 +15,8 @@ The Superset project is always happy to review proposals for new high quality vi
plugins. However, for highly custom viz types it is recommended to maintain a fork
of Superset, and add the custom built viz plugins by hand.
**Note:** Additional community-generated resources about creating and deploying custom visualization plugins can be found on the [Superset Wiki](https://github.com/apache/superset/wiki/Community-Resource-Library#creating-custom-data-visualizations)
### Prerequisites
In order to create a new viz plugin, you need the following:

View File

@@ -10,13 +10,13 @@ version: 1
To use ClickHouse with Superset, you will need to add the following Python library:
```
clickhouse-connect>=0.4.1
clickhouse-connect>=0.6.8
```
If running Superset using Docker Compose, add the following to your `./docker/requirements-local.txt` file:
```
clickhouse-connect>=0.4.1
clickhouse-connect>=0.6.8
```
The recommended connector library for ClickHouse is

View File

@@ -282,3 +282,9 @@ guarantees and are not recommended but may fit your use case temporarily:
In the Edit Dataset view, you can specify a time offset. This field lets you configure the
number of hours to be added or subtracted from the time column.
This can be used, for example, to convert UTC time to local time.
### Does Superset collect any telemetry data?
Superset uses [Scarf](https://about.scarf.sh/) by default to collect basic telemetry data upon installing and/or running Superset. This data helps the maintainers of Superset better understand which versions of Superset are being used, in order to prioritize patch/minor releases and security fixes.
We use the [Scarf Gateway](https://docs.scarf.sh/gateway/) to sit in front of container registries, and the [scarf-js](https://about.scarf.sh/package-sdks) package to track `npm` installations.
Scarf purges PII and provides aggregated statistics. Superset users can easily opt out of analytics in various ways documented [here](https://docs.scarf.sh/gateway/#do-not-track) and [here](https://docs.scarf.sh/package-analytics/#as-a-user-of-a-package-using-scarf-js-how-can-i-opt-out-of-analytics). Additional opt-out instructions for Docker users are available on the [Docker Installation](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose) page.

View File

@@ -96,7 +96,14 @@ You can configure the Docker Compose environment varirables for dev and non-dev
One important variable is `SUPERSET_LOAD_EXAMPLES` which determines whether the `superset_init` container will load example data and visualizations into the database and Superset. These examples are quite helpful for most people, but probably unnecessary for experienced users. The loading process can sometimes take a few minutes and a good amount of CPU, so you may want to disable it on a resource-constrained device.
**Note:** Users often want to connect to other databases from Superset. Currently, the easiest way to do this is to modify the `docker-compose-non-dev.yml` file and add your database as a service that the other services depend on (via `x-superset-depends-on`). Others have attempted to set `network_mode: host` on the Superset services, but these generally break the installation, because the configuration requires use of the Docker Compose DNS resolver for the service names. If you have a good solution for this, let us know!
:::note
Users often want to connect to other databases from Superset. Currently, the easiest way to do this is to modify the `docker-compose-non-dev.yml` file and add your database as a service that the other services depend on (via `x-superset-depends-on`). Others have attempted to set `network_mode: host` on the Superset services, but these generally break the installation, because the configuration requires use of the Docker Compose DNS resolver for the service names. If you have a good solution for this, let us know!
:::
:::note
Superset uses [Scarf Gateway](https://about.scarf.sh/scarf-gateway) to collect telmetry data to better understand and support the need for patch versions of Sueprset. Scarf purges PII and provides aggregated statistics. Superset users can easily opt out of analytics in various ways documented [here](https://docs.scarf.sh/gateway/#do-not-track). However, if you wish to opt-out of this in your Docker-based installation, you can simply edit your `docker-compose.yml` or `docker-compose-non-dev.yml` file and remove `apachesuperset.docker.scarf.sh/` from the `x-superset-image` setting, so that it's simply pulling `apache/superset:${TAG:-latest-dev}`
:::
### 4. Log in to Superset

View File

@@ -121,6 +121,10 @@ init:
. {{ .Values.configMountPath }}/superset_init.sh
```
:::note
Superset uses [Scarf Gateway](https://about.scarf.sh/scarf-gateway) to collect telmetry data to better understand and support the need for patch versions of Sueprset. Scarf purges PII and provides aggregated statistics. Superset users can easily opt out of analytics in various ways documented [here](https://docs.scarf.sh/gateway/#do-not-track). However, if you wish to opt-out of this in your Helm-based installation, you can simply edit your `helm/superset/values.yaml` file and remove `apachesuperset.docker.scarf.sh/` from the `repository` field, so that it's simply pulling `apache/superset`
:::
#### Dependencies
Install additional packages and do any other bootstrap configuration in the bootstrap script.

View File

@@ -0,0 +1,4 @@
{
"label": "Security",
"position": 10
}

View File

@@ -0,0 +1,27 @@
---
title: CVEs by release
hide_title: true
sidebar_position: 2
---
#### Version 2.1.0
| CVE | Title | Affected |
| :------------- | :---------------------------------------------------------------------- | -----------------:|
| CVE-2023-25504 | Possible SSRF on import datasets | <= 2.1.0 |
| CVE-2023-27524 | Session validation vulnerability when using provided default SECRET_KEY | <= 2.1.0 |
| CVE-2023-27525 | Incorrect default permissions for Gamma role | <= 2.1.0 |
| CVE-2023-30776 | Database connection password leak | <= 2.1.0 |
#### Version 2.0.1
| CVE | Title | Affected |
| :------------- | :---------------------------------------------------------- | -----------------:|
| CVE-2022-41703 | SQL injection vulnerability in adhoc clauses | < 2.0.1 or <1.5.2 |
| CVE-2022-43717 | Cross-Site Scripting on dashboards | < 2.0.1 or <1.5.2 |
| CVE-2022-43718 | Cross-Site Scripting vulnerability on upload forms | < 2.0.1 or <1.5.2 |
| CVE-2022-43719 | Cross Site Request Forgery (CSRF) on accept, request access | < 2.0.1 or <1.5.2 |
| CVE-2022-43720 | Improper rendering of user input | < 2.0.1 or <1.5.2 |
| CVE-2022-43721 | Open Redirect Vulnerability | < 2.0.1 or <1.5.2 |
| CVE-2022-45438 | Dashboard metadata information leak | < 2.0.1 or <1.5.2 |

View File

@@ -1,7 +1,7 @@
---
title: Security
title: Role based Access
hide_title: true
sidebar_position: 10
sidebar_position: 1
---
### Roles

View File

@@ -68,7 +68,7 @@ const config = {
from: '/usertutorial.html',
},
{
to: '/docs/security',
to: '/docs/security/',
from: '/security.html',
},
{

File diff suppressed because it is too large Load Diff

View File

@@ -29,7 +29,7 @@ maintainers:
- name: craig-rueda
email: craig@craigrueda.com
url: https://github.com/craig-rueda
version: 0.10.3
version: 0.10.5
dependencies:
- name: postgresql
version: 12.1.6

View File

@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: https://github.com/norwoodj/helm-docs
# superset
![Version: 0.10.3](https://img.shields.io/badge/Version-0.10.3-informational?style=flat-square)
![Version: 0.10.5](https://img.shields.io/badge/Version-0.10.5-informational?style=flat-square)
Apache Superset is a modern, enterprise-ready business intelligence web application
@@ -70,7 +70,7 @@ helm install my-superset superset/superset
| fullnameOverride | string | `nil` | Provide a name to override the full names of resources |
| hostAliases | list | `[]` | Custom hostAliases for all superset pods # https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/ |
| image.pullPolicy | string | `"IfNotPresent"` | |
| image.repository | string | `"apache/superset"` | |
| image.repository | string | `"apachesuperset.docker.scarf.sh/apache/superset"` | |
| image.tag | string | `""` | |
| imagePullSecrets | list | `[]` | |
| ingress.annotations | object | `{}` | |

View File

@@ -176,7 +176,7 @@ configMountPath: "/app/pythonpath"
extraConfigMountPath: "/app/configs"
image:
repository: apache/superset
repository: apachesuperset.docker.scarf.sh/apache/superset
tag: ""
pullPolicy: IfNotPresent

View File

@@ -88,7 +88,7 @@ flask==2.2.5
# flask-migrate
# flask-sqlalchemy
# flask-wtf
flask-appbuilder==4.3.3
flask-appbuilder==4.3.6
# via apache-superset
flask-babel==1.0.0
# via flask-appbuilder
@@ -112,7 +112,7 @@ flask-sqlalchemy==2.5.1
# flask-migrate
flask-talisman==1.0.0
# via apache-superset
flask-wtf==1.0.1
flask-wtf==1.1.1
# via
# apache-superset
# flask-appbuilder
@@ -126,7 +126,7 @@ gunicorn==20.1.0
# via apache-superset
hashids==1.3.1
# via apache-superset
hijri-converter==2.2.4
hijri-converter==2.3.1
# via holidays
holidays==0.23
# via apache-superset
@@ -135,9 +135,7 @@ humanize==3.11.0
idna==3.2
# via email-validator
importlib-metadata==6.6.0
# via
# apache-superset
# flask
# via apache-superset
importlib-resources==5.12.0
# via limits
isodate==0.6.0
@@ -154,7 +152,7 @@ jsonschema==4.17.3
# via flask-appbuilder
kombu==5.2.4
# via celery
korean-lunar-calendar==0.2.1
korean-lunar-calendar==0.3.1
# via holidays
limits==3.4.0
# via flask-limiter
@@ -223,7 +221,7 @@ pyjwt==2.4.0
# apache-superset
# flask-appbuilder
# flask-jwt-extended
pymeeus==0.5.11
pymeeus==0.5.12
# via convertdate
pynacl==1.5.0
# via paramiko
@@ -251,7 +249,7 @@ pytz==2021.3
# celery
# flask-babel
# pandas
pyyaml==5.4.1
pyyaml==6.0.1
# via
# apache-superset
# apispec
@@ -326,9 +324,7 @@ wtforms-json==0.3.5
xlsxwriter==3.0.7
# via apache-superset
zipp==3.15.0
# via
# importlib-metadata
# importlib-resources
# via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View File

@@ -10,6 +10,8 @@
# via
# -r requirements/base.in
# -r requirements/development.in
appnope==0.1.3
# via ipython
astroid==2.6.6
# via pylint
asttokens==2.2.1

View File

@@ -38,11 +38,11 @@ pip-compile-multi==2.6.3
# via -r integration.in
pip-tools==6.13.0
# via pip-compile-multi
platformdirs==3.5.3
platformdirs==3.8.1
# via
# tox
# virtualenv
pluggy==1.0.0
pluggy==1.2.0
# via tox
pre-commit==3.3.3
# via -r integration.in
@@ -50,12 +50,12 @@ pyproject-api==1.5.2
# via tox
pyproject-hooks==1.0.0
# via build
pyyaml==5.4.1
pyyaml==6.0.1
# via pre-commit
toposort==1.10
# via pip-compile-multi
tox==4.6.3
# via -r integration.in
tox==4.6.4
# via -r requirements/integration.in
virtualenv==20.23.1
# via
# pre-commit

View File

@@ -16,7 +16,7 @@
#
-r development.in
-r integration.in
-e file:.[bigquery,hive,presto,trino]
-e file:.[bigquery,hive,presto,prophet,trino]
docker
flask-testing
freezegun

View File

@@ -1,4 +1,4 @@
# SHA1:623feb0dd2b6bd376238ecf75069bc82136c2d70
# SHA1:78fe89f88adf34ac75513d363d7d9d0b5cc8cd1c
#
# This file is autogenerated by pip-compile-multi
# To update, run:
@@ -12,16 +12,26 @@
# -r requirements/base.in
# -r requirements/development.in
# -r requirements/testing.in
cmdstanpy==1.1.0
# via prophet
contourpy==1.0.7
# via matplotlib
coverage[toml]==7.2.5
# via pytest-cov
cycler==0.11.0
# via matplotlib
db-dtypes==1.1.1
# via pandas-gbq
docker==6.1.1
# via -r requirements/testing.in
ephem==4.1.4
# via lunarcalendar
exceptiongroup==1.1.1
# via pytest
flask-testing==0.8.1
# via -r requirements/testing.in
fonttools==4.39.4
# via matplotlib
freezegun==1.2.2
# via -r requirements/testing.in
google-api-core[grpc]==2.11.0
@@ -73,6 +83,12 @@ iniconfig==2.0.0
# via pytest
jsonschema-spec==0.1.4
# via openapi-spec-validator
kiwisolver==1.4.4
# via matplotlib
lunarcalendar==0.0.9
# via prophet
matplotlib==3.7.1
# via prophet
oauthlib==3.2.2
# via requests-oauthlib
openapi-schema-validator==0.4.4
@@ -85,6 +101,8 @@ parameterized==0.9.0
# via -r requirements/testing.in
pathable==0.4.3
# via jsonschema-spec
prophet==1.1.1
# via apache-superset
proto-plus==1.22.2
# via
# google-cloud-bigquery
@@ -97,12 +115,6 @@ protobuf==4.23.0
# googleapis-common-protos
# grpcio-status
# proto-plus
pyasn1==0.5.0
# via
# pyasn1-modules
# rsa
pyasn1-modules==0.3.0
# via google-auth
pydata-google-auth==1.7.0
# via pandas-gbq
pyfakefs==5.2.2
@@ -126,10 +138,16 @@ rfc3339-validator==0.1.4
# via openapi-schema-validator
rsa==4.9
# via google-auth
setuptools-git==1.2
# via prophet
sqlalchemy-bigquery==1.6.1
# via apache-superset
statsd==4.0.1
# via -r requirements/testing.in
tqdm==4.65.0
# via
# cmdstanpy
# prophet
trino==0.324.0
# via apache-superset
tzdata==2023.3

View File

@@ -81,13 +81,13 @@ setup(
"cryptography>=39.0.1, <40",
"deprecation>=2.1.0, <2.2.0",
"flask>=2.2.5, <3.0.0",
"flask-appbuilder>=4.3.3, <5.0.0",
"flask-caching>=1.10.1, <1.11",
"flask-appbuilder>=4.3.6, <5.0.0",
"flask-caching>=1.10.1, <2.0",
"flask-compress>=1.13, <2.0",
"flask-talisman>=1.0.0, <2.0",
"flask-login==0.6.0",
"flask-login>=0.6.0, < 1.0",
"flask-migrate>=3.1.0, <4.0",
"flask-wtf>=1.0.1, <1.1",
"flask-wtf>=1.1.0, <2.0",
"func_timeout",
"geopy",
"gunicorn>=20.1.0; sys_platform != 'win32'",
@@ -111,7 +111,7 @@ setup(
"python-dotenv",
"python-geohash",
"pyarrow>=12.0.0, <13",
"pyyaml>=5.4",
"pyyaml>=6.0.0, <7.0.0",
"PyJWT>=2.4.0, <3.0",
"redis>=4.5.4, <5.0",
"selenium>=3.141.0, <4.10.0",
@@ -167,7 +167,7 @@ setup(
"mysql": ["mysqlclient>=2.1.0, <3"],
"ocient": [
"sqlalchemy-ocient>=1.0.0",
"pyocient>=1.0.15",
"pyocient>=1.0.15, <2",
"shapely",
"geojson",
],
@@ -176,7 +176,7 @@ setup(
"postgres": ["psycopg2-binary==2.9.6"],
"presto": ["pyhive[presto]>=0.6.5"],
"trino": ["trino>=0.324.0"],
"prophet": ["prophet>=1.0.1, <1.1", "pystan<3.0"],
"prophet": ["prophet==1.1.1"],
"redshift": ["sqlalchemy-redshift>=0.8.1, < 0.9"],
"rockset": ["rockset>=0.8.10, <0.9"],
"shillelagh": [

View File

@@ -422,17 +422,17 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.first()
.should('have.css', 'fill', 'rgb(252, 199, 0)');
.should('have.css', 'fill', 'rgb(69, 78, 124)');
cy.get(
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(1)
.should('have.css', 'fill', 'rgb(143, 211, 228)');
.should('have.css', 'fill', 'rgb(224, 67, 85)');
cy.get(
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(2)
.should('have.css', 'fill', 'rgb(172, 225, 196)');
.should('have.css', 'fill', 'rgb(163, 143, 121)');
});
it('should show the same colors in Explore', () => {
@@ -463,7 +463,7 @@ describe('Dashboard edit', () => {
'[data-test-chart-name="Top 10 California Names Timeseries"] .line .nv-legend-symbol',
)
.eq(1)
.should('have.css', 'fill', 'rgb(51, 61, 71)');
.should('have.css', 'fill', 'rgb(172, 32, 119)');
openExplore('Top 10 California Names Timeseries');
@@ -474,7 +474,7 @@ describe('Dashboard edit', () => {
// label Christopher
cy.get('[data-test="chart-container"] .line .nv-legend-symbol')
.eq(1)
.should('have.css', 'fill', 'rgb(108, 131, 142)');
.should('have.css', 'fill', 'rgb(172, 32, 119)');
});
it('should change color scheme multiple times', () => {

View File

@@ -322,7 +322,7 @@ export function applyNativeFilterValueWithIndex(index: number, value: string) {
cy.get(nativeFilters.filterFromDashboardView.filterValueInput)
.eq(index)
.should('exist', { timeout: 10000 })
.type(`${value}{enter}`);
.type(`${value}{enter}`, { force: true });
// click the title to dismiss shown options
cy.get(nativeFilters.filterFromDashboardView.filterName)
.eq(index)

View File

@@ -62,8 +62,8 @@ describe('Add database', () => {
it('show error alerts on dynamic form for bad host', () => {
// click postgres dynamic form
cy.get('.preferred > :nth-child(1)').click();
cy.get('input[name="host"]').focus().type('badhost');
cy.get('input[name="port"]').focus().type('5432');
cy.get('input[name="host"]').focus().type('badhost', { force: true });
cy.get('input[name="port"]').focus().type('5432', { force: true });
cy.get('.ant-form-item-explain-error').contains(
"The hostname provided can't be resolved",
);
@@ -72,8 +72,8 @@ describe('Add database', () => {
it('show error alerts on dynamic form for bad port', () => {
// click postgres dynamic form
cy.get('.preferred > :nth-child(1)').click();
cy.get('input[name="host"]').focus().type('localhost');
cy.get('input[name="port"]').focus().type('123');
cy.get('input[name="host"]').focus().type('localhost', { force: true });
cy.get('input[name="port"]').focus().type('123', { force: true });
cy.get('input[name="database"]').focus();
cy.get('.ant-form-item-explain-error').contains('The port is closed');
});

View File

@@ -39,6 +39,7 @@ describe('Advanced analytics', () => {
cy.get('[data-test=time_compare]')
.find('input[type=search]')
.clear()
.type('1 year{enter}');
cy.get('button[data-test="run-query-button"]').click();

View File

@@ -21,6 +21,7 @@
"@emotion/styled": "^11.3.0",
"@fontsource/inter": "^4.0.0",
"@reduxjs/toolkit": "^1.9.3",
"@scarf/scarf": "^1.1.1",
"@superset-ui/chart-controls": "file:./packages/superset-ui-chart-controls",
"@superset-ui/core": "file:./packages/superset-ui-core",
"@superset-ui/legacy-plugin-chart-calendar": "file:./plugins/legacy-plugin-chart-calendar",
@@ -13827,6 +13828,12 @@
}
}
},
"node_modules/@scarf/scarf": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz",
"integrity": "sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ==",
"hasInstallScript": true
},
"node_modules/@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@@ -72301,6 +72308,11 @@
"any-observable": "^0.3.0"
}
},
"@scarf/scarf": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.1.1.tgz",
"integrity": "sha512-VGbKDbk1RFIaSmdVb0cNjjWJoRWRI/Weo23AjRCC2nryO0iAS8pzsToJfPVPtVs74WHw4L1UTADNdIYRLkirZQ=="
},
"@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",

View File

@@ -1,6 +1,6 @@
{
"name": "superset",
"version": "0.0.0-dev",
"version": "3.0.0",
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
"keywords": [
"big",
@@ -86,6 +86,7 @@
"@emotion/styled": "^11.3.0",
"@fontsource/inter": "^4.0.0",
"@reduxjs/toolkit": "^1.9.3",
"@scarf/scarf": "^1.1.1",
"@superset-ui/chart-controls": "file:./packages/superset-ui-chart-controls",
"@superset-ui/core": "file:./packages/superset-ui-core",
"@superset-ui/legacy-plugin-chart-calendar": "file:./plugins/legacy-plugin-chart-calendar",
@@ -357,5 +358,8 @@
}
},
"readme": "ERROR: No README data found!",
"scarfSettings": {
"allowTopLevel": true
},
"_id": "superset@0.0.0-dev"
}

View File

@@ -44,6 +44,8 @@ const TypeIconWrapper = styled.div`
&& svg {
margin-right: 0;
margin-left: 0;
width: 100%;
height: 100%;
}
`};
`;

View File

@@ -16,22 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
import { FeatureFlag, FeatureFlagMap } from '@superset-ui/core';
import { styled } from '@superset-ui/core';
export function initFeatureFlags(featureFlags?: FeatureFlagMap) {
if (!window.featureFlags) {
window.featureFlags = featureFlags || {};
}
}
export function isFeatureEnabled(feature: FeatureFlag) {
try {
return !!window.featureFlags[feature];
} catch (error) {
// eslint-disable-next-line no-console
console.error(`Failed to query feature flag ${feature} (see error below)`);
// eslint-disable-next-line no-console
console.error(error);
return false;
}
}
export const ControlSubSectionHeader = styled.div`
font-weight: ${({ theme }) => theme.typography.weights.bold};
font-size: ${({ theme }) => theme.typography.sizes.s};
margin-bottom: ${({ theme }) => theme.gridUnit}px;
`;
export default ControlSubSectionHeader;

View File

@@ -29,6 +29,7 @@ export * from './components/InfoTooltipWithTrigger';
export * from './components/ColumnOption';
export * from './components/ColumnTypeLabel/ColumnTypeLabel';
export * from './components/MetricOption';
export * from './components/ControlSubSectionHeader';
export * from './shared-controls';
export * from './types';

View File

@@ -18,6 +18,8 @@
*/
import React from 'react';
import { t, RollingType, ComparisonType } from '@superset-ui/core';
import { ControlSubSectionHeader } from '../components/ControlSubSectionHeader';
import { ControlPanelSectionConfig } from '../types';
import { formatSelectOptions } from '../utils';
@@ -30,7 +32,7 @@ export const advancedAnalyticsControls: ControlPanelSectionConfig = {
'of query results',
),
controlSetRows: [
[<div className="section-header">{t('Rolling window')}</div>],
[<ControlSubSectionHeader>{t('Rolling window')}</ControlSubSectionHeader>],
[
{
name: 'rolling_type',
@@ -99,7 +101,7 @@ export const advancedAnalyticsControls: ControlPanelSectionConfig = {
},
},
],
[<div className="section-header">{t('Time comparison')}</div>],
[<ControlSubSectionHeader>{t('Time comparison')}</ControlSubSectionHeader>],
[
{
name: 'time_compare',
@@ -150,7 +152,7 @@ export const advancedAnalyticsControls: ControlPanelSectionConfig = {
},
},
],
[<div className="section-header">{t('Resample')}</div>],
[<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>],
[
{
name: 'resample_rule',

View File

@@ -18,6 +18,8 @@
*/
import React from 'react';
import { t } from '@superset-ui/core';
import { ControlSubSectionHeader } from '../components/ControlSubSectionHeader';
import { ControlPanelSectionConfig } from '../types';
import { formatSelectOptions } from '../utils';
@@ -33,7 +35,7 @@ export const titleControls: ControlPanelSectionConfig = {
tabOverride: 'customize',
expanded: true,
controlSetRows: [
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
name: 'x_axis_title',
@@ -61,7 +63,7 @@ export const titleControls: ControlPanelSectionConfig = {
},
},
],
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
[
{
name: 'y_axis_title',
@@ -81,7 +83,7 @@ export const titleControls: ControlPanelSectionConfig = {
type: 'SelectControl',
freeForm: true,
clearable: true,
label: t('Y AXIS TITLE MARGIN'),
label: t('Y Axis Title Margin'),
renderTrigger: true,
default: TITLE_MARGIN_OPTIONS[0],
choices: formatSelectOptions(TITLE_MARGIN_OPTIONS),
@@ -96,7 +98,7 @@ export const titleControls: ControlPanelSectionConfig = {
type: 'SelectControl',
freeForm: true,
clearable: false,
label: t('Y AXIS TITLE POSITION'),
label: t('Y Axis Title Position'),
renderTrigger: true,
default: TITLE_POSITION_OPTIONS[0][0],
choices: TITLE_POSITION_OPTIONS,

View File

@@ -78,15 +78,20 @@ class CategoricalColorScale extends ExtensibleFunction {
cleanedValue: string,
) {
// make sure we don't overwrite the origin colors
const updatedRange = [...this.originColors];
const updatedRange = new Set(this.originColors);
// remove the color option from shared color
sharedColorMap.forEach((value: string, key: string) => {
if (key !== cleanedValue) {
const index = updatedRange.indexOf(value);
updatedRange.splice(index, 1);
updatedRange.delete(value);
}
});
this.range(updatedRange.length > 0 ? updatedRange : this.originColors);
// remove the color option from forced colors
Object.entries(this.parentForcedColors).forEach(([key, value]) => {
if (key !== cleanedValue) {
updatedRange.delete(value);
}
});
this.range(updatedRange.size > 0 ? [...updatedRange] : this.originColors);
}
getColor(value?: string, sliceId?: number) {

View File

@@ -19,3 +19,4 @@
export { default as CurrencyFormatter } from './CurrencyFormatter';
export * from './CurrencyFormatter';
export * from './utils';

View File

@@ -1,3 +1,21 @@
/**
* 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.
*/
import {
Currency,
CurrencyFormatter,
@@ -16,10 +34,8 @@ export const buildCustomFormatters = (
) => {
const metricsArray = ensureIsArray(metrics);
return metricsArray.reduce((acc, metric) => {
const actualD3Format = isSavedMetric(metric)
? columnFormats[metric] ?? d3Format
: d3Format;
if (isSavedMetric(metric)) {
const actualD3Format = d3Format ?? columnFormats[metric];
return currencyFormats[metric]
? {
...acc,

View File

@@ -159,7 +159,6 @@ export function isTableAnnotationLayer(
}
export type RecordAnnotationResult = {
columns: string[];
records: DataRecord[];
};
@@ -181,7 +180,7 @@ export function isTimeseriesAnnotationResult(
export function isRecordAnnotationResult(
result: any,
): result is RecordAnnotationResult {
return Array.isArray(result?.columns) && Array.isArray(result?.records);
return Array.isArray(result?.records);
}
export type AnnotationData = { [key: string]: AnnotationResult };

View File

@@ -16,6 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
import logger from './logging';
// We can codegen the enum definition based on a list of supported flags that we
// check into source control. We're hardcoding the supported flags for now.
export enum FeatureFlag {
@@ -85,11 +87,17 @@ declare global {
}
}
export function initFeatureFlags(featureFlags?: FeatureFlagMap) {
if (!window.featureFlags) {
window.featureFlags = featureFlags || {};
}
}
export function isFeatureEnabled(feature: FeatureFlag): boolean {
try {
return !!window.featureFlags[feature];
} catch (error) {
console.error(`Failed to query feature flag ${feature}`);
logger.error(`Failed to query feature flag ${feature}`);
}
return false;
}

View File

@@ -273,5 +273,21 @@ describe('CategoricalColorScale', () => {
expect(scale.range()).toEqual(['blue', 'green', 'red']);
sharedLabelColor.clear();
});
it('should remove parentForcedColors from range', () => {
const parentForcedColors = { house: 'blue', cow: 'red' };
const scale = new CategoricalColorScale(
['blue', 'red', 'green'],
parentForcedColors,
);
const sharedLabelColor = getSharedLabelColor();
sharedLabelColor.clear();
const colorMap = sharedLabelColor.getColorMap();
scale.removeSharedLabelColorFromRange(colorMap, 'pig');
expect(scale.range()).toEqual(['green']);
scale.removeSharedLabelColorFromRange(colorMap, 'cow');
expect(scale.range()).toEqual(['red', 'green']);
sharedLabelColor.clear();
});
});
});

View File

@@ -0,0 +1,151 @@
/*
* 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.
*/
import {
buildCustomFormatters,
CurrencyFormatter,
getCustomFormatter,
getNumberFormatter,
getValueFormatter,
NumberFormatter,
ValueFormatter,
} from '@superset-ui/core';
it('buildCustomFormatters without saved metrics returns empty object', () => {
expect(
buildCustomFormatters(
[
{
expressionType: 'SIMPLE',
aggregate: 'COUNT',
column: { column_name: 'test' },
},
],
{
sum__num: { symbol: 'USD', symbolPosition: 'prefix' },
},
{},
',.1f',
),
).toEqual({});
expect(
buildCustomFormatters(
undefined,
{
sum__num: { symbol: 'USD', symbolPosition: 'prefix' },
},
{},
',.1f',
),
).toEqual({});
});
it('buildCustomFormatters with saved metrics returns custom formatters object', () => {
const customFormatters: Record<string, ValueFormatter> =
buildCustomFormatters(
[
{
expressionType: 'SIMPLE',
aggregate: 'COUNT',
column: { column_name: 'test' },
},
'sum__num',
'count',
],
{
sum__num: { symbol: 'USD', symbolPosition: 'prefix' },
},
{ sum__num: ',.2' },
',.1f',
);
expect(customFormatters).toEqual({
sum__num: expect.any(Function),
count: expect.any(Function),
});
expect(customFormatters.sum__num).toBeInstanceOf(CurrencyFormatter);
expect(customFormatters.count).toBeInstanceOf(NumberFormatter);
expect((customFormatters.sum__num as CurrencyFormatter).d3Format).toEqual(
',.1f',
);
});
it('buildCustomFormatters uses dataset d3 format if not provided in control panel', () => {
const customFormatters: Record<string, ValueFormatter> =
buildCustomFormatters(
[
{
expressionType: 'SIMPLE',
aggregate: 'COUNT',
column: { column_name: 'test' },
},
'sum__num',
'count',
],
{
sum__num: { symbol: 'USD', symbolPosition: 'prefix' },
},
{ sum__num: ',.2' },
undefined,
);
expect((customFormatters.sum__num as CurrencyFormatter).d3Format).toEqual(
',.2',
);
});
it('getCustomFormatter', () => {
const customFormatters = {
sum__num: new CurrencyFormatter({
currency: { symbol: 'USD', symbolPosition: 'prefix' },
}),
count: getNumberFormatter(),
};
expect(getCustomFormatter(customFormatters, 'count')).toEqual(
customFormatters.count,
);
expect(
getCustomFormatter(customFormatters, ['count', 'sum__num'], 'count'),
).toEqual(customFormatters.count);
expect(getCustomFormatter(customFormatters, ['count', 'sum__num'])).toEqual(
undefined,
);
});
it('getValueFormatter', () => {
expect(
getValueFormatter(['count', 'sum__num'], {}, {}, ',.1f'),
).toBeInstanceOf(NumberFormatter);
expect(
getValueFormatter(['count', 'sum__num'], {}, {}, ',.1f', 'count'),
).toBeInstanceOf(NumberFormatter);
expect(
getValueFormatter(
['count', 'sum__num'],
{ count: { symbol: 'USD', symbolPosition: 'prefix' } },
{},
',.1f',
'count',
),
).toBeInstanceOf(CurrencyFormatter);
});

View File

@@ -93,7 +93,6 @@ describe('AnnotationLayer type guards', () => {
},
];
const recordAnnotationResult: RecordAnnotationResult = {
columns: ['col1', 'col2'],
records: [
{ a: 1, b: 2 },
{ a: 2, b: 3 },

View File

@@ -16,29 +16,52 @@
* specific language governing permissions and limitations
* under the License.
*/
import mockConsole from 'jest-mock-console';
import { isFeatureEnabled, FeatureFlag } from '@superset-ui/core';
import * as uiCore from '@superset-ui/core';
it('returns false and raises console error if feature flags have not been initialized', () => {
mockConsole();
it('initializes feature flags', () => {
Object.defineProperty(window, 'featureFlags', {
value: undefined,
});
uiCore.initFeatureFlags();
expect(window.featureFlags).toEqual({});
});
expect(isFeatureEnabled(FeatureFlag.DRILL_BY)).toEqual(false);
expect(console.error).toHaveBeenCalled();
// @ts-expect-error
expect(console.error.mock.calls[0][0]).toEqual(
'Failed to query feature flag DRILL_BY',
);
it('initializes feature flags with predefined values', () => {
Object.defineProperty(window, 'featureFlags', {
value: undefined,
});
const featureFlags = {
CLIENT_CACHE: true,
DRILL_BY: false,
};
uiCore.initFeatureFlags(featureFlags);
expect(window.featureFlags).toEqual(featureFlags);
});
it('does nothing if feature flags are already initialized', () => {
const featureFlags = { DRILL_BY: false };
Object.defineProperty(window, 'featureFlags', {
value: featureFlags,
});
uiCore.initFeatureFlags({ DRILL_BY: true });
expect(window.featureFlags).toEqual(featureFlags);
});
it('returns false and raises console error if feature flags have not been initialized', () => {
const logging = jest.spyOn(uiCore.logging, 'error');
Object.defineProperty(window, 'featureFlags', {
value: undefined,
});
expect(uiCore.isFeatureEnabled(uiCore.FeatureFlag.DRILL_BY)).toEqual(false);
expect(uiCore.logging.error).toHaveBeenCalled();
expect(logging).toHaveBeenCalledWith('Failed to query feature flag DRILL_BY');
});
it('returns false for unset feature flag', () => {
Object.defineProperty(window, 'featureFlags', {
value: {},
});
expect(isFeatureEnabled(FeatureFlag.DRILL_BY)).toEqual(false);
expect(uiCore.isFeatureEnabled(uiCore.FeatureFlag.DRILL_BY)).toEqual(false);
});
it('returns true for set feature flag', () => {
@@ -47,6 +70,7 @@ it('returns true for set feature flag', () => {
CLIENT_CACHE: true,
},
});
expect(isFeatureEnabled(FeatureFlag.CLIENT_CACHE)).toEqual(true);
expect(uiCore.isFeatureEnabled(uiCore.FeatureFlag.CLIENT_CACHE)).toEqual(
true,
);
});

View File

@@ -296,8 +296,21 @@ var CalHeatMap = function () {
// Used mainly to convert the datas if they're not formatted like expected
// Takes the fetched "data" object as argument, must return a json object
// formatted like {timestamp:count, timestamp2:count2},
afterLoadData: function (data) {
return data;
afterLoadData: function (timestamps) {
// See https://github.com/wa0x6e/cal-heatmap/issues/126#issuecomment-373301803
const stdTimezoneOffset = date => {
const jan = new Date(date.getFullYear(), 0, 1);
const jul = new Date(date.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
};
const offset = stdTimezoneOffset(new Date()) * 60;
let results = {};
for (let timestamp in timestamps) {
const value = timestamps[timestamp];
timestamp = parseInt(timestamp, 10);
results[timestamp + offset] = value;
}
return results;
},
// Callback triggered after calling and completing update().

View File

@@ -19,7 +19,7 @@
{ "type": "Feature", "properties": { "ISO": "FR-09", "NAME_1": "Ariège" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.921111287000116, 42.784366354000085 ], [ 0.856102336000077, 42.812762553000098 ], [ 0.837560609134812, 42.907329288315964 ], [ 0.869157290076885, 42.925006291407215 ], [ 0.886603580191036, 42.958987005845643 ], [ 0.956432684220999, 42.967127874951473 ], [ 0.992248115458153, 42.990309028438901 ], [ 0.996598700969287, 43.094690135841063 ], [ 1.038434640046603, 43.109499706346355 ], [ 1.065065501171944, 43.144106641208509 ], [ 1.130631909534998, 43.155213819761968 ], [ 1.24269246098828, 43.088779490980698 ], [ 1.290109455087247, 43.123452343450879 ], [ 1.220456131645165, 43.169572951330622 ], [ 1.236584062404518, 43.184800002418172 ], [ 1.349391683379451, 43.204300735290701 ], [ 1.382306723676322, 43.231316117744598 ], [ 1.315509846702071, 43.259836626259244 ], [ 1.301337482738631, 43.27281148086513 ], [ 1.30566609601351, 43.299046832745091 ], [ 1.325771077073512, 43.30844014359775 ], [ 1.373781333241936, 43.296465045525395 ], [ 1.419836022614334, 43.261396684709212 ], [ 1.417067467789423, 43.2263722692648 ], [ 1.440929773190476, 43.212968948857906 ], [ 1.490016688719209, 43.226635941495488 ], [ 1.504562587893133, 43.249476519026132 ], [ 1.488544521012841, 43.279831744339504 ], [ 1.515219326610634, 43.296728717756082 ], [ 1.630509857943593, 43.244873246503118 ], [ 1.675268161096767, 43.274481402294839 ], [ 1.702558201000159, 43.266736040635749 ], [ 1.696515720024422, 43.243851518632653 ], [ 1.719059666070734, 43.183415725455347 ], [ 1.77491416075992, 43.152203565841887 ], [ 1.94544395247641, 43.103808788344907 ], [ 1.960319441489048, 43.069102976621025 ], [ 1.942653424515925, 43.0458449194075 ], [ 1.973503035936346, 43.022773628899813 ], [ 1.992311629877804, 42.967347601810332 ], [ 1.941554792020042, 42.935058781937187 ], [ 1.974601668432229, 42.913404728545345 ], [ 1.985631942360214, 42.87306293030997 ], [ 1.894071880312993, 42.848189882257259 ], [ 1.865485453291001, 42.815890076265987 ], [ 1.910199810173083, 42.790621520766535 ], [ 1.9179561579503, 42.752147397684212 ], [ 1.973503035936346, 42.73083392114853 ], [ 2.075148546867922, 42.743907651716711 ], [ 2.168752066454715, 42.670057551115065 ], [ 2.154008413557449, 42.656445489967382 ], [ 1.994157332794657, 42.652874933231544 ], [ 1.962802351847074, 42.621761650479755 ], [ 1.956298444917309, 42.587033866519675 ], [ 1.92850303368806, 42.569181082840657 ], [ 1.872824320486018, 42.578980887258126 ], [ 1.761107147000132, 42.567646197 ], [ 1.713310995000086, 42.589546204000058 ], [ 1.721992635000049, 42.609855042000063 ], [ 1.608304484000143, 42.618123271000016 ], [ 1.543088827000133, 42.649361674000019 ], [ 1.466814412000105, 42.641455180000051 ], [ 1.451414835826029, 42.602051901673917 ], [ 1.42929732200011, 42.59538564100005 ], [ 1.361084432000069, 42.686723735000058 ], [ 1.338243449000061, 42.694449361000053 ], [ 1.342584269000042, 42.708660381000115 ], [ 1.151484823000118, 42.706722514 ], [ 1.089059692000149, 42.771318054000048 ], [ 0.950256795000143, 42.796122742000065 ], [ 0.921111287000116, 42.784366354000085 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-66", "NAME_1": "Pyrénées-Orientales" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 1.717091134804584, 42.539890071086553 ], [ 1.761107147000132, 42.567646197 ], [ 1.938302839004791, 42.571795828414736 ], [ 1.96761436331218, 42.629023613948618 ], [ 2.005649032676729, 42.656126886246795 ], [ 2.166074435786584, 42.663835145475559 ], [ 2.189450309584117, 42.652160822064275 ], [ 2.264684687148588, 42.708938167762199 ], [ 2.32256066624177, 42.708037288989658 ], [ 2.35116906549996, 42.730163754453656 ], [ 2.330910276088332, 42.82240496931388 ], [ 2.341193479595404, 42.837445252796158 ], [ 2.374987425529241, 42.847256044231017 ], [ 2.703962047910181, 42.834039491429337 ], [ 2.783920547095533, 42.889839053729304 ], [ 2.855309709575408, 42.913800235992085 ], [ 3.0462758278677, 42.837076341874791 ], [ 3.037608269000089, 42.683213609000063 ], [ 3.051849806000064, 42.554877020000049 ], [ 3.137380405000044, 42.52492910400008 ], [ 3.181569858000046, 42.43508535400008 ], [ 3.086147094000097, 42.427178854000047 ], [ 3.029613077000135, 42.465651957 ], [ 2.933701619000061, 42.470225322000019 ], [ 2.850812622000149, 42.44836619100009 ], [ 2.788594198000055, 42.412011821000092 ], [ 2.690408976000072, 42.406172384000016 ], [ 2.640282837000143, 42.372841085000076 ], [ 2.662193644000098, 42.339018861000071 ], [ 2.548092081000107, 42.352248027000073 ], [ 2.514812459000069, 42.325660503000037 ], [ 2.445566040000131, 42.351963806000086 ], [ 2.422518351000065, 42.383693136000019 ], [ 2.277410930000144, 42.428625794000126 ], [ 2.136954386000099, 42.416223450000061 ], [ 2.063263794000079, 42.35790659700011 ], [ 2.009210245000077, 42.347080383000062 ], [ 1.963734985000116, 42.367234192000055 ], [ 1.927458129000058, 42.436894023000079 ], [ 1.712174112944922, 42.493712260112716 ], [ 1.717091134804584, 42.539890071086553 ] ], [ [ 1.983372030000055, 42.44126068100006 ], [ 1.99949507600013, 42.443896180000067 ], [ 1.967972453000073, 42.485702413000027 ], [ 1.956603638000075, 42.481775005000074 ], [ 1.947508585000122, 42.451234233000079 ], [ 1.983372030000055, 42.44126068100006 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-67", "NAME_1": "Bas-Rhin" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.644932350047895, 49.036295448176361 ], [ 7.773664591000113, 49.048118388 ], [ 7.931897827000114, 49.034837546000077 ], [ 8.090441121000083, 48.979182028000068 ], [ 8.200305216000032, 48.958563131000048 ], [ 8.090337769000143, 48.807512920000093 ], [ 8.038764689000061, 48.790769756000074 ], [ 8.017267293000117, 48.761830954000104 ], [ 7.970138387000105, 48.757283427000075 ], [ 7.959182983000119, 48.72136830700002 ], [ 7.852419475000119, 48.658684794000081 ], [ 7.810251506000071, 48.615018209000098 ], [ 7.801673217000115, 48.547580465000081 ], [ 7.813455444000027, 48.519468486000036 ], [ 7.776455119000076, 48.498177796000064 ], [ 7.738317912000099, 48.406607158000085 ], [ 7.75072025500009, 48.341365662000058 ], [ 7.702454467000081, 48.311186625000047 ], [ 7.687158243000113, 48.252921448000038 ], [ 7.613364298000079, 48.179205018000104 ], [ 7.581976474333016, 48.121353059320732 ], [ 7.543285963176629, 48.122901997828933 ], [ 7.51443586392395, 48.151477437833478 ], [ 7.470073069116836, 48.160156637518753 ], [ 7.466096018816188, 48.207277001032764 ], [ 7.303454410992288, 48.259956446432852 ], [ 7.291567202764156, 48.293508693271576 ], [ 7.208730285774038, 48.303407375449979 ], [ 7.188537413970494, 48.331005032955886 ], [ 7.109875301903628, 48.342266019860915 ], [ 7.127717099464576, 48.484099520676295 ], [ 7.14885479541249, 48.499886875478921 ], [ 7.088649715212171, 48.523441563277515 ], [ 7.193019836496262, 48.533527013061189 ], [ 7.262892885897941, 48.57579141883889 ], [ 7.300422183936632, 48.655640055044501 ], [ 7.264914370301938, 48.684885661743863 ], [ 7.317670719428122, 48.755890302895125 ], [ 7.216332825199686, 48.829839280358499 ], [ 7.204401672499159, 48.854173997831708 ], [ 7.183879210856901, 48.82462077442915 ], [ 7.103217586622293, 48.792529708279403 ], [ 7.074938777202817, 48.824543869803733 ], [ 7.096384089853871, 48.858030199034431 ], [ 6.9995505903874, 48.889363208645136 ], [ 6.977072561949171, 48.917532155084871 ], [ 7.042858697171141, 48.97734172693913 ], [ 7.086430476185512, 49.064551203475219 ], [ 7.119191708130813, 49.056388361233871 ], [ 7.145427060910094, 49.00990520516109 ], [ 7.284448062428112, 48.977473563054446 ], [ 7.301806461798776, 48.954742849402976 ], [ 7.341708806316319, 48.943371999518149 ], [ 7.490683421502695, 48.958851736718259 ], [ 7.564072096150312, 48.939647634430742 ], [ 7.644932350047895, 49.036295448176361 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-68", "NAME_1": "Haute-Rhin" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.581976474333016, 48.121353059320732 ], [ 7.575743856000145, 48.053708802000088 ], [ 7.618945353000072, 48.00265248700002 ], [ 7.621115763000063, 47.971439922000044 ], [ 7.584942261000037, 47.940408224000109 ], [ 7.55900069100008, 47.882711488000027 ], [ 7.561997925000099, 47.839225769000038 ], [ 7.542877645000118, 47.829433086000066 ], [ 7.525927775000099, 47.783156840000075 ], [ 7.537813355000139, 47.731816304000048 ], [ 7.511871785000096, 47.707321676000092 ], [ 7.517866251000015, 47.675023906000021 ], [ 7.590316609000098, 47.607947896000084 ], [ 7.586028488000125, 47.584618544000065 ], [ 7.482726278000058, 47.542267151000047 ], [ 7.505463908000138, 47.523017681000013 ], [ 7.476938517000093, 47.514878643000102 ], [ 7.485826864000103, 47.495784200000102 ], [ 7.467430053000101, 47.481909078000044 ], [ 7.414306681000085, 47.490177307000081 ], [ 7.429292847000056, 47.465114238000083 ], [ 7.406348511000118, 47.438242493000061 ], [ 7.2380900470001, 47.416796773000058 ], [ 7.168326863000061, 47.44356516500001 ], [ 7.180832560000056, 47.48826528000005 ], [ 7.142169389000088, 47.48765096800004 ], [ 7.142900205180297, 47.540253049138869 ], [ 7.079750788667923, 47.590921997152407 ], [ 7.023434868924028, 47.60598425287094 ], [ 7.057887995434612, 47.666442019183819 ], [ 7.050307428245219, 47.71558386710177 ], [ 6.870153612699028, 47.802255012159037 ], [ 6.86892314408783, 47.818998177224103 ], [ 6.923854786868901, 47.843179086345742 ], [ 6.91495586032471, 47.875687632178483 ], [ 6.951760061077948, 47.956964490718633 ], [ 7.081157038766321, 48.104609760432083 ], [ 7.083156550934063, 48.164507223929206 ], [ 7.208730285774038, 48.303407375449979 ], [ 7.291567202764156, 48.293508693271576 ], [ 7.303454410992288, 48.259956446432852 ], [ 7.466096018816188, 48.207277001032764 ], [ 7.470073069116836, 48.160156637518753 ], [ 7.51443586392395, 48.151477437833478 ], [ 7.525927563806022, 48.127395405573509 ], [ 7.581976474333016, 48.121353059320732 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-68", "NAME_1": "Haut-Rhin" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.581976474333016, 48.121353059320732 ], [ 7.575743856000145, 48.053708802000088 ], [ 7.618945353000072, 48.00265248700002 ], [ 7.621115763000063, 47.971439922000044 ], [ 7.584942261000037, 47.940408224000109 ], [ 7.55900069100008, 47.882711488000027 ], [ 7.561997925000099, 47.839225769000038 ], [ 7.542877645000118, 47.829433086000066 ], [ 7.525927775000099, 47.783156840000075 ], [ 7.537813355000139, 47.731816304000048 ], [ 7.511871785000096, 47.707321676000092 ], [ 7.517866251000015, 47.675023906000021 ], [ 7.590316609000098, 47.607947896000084 ], [ 7.586028488000125, 47.584618544000065 ], [ 7.482726278000058, 47.542267151000047 ], [ 7.505463908000138, 47.523017681000013 ], [ 7.476938517000093, 47.514878643000102 ], [ 7.485826864000103, 47.495784200000102 ], [ 7.467430053000101, 47.481909078000044 ], [ 7.414306681000085, 47.490177307000081 ], [ 7.429292847000056, 47.465114238000083 ], [ 7.406348511000118, 47.438242493000061 ], [ 7.2380900470001, 47.416796773000058 ], [ 7.168326863000061, 47.44356516500001 ], [ 7.180832560000056, 47.48826528000005 ], [ 7.142169389000088, 47.48765096800004 ], [ 7.142900205180297, 47.540253049138869 ], [ 7.079750788667923, 47.590921997152407 ], [ 7.023434868924028, 47.60598425287094 ], [ 7.057887995434612, 47.666442019183819 ], [ 7.050307428245219, 47.71558386710177 ], [ 6.870153612699028, 47.802255012159037 ], [ 6.86892314408783, 47.818998177224103 ], [ 6.923854786868901, 47.843179086345742 ], [ 6.91495586032471, 47.875687632178483 ], [ 6.951760061077948, 47.956964490718633 ], [ 7.081157038766321, 48.104609760432083 ], [ 7.083156550934063, 48.164507223929206 ], [ 7.208730285774038, 48.303407375449979 ], [ 7.291567202764156, 48.293508693271576 ], [ 7.303454410992288, 48.259956446432852 ], [ 7.466096018816188, 48.207277001032764 ], [ 7.470073069116836, 48.160156637518753 ], [ 7.51443586392395, 48.151477437833478 ], [ 7.525927563806022, 48.127395405573509 ], [ 7.581976474333016, 48.121353059320732 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-90", "NAME_1": "Territoire de Belfort" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 7.053915242000073, 47.490384013000053 ], [ 6.973300008000137, 47.48909210300009 ], [ 6.990973348000068, 47.452220968000077 ], [ 6.939169949951677, 47.426844260931965 ], [ 6.914428516762598, 47.487002314804954 ], [ 6.919152638383537, 47.53415563757261 ], [ 6.89375224676877, 47.551755735139068 ], [ 6.824845993747601, 47.547613889469403 ], [ 6.807070114694, 47.56286291369247 ], [ 6.759081831661206, 47.722790898181358 ], [ 6.784767867742914, 47.779974738343469 ], [ 6.836011674099495, 47.824165475756104 ], [ 6.86892314408783, 47.818998177224103 ], [ 6.882721972840784, 47.791037971525157 ], [ 7.050307428245219, 47.71558386710177 ], [ 7.057887995434612, 47.666442019183819 ], [ 7.023434868924028, 47.60598425287094 ], [ 7.079750788667923, 47.590921997152407 ], [ 7.151491514122085, 47.519060421701056 ], [ 7.142169389000088, 47.48765096800004 ], [ 7.053915242000073, 47.490384013000053 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-25", "NAME_1": "Doubs" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6.939169949951677, 47.426844260931965 ], [ 6.866639852000077, 47.354164937000021 ], [ 7.003995809000088, 47.368143413000027 ], [ 7.044303426000056, 47.34049652100002 ], [ 7.036551961000043, 47.329515279000034 ], [ 6.958623901000067, 47.290551250000036 ], [ 6.956246785000104, 47.245231018000126 ], [ 6.689699747000105, 47.078290304000078 ], [ 6.676263875000132, 47.062399801000041 ], [ 6.688252807000111, 47.043847961000026 ], [ 6.665411824000103, 47.021291199000089 ], [ 6.598697550000082, 46.986538798000041 ], [ 6.442634725000062, 46.944164124000039 ], [ 6.427751913000122, 46.909075827 ], [ 6.4467688390001, 46.857709453000027 ], [ 6.417106568000122, 46.802157288000032 ], [ 6.432609497000044, 46.785982565000054 ], [ 6.429198853000116, 46.76081614200011 ], [ 6.131852661000039, 46.595606588000024 ], [ 6.118416789000065, 46.583462626000127 ], [ 6.137978215924945, 46.557587778130546 ], [ 6.085246356134405, 46.579861167159095 ], [ 6.053781511307704, 46.616346764191803 ], [ 6.095617450385021, 46.648723474808492 ], [ 6.08335670784578, 46.691009852822447 ], [ 6.206645286950447, 46.766398039637807 ], [ 6.082016376254728, 46.846664155526355 ], [ 6.024755631467201, 46.858188814662014 ], [ 5.993510513499359, 46.895575290467264 ], [ 5.984216079508428, 46.949287450755207 ], [ 5.949740979862327, 46.984806250508029 ], [ 5.83735083946965, 47.008965187393471 ], [ 5.80397437321875, 47.031421242696183 ], [ 5.766928473370342, 47.014029884971194 ], [ 5.747878179434394, 47.024939308901935 ], [ 5.81524634624185, 47.143591657129264 ], [ 5.781584235524065, 47.189844100225002 ], [ 5.725180425036569, 47.217804306823268 ], [ 5.69883520927749, 47.265001574063376 ], [ 5.731574468087217, 47.264364367521523 ], [ 5.927087170836273, 47.343015493470205 ], [ 5.997399673056464, 47.336467641168667 ], [ 6.074523699808879, 47.355473989732843 ], [ 6.123083271775556, 47.393926139679593 ], [ 6.17357643830195, 47.397276969556458 ], [ 6.206403587855277, 47.431202752504987 ], [ 6.260917750054091, 47.428511102305492 ], [ 6.321100858018156, 47.501196651903911 ], [ 6.424548127394132, 47.517687130856359 ], [ 6.475810336577752, 47.495340938533445 ], [ 6.500463657771604, 47.510161495156865 ], [ 6.553835241203387, 47.490419063189165 ], [ 6.595934852511448, 47.538363400850244 ], [ 6.63388163113234, 47.532903195825781 ], [ 6.703425090695362, 47.557710325371204 ], [ 6.779758101655034, 47.542768918750596 ], [ 6.807070114694, 47.56286291369247 ], [ 6.824845993747601, 47.547613889469403 ], [ 6.89375224676877, 47.551755735139068 ], [ 6.919152638383537, 47.53415563757261 ], [ 6.914428516762598, 47.487002314804954 ], [ 6.939169949951677, 47.426844260931965 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-01", "NAME_1": "Ain" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 6.118607036585445, 46.331771084867626 ], [ 6.089684692000077, 46.246377259000027 ], [ 5.958529907000127, 46.211960754000089 ], [ 5.982921183000144, 46.170826314000109 ], [ 5.958839966000113, 46.13046702100003 ], [ 5.913727794901774, 46.128246159232845 ], [ 5.871584239121319, 46.093331607667551 ], [ 5.845942148411382, 46.111030582994999 ], [ 5.825199959910208, 46.095287174463522 ], [ 5.840580819349327, 45.932931211106506 ], [ 5.772426560537326, 45.741530021693109 ], [ 5.640871339440764, 45.645770555566685 ], [ 5.600485595833561, 45.655581347001544 ], [ 5.547026120758858, 45.719554737660985 ], [ 5.450192621292445, 45.792987357680374 ], [ 5.430175530975987, 45.844260552982121 ], [ 5.36904759886761, 45.87995513422203 ], [ 5.333495839861087, 45.867991023167178 ], [ 5.272851305942993, 45.799820854448853 ], [ 5.239167222988954, 45.785659476603541 ], [ 5.118405499614084, 45.826605523026444 ], [ 4.91689426126112, 45.81134551268525 ], [ 4.909093968112131, 45.87416533935891 ], [ 4.845944551599757, 45.909673152993605 ], [ 4.820060760895387, 45.906564022211853 ], [ 4.784421111145377, 45.944774473063433 ], [ 4.748539762300197, 45.956903379487358 ], [ 4.749023160490481, 46.059438783972666 ], [ 4.79457247943634, 46.1514382988384 ], [ 4.815182831822199, 46.250556954939498 ], [ 4.872751193312922, 46.337590649988499 ], [ 4.946601293015249, 46.507186603678804 ], [ 5.041435281213239, 46.490904864567824 ], [ 5.155319563347177, 46.511218586368614 ], [ 5.240375718464634, 46.4687124814958 ], [ 5.310973866051086, 46.455353105561358 ], [ 5.320268300042017, 46.408386551298292 ], [ 5.36388402442816, 46.391401687138114 ], [ 5.391789298637207, 46.346918043233075 ], [ 5.46911107911302, 46.320298169125181 ], [ 5.469880121770188, 46.276869212344252 ], [ 5.509870357930652, 46.260686350094943 ], [ 5.595409912137711, 46.300017406578036 ], [ 5.647858644560813, 46.344039624529046 ], [ 5.697824466625832, 46.312113353748259 ], [ 5.721686772026885, 46.273606272311611 ], [ 5.871913828960032, 46.2719033916282 ], [ 6.059013168023284, 46.417385842182853 ], [ 6.135056600000098, 46.370400696000033 ], [ 6.118607036585445, 46.331771084867626 ] ] ] } },
@@ -96,7 +96,7 @@
{ "type": "Feature", "properties": { "ISO": "FR-86", "NAME_1": "Vienne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 0.796361877498612, 46.13289337622831 ], [ 0.707768123999699, 46.136694645941134 ], [ 0.646794000242892, 46.091035464914739 ], [ 0.599926322841497, 46.082773745811721 ], [ 0.553278372299019, 46.090661929704254 ], [ 0.487887744523789, 46.133662419784798 ], [ 0.44365678583199, 46.096385806959404 ], [ 0.470793017383812, 46.081092837364508 ], [ 0.457345750705827, 46.058515932064608 ], [ 0.286706096009539, 46.062207338797634 ], [ 0.197365272089598, 46.095539859676762 ], [ 0.198903358303312, 46.151174627507032 ], [ 0.108727574118234, 46.188835761661039 ], [ 0.111584018787426, 46.217048653472546 ], [ 0.176271521513513, 46.308949291476608 ], [ 0.150387731708463, 46.344512037500522 ], [ 0.112177280856827, 46.337799390729288 ], [ 0.08275589267032, 46.310838939765233 ], [ 0.045094758516257, 46.317870190257054 ], [ 0.019639435411591, 46.352224439905967 ], [ 0.020287628970891, 46.37864656029052 ], [ -0.014604950358205, 46.411737381175158 ], [ -0.014637909611849, 46.466932696186973 ], [ -0.033655244294096, 46.484521807635304 ], [ -0.033962860997235, 46.510867024293702 ], [ 0.019639435411591, 46.596527427598687 ], [ -0.026656953055976, 46.633441491331723 ], [ -0.024800263121676, 46.666719080720952 ], [ 0.013926544274568, 46.736108731932404 ], [ -0.015670624499705, 46.771572600195327 ], [ -0.019131318255745, 46.811727630825487 ], [ -0.016241913433589, 46.828415864400597 ], [ 0.013882599802116, 46.827646820844109 ], [ 0.027846223024767, 46.850443453002924 ], [ -0.013198700259807, 46.889137302044844 ], [ -0.045531465504723, 46.98701450341656 ], [ -0.081709444934972, 47.004768410233908 ], [ -0.109043431109455, 47.069609721311565 ], [ -0.100320286052352, 47.079870951683063 ], [ -0.053068086423082, 47.096251567655713 ], [ -0.004047088502318, 47.156555524717646 ], [ 0.066759798925546, 47.153688093031064 ], [ 0.100114292040928, 47.118575787742373 ], [ 0.135534214932079, 47.127046246686916 ], [ 0.147157750929466, 47.09883335487541 ], [ 0.191850135575294, 47.102294048631393 ], [ 0.20006790930654, 47.055503274956152 ], [ 0.257943888399723, 47.063435404220513 ], [ 0.306986858556684, 47.042583352739484 ], [ 0.303581097189863, 46.965920751941098 ], [ 0.326674359034428, 46.938531835176036 ], [ 0.433922899022548, 46.93274204031286 ], [ 0.572746145917904, 46.954989354874783 ], [ 0.583666556866092, 46.965041846304132 ], [ 0.572438529214764, 47.003900489815749 ], [ 0.671776911275401, 46.965975683430997 ], [ 0.713371151257604, 46.900079685229286 ], [ 0.831452210551049, 46.779416838716088 ], [ 0.902357974840641, 46.729813565743427 ], [ 0.916925847150139, 46.699480312666253 ], [ 0.906994205718036, 46.644186120792824 ], [ 0.92411090599353, 46.605733970846074 ], [ 1.014088936455266, 46.564392416976432 ], [ 1.026789131812961, 46.538299886430593 ], [ 1.136806226626049, 46.518403645212004 ], [ 1.149418531240201, 46.50047395690757 ], [ 1.14238728074838, 46.464504717318846 ], [ 1.194682204819912, 46.427920243424467 ], [ 1.177016188746109, 46.387018142373336 ], [ 1.057990305308351, 46.35970612933437 ], [ 0.987106513254957, 46.283526927625587 ], [ 0.901720768298787, 46.277484446649851 ], [ 0.794801819048701, 46.22627716895613 ], [ 0.827585023230199, 46.139869695230232 ], [ 0.796361877498612, 46.13289337622831 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-89", "NAME_1": "Yonne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 3.254860506407226, 47.490869503025124 ], [ 3.211552398724223, 47.515962277037431 ], [ 3.1451290569604, 47.525355587890033 ], [ 3.109467434074816, 47.577255003615505 ], [ 2.969259909317373, 47.567587035313409 ], [ 2.92500697838932, 47.619003052848598 ], [ 2.934323384616505, 47.6486441669947 ], [ 2.914635884138704, 47.677450319976288 ], [ 2.832721818157381, 47.722098759250287 ], [ 2.850871233320731, 47.759441290583084 ], [ 2.992353172061257, 47.792378303116152 ], [ 3.012106591046347, 47.847233041271807 ], [ 2.994572410188596, 47.907262340884301 ], [ 3.085011866604361, 47.948757704004834 ], [ 3.117926906901232, 48.00084388733552 ], [ 3.107995266368448, 48.03236366365212 ], [ 3.045109522086761, 48.076396868620577 ], [ 3.02265346588473, 48.131844868845576 ], [ 2.925644184931173, 48.155926901105602 ], [ 2.940563619315583, 48.199542625491745 ], [ 3.002328757965813, 48.229304589635092 ], [ 3.027904931067724, 48.262043848444819 ], [ 3.013183251305975, 48.31415200491108 ], [ 3.042340967261794, 48.361755766615317 ], [ 3.346354649947102, 48.371467681188506 ], [ 3.395375648767185, 48.411743560916591 ], [ 3.421281410808433, 48.369808744977547 ], [ 3.50974332819203, 48.347440580418436 ], [ 3.599875167904656, 48.267240382137913 ], [ 3.613234542939779, 48.217208641565549 ], [ 3.581571944389736, 48.18096474362801 ], [ 3.665793139241998, 48.14388588542522 ], [ 3.733183278285651, 48.157212301206698 ], [ 3.858713068653174, 48.015257950394073 ], [ 3.83168670008115, 47.9938126368437 ], [ 3.898439632582949, 47.986352919651495 ], [ 3.916281430143897, 47.933772352012397 ], [ 4.037614442452536, 47.922654187340868 ], [ 4.067892764039811, 47.938210828267074 ], [ 4.127482609934475, 47.933146130689352 ], [ 4.161737981822398, 47.954097059032051 ], [ 4.203024605101405, 47.939144666293316 ], [ 4.218229683952757, 47.972422255682545 ], [ 4.255495309760704, 47.934541394669623 ], [ 4.288410350057575, 47.924258191162551 ], [ 4.262702341739669, 47.843904184530459 ], [ 4.307966015319323, 47.845112680006139 ], [ 4.337629102600999, 47.791971808652022 ], [ 4.33029023450672, 47.76032019622005 ], [ 4.258637399796157, 47.733865117481173 ], [ 4.244530954340064, 47.655796266584389 ], [ 4.126208195951449, 47.517214718784203 ], [ 4.117155461055688, 47.455647332958051 ], [ 4.068178408506753, 47.424534051105525 ], [ 4.106125187127645, 47.339247182111762 ], [ 4.048029482074924, 47.339466908970621 ], [ 4.018212586441678, 47.313044788586126 ], [ 3.977035827041789, 47.32685460345715 ], [ 3.950690611282653, 47.393080192396951 ], [ 3.868908381416645, 47.374018912342933 ], [ 3.877214045891492, 47.417052360777802 ], [ 3.865920099732818, 47.431367546974684 ], [ 3.838586114457598, 47.424226433503065 ], [ 3.804484550921302, 47.385928092807205 ], [ 3.715890797422333, 47.411537224263441 ], [ 3.644699388665856, 47.456723993217679 ], [ 3.587328780898531, 47.465249384551441 ], [ 3.492011394510257, 47.55995153663406 ], [ 3.488210124797433, 47.493780880083534 ], [ 3.415436684455415, 47.508821163565813 ], [ 3.345871251756876, 47.48053136712889 ], [ 3.290873691367779, 47.501306514883709 ], [ 3.254860506407226, 47.490869503025124 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-91", "NAME_1": "Essonne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.001715926848533, 48.558454992603799 ], [ 2.036256944102661, 48.597478431484376 ], [ 2.028061142607612, 48.65257486963452 ], [ 2.045793077188762, 48.686797282268742 ], [ 2.090221789603902, 48.69771769321693 ], [ 2.123642201226573, 48.755989179756796 ], [ 2.208698357243406, 48.775555831136671 ], [ 2.267519159581525, 48.755198163964053 ], [ 2.290041133391583, 48.73118205021143 ], [ 2.320758907797369, 48.748705244051735 ], [ 2.388742308910423, 48.721558026381786 ], [ 2.508361454417582, 48.730445965908586 ], [ 2.541166631734654, 48.693883464250462 ], [ 2.571730597788871, 48.691960856708135 ], [ 2.575993292556404, 48.673306071118247 ], [ 2.52404993145916, 48.629712319867622 ], [ 2.496452273953253, 48.516509190546685 ], [ 2.502780399395931, 48.441121003731325 ], [ 2.526203251978473, 48.420708405068808 ], [ 2.390660743598403, 48.313601981346324 ], [ 2.315968868568405, 48.328005765153932 ], [ 2.255917596719712, 48.30560464134112 ], [ 2.197712028687135, 48.338706449243205 ], [ 2.133507924151388, 48.299067776056972 ], [ 1.972272566425772, 48.284236232416163 ], [ 1.998683700692197, 48.325522854795906 ], [ 1.923053814781724, 48.413061920271389 ], [ 1.920351177564783, 48.461357820906699 ], [ 1.94891563235052, 48.548863928027856 ], [ 2.001715926848533, 48.558454992603799 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-77", "NAME_1": "Seien-et-Marne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.390660743598403, 48.313601981346324 ], [ 2.526203251978473, 48.420708405068808 ], [ 2.502780399395931, 48.441121003731325 ], [ 2.496452273953253, 48.516509190546685 ], [ 2.52404993145916, 48.629712319867622 ], [ 2.575993292556404, 48.673306071118247 ], [ 2.571181281091242, 48.70521036966278 ], [ 2.598976692320491, 48.748287763469477 ], [ 2.571071417212124, 48.858041186051878 ], [ 2.592297004802901, 48.933583180319488 ], [ 2.570280402318701, 48.970552176441743 ], [ 2.574323371126638, 49.000665702660001 ], [ 2.553119756671435, 49.009784355163845 ], [ 2.583332160650684, 49.084546321555479 ], [ 2.626486459082798, 49.097828792864448 ], [ 2.755729627520282, 49.06780315649047 ], [ 2.794709121928406, 49.086666682821146 ], [ 2.98661830868798, 49.0788663896721 ], [ 3.07973842918517, 49.106200374947321 ], [ 3.140866361293547, 49.093148616615338 ], [ 3.174089019192877, 49.055663263948475 ], [ 3.175956694345984, 49.004346123274956 ], [ 3.319943516579997, 48.919905201563779 ], [ 3.363229651127483, 48.920476490497606 ], [ 3.383092933092371, 48.870763354545147 ], [ 3.435212075676759, 48.848384202968589 ], [ 3.477904948154844, 48.85009806977007 ], [ 3.463952311050321, 48.817172043355072 ], [ 3.409328285871709, 48.813140060665262 ], [ 3.425610024083312, 48.790486251639152 ], [ 3.395529457118755, 48.753868818491128 ], [ 3.451252115692569, 48.724359539561078 ], [ 3.459294107936728, 48.642401529107246 ], [ 3.508205242877636, 48.641709390176175 ], [ 3.537802411651967, 48.613419594638572 ], [ 3.493571452960168, 48.587733558556863 ], [ 3.461315592340725, 48.539800207013911 ], [ 3.405922523605568, 48.524715977260541 ], [ 3.42064420426658, 48.49849161149865 ], [ 3.391047034592987, 48.474453524610453 ], [ 3.395375648767185, 48.411743560916591 ], [ 3.346354649947102, 48.371467681188506 ], [ 3.042340967261794, 48.361755766615317 ], [ 3.013183251305975, 48.31415200491108 ], [ 3.027904931067724, 48.262043848444819 ], [ 3.002328757965813, 48.229304589635092 ], [ 2.940563619315583, 48.199542625491745 ], [ 2.925644184931173, 48.155926901105602 ], [ 2.825119278731734, 48.131482319753218 ], [ 2.795456191450057, 48.133240132825847 ], [ 2.803234512362849, 48.151433492461706 ], [ 2.788337051114013, 48.159958883795412 ], [ 2.68482386323069, 48.122594380226417 ], [ 2.46681115980715, 48.124319234045402 ], [ 2.450837038298687, 48.146621480996544 ], [ 2.507482547881295, 48.157212301206698 ], [ 2.500187626058107, 48.181195456604996 ], [ 2.513678837208545, 48.206617821355337 ], [ 2.436884401194163, 48.24981606515928 ], [ 2.414494263499478, 48.300979396581852 ], [ 2.390660743598403, 48.313601981346324 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-77", "NAME_1": "Seine-et-Marne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.390660743598403, 48.313601981346324 ], [ 2.526203251978473, 48.420708405068808 ], [ 2.502780399395931, 48.441121003731325 ], [ 2.496452273953253, 48.516509190546685 ], [ 2.52404993145916, 48.629712319867622 ], [ 2.575993292556404, 48.673306071118247 ], [ 2.571181281091242, 48.70521036966278 ], [ 2.598976692320491, 48.748287763469477 ], [ 2.571071417212124, 48.858041186051878 ], [ 2.592297004802901, 48.933583180319488 ], [ 2.570280402318701, 48.970552176441743 ], [ 2.574323371126638, 49.000665702660001 ], [ 2.553119756671435, 49.009784355163845 ], [ 2.583332160650684, 49.084546321555479 ], [ 2.626486459082798, 49.097828792864448 ], [ 2.755729627520282, 49.06780315649047 ], [ 2.794709121928406, 49.086666682821146 ], [ 2.98661830868798, 49.0788663896721 ], [ 3.07973842918517, 49.106200374947321 ], [ 3.140866361293547, 49.093148616615338 ], [ 3.174089019192877, 49.055663263948475 ], [ 3.175956694345984, 49.004346123274956 ], [ 3.319943516579997, 48.919905201563779 ], [ 3.363229651127483, 48.920476490497606 ], [ 3.383092933092371, 48.870763354545147 ], [ 3.435212075676759, 48.848384202968589 ], [ 3.477904948154844, 48.85009806977007 ], [ 3.463952311050321, 48.817172043355072 ], [ 3.409328285871709, 48.813140060665262 ], [ 3.425610024083312, 48.790486251639152 ], [ 3.395529457118755, 48.753868818491128 ], [ 3.451252115692569, 48.724359539561078 ], [ 3.459294107936728, 48.642401529107246 ], [ 3.508205242877636, 48.641709390176175 ], [ 3.537802411651967, 48.613419594638572 ], [ 3.493571452960168, 48.587733558556863 ], [ 3.461315592340725, 48.539800207013911 ], [ 3.405922523605568, 48.524715977260541 ], [ 3.42064420426658, 48.49849161149865 ], [ 3.391047034592987, 48.474453524610453 ], [ 3.395375648767185, 48.411743560916591 ], [ 3.346354649947102, 48.371467681188506 ], [ 3.042340967261794, 48.361755766615317 ], [ 3.013183251305975, 48.31415200491108 ], [ 3.027904931067724, 48.262043848444819 ], [ 3.002328757965813, 48.229304589635092 ], [ 2.940563619315583, 48.199542625491745 ], [ 2.925644184931173, 48.155926901105602 ], [ 2.825119278731734, 48.131482319753218 ], [ 2.795456191450057, 48.133240132825847 ], [ 2.803234512362849, 48.151433492461706 ], [ 2.788337051114013, 48.159958883795412 ], [ 2.68482386323069, 48.122594380226417 ], [ 2.46681115980715, 48.124319234045402 ], [ 2.450837038298687, 48.146621480996544 ], [ 2.507482547881295, 48.157212301206698 ], [ 2.500187626058107, 48.181195456604996 ], [ 2.513678837208545, 48.206617821355337 ], [ 2.436884401194163, 48.24981606515928 ], [ 2.414494263499478, 48.300979396581852 ], [ 2.390660743598403, 48.313601981346324 ] ] ] } },
{ "type": "Feature", "properties": { "ISO": "FR-94", "NAME_1": "Val-de-Marne" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 2.473420416019394, 48.859200672972634 ], [ 2.592384894647182, 48.807471115799331 ], [ 2.598976692320491, 48.748287763469477 ], [ 2.571730597788871, 48.691960856708135 ], [ 2.541166631734654, 48.693883464250462 ], [ 2.494628543272654, 48.733763837431127 ], [ 2.388742308910423, 48.721558026381786 ], [ 2.320758907797369, 48.748705244051735 ], [ 2.331964963212499, 48.817117111865173 ], [ 2.443366334988355, 48.815831711764076 ], [ 2.473420416019394, 48.859200672972634 ] ] ] } }
]
}

View File

@@ -51,7 +51,7 @@ const propTypes = {
leftMargin: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
metric: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),
normalized: PropTypes.bool,
numberFormat: PropTypes.string,
valueFormatter: PropTypes.object,
showLegend: PropTypes.bool,
showPercentage: PropTypes.bool,
showValues: PropTypes.bool,
@@ -90,7 +90,7 @@ function Heatmap(element, props) {
leftMargin,
metric,
normalized,
numberFormat,
valueFormatter,
showLegend,
showPercentage,
showValues,
@@ -99,9 +99,16 @@ function Heatmap(element, props) {
xScaleInterval,
yScaleInterval,
yAxisBounds,
xAxisFormatter,
yAxisFormatter,
} = props;
const { records, extents } = data;
const { extents } = data;
const records = data.records.map(record => ({
...record,
x: xAxisFormatter(record.x),
y: yAxisFormatter(record.y),
}));
const margin = {
top: 10,
@@ -115,8 +122,6 @@ function Heatmap(element, props) {
const pixelsPerCharX = 4.5; // approx, depends on font size
let pixelsPerCharY = 6; // approx, depends on font size
const valueFormatter = getNumberFormatter(numberFormat);
// Dynamically adjusts based on max x / y category lengths
function adjustMargins() {
let longestX = 1;

View File

@@ -21,7 +21,12 @@ import { reactify, css, styled } from '@superset-ui/core';
import { Global } from '@emotion/react';
import Component from './Heatmap';
const ReactComponent = reactify(Component);
function componentWillUnmount() {
// Removes tooltips from the DOM
document.querySelectorAll('.d3-tip').forEach(t => t.remove());
}
const ReactComponent = reactify(Component, { componentWillUnmount });
const Heatmap = ({ className, ...otherProps }) => (
<div className={className}>

View File

@@ -31,6 +31,7 @@ import {
sections,
sharedControls,
getStandardizedControls,
D3_TIME_FORMAT_DOCS,
} from '@superset-ui/chart-controls';
const sortAxisChoices = [
@@ -257,6 +258,16 @@ const config: ControlPanelConfig = {
},
],
['y_axis_format'],
[
{
name: 'time_format',
config: {
...sharedControls.x_axis_time_format,
default: '%d/%m/%Y',
description: `${D3_TIME_FORMAT_DOCS}.`,
},
},
],
[
{
name: 'sort_x_axis',

View File

@@ -16,8 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
import {
GenericDataType,
getTimeFormatter,
getValueFormatter,
} from '@superset-ui/core';
export default function transformProps(chartProps) {
const { width, height, formData, queriesData } = chartProps;
const { width, height, formData, queriesData, datasource } = chartProps;
const {
bottomMargin,
canvasImageRendering,
@@ -36,12 +42,28 @@ export default function transformProps(chartProps) {
yscaleInterval,
yAxisBounds,
yAxisFormat,
timeFormat,
} = formData;
const { data = [], coltypes = [] } = queriesData[0];
const { columnFormats = {}, currencyFormats = {} } = datasource;
const valueFormatter = getValueFormatter(
metric,
currencyFormats,
columnFormats,
yAxisFormat,
);
const xAxisFormatter =
coltypes[0] === GenericDataType.TEMPORAL
? getTimeFormatter(timeFormat)
: String;
const yAxisFormatter =
coltypes[1] === GenericDataType.TEMPORAL
? getTimeFormatter(timeFormat)
: String;
return {
width,
height,
data: queriesData[0].data,
data,
bottomMargin,
canvasImageRendering,
colorScheme: linearColorScheme,
@@ -50,7 +72,6 @@ export default function transformProps(chartProps) {
leftMargin,
metric,
normalized,
numberFormat: yAxisFormat,
showLegend,
showPercentage: showPerc,
showValues,
@@ -59,5 +80,8 @@ export default function transformProps(chartProps) {
xScaleInterval: parseInt(xscaleInterval, 10),
yScaleInterval: parseInt(yscaleInterval, 10),
yAxisBounds,
valueFormatter,
xAxisFormatter,
yAxisFormatter,
};
}

View File

@@ -21,6 +21,7 @@ import { t, validateNonEmpty } from '@superset-ui/core';
import {
ColumnMeta,
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
@@ -241,7 +242,11 @@ const config: ControlPanelConfig = {
),
controlSetRows: [
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Rolling Window')}</div>],
[
<ControlSubSectionHeader>
{t('Rolling Window')}
</ControlSubSectionHeader>,
],
[
{
name: 'rolling_type',
@@ -293,7 +298,11 @@ const config: ControlPanelConfig = {
},
],
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Time Comparison')}</div>],
[
<ControlSubSectionHeader>
{t('Time Comparison')}
</ControlSubSectionHeader>,
],
[
{
name: 'time_compare',
@@ -342,7 +351,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Resample')}</div>],
[<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>],
[
{
name: 'resample_rule',

View File

@@ -20,6 +20,7 @@ import React from 'react';
import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_FORMAT_OPTIONS,
D3_TIME_FORMAT_OPTIONS,
@@ -123,7 +124,11 @@ const config: ControlPanelConfig = {
),
controlSetRows: [
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Rolling Window')}</div>],
[
<ControlSubSectionHeader>
{t('Rolling Window')}
</ControlSubSectionHeader>,
],
[
{
name: 'rolling_type',
@@ -175,7 +180,11 @@ const config: ControlPanelConfig = {
},
],
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Time Comparison')}</div>],
[
<ControlSubSectionHeader>
{t('Time Comparison')}
</ControlSubSectionHeader>,
],
[
{
name: 'time_compare',
@@ -224,7 +233,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Resample')}</div>],
[<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>],
[
{
name: 'resample_rule',

View File

@@ -21,7 +21,6 @@ import d3 from 'd3';
import PropTypes from 'prop-types';
import { extent as d3Extent } from 'd3-array';
import {
getNumberFormatter,
getSequentialSchemeRegistry,
CategoricalColorNamespace,
} from '@superset-ui/core';
@@ -47,10 +46,9 @@ const propTypes = {
setDataMask: PropTypes.func,
onContextMenu: PropTypes.func,
emitCrossFilters: PropTypes.bool,
formatter: PropTypes.object,
};
const formatter = getNumberFormatter();
function WorldMap(element, props) {
const {
countryFieldtype,
@@ -71,6 +69,7 @@ function WorldMap(element, props) {
inContextMenu,
filterState,
emitCrossFilters,
formatter,
} = props;
const div = d3.select(element);
div.classed('superset-legacy-chart-world-map', true);

View File

@@ -17,6 +17,7 @@
* under the License.
*/
import { rgb } from 'd3-color';
import { getValueFormatter } from '@superset-ui/core';
export default function transformProps(chartProps) {
const {
@@ -28,6 +29,7 @@ export default function transformProps(chartProps) {
inContextMenu,
filterState,
emitCrossFilters,
datasource,
} = chartProps;
const { onContextMenu, setDataMask } = hooks;
const {
@@ -40,8 +42,17 @@ export default function transformProps(chartProps) {
colorBy,
colorScheme,
sliceId,
metric,
} = formData;
const { r, g, b } = colorPicker;
const { currencyFormats = {}, columnFormats = {} } = datasource;
const formatter = getValueFormatter(
metric,
currencyFormats,
columnFormats,
undefined,
);
return {
countryFieldtype,
@@ -61,5 +72,6 @@ export default function transformProps(chartProps) {
inContextMenu,
filterState,
emitCrossFilters,
formatter,
};
}

View File

@@ -22,6 +22,7 @@ import React from 'react';
import { t } from '@superset-ui/core';
import {
ControlPanelSectionConfig,
ControlSubSectionHeader,
CustomControlItem,
D3_TIME_FORMAT_OPTIONS,
D3_FORMAT_DOCS,
@@ -390,7 +391,11 @@ export const timeSeriesSection: ControlPanelSectionConfig[] = [
'of query results',
),
controlSetRows: [
[<div className="section-header">{t('Rolling Window')}</div>],
[
<ControlSubSectionHeader>
{t('Rolling Window')}
</ControlSubSectionHeader>,
],
[
{
name: 'rolling_type',
@@ -443,7 +448,11 @@ export const timeSeriesSection: ControlPanelSectionConfig[] = [
},
},
],
[<div className="section-header">{t('Time Comparison')}</div>],
[
<ControlSubSectionHeader>
{t('Time Comparison')}
</ControlSubSectionHeader>,
],
[
{
name: 'time_compare',
@@ -494,7 +503,7 @@ export const timeSeriesSection: ControlPanelSectionConfig[] = [
},
},
],
[<div className="section-header">{t('Resample')}</div>],
[<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>],
[
{
name: 'resample_rule',

View File

@@ -111,6 +111,7 @@ export default function transformProps(chartProps) {
const data = Array.isArray(rawData)
? rawData.map(row => ({
...row,
values: row.values.map(value => ({ ...value })),
key: formatLabel(row.key, datasource.verboseMap),
}))
: rawData;

View File

@@ -191,19 +191,18 @@ export function generateAreaChartTooltipContent(
'<tr class="tooltip-header"><td></td><td>Category</td><td>Value</td><td>% to total</td></tr>';
d.series.forEach(series => {
const key = getFormattedKey(series.key, true);
const isTotal = series.key === 'TOTAL';
let trClass = '';
if (series.highlight) {
trClass = 'superset-legacy-chart-nvd3-tr-highlight';
} else if (series.key === 'TOTAL') {
} else if (isTotal) {
trClass = 'superset-legacy-chart-nvd3-tr-total';
}
tooltip +=
`<tr class="${trClass}" style="border-color: ${series.color}">` +
`<td style="color: ${series.color}">${
series.key === 'TOTAL' ? '' : '&#9724;'
}</td>` +
`<td style="color: ${series.color}">${isTotal ? '' : '&#9724;'}</td>` +
`<td>${key}</td>` +
`<td>${valueFormatter(series?.point?.y)}</td>` +
`<td>${valueFormatter(isTotal ? total : series?.point?.y)}</td>` +
`<td>${((100 * series.value) / total).toFixed(2)}%</td>` +
'</tr>';
});

View File

@@ -26,11 +26,11 @@ import {
getMetricLabel,
extractTimegrain,
QueryFormData,
getValueFormatter,
} from '@superset-ui/core';
import { BigNumberTotalChartProps, BigNumberVizProps } from '../types';
import { getDateFormatter, parseMetricValue } from '../utils';
import { Refs } from '../../types';
import { getValueFormatter } from '../../utils/valueFormatter';
export default function transformProps(
chartProps: BigNumberTotalChartProps,

View File

@@ -19,6 +19,7 @@
import { hasGenericChartAxes, smartDateFormatter, t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_TIME_FORMAT_OPTIONS,
getStandardizedControls,
@@ -170,7 +171,11 @@ const config: ControlPanelConfig = {
expanded: false,
controlSetRows: [
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Rolling Window')}</div>],
[
<ControlSubSectionHeader>
{t('Rolling Window')}
</ControlSubSectionHeader>,
],
[
{
name: 'rolling_type',
@@ -223,7 +228,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Resample')}</div>],
[<ControlSubSectionHeader>{t('Resample')}</ControlSubSectionHeader>],
[
{
name: 'resample_rule',

View File

@@ -28,6 +28,7 @@ import {
getXAxisLabel,
Metric,
ValueFormatter,
getValueFormatter,
} from '@superset-ui/core';
import { EChartsCoreOption, graphic } from 'echarts';
import {
@@ -39,7 +40,6 @@ import {
import { getDateFormatter, parseMetricValue } from '../utils';
import { getDefaultTooltip } from '../../utils/tooltip';
import { Refs } from '../../types';
import { getValueFormatter } from '../../utils/valueFormatter';
const defaultNumberFormatter = getNumberFormatter();
export function renderTooltipFactory(

View File

@@ -20,6 +20,7 @@ import React from 'react';
import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_OPTIONS,
D3_NUMBER_FORMAT_DESCRIPTION_VALUES_TEXT,
sections,
@@ -77,7 +78,7 @@ const config: ControlPanelConfig = {
['color_scheme'],
...funnelLegendSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Labels')}</div>],
[<ControlSubSectionHeader>{t('Labels')}</ControlSubSectionHeader>],
[
{
name: 'label_type',

View File

@@ -24,6 +24,7 @@ import {
NumberFormats,
ValueFormatter,
getColumnLabel,
getValueFormatter,
} from '@superset-ui/core';
import { CallbackDataParams } from 'echarts/types/src/util/types';
import { EChartsCoreOption, FunnelSeriesOption } from 'echarts';
@@ -45,7 +46,6 @@ import { defaultGrid } from '../defaults';
import { OpacityEnum, DEFAULT_LEGEND_FORM_DATA } from '../constants';
import { getDefaultTooltip } from '../utils/tooltip';
import { Refs } from '../types';
import { getValueFormatter } from '../utils/valueFormatter';
const percentFormatter = getNumberFormatter(NumberFormats.PERCENT_2_POINT);

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
sharedControls,
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_OPTIONS,
sections,
getStandardizedControls,
@@ -73,7 +74,7 @@ const config: ControlPanelConfig = {
label: t('Chart Options'),
expanded: true,
controlSetRows: [
[<div className="section-header">{t('General')}</div>],
[<ControlSubSectionHeader>{t('General')}</ControlSubSectionHeader>],
[
{
name: 'min_val',
@@ -193,7 +194,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Axis')}</div>],
[<ControlSubSectionHeader>{t('Axis')}</ControlSubSectionHeader>],
[
{
name: 'show_axis_tick',
@@ -232,7 +233,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Progress')}</div>],
[<ControlSubSectionHeader>{t('Progress')}</ControlSubSectionHeader>],
[
{
name: 'show_progress',
@@ -273,7 +274,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Intervals')}</div>],
[<ControlSubSectionHeader>{t('Intervals')}</ControlSubSectionHeader>],
[
{
name: 'intervals',

View File

@@ -23,6 +23,7 @@ import {
DataRecord,
getMetricLabel,
getColumnLabel,
getValueFormatter,
} from '@superset-ui/core';
import { EChartsCoreOption, GaugeSeriesOption } from 'echarts';
import { GaugeDataItemOption } from 'echarts/types/src/chart/gauge/GaugeSeries';
@@ -46,7 +47,6 @@ import { OpacityEnum } from '../constants';
import { getDefaultTooltip } from '../utils/tooltip';
import { Refs } from '../types';
import { getColtypesMapping } from '../utils/series';
import { getValueFormatter } from '../utils/valueFormatter';
const setIntervalBoundsAndColors = (
intervals: string,

View File

@@ -20,6 +20,7 @@ import React from 'react';
import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
getStandardizedControls,
sections,
sharedControls,
@@ -99,7 +100,7 @@ const controlPanel: ControlPanelConfig = {
controlSetRows: [
['color_scheme'],
...legendSection,
[<div className="section-header">{t('Layout')}</div>],
[<ControlSubSectionHeader>{t('Layout')}</ControlSubSectionHeader>],
[
{
name: 'layout',

View File

@@ -45,6 +45,7 @@ export default function EchartsMixedTimeseries({
emitCrossFilters,
seriesBreakdown,
onContextMenu,
onFocusedSeries,
xValueFormatter,
xAxis,
refs,
@@ -123,6 +124,12 @@ export default function EchartsMixedTimeseries({
const { seriesName, seriesIndex } = props;
handleChange(seriesName, seriesIndex);
},
mouseout: () => {
onFocusedSeries(null);
},
mouseover: params => {
onFocusedSeries(params.seriesName);
},
contextmenu: async eventParams => {
if (onContextMenu) {
eventParams.event.stop();

View File

@@ -23,6 +23,7 @@ import {
ControlPanelConfig,
ControlPanelSectionConfig,
ControlSetRow,
ControlSubSectionHeader,
CustomControlItem,
getStandardizedControls,
sections,
@@ -128,7 +129,7 @@ function createCustomizeSection(
controlSuffix: string,
): ControlSetRow[] {
return [
[<div className="section-header">{label}</div>],
[<ControlSubSectionHeader>{label}</ControlSubSectionHeader>],
[
{
name: `seriesType${controlSuffix}`,
@@ -311,7 +312,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
['x_axis_time_format'],
[
{
@@ -335,7 +336,7 @@ const config: ControlPanelConfig = {
],
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
[
{
name: 'minorSplitLine',

View File

@@ -34,6 +34,11 @@ import {
isPhysicalColumn,
isDefined,
ensureIsArray,
buildCustomFormatters,
ValueFormatter,
NumberFormatter,
QueryFormMetric,
getCustomFormatter,
} from '@superset-ui/core';
import { getOriginalSeries } from '@superset-ui/chart-controls';
import { EChartsCoreOption, SeriesOption } from 'echarts';
@@ -83,6 +88,23 @@ import {
} from '../Timeseries/transformers';
import { TIMESERIES_CONSTANTS, TIMEGRAIN_TO_TIMESTAMP } from '../constants';
import { getDefaultTooltip } from '../utils/tooltip';
import { getYAxisFormatter } from '../utils/getYAxisFormatter';
const getFormatter = (
customFormatters: Record<string, ValueFormatter>,
defaultFormatter: NumberFormatter,
metrics: QueryFormMetric[],
formatterKey: string,
forcePercentFormat: boolean,
) => {
if (forcePercentFormat) {
return getNumberFormatter(',.0%');
}
return (
getCustomFormatter(customFormatters, metrics, formatterKey) ??
defaultFormatter
);
};
export default function transformProps(
chartProps: EchartsMixedTimeseriesProps,
@@ -99,7 +121,14 @@ export default function transformProps(
inContextMenu,
emitCrossFilters,
} = chartProps;
const { verboseMap = {} } = datasource;
let focusedSeries: string | null = null;
const {
verboseMap = {},
currencyFormats = {},
columnFormats = {},
} = datasource;
const { label_map: labelMap } =
queriesData[0] as TimeseriesChartDataResponseResult;
const { label_map: labelMapB } =
@@ -160,6 +189,8 @@ export default function transformProps(
sliceId,
timeGrainSqla,
percentageThreshold,
metrics = [],
metricsB = [],
}: EchartsMixedTimeseriesFormData = { ...DEFAULT_FORM_DATA, ...formData };
const refs: Refs = {};
@@ -194,6 +225,18 @@ export default function transformProps(
const formatterSecondary = getNumberFormatter(
contributionMode ? ',.0%' : yAxisFormatSecondary,
);
const customFormatters = buildCustomFormatters(
[...ensureIsArray(metrics), ...ensureIsArray(metricsB)],
currencyFormats,
columnFormats,
yAxisFormat,
);
const customFormattersSecondary = buildCustomFormatters(
[...ensureIsArray(metrics), ...ensureIsArray(metricsB)],
currencyFormats,
columnFormats,
yAxisFormatSecondary,
);
const primarySeries = new Set<string>();
const secondarySeries = new Set<string>();
@@ -292,12 +335,6 @@ export default function transformProps(
parseYAxisBound,
);
const maxLabelFormatter = getOverMaxHiddenFormatter({ max, formatter });
const maxLabelFormatterSecondary = getOverMaxHiddenFormatter({
max: maxSecondary,
formatter: formatterSecondary,
});
const array = ensureIsArray(chartProps.rawFormData?.time_compare);
const inverted = invert(verboseMap);
@@ -306,6 +343,14 @@ export default function transformProps(
const seriesName = inverted[entryName] || entryName;
const colorScaleKey = getOriginalSeries(seriesName, array);
const seriesFormatter = getFormatter(
customFormatters,
formatter,
metrics,
labelMap[seriesName]?.[0],
!!contributionMode,
);
const transformedSeries = transformSeries(
entry,
colorScale,
@@ -325,8 +370,11 @@ export default function transformProps(
queryIndex: 0,
formatter:
seriesType === EchartsTimeseriesSeriesType.Bar
? maxLabelFormatter
: formatter,
? getOverMaxHiddenFormatter({
max,
formatter: seriesFormatter,
})
: seriesFormatter,
showValueIndexes: showValueIndexesA,
totalStackedValues,
thresholdValues,
@@ -340,6 +388,14 @@ export default function transformProps(
const seriesName = `${inverted[entryName] || entryName} (1)`;
const colorScaleKey = getOriginalSeries(seriesName, array);
const seriesFormatter = getFormatter(
customFormattersSecondary,
formatterSecondary,
metricsB,
labelMapB[seriesName]?.[0],
!!contributionMode,
);
const transformedSeries = transformSeries(
entry,
colorScale,
@@ -361,8 +417,11 @@ export default function transformProps(
queryIndex: 1,
formatter:
seriesTypeB === EchartsTimeseriesSeriesType.Bar
? maxLabelFormatterSecondary
: formatterSecondary,
? getOverMaxHiddenFormatter({
max: maxSecondary,
formatter: seriesFormatter,
})
: seriesFormatter,
showValueIndexes: showValueIndexesB,
totalStackedValues: totalStackedValuesB,
thresholdValues: thresholdValuesB,
@@ -434,7 +493,14 @@ export default function transformProps(
max,
minorTick: { show: true },
minorSplitLine: { show: minorSplitLine },
axisLabel: { formatter },
axisLabel: {
formatter: getYAxisFormatter(
metrics,
!!contributionMode,
customFormatters,
yAxisFormat,
),
},
scale: truncateYAxis,
name: yAxisTitle,
nameGap: convertInteger(yAxisTitleMargin),
@@ -449,7 +515,14 @@ export default function transformProps(
minorTick: { show: true },
splitLine: { show: false },
minorSplitLine: { show: minorSplitLine },
axisLabel: { formatter: formatterSecondary },
axisLabel: {
formatter: getYAxisFormatter(
metricsB,
!!contributionMode,
customFormattersSecondary,
yAxisFormatSecondary,
),
},
scale: truncateYAxis,
name: yAxisTitleSecondary,
alignTicks,
@@ -475,12 +548,40 @@ export default function transformProps(
Object.keys(forecastValues).forEach(key => {
const value = forecastValues[key];
// if there are no dimensions, key is a verbose name of a metric,
// otherwise it is a comma separated string where the first part is metric name
let formatterKey;
if (primarySeries.has(key)) {
formatterKey =
groupby.length === 0 ? inverted[key] : labelMap[key]?.[0];
} else {
formatterKey =
groupbyB.length === 0 ? inverted[key] : labelMapB[key]?.[0];
}
const tooltipFormatter = getFormatter(
customFormatters,
formatter,
metrics,
formatterKey,
!!contributionMode,
);
const tooltipFormatterSecondary = getFormatter(
customFormattersSecondary,
formatterSecondary,
metricsB,
formatterKey,
!!contributionMode,
);
const content = formatForecastTooltipSeries({
...value,
seriesName: key,
formatter: primarySeries.has(key) ? formatter : formatterSecondary,
formatter: primarySeries.has(key)
? tooltipFormatter
: tooltipFormatterSecondary,
});
rows.push(`<span style="opacity: 0.7">${content}</span>`);
const contentStyle =
key === focusedSeries ? 'font-weight: 700' : 'opacity: 0.7';
rows.push(`<span style="${contentStyle}">${content}</span>`);
});
return rows.join('<br />');
},
@@ -531,6 +632,10 @@ export default function transformProps(
: [],
};
const onFocusedSeries = (seriesName: string | null) => {
focusedSeries = seriesName;
};
return {
formData,
width,
@@ -545,6 +650,7 @@ export default function transformProps(
seriesBreakdown: rawSeriesA.length,
selectedValues: filterState.selectedValues || [],
onContextMenu,
onFocusedSeries,
xValueFormatter: tooltipFormatter,
xAxis: {
label: xAxisLabel,

View File

@@ -150,4 +150,5 @@ export type EchartsMixedTimeseriesChartTransformedProps =
label: string;
type: AxisType;
};
onFocusedSeries: (series: string | null) => void;
};

View File

@@ -21,6 +21,7 @@ import { ensureIsInt, t, validateNonEmpty } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_NUMBER_FORMAT_DESCRIPTION_VALUES_TEXT,
D3_FORMAT_OPTIONS,
@@ -90,7 +91,7 @@ const config: ControlPanelConfig = {
],
...legendSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Labels')}</div>],
[<ControlSubSectionHeader>{t('Labels')}</ControlSubSectionHeader>],
[
{
name: 'label_type',
@@ -195,7 +196,7 @@ const config: ControlPanelConfig = {
},
],
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Pie shape')}</div>],
[<ControlSubSectionHeader>{t('Pie shape')}</ControlSubSectionHeader>],
[
{
name: 'outerRadius',

View File

@@ -25,6 +25,7 @@ import {
NumberFormats,
t,
ValueFormatter,
getValueFormatter,
} from '@superset-ui/core';
import { CallbackDataParams } from 'echarts/types/src/util/types';
import { EChartsCoreOption, PieSeriesOption } from 'echarts';
@@ -47,7 +48,6 @@ import { defaultGrid } from '../defaults';
import { convertInteger } from '../utils/convertInteger';
import { getDefaultTooltip } from '../utils/tooltip';
import { Refs } from '../types';
import { getValueFormatter } from '../utils/valueFormatter';
const percentFormatter = getNumberFormatter(NumberFormats.PERCENT_2_POINT);

View File

@@ -26,6 +26,7 @@ import {
} from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_NUMBER_FORMAT_DESCRIPTION_VALUES_TEXT,
D3_FORMAT_OPTIONS,
@@ -85,7 +86,7 @@ const config: ControlPanelConfig = {
controlSetRows: [
['color_scheme'],
...legendSection,
[<div className="section-header">{t('Labels')}</div>],
[<ControlSubSectionHeader>{t('Labels')}</ControlSubSectionHeader>],
[
{
name: 'show_labels',
@@ -156,7 +157,7 @@ const config: ControlPanelConfig = {
},
},
],
[<div className="section-header">{t('Radar')}</div>],
[<ControlSubSectionHeader>{t('Radar')}</ControlSubSectionHeader>],
[
{
name: 'column_config',

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_NUMBER_FORMAT_DESCRIPTION_VALUES_TEXT,
D3_FORMAT_OPTIONS,
@@ -64,7 +65,7 @@ const config: ControlPanelConfig = {
controlSetRows: [
['color_scheme'],
['linear_color_scheme'],
[<div className="section-header">{t('Labels')}</div>],
[<ControlSubSectionHeader>{t('Labels')}</ControlSubSectionHeader>],
[
{
name: 'show_labels',

View File

@@ -24,10 +24,11 @@ import {
getNumberFormatter,
getSequentialSchemeRegistry,
getTimeFormatter,
getValueFormatter,
NumberFormats,
NumberFormatter,
SupersetTheme,
t,
ValueFormatter,
} from '@superset-ui/core';
import { EChartsCoreOption } from 'echarts';
import { CallbackDataParams } from 'echarts/types/src/util/types';
@@ -74,7 +75,7 @@ export function formatLabel({
}: {
params: CallbackDataParams;
labelType: EchartsSunburstLabelType;
numberFormatter: NumberFormatter;
numberFormatter: ValueFormatter;
}): string {
const { name = '', value } = params;
const formattedValue = numberFormatter(value as number);
@@ -93,7 +94,8 @@ export function formatLabel({
export function formatTooltip({
params,
numberFormatter,
primaryValueFormatter,
secondaryValueFormatter,
colorByCategory,
totalValue,
metricLabel,
@@ -107,7 +109,8 @@ export function formatTooltip({
value: number;
}[];
};
numberFormatter: NumberFormatter;
primaryValueFormatter: ValueFormatter;
secondaryValueFormatter: ValueFormatter | undefined;
colorByCategory: boolean;
totalValue: number;
metricLabel: string;
@@ -116,8 +119,10 @@ export function formatTooltip({
}): string {
const { data, treePathInfo = [] } = params;
const node = data as TreeNode;
const formattedValue = numberFormatter(node.value);
const formattedSecondaryValue = numberFormatter(node.secondaryValue);
const formattedValue = primaryValueFormatter(node.value);
const formattedSecondaryValue = secondaryValueFormatter?.(
node.secondaryValue,
);
const percentFormatter = getNumberFormatter(NumberFormats.PERCENT_2_POINT);
const compareValuePercentage = percentFormatter(
@@ -177,6 +182,7 @@ export default function transformProps(
theme,
inContextMenu,
emitCrossFilters,
datasource,
} = chartProps;
const { data = [] } = queriesData[0];
const coltypeMapping = getColtypesMapping(queriesData[0]);
@@ -195,12 +201,28 @@ export default function transformProps(
showTotal,
sliceId,
} = formData;
const { currencyFormats = {}, columnFormats = {} } = datasource;
const refs: Refs = {};
const primaryValueFormatter = getValueFormatter(
metric,
currencyFormats,
columnFormats,
numberFormat,
);
const secondaryValueFormatter = secondaryMetric
? getValueFormatter(
secondaryMetric,
currencyFormats,
columnFormats,
numberFormat,
)
: undefined;
const numberFormatter = getNumberFormatter(numberFormat);
const formatter = (params: CallbackDataParams) =>
formatLabel({
params,
numberFormatter,
numberFormatter: primaryValueFormatter,
labelType,
});
const minShowLabelAngle = (showLabelsThreshold || 0) * 3.6;
@@ -319,7 +341,8 @@ export default function transformProps(
formatter: (params: any) =>
formatTooltip({
params,
numberFormatter,
primaryValueFormatter,
secondaryValueFormatter,
colorByCategory,
totalValue,
metricLabel,
@@ -356,7 +379,7 @@ export default function transformProps(
top: 'center',
left: 'center',
style: {
text: t('Total: %s', numberFormatter(totalValue)),
text: t('Total: %s', primaryValueFormatter(totalValue)),
fontSize: 16,
fontWeight: 'bold',
},

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
getStandardizedControls,
sections,
@@ -179,7 +180,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
name: 'x_axis_time_format',
@@ -212,7 +213,7 @@ const config: ControlPanelConfig = {
],
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
['y_axis_format'],
[
{

View File

@@ -50,6 +50,7 @@ export default function EchartsTimeseries({
legendData = [],
onContextMenu,
onLegendStateChanged,
onFocusedSeries,
xValueFormatter,
xAxis,
refs,
@@ -146,6 +147,12 @@ export default function EchartsTimeseries({
handleChange(name);
}, TIMER_DURATION);
},
mouseout: () => {
onFocusedSeries(null);
},
mouseover: params => {
onFocusedSeries(params.seriesName);
},
legendselectchanged: payload => {
onLegendStateChanged?.(payload.selected);
},

View File

@@ -23,6 +23,7 @@ import {
ControlPanelsContainerProps,
ControlSetRow,
ControlStateMapping,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
formatSelectOptions,
getStandardizedControls,
@@ -292,9 +293,9 @@ const config: ControlPanelConfig = {
tabOverride: 'customize',
expanded: true,
controlSetRows: [
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
...createAxisTitleControl('x'),
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
...createAxisTitleControl('y'),
],
},
@@ -318,10 +319,10 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
...createAxisControl('x'),
...richTooltipSection,
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
...createAxisControl('y'),
],
},

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
getStandardizedControls,
sections,
@@ -167,7 +168,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
name: 'x_axis_time_format',
@@ -200,7 +201,7 @@ const config: ControlPanelConfig = {
],
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
['y_axis_format'],
[
{

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
getStandardizedControls,
sections,
@@ -109,7 +110,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
@@ -144,7 +145,7 @@ const config: ControlPanelConfig = {
// eslint-disable-next-line react/jsx-key
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
['y_axis_format'],
[
{

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
getStandardizedControls,
sections,
@@ -109,7 +110,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
name: 'x_axis_time_format',
@@ -143,7 +144,7 @@ const config: ControlPanelConfig = {
// eslint-disable-next-line react/jsx-key
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
['y_axis_format'],
[

View File

@@ -21,6 +21,7 @@ import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlPanelsContainerProps,
ControlSubSectionHeader,
D3_TIME_FORMAT_DOCS,
getStandardizedControls,
sections,
@@ -161,7 +162,7 @@ const config: ControlPanelConfig = {
},
],
...legendSection,
[<div className="section-header">{t('X Axis')}</div>],
[<ControlSubSectionHeader>{t('X Axis')}</ControlSubSectionHeader>],
[
{
name: 'x_axis_time_format',
@@ -194,7 +195,7 @@ const config: ControlPanelConfig = {
],
...richTooltipSection,
// eslint-disable-next-line react/jsx-key
[<div className="section-header">{t('Y Axis')}</div>],
[<ControlSubSectionHeader>{t('Y Axis')}</ControlSubSectionHeader>],
['y_axis_format'],
[
{

View File

@@ -20,9 +20,7 @@
import { invert } from 'lodash';
import {
AnnotationLayer,
AxisType,
CategoricalColorNamespace,
CurrencyFormatter,
ensureIsArray,
GenericDataType,
getMetricLabel,
@@ -33,13 +31,11 @@ import {
isFormulaAnnotationLayer,
isIntervalAnnotationLayer,
isPhysicalColumn,
isSavedMetric,
isTimeseriesAnnotationLayer,
NumberFormats,
QueryFormMetric,
t,
TimeseriesChartDataResponseResult,
ValueFormatter,
buildCustomFormatters,
getCustomFormatter,
} from '@superset-ui/core';
import {
extractExtraMetrics,
@@ -97,36 +93,7 @@ import {
TIMEGRAIN_TO_TIMESTAMP,
} from '../constants';
import { getDefaultTooltip } from '../utils/tooltip';
import {
buildCustomFormatters,
getCustomFormatter,
} from '../utils/valueFormatter';
const getYAxisFormatter = (
metrics: QueryFormMetric[],
forcePercentFormatter: boolean,
customFormatters: Record<string, ValueFormatter>,
yAxisFormat: string = NumberFormats.SMART_NUMBER,
) => {
if (forcePercentFormatter) {
return getNumberFormatter(',.0%');
}
const metricsArray = ensureIsArray(metrics);
if (
metricsArray.every(isSavedMetric) &&
metricsArray
.map(metric => customFormatters[metric])
.every(
(formatter, _, formatters) =>
formatter instanceof CurrencyFormatter &&
(formatter as CurrencyFormatter)?.currency?.symbol ===
(formatters[0] as CurrencyFormatter)?.currency?.symbol,
)
) {
return customFormatters[metricsArray[0]];
}
return getNumberFormatter(yAxisFormat);
};
import { getYAxisFormatter } from '../utils/getYAxisFormatter';
export default function transformProps(
chartProps: EchartsTimeseriesChartProps,
@@ -144,6 +111,9 @@ export default function transformProps(
inContextMenu,
emitCrossFilters,
} = chartProps;
let focusedSeries: string | null = null;
const {
verboseMap = {},
columnFormats = {},
@@ -471,23 +441,13 @@ export default function transformProps(
rotate: xAxisLabelRotation,
},
minInterval:
xAxisType === AxisType.time && timeGrainSqla
xAxisType === 'time' && timeGrainSqla
? TIMEGRAIN_TO_TIMESTAMP[timeGrainSqla]
: 0,
};
if (xAxisType === AxisType.time) {
/**
* Overriding default behavior (false) for time axis regardless of the granilarity.
* Not including this in the initial declaration above so if echarts changes the default
* behavior for other axist types we won't unintentionally override it
*/
xAxis.axisLabel.showMaxLabel = null;
}
let yAxis: any = {
...defaultYAxis,
type: logAxis ? AxisType.log : AxisType.value,
type: logAxis ? 'log' : 'value',
min,
max,
minorTick: { show: true },
@@ -556,11 +516,9 @@ export default function transformProps(
: getCustomFormatter(customFormatters, metrics, formatterKey) ??
defaultFormatter,
});
if (!legendState || legendState[key]) {
rows.push(`<span style="font-weight: 700">${content}</span>`);
} else {
rows.push(`<span style="opacity: 0.7">${content}</span>`);
}
const contentStyle =
key === focusedSeries ? 'font-weight: 700' : 'opacity: 0.7';
rows.push(`<span style="${contentStyle}">${content}</span>`);
});
if (stack) {
rows.reverse();
@@ -607,6 +565,10 @@ export default function transformProps(
: [],
};
const onFocusedSeries = (seriesName: string | null) => {
focusedSeries = seriesName;
};
return {
echartOptions,
emitCrossFilters,
@@ -621,6 +583,7 @@ export default function transformProps(
legendData,
onContextMenu,
onLegendStateChanged,
onFocusedSeries,
xValueFormatter: tooltipFormatter,
xAxis: {
label: xAxisLabel,

View File

@@ -107,4 +107,5 @@ export type TimeseriesChartTransformedProps =
label: string;
type: AxisType;
};
onFocusedSeries: (series: string | null) => void;
};

View File

@@ -20,6 +20,7 @@ import React from 'react';
import { FeatureFlag, isFeatureEnabled, t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
getStandardizedControls,
sections,
sharedControls,
@@ -108,7 +109,7 @@ const controlPanel: ControlPanelConfig = {
label: t('Chart options'),
expanded: true,
controlSetRows: [
[<div className="section-header">{t('Layout')}</div>],
[<ControlSubSectionHeader>{t('Layout')}</ControlSubSectionHeader>],
[
{
name: 'layout',

View File

@@ -20,6 +20,7 @@ import React from 'react';
import { t } from '@superset-ui/core';
import {
ControlPanelConfig,
ControlSubSectionHeader,
D3_FORMAT_DOCS,
D3_NUMBER_FORMAT_DESCRIPTION_VALUES_TEXT,
D3_FORMAT_OPTIONS,
@@ -62,7 +63,7 @@ const config: ControlPanelConfig = {
expanded: true,
controlSetRows: [
['color_scheme'],
[<div className="section-header">{t('Labels')}</div>],
[<ControlSubSectionHeader>{t('Labels')}</ControlSubSectionHeader>],
[
{
name: 'show_labels',

View File

@@ -24,6 +24,7 @@ import {
getTimeFormatter,
NumberFormats,
ValueFormatter,
getValueFormatter,
} from '@superset-ui/core';
import { TreemapSeriesNodeItemOption } from 'echarts/types/src/chart/treemap/TreemapSeries';
import { EChartsCoreOption, TreemapSeriesOption } from 'echarts';
@@ -48,7 +49,6 @@ import { OpacityEnum } from '../constants';
import { getDefaultTooltip } from '../utils/tooltip';
import { Refs } from '../types';
import { treeBuilder, TreeNode } from '../utils/treeBuilder';
import { getValueFormatter } from '../utils/valueFormatter';
export function formatLabel({
params,

View File

@@ -22,6 +22,7 @@ import {
ControlPanelsContainerProps,
ControlSetItem,
ControlSetRow,
ControlSubSectionHeader,
DEFAULT_SORT_SERIES_DATA,
SORT_SERIES_CHOICES,
sharedControls,
@@ -96,7 +97,7 @@ const legendOrientationControl: ControlSetItem = {
};
export const legendSection: ControlSetRow[] = [
[<div className="section-header">{t('Legend')}</div>],
[<ControlSubSectionHeader>{t('Legend')}</ControlSubSectionHeader>],
[showLegendControl],
[legendTypeControl],
[legendOrientationControl],
@@ -210,7 +211,7 @@ const tooltipSortByMetricControl: ControlSetItem = {
};
export const richTooltipSection: ControlSetRow[] = [
[<div className="section-header">{t('Tooltip')}</div>],
[<ControlSubSectionHeader>{t('Tooltip')}</ControlSubSectionHeader>],
[richTooltipControl],
[tooltipSortByMetricControl],
[tooltipTimeFormatControl],
@@ -243,7 +244,7 @@ const sortSeriesAscending: ControlSetItem = {
};
export const seriesOrderSection: ControlSetRow[] = [
[<div className="section-header">{t('Series Order')}</div>],
[<ControlSubSectionHeader>{t('Series Order')}</ControlSubSectionHeader>],
[sortSeriesType],
[sortSeriesAscending],
];

View File

@@ -0,0 +1,54 @@
/**
* 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.
*/
import {
CurrencyFormatter,
ensureIsArray,
getNumberFormatter,
isSavedMetric,
NumberFormats,
QueryFormMetric,
ValueFormatter,
} from '@superset-ui/core';
export const getYAxisFormatter = (
metrics: QueryFormMetric[],
forcePercentFormatter: boolean,
customFormatters: Record<string, ValueFormatter>,
yAxisFormat: string = NumberFormats.SMART_NUMBER,
) => {
if (forcePercentFormatter) {
return getNumberFormatter(',.0%');
}
const metricsArray = ensureIsArray(metrics);
if (
metricsArray.every(isSavedMetric) &&
metricsArray
.map(metric => customFormatters[metric])
.every(
(formatter, _, formatters) =>
formatter instanceof CurrencyFormatter &&
(formatter as CurrencyFormatter)?.currency?.symbol ===
(formatters[0] as CurrencyFormatter)?.currency?.symbol,
)
) {
return customFormatters[metricsArray[0]];
}
return getNumberFormatter(yAxisFormat);
};

View File

@@ -518,7 +518,7 @@ export function getAxisType(dataType?: GenericDataType): AxisType {
export function getOverMaxHiddenFormatter(
config: {
max?: number;
formatter?: NumberFormatter;
formatter?: ValueFormatter;
} = {},
) {
const { max, formatter } = config;

View File

@@ -130,7 +130,6 @@ describe('extractAnnotationLabels', () => {
];
const results: AnnotationData = {
'My Interval': {
columns: ['col'],
records: [{ col: 1 }],
},
'My Line': [

Some files were not shown because too many files have changed in this diff Show More