Compare commits

...

112 Commits

Author SHA1 Message Date
Ville Brofeldt
c9a755f253 update changelog for rc2 cherries 2021-02-02 19:47:34 +02:00
Daniel Vaz Gaspar
4b8f54dfa1 feat(release): add github token to changelog script (#12872) 2021-02-02 18:52:05 +02:00
Daniel Vaz Gaspar
ae4449383c fix: allow users to reset their passwords (#12886) 2021-02-02 18:38:09 +02:00
ʈᵃᵢ
98edd6a039 fix(menu): always show settings dropdown (#12877) 2021-02-02 11:58:05 +02:00
Ville Brofeldt
fd84a6fed9 fix(release): add typing-extensions as dependency (#12648) 2021-02-02 10:34:34 +02:00
Ricardo Gândara Pinto
d6bd5b8ea2 fix: Presto column_type_mappings time and timestamp (#12861)
* Fix presto column_type_mappings time and timestamp

* Added unit tests
2021-02-02 10:24:05 +02:00
Karol Kostrzewa
3496b73f8b fix: bar chart data order (#12665)
* fix bar chart order

* fix test_explore_json_dist_bar_order

* fix quotes
2021-02-01 19:11:34 +02:00
bryanck
b90ac851ad add order by for bar charts (#12661)
Co-authored-by: Bryan Keller <bkeller@netflix.com>
2021-02-01 19:11:17 +02:00
Ville Brofeldt
39c7cc3128 update version and changelog 2021-01-30 11:26:45 +02:00
Daniel Vaz Gaspar
cb355f1000 docs: fix, keep old names from screenshot images to pypi releases (#12664)
* fix: keep old names from screenshot images to pypi releases

* change db logos to github raw content

* add gallery link
2021-01-30 11:22:19 +02:00
Ville Brofeldt
ad41e6d973 fix(explore): add current savedMetric to dropdown (#12835) 2021-01-30 10:01:14 +02:00
Nikola Gigić
8d44afe6ea chore(explore): Metric/Column and Filter popover unexpectedly closes on scroll (#12817)
* fix

* address filter popup
2021-01-29 16:59:47 +02:00
Kamil Gabryjelski
72b4c7ec8d fix(explore): don't allow selecting duplicated saved metric (#12657) 2021-01-29 16:59:24 +02:00
Elizabeth Thompson
51dc845e0a docs:add deprecations to updating.md (#12798) 2021-01-29 16:23:31 +02:00
Beto Dealmeida
0456563493 fix: samples should not be timeseries (#12796) 2021-01-29 16:22:59 +02:00
Yongjie Zhao
926fdce425 fix(explore): time picker can not be switched between now and specific (#12793)
* fix(explore): time picker can not be switched between now and specifc

* fix linting

* fix type

* fix UT
2021-01-29 16:22:25 +02:00
Ville Brofeldt
7b94db0bff fix(explore): pass partitionColumn when creating new adhoc filter (#12789)
* fix(explore): pass partitionColumn when creating new adhoc filter

* add default value to state

* remove duplicated code

* update translations
2021-01-29 16:21:52 +02:00
İbrahim Ercan
8e6c195718 fix: uuid generatiion for mysql fixed (#12787) 2021-01-29 16:21:13 +02:00
Nikola Gigić
d28b44a10c chore(explore): Reorder dataset search results based on property relevance (#12770) 2021-01-29 16:14:47 +02:00
Ayan Ginet
4c2303e638 fix(explore): Dataset icon remains constant when dragging. (#12761)
* fix: constant icon size

* clean up
2021-01-29 16:14:11 +02:00
İbrahim Ercan
3a962f81f6 fix: session error fixed related to thumbnails. (#12760)
* fix: session error fixed related to thumbnails.

* compute_and_cache moved to session scope

* lint fix done
2021-01-29 13:07:43 +02:00
Jesse Yang
99534f2cfd fix(explore): incorrect missing datasource condition (#12758) 2021-01-29 13:07:12 +02:00
Kamil Gabryjelski
2fc03f88a8 feat(explore): Make metric title respond to changes immediately (#12747)
* Make metric title respond to changes immediately

* Bug fix

* Change type to Metric

* Bug fix
2021-01-29 13:06:38 +02:00
Jesse Yang
c1c798aac6 feat(explore): allow opening charts with missing dataset (#12705) 2021-01-29 13:04:39 +02:00
Kasia Kucharczyk
3b1a84c34a fix: Added message flash when chart with missing dataset is accessed. (#12468) 2021-01-29 13:04:19 +02:00
Ville Brofeldt
bd83087c3e fix(release): pin pyjwt to version <2 (#12804) 2021-01-29 12:04:51 +02:00
Srini Kadamati
550098211a docs: update README.MD and FAQ Page for Superset 1.0 launch (#12499)
* fixed whitespace

* commit exclusion of package-lock from large file size precommit hook

* Converted all PNG files to JPG files to save space, stay under <500kb file size

* added link to release notes for 1.0
2021-01-29 11:57:03 +02:00
bryanck
fd6a75d5ba fix: missing key when verifying adhoc filters in merge_extra_filters (#12620)
Co-authored-by: Bryan Keller <bkeller@netflix.com>
2021-01-29 11:44:16 +02:00
Duy Nguyen Hoang
368691383b fix(explore): preserve metric column order in bar chart (#12417)
* fix: Preserve Column Order in Bar chart

* Update tests/viz_tests.py to use f-strings style

Co-authored-by: Duy Nguyen <duy.nguyenhoang@global-fashion-group.com>
2021-01-29 11:38:51 +02:00
Rob DiCiuccio
73523e2822 fix(async queries): Remove "force" param on cached data retrieval (#12103)
* Async queries: remove force cache param on data retrieval

* Assert equal query_object cache keys

* Decouple etag_cache from permission checks

* Fix query_context test

* Use marshmallow EnumField for validation
2021-01-29 11:37:29 +02:00
ʈᵃᵢ
60545c9b23 fix(alerts/reports): misconfigured useEffect hook breaks form validation in prod builds (#12779) 2021-01-27 11:56:39 +02:00
Jesse Yang
be51717c37 fix: missing select menu background (#12759) 2021-01-26 09:27:18 +02:00
Kamil Gabryjelski
51c7b896f4 Replace space with tabulator and enter as separators (#12730) 2021-01-25 17:02:29 +02:00
Michael S. Molina
4ee6317be9 Update translation files after capitalization PRs (1-9) (#12696) 2021-01-25 15:18:42 +02:00
Michael S. Molina
278e5b80a1 Fix translation files and update documentation (#12595) 2021-01-25 15:18:37 +02:00
Nikola Gigić
b07188e11d chore[explore]: Save date if Ok not clicked (#12731)
* Save date if Ok not clicked

* answering. comments
2021-01-25 15:10:27 +02:00
Jesse Yang
c277b8466c fix: remove whitespace at the bottom of select dropdown (#12699) 2021-01-25 15:09:35 +02:00
Michael S. Molina
ca0c07722e chore: add capitalization guidelines to CONTRIBUTING.md (#12685) 2021-01-25 15:08:16 +02:00
Jesse Yang
8d80262bed feat(explore): better search for dataset pane (#12675)
1. Upgrade match-sorter from 4.1.0 to 6.1.0
2. Add a debounce delay of 200 milliseconds to reduce excessive rendering (and searching)
3. Set keepDiacritics to true to improve performance
4. Display count of filtered results in "Showing x of xx", instead of the total results
5. Rank certified metrics to the top
2021-01-25 15:06:59 +02:00
Nikola Gigić
39e3b28292 feat(chart): Add expression, description and verbose name to search filter (#12549) 2021-01-25 15:06:55 +02:00
Geido
7e9a042ed1 fix(explore): Certified metric icons are various sizes (#12690) 2021-01-25 15:06:11 +02:00
Ville Brofeldt
0686a1c347 fix(multiline): return all chart data on initial request (#12660)
* fix(multiline): return chart data on data request

* bump package

* optimize chart retrieval and fix chart form_data
2021-01-25 15:04:15 +02:00
Ville Brofeldt
d8a7d83a06 chore(viz): bump superset-ui packages to 0.16.9 (#12632) 2021-01-25 15:03:19 +02:00
Duy Nguyen Hoang
e2ce27fe46 fix: chart disappears in standalone slice (#12606) 2021-01-25 15:01:47 +02:00
Geido
fe0b9f419b Switch button position (#12604) 2021-01-25 15:01:23 +02:00
Kasia Kucharczyk
3d770aeeb9 [12601] Hovered menu items on dashboard - brought back padding and added margin on top of chart (#12603) 2021-01-25 15:01:01 +02:00
Nikola Gigić
522f466b23 chore(explore): Save Resizable width to localStorage (#12593) 2021-01-25 14:49:31 +02:00
Jesse Yang
41505bb2d4 fix: explore page style fix, remove unnecessary scroll bars (#12649)
* fix: various style touch on Explore page

* More style fixes

* Force 100% height for sidebars

* Fix linting
2021-01-25 14:49:26 +02:00
Duy Nguyen Hoang
c7284fe242 fix: error while parsing invalid json form_data (#12586)
* Fix error while parsing invalid json form_data

* Refine error returned
2021-01-25 14:46:46 +02:00
Karol Kostrzewa
bc53be95a5 test: World bank examples (#12161)
* add world bank data fixture

* fix fixture cleanup, add fixture to dashboard_tests

* apply world bank fixtures, fix tests

* fix fixture typo, dashboard ids

* fix export dashboard metadata

* fix test_export_dashboard_command_key_order

* fix export dash tests, not add row when no orphans

* debug timeout

* fixes after merge

* fix lint

* run pre-commit

* comment test for debug

* fix save.test.js

Co-authored-by: Karol Kostrzewa <karol.kostrzewa@polidea.com>
2021-01-25 14:46:38 +02:00
Karol Kostrzewa
0acd2ccaaa test: birth names (#12226)
* add birth names fixture

* fix birth names related tests

* fix test_import_v0_dataset_cli_export columns order

* fix celery tests drop table

* fix mysql datetime type

* fix mysql typo in charts/api_tests

* refactor

* add licence

* fix use fixture for presto

* fix presto, hive query

* fix flaky metadata

* fix mysql bigint type

* fix run query

* fix hive datatype in metadata

* fix slice owner for cypress

* refactor num_boys num_girls

* fix is_dttm column

* debug logging

* fix query offset

* fix presto ds type in metadata

* fix presto ds type

* clean up debug logging
2021-01-25 14:46:34 +02:00
Kasia Kucharczyk
8b09414806 fix: dropdown indicator in tabs has proper width and position (#12584)
Closes #12481 , partially fix #12486
2021-01-25 14:40:03 +02:00
Yongjie Zhao
3ccb23c4a3 chore(explore): added tooltips to timepicker (#12580)
* wip

* wip

* fix lint

* fix: tooltip cosmetic

* wip

* add license
2021-01-25 14:36:27 +02:00
Radhika
0fc2bc5f02 corrected typo in connections index in the documentation (#12577) 2021-01-25 14:35:29 +02:00
Yongjie Zhao
a4d7e9c35d fix: return appropriate response when payload has error (#12575) 2021-01-25 14:35:03 +02:00
Rob DiCiuccio
10ca58f89a Add docs for GLOBAL_ASYNC_QUERIES (SIP-39) (#12573) 2021-01-25 14:32:27 +02:00
Evan Rusackas
33dd4e55f2 chore: bumping superset UI packages (0.16.7 + 0.16.8) (#12564)
* chore: package bump manifest (package.json)

* fresh package lock
2021-01-25 14:32:09 +02:00
Kasia Kucharczyk
630bb7264e fix: row component handler is visible (#12498) 2021-01-25 14:31:36 +02:00
Michael S. Molina
749db0b944 Apply capitalization guidelines - iteration 8 (#12343) (#12454) 2021-01-25 14:30:52 +02:00
Michael S. Molina
342f5eae71 Apply capitalization guidelines - iteration 7 (#12343) (#12453) 2021-01-25 14:30:08 +02:00
Michael S. Molina
6d22b42e41 Apply capitalization guidelines - iteration 6 (#12343) (#12452) 2021-01-25 14:29:49 +02:00
Michael S. Molina
46507ba58a Apply capitalization guidelines - iteration 5 (#12343) (#12451) 2021-01-25 14:29:16 +02:00
Kamil Gabryjelski
e4453a77f7 fix(explore): Disable saved metric name edit in Metric popover (#12582) 2021-01-25 14:29:13 +02:00
Yongjie Zhao
74f64b1794 refactor(explore): move MetricControl and FilterControl to sub-component (#12446)
* wip

* wip

* wip

* wip

* move spec

* wip

* wip

* remove unused file

* wip

* wip

* Update superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSqlTabContent_spec.jsx

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

* Update superset-frontend/spec/javascripts/explore/components/AdhocFilterOption_spec.jsx

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

* Update superset-frontend/spec/javascripts/explore/components/AdhocMetricEditPopoverTitle_spec.jsx

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>

Co-authored-by: Ville Brofeldt <33317356+villebro@users.noreply.github.com>
2021-01-25 14:28:07 +02:00
Michael S. Molina
f659d66fee Apply capitalization guidelines - iteration 4 (#12343) (#12450) 2021-01-25 14:24:03 +02:00
Agata Stawarz
5e4ce48ccf feat(native-filters): Show alert for unsaved filters after cancelling Filter Config Modal (#12554)
* Add Alert when native filter is canceled and not saved

* Improve styles and setting styles visible

* Improve displaying filter names

* Add tests for canceling native filter modal

* Fix linter errors

* Refactor Cancel Confirmation Alert
2021-01-25 14:23:59 +02:00
Michael S. Molina
200cc1a5c4 Apply capitalization guidelines - iteration 3 (#12343) (#12449) 2021-01-25 14:22:15 +02:00
Geido
2641a65feb fix(explore): Scroll only table in Change Dataset and Edit Dataset Modals (#12598) 2021-01-25 14:20:02 +02:00
Hugh A. Miles II
3d8185383d fix: styling for change dataset confirmation (#12471) 2021-01-25 14:19:40 +02:00
Jesse Yang
2cdb92d05c fix: faster search for Change Dataset modal (#12669) 2021-01-25 14:18:42 +02:00
Michael S. Molina
e6b916c06f Apply capitalization guidelines - iteration 2 (#12343) (#12448) 2021-01-25 14:15:45 +02:00
Michael S. Molina
968ab8d22f chore: apply capitalization guidelines - iteration 1 (#12447)
Apply capitalization guidelines defined in #12343 

Use sentence casing for most places.
2021-01-25 14:15:26 +02:00
Beto Dealmeida
bc1a2a2258 fix: incorrect cursor position Firefox (#12423)
* fix: incorrect cursor position Firefox

* Use different font

* Fix lint

* Use Lucida Console
2021-01-25 12:59:11 +02:00
Ville Brofeldt
5719fefdd4 add rc4 changelog entries 2021-01-16 08:26:11 +02:00
Shuyao Bi
2187d1a409 Fix 500 error when loading dashboards with slice having deleted dataset (#12535) 2021-01-16 08:12:15 +02:00
Beto Dealmeida
c38a5fc1d8 fix: case expression should not have double quotes (#12562) 2021-01-16 08:04:13 +02:00
Beto Dealmeida
147f750829 fix: height on grid results (#12558) 2021-01-16 08:03:54 +02:00
Jesse Yang
5786513cbb fix(viz): missing groupby and broken adhoc metrics for boxplot (#12556) 2021-01-16 08:03:30 +02:00
Hugh A. Miles II
ae6e54025b fix: Add MAX_SQL_ROW value to LIMIT_DROPDOWN (#12555) 2021-01-16 08:03:12 +02:00
Geido
7e0eedccf8 fix: Popover closes on change of dropdowns values (#12410) 2021-01-16 08:02:15 +02:00
Ville Brofeldt
c4e6baef3b add rc3 changelog entries 2021-01-15 17:33:28 +02:00
Amit Miran
b652995b56 chore: rename docker image in build_docker_image.sh, docker-compose.yml and helm values.yaml (#12337) 2021-01-15 17:27:18 +02:00
Ahmed Adel
739ab14136 feat(db-engine): Add support for Apache Solr (#12403)
* [db engine] Add support for Apache Solr

* Fixing typo
2021-01-15 15:12:29 +02:00
Michael S. Molina
a1f53fb645 Fix list filters vertical alignment (#12497) 2021-01-15 13:47:07 +02:00
Kamil Gabryjelski
52b581f922 fix: Select options overflowing Save chart modal on Explore view (#12522)
* Fix select options overflowing modal

* fix unit test

Co-authored-by: Ville Brofeldt <ville.v.brofeldt@gmail.com>
2021-01-15 13:32:12 +02:00
Xiang Fu
5f2de1df71 Fixing Pinot queries for time granularities: WEEKS/MONTHS/QUARTERS/YEARS (#12536) 2021-01-15 11:32:30 +02:00
Jesse Yang
603ab75a62 fix(explore): Add Time section back to FilterBox (#12537) 2021-01-15 11:04:18 +02:00
Jesse Yang
027e2075f5 fix(explore): time table control panel (#12532) 2021-01-15 11:04:05 +02:00
Beto Dealmeida
5791f23e73 fix: lowercase all columns in examples (#12530) 2021-01-15 11:03:38 +02:00
Daniel Vaz Gaspar
cf69f29144 ci: remove refs/tags from docker tags on a release (#12518)
* ci: remove refs/tags from docker tags on a release

* wider head
2021-01-15 10:45:15 +02:00
Daniel Vaz Gaspar
72977fc71f fix: impose dataset ownership check on old API (#12491)
* fix: impose dataset ownership check on old API

* update UPDATING.md

* partially protect the old MVC also

* prevent metric and column add and update
2021-01-15 10:44:51 +02:00
Ville Brofeldt
46fd85a141 update changelog with rc2 entries 2021-01-14 09:50:32 +02:00
Beto Dealmeida
78e4b02305 fix: import ZIP files that have been modified (#12425)
* fix: import ZIP files that have been modified

* Add unit test
2021-01-13 20:39:50 +02:00
Beto Dealmeida
696c9773bd fix (SQL Lab): disappearing results on tab switch (#12472)
* fix (SQL Lab): disappearing results on tab switch

* Remove state

* Fix test
2021-01-13 19:10:31 +02:00
Yongjie Zhao
4f35234f3e fix(timepicker): make pyparsing thread safe (#12489)
* fix: make pyparsing thread safe

* remove parenthesis for decorator
2021-01-13 19:06:08 +02:00
Jesse Yang
b213c1cb1f fix(dashboard): use datasource id from slice metadata (#12483) 2021-01-13 19:05:50 +02:00
Grace Guo
b3e7ef2da6 fix: do not show vertical scrollbar for charts in dashboard (#12478)
* fix: do not show vertical scrollbar for charts in dashboard

* Proper fix for #11419

Co-authored-by: Jesse Yang <jesse.yang@airbnb.com>
2021-01-13 19:05:31 +02:00
Evan Rusackas
ea54e0a7cf chore: bump superset-ui deckgl plugin (#12466) 2021-01-13 19:05:12 +02:00
Phillip Kelley-Dotson
3a553c9ef2 bump superset-ui packages for rolling window change (#12426) 2021-01-13 19:04:51 +02:00
Kasia Kucharczyk
34da995dd9 fix(dashboard): artefacts shown while drag and dropping deck.gl charts (#12418)
* [12181] Fix artifacts while drag and dropping deck.gl charts.

* Run prettier
2021-01-13 19:04:36 +02:00
Kamil Gabryjelski
288f6bb88c feat: Resizable dataset and controls panels on Explore view (#12411)
* Implement resizable panels on explore view

* Optimize chart rendering while resizing

* Make dataset column narrower

Co-authored-by: Evan Rusackas <evan@preset.io>
2021-01-13 19:03:00 +02:00
Michael S. Molina
507302d639 Fixes control panel fields styling (#12236) (#12326) 2021-01-13 19:02:55 +02:00
Yongjie Zhao
35c15b8b3a refactor: from superset.utils.core break down date_parser (#12408) 2021-01-13 19:00:54 +02:00
Ville Brofeldt
90915db60d fix(native-filters): incorrect queriesData state (#12409) 2021-01-12 14:34:01 +02:00
Agata Stawarz
d940cae8d5 fix: Refresh Interval Modal dropdown (#12406) 2021-01-12 14:33:18 +02:00
Junlin Chen
a83653735f chore: change Datasource to Dataset in Explore ui (#12402)
* chore(explore):change dataset to datasource in ui

* modal

* Add space

* Changing it back🤦🏾‍♀️

* Chargeback
2021-01-12 14:32:58 +02:00
Yongjie Zhao
e3b65f2519 feat(explore): add tooltip to timepicker label (#12401) 2021-01-12 14:32:36 +02:00
Jesse Yang
f2afee9832 chore: upgrade eslint, babel, and prettier (#12393) 2021-01-12 14:32:14 +02:00
Junlin Chen
bd6525fdf5 chore: Fix typo “Rest” to “Reset” (#12392) 2021-01-12 14:31:57 +02:00
Geido
dc203c174c chore: Show datasets when search input is empty (#12391) 2021-01-12 14:31:26 +02:00
Yongjie Zhao
6d59351462 fix(explore): long metric name display (#12387)
* fix(explore): long metric name display

* add tooltip to control
2021-01-12 14:30:57 +02:00
Daniel Gaspar
c837c1c739 release: bump to 1.0.0 and CHANGELOG 2021-01-09 23:37:45 +02:00
411 changed files with 119570 additions and 55848 deletions

View File

@@ -18,17 +18,17 @@
set -eo pipefail
SHA=$(git rev-parse HEAD)
REPO_NAME="apache/incubator-superset"
REPO_NAME="apache/superset"
if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
REFSPEC=$(echo "${GITHUB_HEAD_REF}" | sed 's/[^a-zA-Z0-9]/-/' | head -c 20)
REFSPEC=$(echo "${GITHUB_HEAD_REF}" | sed 's/[^a-zA-Z0-9]/-/' | head -c 40)
PR_NUM=$(echo "${GITHUB_REF}" | sed 's:refs/pull/::' | sed 's:/merge::')
LATEST_TAG="pr-${PR_NUM}"
elif [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
REFSPEC="${GITHUB_REF}"
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/tags/::' | head -c 40)
LATEST_TAG="${REFSPEC}"
else
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/' | head -c 20)
REFSPEC=$(echo "${GITHUB_REF}" | sed 's:refs/heads/::' | sed 's/[^a-zA-Z0-9]/-/' | head -c 40)
LATEST_TAG="${REFSPEC}"
fi

View File

@@ -18,6 +18,753 @@ under the License.
-->
## Change Log
### 1.0.1 (Tue Feb 2 09:24:40 2021 +0000)
- [#12872](https://github.com/apache/superset/pull/12872) feat(release): add github token to changelog script (#12872) (@dpgaspar)
- [#12886](https://github.com/apache/superset/pull/12886) fix: allow users to reset their passwords (#12886) (@dpgaspar)
- [#12877](https://github.com/apache/superset/pull/12877) fix(menu): always show settings dropdown (#12877) (@nytai)
- [#12648](https://github.com/apache/superset/pull/12648) fix(release): add typing-extensions as dependency (#12648) (@villebro)
- [#12861](https://github.com/apache/superset/pull/12861) fix: Presto column_type_mappings time and timestamp (#12861) (@rmgpinto)
- [#12665](https://github.com/apache/superset/pull/12665) fix: bar chart data order (#12665) (@kstrz)
- [#12661](https://github.com/apache/superset/pull/12661) add order by for bar charts (#12661) (@bryanck)
- [#12664](https://github.com/apache/superset/pull/12664) docs: fix, keep old names from screenshot images to pypi releases (#12664) (@dpgaspar)
- [#12835](https://github.com/apache/superset/pull/12835) fix(explore): add current savedMetric to dropdown (#12835) (@villebro)
- [#12817](https://github.com/apache/superset/pull/12817) chore(explore): Metric/Column and Filter popover unexpectedly closes on scroll (#12817) (@nikolagigic)
- [#12657](https://github.com/apache/superset/pull/12657) fix(explore): don't allow selecting duplicated saved metric (#12657) (@kgabryje)
- [#12798](https://github.com/apache/superset/pull/12798) docs:add deprecations to updating.md (#12798) (@eschutho)
- [#12796](https://github.com/apache/superset/pull/12796) fix: samples should not be timeseries (#12796) (@betodealmeida)
- [#12793](https://github.com/apache/superset/pull/12793) fix(explore): time picker can not be switched between now and specific (#12793) (@zhaoyongjie)
- [#12789](https://github.com/apache/superset/pull/12789) fix(explore): pass partitionColumn when creating new adhoc filter (#12789) (@villebro)
- [#12787](https://github.com/apache/superset/pull/12787) fix: uuid generatiion for mysql fixed (#12787) (@iercan)
- [#12770](https://github.com/apache/superset/pull/12770) chore(explore): Reorder dataset search results based on property relevance (#12770) (@nikolagigic)
- [#12761](https://github.com/apache/superset/pull/12761) fix(explore): Dataset icon remains constant when dragging. (#12761) (@ayanginet)
- [#12760](https://github.com/apache/superset/pull/12760) fix: session error fixed related to thumbnails. (#12760) (@iercan)
- [#12758](https://github.com/apache/superset/pull/12758) fix(explore): incorrect missing datasource condition (#12758) (@ktmud)
- [#12747](https://github.com/apache/superset/pull/12747) feat(explore): Make metric title respond to changes immediately (#12747) (@kgabryje)
- [#12705](https://github.com/apache/superset/pull/12705) feat(explore): allow opening charts with missing dataset (#12705) (@ktmud)
- [#12468](https://github.com/apache/superset/pull/12468) fix: Added message flash when chart with missing dataset is accessed. (#12468) (@kkucharc)
- [#12804](https://github.com/apache/superset/pull/12804) fix(release): pin pyjwt to version <2 (#12804) (@villebro)
- [#12499](https://github.com/apache/superset/pull/12499) docs: update README.MD and FAQ Page for Superset 1.0 launch (#12499) (@srinify)
- [#12620](https://github.com/apache/superset/pull/12620) fix: missing key when verifying adhoc filters in merge_extra_filters (#12620) (@bryanck)
- [#12417](https://github.com/apache/superset/pull/12417) fix(explore): preserve metric column order in bar chart (#12417) (@duynguyenhoang)
- [#12103](https://github.com/apache/superset/pull/12103) fix(async queries): Remove "force" param on cached data retrieval (#12103) (@robdiciuccio)
- [#12779](https://github.com/apache/superset/pull/12779) fix(alerts/reports): misconfigured useEffect hook breaks form validation in prod builds (#12779) (@nytai)
- [#12759](https://github.com/apache/superset/pull/12759) fix: missing select menu background (#12759) (@ktmud)
- [#12730](https://github.com/apache/superset/pull/12730) Replace space with tabulator and enter as separators (#12730) (@kgabryje)
- [#12696](https://github.com/apache/superset/pull/12696) Update translation files after capitalization PRs (1-9) (#12696) (@michael-s-molina)
- [#12595](https://github.com/apache/superset/pull/12595) Fix translation files and update documentation (#12595) (@michael-s-molina)
- [#12731](https://github.com/apache/superset/pull/12731) chore[explore]: Save date if Ok not clicked (#12731) (@nikolagigic)
- [#12699](https://github.com/apache/superset/pull/12699) fix: remove whitespace at the bottom of select dropdown (#12699) (@ktmud)
- [#12685](https://github.com/apache/superset/pull/12685) chore: add capitalization guidelines to CONTRIBUTING.md (#12685) (@michael-s-molina)
- [#12675](https://github.com/apache/superset/pull/12675) feat(explore): better search for dataset pane (#12675) (@ktmud)
- [#12549](https://github.com/apache/superset/pull/12549) feat(chart): Add expression, description and verbose name to search filter (#12549) (@nikolagigic)
- [#12690](https://github.com/apache/superset/pull/12690) fix(explore): Certified metric icons are various sizes (#12690) (@geido)
- [#12660](https://github.com/apache/superset/pull/12660) fix(multiline): return all chart data on initial request (#12660) (@villebro)
- [#12632](https://github.com/apache/superset/pull/12632) chore(viz): bump superset-ui packages to 0.16.9 (#12632) (@villebro)
- [#12606](https://github.com/apache/superset/pull/12606) fix: chart disappears in standalone slice (#12606) (@duynguyenhoang)
- [#12604](https://github.com/apache/superset/pull/12604) Switch button position (#12604) (@geido)
- [#12603](https://github.com/apache/superset/pull/12603) [12601] Hovered menu items on dashboard - brought back padding and added margin on top of chart (#12603) (@kkucharc)
- [#12593](https://github.com/apache/superset/pull/12593) chore(explore): Save Resizable width to localStorage (#12593) (@nikolagigic)
- [#12649](https://github.com/apache/superset/pull/12649) fix: explore page style fix, remove unnecessary scroll bars (#12649) (@ktmud)
- [#12586](https://github.com/apache/superset/pull/12586) fix: error while parsing invalid json form_data (#12586) (@duynguyenhoang)
- [#12161](https://github.com/apache/superset/pull/12161) test: World bank examples (#12161) (@kstrz)
- [#12226](https://github.com/apache/superset/pull/12226) test: birth names (#12226) (@kstrz)
- [#12584](https://github.com/apache/superset/pull/12584) fix: dropdown indicator in tabs has proper width and position (#12584) (@kkucharc)
- [#12580](https://github.com/apache/superset/pull/12580) chore(explore): added tooltips to timepicker (#12580) (@zhaoyongjie)
- [#12577](https://github.com/apache/superset/pull/12577) corrected typo in connections index in the documentation (#12577) (@96RadhikaJadhav)
- [#12575](https://github.com/apache/superset/pull/12575) fix: return appropriate response when payload has error (#12575) (@zhaoyongjie)
- [#12573](https://github.com/apache/superset/pull/12573) Add docs for GLOBAL_ASYNC_QUERIES (SIP-39) (#12573) (@robdiciuccio)
- [#12564](https://github.com/apache/superset/pull/12564) chore: bumping superset UI packages (0.16.7 + 0.16.8) (#12564) (@rusackas)
- [#12498](https://github.com/apache/superset/pull/12498) fix: row component handler is visible (#12498) (@kkucharc)
- [#12454](https://github.com/apache/superset/pull/12454) Apply capitalization guidelines - iteration 8 (#12343) (#12454) (@michael-s-molina)
- [#12453](https://github.com/apache/superset/pull/12453) Apply capitalization guidelines - iteration 7 (#12343) (#12453) (@michael-s-molina)
- [#12452](https://github.com/apache/superset/pull/12452) Apply capitalization guidelines - iteration 6 (#12343) (#12452) (@michael-s-molina)
- [#12451](https://github.com/apache/superset/pull/12451) Apply capitalization guidelines - iteration 5 (#12343) (#12451) (@michael-s-molina)
- [#12582](https://github.com/apache/superset/pull/12582) fix(explore): Disable saved metric name edit in Metric popover (#12582) (@kgabryje)
- [#12446](https://github.com/apache/superset/pull/12446) refactor(explore): move MetricControl and FilterControl to sub-component (#12446) (@zhaoyongjie)
- [#12450](https://github.com/apache/superset/pull/12450) Apply capitalization guidelines - iteration 4 (#12343) (#12450) (@michael-s-molina)
- [#12554](https://github.com/apache/superset/pull/12554) feat(native-filters): Show alert for unsaved filters after cancelling Filter Config Modal (#12554) (@agatapst)
- [#12449](https://github.com/apache/superset/pull/12449) Apply capitalization guidelines - iteration 3 (#12343) (#12449) (@michael-s-molina)
- [#12598](https://github.com/apache/superset/pull/12598) fix(explore): Scroll only table in Change Dataset and Edit Dataset Modals (#12598) (@geido)
- [#12471](https://github.com/apache/superset/pull/12471) fix: styling for change dataset confirmation (#12471) (@hughhhh)
- [#12669](https://github.com/apache/superset/pull/12669) fix: faster search for Change Dataset modal (#12669) (@ktmud)
- [#12448](https://github.com/apache/superset/pull/12448) Apply capitalization guidelines - iteration 2 (#12343) (#12448) (@michael-s-molina)
- [#12447](https://github.com/apache/superset/pull/12447) chore: apply capitalization guidelines - iteration 1 (#12447) (@michael-s-molina)
- [#12423](https://github.com/apache/superset/pull/12423) fix: incorrect cursor position Firefox (#12423) (@betodealmeida)
### 1.0.0 (Fri Jan 15 15:33:21 2021 -0800)
- [#12535](https://github.com/apache/superset/pull/12535) Fix 500 error when loading dashboards with slice having deleted dataset (#12535) (@bechob)
- [#12562](https://github.com/apache/superset/pull/12562) fix: case expression should not have double quotes (#12562) (@betodealmeida)
- [#12558](https://github.com/apache/superset/pull/12558) fix: height on grid results (#12558) (@betodealmeida)
- [#12556](https://github.com/apache/superset/pull/12556) fix(viz): missing groupby and broken adhoc metrics for boxplot (#12556) (@ktmud)
- [#12555](https://github.com/apache/superset/pull/12555) fix: Add MAX_SQL_ROW value to LIMIT_DROPDOWN (#12555) (@hughhhh)
- [#1410](https://github.com/apache/superset/pull/12410) fix: Popover closes on change of dropdowns values (#12410) (@geido)
- [#12337](https://github.com/apache/superset/pull/12337) chore: rename docker image from incubator-superset to superset (#1337) (@amitmiran137)
- [#12403](https://github.com/apache/superset/pull/12403) feat(db-engine): Add support for Apache Solr (#12403) (@aadel)
- [#12497](https://github.com/apache/superset/pull/12497) Fix list filters vertical alignment (#12497) (@michael-s-molina)
- [#12522](https://github.com/apache/superset/pull/12522) fix: Select options overflowing Save chart modal on Explore view (#12522) (@kgabryje)
- [#12536](https://github.com/apache/superset/pull/12536) Fixing Pinot queries for time granularities: WEEKS/MONTHS/QUARTERS/YEARS (#12536) (@fx19880617)
- [#12537](https://github.com/apache/superset/pull/12537) fix(explore): Add Time section back to FilterBox (#12537) (@ktmud)
- [#12532](https://github.com/apache/superset/pull/12532) fix(explore): time table control panel (#12532) (@ktmud)
- [#12530](https://github.com/apache/superset/pull/12530) fix: lowercase all columns in examples (#12530) (@betodealmeida)
- [#12518](https://github.com/apache/superset/pull/12518) ci: remove refs/tags from docker tags on a release (#12518) (@dpgaspar)
- [#12491](https://github.com/apache/superset/pull/12491) fix: impose dataset ownership check on old API (#12491) (@dpgaspar)
- [#12425](https://github.com/apache/superset/pull/12425) fix: import ZIP files that have been modified (#12425) (@betodealmeida)
- [#12472](https://github.com/apache/superset/pull/12472) fix (SQL Lab): disappearing results on tab switch (#12472) (@betodealmeida)
- [#12489](https://github.com/apache/superset/pull/12489) fix(timepicker): make pyparsing thread safe (#12489) (@zhaoyongjie)
- [#12483](https://github.com/apache/superset/pull/12483) fix(dashboard): use datasource id from slice metadata (#12483) (@ktmud)
- [#12478](https://github.com/apache/superset/pull/12478) fix: do not show vertical scrollbar for charts in dashboard (#12478) (@graceguo-supercat)
- [#12466](https://github.com/apache/superset/pull/12466) chore: bump superset-ui deckgl plugin (#12466) (@rusackas)
- [#12426](https://github.com/apache/superset/pull/12426) bump superset-ui packages for rolling window change (#12426) (@pkdotson)
- [#12418](https://github.com/apache/superset/pull/12418) fix(dashboard): artefacts shown while drag and dropping deck.gl charts (#12418) (@kkucharc)
- [#12411](https://github.com/apache/superset/pull/12411) feat: Resizable dataset and controls panels on Explore view (#12411) (@kgabryje)
- [#12326](https://github.com/apache/superset/pull/12326) Fixes control panel fields styling (#12236) (#12326) (@michael-s-molina)
- [#12408](https://github.com/apache/superset/pull/12408) refactor: from superset.utils.core break down date_parser (#12408) (@zhaoyongjie)
- [#12409](https://github.com/apache/superset/pull/12409) fix(native-filters): incorrect queriesData state (#12409) (@villebro)
- [#12406](https://github.com/apache/superset/pull/12406) fix: Refresh Interval Modal dropdown (#12406) (@agatapst)
- [#12402](https://github.com/apache/superset/pull/12402) chore: change Datasource to Dataset in Explore ui (#12402) (@junlincc)
- [#12401](https://github.com/apache/superset/pull/12401) feat(explore): add tooltip to timepicker label (#12401) (@zhaoyongjie)
- [#12393](https://github.com/apache/superset/pull/12393) chore: upgrade eslint, babel, and prettier (#12393) (@ktmud)
- [#12392](https://github.com/apache/superset/pull/12392) chore: Fix typo “Rest” to “Reset” (#12392) (@junlincc)
- [#12391](https://github.com/apache/superset/pull/12391) chore: Show datasets when search input is empty (#12391) (@geido)
- [#12387](https://github.com/apache/superset/pull/12387) fix(explore): long metric name display (#12387) (@zhaoyongjie)
- [#12359](https://github.com/apache/superset/pull/12359) fix: explore replace wrong standalone slice url (#12359) (@duynguyenhoang)
- [#12390](https://github.com/apache/superset/pull/12390) Closes #12389 (#12390) (@geido)
- [#12383](https://github.com/apache/superset/pull/12383) fix: Data tables styling issues on Explore view (#12383) (@kgabryje)
- [#12385](https://github.com/apache/superset/pull/12385) Fix new metric popover showing previous popover's title (#12385) (@kgabryje)
- [#12381](https://github.com/apache/superset/pull/12381) fix(explore): adhoc metric label and control value not consistent (#12381) (@zhaoyongjie)
- [#12382](https://github.com/apache/superset/pull/12382) fix(explore): clear custom label if removed (#12382) (@villebro)
- [#12377](https://github.com/apache/superset/pull/12377) Fix filter popover under data table (#12377) (@kgabryje)
- [#12378](https://github.com/apache/superset/pull/12378) Update samples table when datasource changes (#12378) (@kgabryje)
- [#12368](https://github.com/apache/superset/pull/12368) fix: datasets populating after user creation (#12368) (@hughhhh)
- [#12365](https://github.com/apache/superset/pull/12365) chore: make datasource search input sticky (#12365) (@pkdotson)
- [#12362](https://github.com/apache/superset/pull/12362) fix: Fix chart resizing when using split view (#12362) (@kgabryje)
- [#12096](https://github.com/apache/superset/pull/12096) ci(docker): fix release published event checkout tag-sha (#12096) (@dpgaspar)
- [#12082](https://github.com/apache/superset/pull/12082) test: rename column names for birth_names dataset (#12082) (@ktmud)
- [#12351](https://github.com/apache/superset/pull/12351) fix(load examples): load examples creating unnecessary main database (#12351) (@dpgaspar)
- [#12361](https://github.com/apache/superset/pull/12361) Fix running query on every change in chart controls (#12361) (@kgabryje)
- [#12357](https://github.com/apache/superset/pull/12357) fix: Fix dataset condition to allow query for datasets in sqllab (#12357) (@hughhhh)
- [#12257](https://github.com/apache/superset/pull/12257) perf: Optimize performance of Results and Samples tables on Explore (#12257) (@kgabryje)
- [#12353](https://github.com/apache/superset/pull/12353) Fix CSS injection order (#12265) (#12353) (@michael-s-molina)
- [#12352](https://github.com/apache/superset/pull/12352) chore(dashboard): Add ErrorBoudary for AdhocFilter components (#12352) (@nikolagigic)
- [#12350](https://github.com/apache/superset/pull/12350) fix(explore): improve filter translation (#12350) (@villebro)
- [#12306](https://github.com/apache/superset/pull/12306) fix: Set width to pseudoelement to wrap filter box (#12306) (@maloun96)
- [#12318](https://github.com/apache/superset/pull/12318) fix: south pane scrolling issues (#12318) (@eschutho)
- [#12349](https://github.com/apache/superset/pull/12349) chore: bumping nvd3 plugin (and thus, nvd3-fork) (#12349) (@rusackas)
- [#12307](https://github.com/apache/superset/pull/12307) refactor: test connection raises only command exceptions (#12307) (@dpgaspar)
- [#12154](https://github.com/apache/superset/pull/12154) feat: move filters from superset-ui to incubator (#12154) (@simchaNielsen)
- [#12347](https://github.com/apache/superset/pull/12347) window.location > history.push (#12347) (@rusackas)
- [#12315](https://github.com/apache/superset/pull/12315) feat: provide support for an overridable template to be included in every view (#12315) (@nytai)
- [#12344](https://github.com/apache/superset/pull/12344) remove datataset from title (#12344) (@pkdotson)
- [#12338](https://github.com/apache/superset/pull/12338) feat: new COVID vaccination dashboard (#12338) (@betodealmeida)
- [#12335](https://github.com/apache/superset/pull/12335) chore: change order of tab on explore data panel (#12335) (@lilykuang)
- [#12320](https://github.com/apache/superset/pull/12320) fix: append orphan charts (#12320) (@betodealmeida)
- [#12067](https://github.com/apache/superset/pull/12067) feat: SQL Toolbar (#12067) (@hughhhh)
- [#12334](https://github.com/apache/superset/pull/12334) Reduce z-index (#12334) (@geido)
- [#12330](https://github.com/apache/superset/pull/12330) Fix menuPortal dropdown z-index (#12330) (@geido)
- [#12311](https://github.com/apache/superset/pull/12311) fix(alert/report): add/edit modal can't be saved (#12311) (@lilykuang)
- [#12327](https://github.com/apache/superset/pull/12327) Fix select overlap by aggregate button (#12312) (#12327) (@michael-s-molina)
- [#12090](https://github.com/apache/superset/pull/12090) build: try to speed up Github workflows (#12090) (@ktmud)
- [#12313](https://github.com/apache/superset/pull/12313) build: improve webpack configs for npm link (#12313) (@ktmud)
- [#12210](https://github.com/apache/superset/pull/12210) feat: Custom color schemes support (#12210) (@amitmiran137)
- [#12282](https://github.com/apache/superset/pull/12282) chore: improve styles for collapsed Native Filter sidebar (#12282) (@agatapst)
- [#12305](https://github.com/apache/superset/pull/12305) fix(explore): metrics caret not expanding in datasource panel (#12305) (@geido)
- [#12319](https://github.com/apache/superset/pull/12319) fix: update search in datasource panel to use matchSorter (#12319) (@pkdotson)
- [#12019](https://github.com/apache/superset/pull/12019) build(deps): bump ini in /superset-frontend/cypress-base (#12019) (@dependabot[bot])
- [#12284](https://github.com/apache/superset/pull/12284) docs: remove (some) references to incubating/incubation (#12284) (@nytai)
- [#12022](https://github.com/apache/superset/pull/12022) docs: Added release notes and associated media for 0.38 (#12022) (@garden-of-delete)
- [#12021](https://github.com/apache/superset/pull/12021) build(deps): bump ini from 1.3.5 to 1.3.8 in /superset-frontend (#12021) (@dependabot[bot])
- [#12308](https://github.com/apache/superset/pull/12308) fix(explore): refine previous calendar range (#12308) (@zhaoyongjie)
- [#12261](https://github.com/apache/superset/pull/12261) add related field filter to queries/user (#12261) (@riahk)
- [#12300](https://github.com/apache/superset/pull/12300) fix(explore): timepicker show human readable string in pill (#12300) (@zhaoyongjie)
- [#12278](https://github.com/apache/superset/pull/12278) fix(explore): bugs in Custom SQL editor in filter popover (#12278) (@kgabryje)
- [#12289](https://github.com/apache/superset/pull/12289) chore: remove harmless incubator refs (#12289) (@amitmiran137)
- [#12274](https://github.com/apache/superset/pull/12274) fix(database): OpenAPI spec for test_connection (#12274) (@dpgaspar)
- [#12277](https://github.com/apache/superset/pull/12277) fix(reports): don't log user errors and state change has errors (#12277) (@dpgaspar)
- [#12291](https://github.com/apache/superset/pull/12291) build: ignore github actions from dependabot (#12291) (@ktmud)
- [#12295](https://github.com/apache/superset/pull/12295) fix null check for condition threshold to allow 0 values (#12295) (@riahk)
- [#12280](https://github.com/apache/superset/pull/12280) Bump superset-ui deps (#12280) (@kgabryje)
- [#12221](https://github.com/apache/superset/pull/12221) fix: Fixed width for dataset panel (#12221) (@kgabryje)
- [#12239](https://github.com/apache/superset/pull/12239) chore(home): add ErrorBoundary to Charts section (#12239) (@maxamante)
- [#12292](https://github.com/apache/superset/pull/12292) fix: load example data into correct DB (#12292) (@betodealmeida)
- [#12297](https://github.com/apache/superset/pull/12297) Cypress: ignore unrelated ResizeObserver client errors (#12297) (@robdiciuccio)
- [#12253](https://github.com/apache/superset/pull/12253) test: fix flaky Python unit tests (#12253) (@kstrz)
- [#12213](https://github.com/apache/superset/pull/12213) Fix tests errors and warnings - iteration 1 (#12212) (#12213) (@michael-s-molina)
- [#12258](https://github.com/apache/superset/pull/12258) fix: Issue #12004 timegrain not visibile (#12258) (@geido)
- [#12250](https://github.com/apache/superset/pull/12250) fix: Show Data panel on resize (#12250) (@maloun96)
- [#12153](https://github.com/apache/superset/pull/12153) fix: Add visibility to box for viewing menu items (#12153) (@maloun96)
- [#12290](https://github.com/apache/superset/pull/12290) build: remove parallelization for E2E tests (#12290) (@ktmud)
- [#12288](https://github.com/apache/superset/pull/12288) fix: Add min-height for loading indicator to show up (#12288) (@geido)
- [#12192](https://github.com/apache/superset/pull/12192) build(deps-dev): bump storybook-addon-paddings in /superset-frontend (#12192) (@dependabot[bot])
- [#12205](https://github.com/apache/superset/pull/12205) fix: SaveDatasetModal save state on back button (#12205) (@hughhhh)
- [#12251](https://github.com/apache/superset/pull/12251) docs: fix build status badge to github actions (#12251) (@dpgaspar)
- [#12215](https://github.com/apache/superset/pull/12215) fix : Style caret for profile page (#12215) (@maloun96)
- [#12211](https://github.com/apache/superset/pull/12211) Set datasource panel open by default (#12211) (@kgabryje)
- [#12242](https://github.com/apache/superset/pull/12242) fix(explore): bump superset-ui to 0.16.3 and fix DeckGL bug (#12242) (@villebro)
- [#12208](https://github.com/apache/superset/pull/12208) feat(explore): Time picker enhancement follow up (#12208) (@zhaoyongjie)
- [#11960](https://github.com/apache/superset/pull/11960) fix: Altered button crashing and title not updating on Explore view (#11960) (@kgabryje)
- [#12217](https://github.com/apache/superset/pull/12217) Remove uppercase for tab names (#12217) (@maloun96)
- [#12248](https://github.com/apache/superset/pull/12248) build(deps): bump node-fetch in /.github/actions/file-changes-action (#12248) (@dependabot[bot])
- [#12246](https://github.com/apache/superset/pull/12246) build(deps): bump @actions/core in /.github/actions/file-changes-action (#12246) (@dependabot[bot])
- [#12050](https://github.com/apache/superset/pull/12050) docs(api): Script to generate API docs (openapi.json) (#12050) (@robdiciuccio)
- [#12165](https://github.com/apache/superset/pull/12165) fix: Change Datasource styling fixes (#12165) (@hughhhh)
- [#12188](https://github.com/apache/superset/pull/12188) fix: CTAS on multiple statements (#12188) (@betodealmeida)
- [#12183](https://github.com/apache/superset/pull/12183) feat(report): add/edit modal improvements (#12183) (@lilykuang)
- [#12241](https://github.com/apache/superset/pull/12241) build: inline external Github Actions to unblock CI (#12241) (@ktmud)
- [#11999](https://github.com/apache/superset/pull/11999) Refetch samples only when filters change (#11999) (@kgabryje)
- [#12184](https://github.com/apache/superset/pull/12184) feat: Implement drag & drop for metrics and filters labels (#12184) (@kgabryje)
- [#12196](https://github.com/apache/superset/pull/12196) fix(reports): make name unique between alerts and reports (#12196) (@dpgaspar)
- [#12193](https://github.com/apache/superset/pull/12193) fix: align submenu items (#12193) (@maloun96)
- [#12163](https://github.com/apache/superset/pull/12163) feat: add new dashboard with FCC data (#12163) (@betodealmeida)
- [#12189](https://github.com/apache/superset/pull/12189) fix(alerts/reports): ensure correct type is sent to api (#12189) (@nytai)
- [#12097](https://github.com/apache/superset/pull/12097) docs: update UPDATING.md with security simplification info (#12097) (@dpgaspar)
- [#12174](https://github.com/apache/superset/pull/12174) fix(reports): notification without standalone link back to superset (#12174) (@dpgaspar)
- [#12191](https://github.com/apache/superset/pull/12191) updated SQLAlchemy=1.3.21 is incompatible in setup.py file. (#12191) (@jagamts1)
- [#12179](https://github.com/apache/superset/pull/12179) fix(chart): rendering standalone chart and errors (#12179) (@agatapst)
- [#12158](https://github.com/apache/superset/pull/12158) chore: Add Loading icon to Filter Bar (#12158) (@agatapst)
- [#12091](https://github.com/apache/superset/pull/12091) refactor: remove queryFields in QueryObject and update chart control configs (#12091) (@ktmud)
- [#12187](https://github.com/apache/superset/pull/12187) fix: SQL Lab vertical space (#12187) (@betodealmeida)
- [#12166](https://github.com/apache/superset/pull/12166) fix: append ID to filename when exporting chart (#12166) (@betodealmeida)
- [#12185](https://github.com/apache/superset/pull/12185) fix: remove uniqueness for MySQL (#12185) (@betodealmeida)
- [#12186](https://github.com/apache/superset/pull/12186) fix: specify VARCHAR size when loading examples (#12186) (@betodealmeida)
- [#12178](https://github.com/apache/superset/pull/12178) fix(explore): save chart not working (#12178) (@villebro)
- [#12075](https://github.com/apache/superset/pull/12075) chore: Change chart_is_fav to chart_is_favorite (#12075) (@nikolagigic)
- [#12168](https://github.com/apache/superset/pull/12168) refactor: Refresh interval typescript (#12168) (@maloun96)
- [#12162](https://github.com/apache/superset/pull/12162) feat: add new dashboard with video game sales (#12162) (@betodealmeida)
- [#12156](https://github.com/apache/superset/pull/12156) Fix Filter Bar scrolling (#12156) (@agatapst)
- [#12010](https://github.com/apache/superset/pull/12010) refactor: Fix anchor-is-valid lint warnings (#12010) (@michael-s-molina)
- [#12151](https://github.com/apache/superset/pull/12151) test(dashboard): fix flaky Cypress test (#12151) (@ktmud)
- [#12159](https://github.com/apache/superset/pull/12159) chore: rename variable for clarity (#12159) (@betodealmeida)
- [#12136](https://github.com/apache/superset/pull/12136) fix: database alpha permissions (#12136) (@dpgaspar)
- [#12121](https://github.com/apache/superset/pull/12121) fix(report): fix last_eval_dttm sort and more tests (#12121) (@dpgaspar)
- [#12157](https://github.com/apache/superset/pull/12157) Fix Reset All filters button (#12157) (@agatapst)
- [#11997](https://github.com/apache/superset/pull/11997) refactor: Explore SaveModal to typescript (#11997) (@maloun96)
- [#12132](https://github.com/apache/superset/pull/12132) fix(report): fix start date format and paginated query (#12132) (@lilykuang)
- [#12146](https://github.com/apache/superset/pull/12146) fix(database): adjust column sizing for list view (#12146) (@nytai)
- [#10288](https://github.com/apache/superset/pull/10288) feat: Dynamically imported viz plugins (#10288) (@suddjian)
- [#12138](https://github.com/apache/superset/pull/12138) feat: Native filters fast-follow (#12138) (@rusackas)
- [#12144](https://github.com/apache/superset/pull/12144) fix(chart): replace viz_type with viz name from registry for list view (#12144) (@nytai)
- [#12145](https://github.com/apache/superset/pull/12145) fix height (#12145) (@pkdotson)
- [#11814](https://github.com/apache/superset/pull/11814) feat(dashboard): Dashboard-Native Filters (#11814) (@suddjian)
- [#12130](https://github.com/apache/superset/pull/12130) feat: estimate query cost in Postgres (#12130) (@betodealmeida)
- [#12113](https://github.com/apache/superset/pull/12113) feat: display suggestions when query has missing parameters (#12113) (@betodealmeida)
- [#12135](https://github.com/apache/superset/pull/12135) fix: make example table name safe (#12135) (@betodealmeida)
- [#12127](https://github.com/apache/superset/pull/12127) fix: remove SIP_34_ALERTS_UI from config (#12127) (@nytai)
- [#12129](https://github.com/apache/superset/pull/12129) fix(explore): overflow issue with metric options (#12129) (@rusackas)
- [#12125](https://github.com/apache/superset/pull/12125) Improves chart save and go button (#12125) (@michael-s-molina)
- [#12060](https://github.com/apache/superset/pull/12060) feat: View all fav charts and dashboards (#12060) (@geido)
- [#12123](https://github.com/apache/superset/pull/12123) feat: Add Saved Metrics tab to metrics popover (#12123) (@kgabryje)
- [#12116](https://github.com/apache/superset/pull/12116) fix: properly render booleans in FilterBox and explore page data preview (#12116) (@ktmud)
- [#12124](https://github.com/apache/superset/pull/12124) fix: fix the flaky FilterBox test re-introduced by #12114 (#12124) (@ktmud)
- [#11880](https://github.com/apache/superset/pull/11880) feat: Support multiple queries per request (#11880) (@simchaNielsen)
- [#12115](https://github.com/apache/superset/pull/12115) fix: remove keys in dashboard export (#12115) (@betodealmeida)
- [#12118](https://github.com/apache/superset/pull/12118) feat(chart-data-api): ignore unknown fields on QueryObject (#12118) (@villebro)
- [#12119](https://github.com/apache/superset/pull/12119) fix: security cleanup annotation and refresh permissions (#12119) (@dpgaspar)
- [#12117](https://github.com/apache/superset/pull/12117) docs(releasing): update release automation and docs for Apache graduation (#12117) (@dpgaspar)
- [#12008](https://github.com/apache/superset/pull/12008) feat(explore-datasource): add new datasource tab to explore view (#12008) (@pkdotson)
- [#12114](https://github.com/apache/superset/pull/12114) fix: FilterBox select lose focus when focused (#12114) (@ktmud)
- [#12045](https://github.com/apache/superset/pull/12045) fix: updates to alert/report modal + more tests (#12045) (@riahk)
- [#12085](https://github.com/apache/superset/pull/12085) feat(alerts/reports): remove SIP_34_UI feature flag (#12085) (@riahk)
- [#12110](https://github.com/apache/superset/pull/12110) fix(alerts/reports): modal submit button, copy changes, select apis (#12110) (@nytai)
- [#12080](https://github.com/apache/superset/pull/12080) feat: initial custom error messages for SQL Lab (#12080) (@betodealmeida)
- [#11418](https://github.com/apache/superset/pull/11418) feat(explore): time picker enhancement (#11418) (@zhaoyongjie)
- [#12081](https://github.com/apache/superset/pull/12081) feat: update alert/report icons and column order (#12081) (@lilykuang)
- [#12095](https://github.com/apache/superset/pull/12095) feat(explore): metrics and filters controls redesign (#12095) (@kgabryje)
- [#12071](https://github.com/apache/superset/pull/12071) feat(alerts/reports): add refresh action (#12071) (@nytai)
- [#11148](https://github.com/apache/superset/pull/11148) chore: add latest tag action (#11148) (@eschutho)
- [#12056](https://github.com/apache/superset/pull/12056) fix(reports): increase crontab size and alert fixes (#12056) (@dpgaspar)
- [#12099](https://github.com/apache/superset/pull/12099) Small typo fix in Athena connection docs (#12099) (@lamielle)
- [#12072](https://github.com/apache/superset/pull/12072) feat(queries): security perm simplification (#12072) (@dpgaspar)
- [#12036](https://github.com/apache/superset/pull/12036) feat(databases): security perm simplification (#12036) (@dpgaspar)
- [#12012](https://github.com/apache/superset/pull/12012) feat(dashboards): security permissions simplification (#12012) (@dpgaspar)
- [#12061](https://github.com/apache/superset/pull/12061) feat(logs): security permissions simplification (#12061) (@kkucharc)
- [#11972](https://github.com/apache/superset/pull/11972) chore: Remove unused CodeModal (#11972) (@maloun96)
- [#12074](https://github.com/apache/superset/pull/12074) Fix typescript error (#12074) (@ktmud)
- [#12088](https://github.com/apache/superset/pull/12088) fix: handle context-dependent feature flags in CLI (#12088) (@betodealmeida)
- [#12086](https://github.com/apache/superset/pull/12086) fix: Fix "View in SQLLab" bug (#12086) (@hughhhh)
- [#12077](https://github.com/apache/superset/pull/12077) feat(alert/report): add 'not null' condition option to modal (#12077) (@riahk)
- [#12078](https://github.com/apache/superset/pull/12078) bumping superset ui to 15.18 and deckgl to 0.3.2 (#12078) (@rusackas)
- [#12079](https://github.com/apache/superset/pull/12079) fix: Python dependencies in #11499 (#12079) (@john-bodley)
- [#12048](https://github.com/apache/superset/pull/12048) reset active tab on open (#12048) (@riahk)
- [#12070](https://github.com/apache/superset/pull/12070) fix: improve import flow UI/UX (#12070) (@betodealmeida)
- [#12053](https://github.com/apache/superset/pull/12053) feat(alerts/reports): delete and bulk delete actions (#12053) (@nytai)
- [#12025](https://github.com/apache/superset/pull/12025) feat: Global nav menus open on hover (#12025) (@rusackas)
- [#12076](https://github.com/apache/superset/pull/12076) Remove e2e pull_request event trigger (#12076) (@robdiciuccio)
- [#11750](https://github.com/apache/superset/pull/11750) build(cypress): Use pull_request_target event to run cypress (#11750) (@robdiciuccio)
- [#11979](https://github.com/apache/superset/pull/11979) fix(dataset): Page blanks on large data load (#11979) (@nikolagigic)
- [#12000](https://github.com/apache/superset/pull/12000) feat(datasets): security perm simplification (#12000) (@dpgaspar)
- [#12014](https://github.com/apache/superset/pull/12014) feat(annotations): security permissions simplification (#12014) (@kkucharc)
- [#12038](https://github.com/apache/superset/pull/12038) fix: Closes #11864 - Duplicate PropertiesModal (#12038) (@geido)
- [#12042](https://github.com/apache/superset/pull/12042) refactor: Migrate react-select to Antd Select in Metrics and Filters popovers (#12042) (@kgabryje)
- [#12049](https://github.com/apache/superset/pull/12049) feat: show missing parameters in query (#12049) (@betodealmeida)
- [#11970](https://github.com/apache/superset/pull/11970) feat: add hook for dataset health check (#11970) (@graceguo-supercat)
- [#11927](https://github.com/apache/superset/pull/11927) refactor: optimize backend log payload (#11927) (@ktmud)
- [#12044](https://github.com/apache/superset/pull/12044) feat: Add new default dashboard (#12044) (@betodealmeida)
- [#12026](https://github.com/apache/superset/pull/12026) feat: load examples from config instead of code (#12026) (@betodealmeida)
- [#12064](https://github.com/apache/superset/pull/12064) fix: small fixes to the new import/export (#12064) (@betodealmeida)
- [#12063](https://github.com/apache/superset/pull/12063) fix(annotation layers): remove redirect on layer edit (#12063) (@riahk)
- [#11803](https://github.com/apache/superset/pull/11803) feat: handle new export in CLI (#11803) (@betodealmeida)
- [#12057](https://github.com/apache/superset/pull/12057) fixed CONTRIBUTING typos (#12057) (@adam-stasiak)
- [#11971](https://github.com/apache/superset/pull/11971) refactor: Transform URLShortLinkModal to Typescript (#11971) (@maloun96)
- [#11981](https://github.com/apache/superset/pull/11981) feat(charts): security perm simplification (#11981) (@dpgaspar)
- [#12055](https://github.com/apache/superset/pull/12055) fix(viz): remove orderby from sample request (#12055) (@villebro)
- [#12054](https://github.com/apache/superset/pull/12054) upgrade react-split (#12054) (@rusackas)
- [#11853](https://github.com/apache/superset/pull/11853) feat(reports): security perm simplification (#11853) (@dpgaspar)
- [#12039](https://github.com/apache/superset/pull/12039) fix(reports): log duration and sort column (#12039) (@dpgaspar)
- [#12035](https://github.com/apache/superset/pull/12035) fix(reports): apply owners security validation (#12035) (@dpgaspar)
- [#11996](https://github.com/apache/superset/pull/11996) fix: Fix style for error modal (#11996) (@maloun96)
- [#11957](https://github.com/apache/superset/pull/11957) chore: bumping plugin packages to latest (#11957) (@rusackas)
- [#12032](https://github.com/apache/superset/pull/12032) feat: add cron picker to AlertReportModal (#12032) (@nytai)
- [#12043](https://github.com/apache/superset/pull/12043) fix: disable browser autocomplete for DeleteModal (#12043) (@nytai)
- [#12006](https://github.com/apache/superset/pull/12006) fix: Explore "Change Dataset" UX Enhancements (#12006) (@hughhhh)
- [#12018](https://github.com/apache/superset/pull/12018) fix schema datasource modal (#12018) (@lilykuang)
- [#11207](https://github.com/apache/superset/pull/11207) feat: Added setup for running Cypress tests in docker locally (#11207) (@adam-stasiak)
- [#12013](https://github.com/apache/superset/pull/12013) refactor: Existing Antd Collapse to enhanced (#12013) (@geido)
- [#12024](https://github.com/apache/superset/pull/12024) style: Restoring menu highlights (#12024) (@rusackas)
- [#11978](https://github.com/apache/superset/pull/11978) docs: restored page on roles in security, executed other touchups, and… (#11978) (@srinify)
- [#11993](https://github.com/apache/superset/pull/11993) refactor : Change menu name and reorder items (#11993) (@maloun96)
- [#11915](https://github.com/apache/superset/pull/11915) fix: Change url & add check for active item in menu (#11915) (@maloun96)
- [#11991](https://github.com/apache/superset/pull/11991) feat: update IDs when importing dashboards (#11991) (@betodealmeida)
- [#11983](https://github.com/apache/superset/pull/11983) feat: add confirmation dialog for imports (#11983) (@betodealmeida)
- [#11770](https://github.com/apache/superset/pull/11770) feat: alerts/reports add/edit modal (#11770) (@riahk)
- [#12007](https://github.com/apache/superset/pull/12007) fix: add default position to dash export (#12007) (@betodealmeida)
- [#12003](https://github.com/apache/superset/pull/12003) chore: remove generic type (#12003) (@betodealmeida)
- [#11973](https://github.com/apache/superset/pull/11973) fix(dataset): fetch metadata on dataset creation may raise broad exceptions (#11973) (@dpgaspar)
- [#11951](https://github.com/apache/superset/pull/11951) refactor : Transform SaveModal to typescript (#11951) (@maloun96)
- [#11499](https://github.com/apache/superset/pull/11499) feat(SIP-39): Async query support for charts (#11499) (@robdiciuccio)
- [#11994](https://github.com/apache/superset/pull/11994) feat: add invisible layer on loading chart (#11994) (@graceguo-supercat)
- [#11937](https://github.com/apache/superset/pull/11937) feat: alert/report execution log list view (#11937) (@lilykuang)
- [#11982](https://github.com/apache/superset/pull/11982) feat: confirm overwrite when importing (#11982) (@betodealmeida)
- [#12002](https://github.com/apache/superset/pull/12002) chore: move passwords needed message (#12002) (@betodealmeida)
- [#11977](https://github.com/apache/superset/pull/11977) refactor: Removes hard coded colors (#11977) (@michael-s-molina)
- [#11936](https://github.com/apache/superset/pull/11936) chore: consolidate common code in importers (#11936) (@betodealmeida)
- [#11980](https://github.com/apache/superset/pull/11980) fix : Fix style for header (sqllab) (#11980) (@maloun96)
- [#11946](https://github.com/apache/superset/pull/11946) fix(explore): changing metric aggregate doesn't update label (#11946) (@mayurnewase)
- [#11990](https://github.com/apache/superset/pull/11990) fixing rounded corners (#11990) (@rusackas)
- [#11964](https://github.com/apache/superset/pull/11964) refactor : Transform FilterScopeModal to Typescript (#11964) (@maloun96)
- [#11963](https://github.com/apache/superset/pull/11963) fix : adhoc filter dropdown (#11963) (@maloun96)
- [#11985](https://github.com/apache/superset/pull/11985) Debounce TextControl if change runs immediately after input (#11985) (@kgabryje)
- [#11975](https://github.com/apache/superset/pull/11975) Change paddings on ListView and SubMenu (#11975) (@kgabryje)
- [#11986](https://github.com/apache/superset/pull/11986) add user to sql lab state (#11986) (@eschutho)
- [#11987](https://github.com/apache/superset/pull/11987) fix: make "DELETE" confirmation work in other languages (#11987) (@betodealmeida)
- [#11308](https://github.com/apache/superset/pull/11308) tests: added fixture with energy usage instead of example (#11308) (@kkucharc)
- [#11967](https://github.com/apache/superset/pull/11967) refactor: Upgrade Redux (#11967) (@suddjian)
- [#11883](https://github.com/apache/superset/pull/11883) refactor: move enums to the beginning of utiuls/core.py (#11883) (@ktmud)
- [#11890](https://github.com/apache/superset/pull/11890) fix(reports): validator_config, report state machine, working_timeout (#11890) (@dpgaspar)
- [#11934](https://github.com/apache/superset/pull/11934) fix: always fetch database list on bootstrap payload (#11934) (@mistercrunch)
- [#11755](https://github.com/apache/superset/pull/11755) feat: Sqllab to Explore UX improvements (#11755) (@hughhhh)
- [#11940](https://github.com/apache/superset/pull/11940) build: cancel previous github action runs (#11940) (@ktmud)
- [#11950](https://github.com/apache/superset/pull/11950) fix(alerts, thumbnails): celery tasks using flask-sqlalchemy sessions (#11950) (@dpgaspar)
- [#11885](https://github.com/apache/superset/pull/11885) fix(event-flow-viz): handle null metadata selection (#11885) (@maloun96)
- [#11924](https://github.com/apache/superset/pull/11924) feat: add modal to import dashboards (#11924) (@betodealmeida)
- [#11956](https://github.com/apache/superset/pull/11956) feat: add modal to import charts (#11956) (@betodealmeida)
- [#11910](https://github.com/apache/superset/pull/11910) feat: add modal to import datasets (#11910) (@betodealmeida)
- [#11884](https://github.com/apache/superset/pull/11884) feat: add modal to import databases (#11884) (@betodealmeida)
- [#11947](https://github.com/apache/superset/pull/11947) chore: bump nvd3 plugin version (#11947) (@kristw)
- [#11931](https://github.com/apache/superset/pull/11931) fix(charts): screenshot API declaring an unnecessary rison arg (#11931) (@dpgaspar)
- [#11893](https://github.com/apache/superset/pull/11893) feat(releasing): support changelog csv export (#11893) (@dpgaspar)
- [#11854](https://github.com/apache/superset/pull/11854) feat: Results table on Explore view (#11854) (@kgabryje)
- [#11538](https://github.com/apache/superset/pull/11538) feat: add Postgres SQL validator (#11538) (@betodealmeida)
- [#11899](https://github.com/apache/superset/pull/11899) refactor: Move Badge to Antdesign (#11899) (@geido)
- [#11928](https://github.com/apache/superset/pull/11928) refactor: Extract copy functionality to utils (#11928) (@maloun96)
- [#11939](https://github.com/apache/superset/pull/11939) fix: make sure we log the logs (#11939) (@etr2460)
- [#11930](https://github.com/apache/superset/pull/11930) Quick fix for branch names in tags (#11930) (@craig-rueda)
- [#11877](https://github.com/apache/superset/pull/11877) Added check if SQL query is empty and disable shortcut for run query (#11877) (@kkucharc)
- [#11900](https://github.com/apache/superset/pull/11900) feat: filters for alerts and reports list view (#11900) (@lilykuang)
- [#11920](https://github.com/apache/superset/pull/11920) fix: Remove expensive logs table migration (#11920) (@etr2460)
- [#11665](https://github.com/apache/superset/pull/11665) feat: add event and interval annotation support to chart data ep (#11665) (@villebro)
- [#11919](https://github.com/apache/superset/pull/11919) fix: Forgot to remove bad comments from SaveDatasetModal (#11919) (@hughhhh)
- [#11786](https://github.com/apache/superset/pull/11786) chore: add unit tests for the current import functionality (#11786) (@betodealmeida)
- [#11875](https://github.com/apache/superset/pull/11875) refactor: Move ProgressBar to Antd (#11875) (@geido)
- [#11904](https://github.com/apache/superset/pull/11904) feat: run BQ queries as single statement (#11904) (@betodealmeida)
- [#11911](https://github.com/apache/superset/pull/11911) fix: adjust width for non multi select inputs (#11911) (@eschutho)
- [#11861](https://github.com/apache/superset/pull/11861) feat: Adding SaveDatasetModal component (#11861) (@hughhhh)
- [#11868](https://github.com/apache/superset/pull/11868) chore: Support SET & SHOW commands as read only SQL commands (#11868) (@bkyryliuk)
- [#11876](https://github.com/apache/superset/pull/11876) fix: Check if annotation type is supported by the given chart type (#11876) (@agatapst)
- [#11912](https://github.com/apache/superset/pull/11912) fix: Button storybook component size knob (#11912) (@rusackas)
- [#11913](https://github.com/apache/superset/pull/11913) style: eslint curly rule (#11913) (@rusackas)
- [#11897](https://github.com/apache/superset/pull/11897) fix(query): sorting by user for Query History list view (#11897) (@nytai)
- [#11856](https://github.com/apache/superset/pull/11856) feat(css templates): security perm simplification (#11856) (@dpgaspar)
- [#11902](https://github.com/apache/superset/pull/11902) add fix for extra comments for #11781 (#11902) (@graceguo-supercat)
- [#11891](https://github.com/apache/superset/pull/11891) chore: Enable jsx-a11y/anchor-is-valid (#11891) (@nikolagigic)
- [#11887](https://github.com/apache/superset/pull/11887) chore: Update sqllab types (#11887) (@hughhhh)
- [#10770](https://github.com/apache/superset/pull/10770) Capture error when celery back-end does not support forgetting tasks (#10770) (@willbarrett)
- [#11816](https://github.com/apache/superset/pull/11816) feat: allow user to view their profile again (#11816) (@etr2460)
- [#11847](https://github.com/apache/superset/pull/11847) fix: Show copy icon (#11847) (@maloun96)
- [#11848](https://github.com/apache/superset/pull/11848) Align icon (#11848) (@maloun96)
- [#11843](https://github.com/apache/superset/pull/11843) style: remove react bootstrap fade component (#11843) (@nikolagigic)
- [#11802](https://github.com/apache/superset/pull/11802) feat: report/alert list CRUD view (#11802) (@lilykuang)
- [#11881](https://github.com/apache/superset/pull/11881) fix: certification icon order (#11881) (@etr2460)
- [#11781](https://github.com/apache/superset/pull/11781) fix (dataset editor): allow Source tab readOnly mode (#11781) (@graceguo-supercat)
- [#11845](https://github.com/apache/superset/pull/11845) fix: dashboard iframe to markdown db migration (#11845) (@dpgaspar)
- [#11771](https://github.com/apache/superset/pull/11771) test: add React Testing Library (#11771) (@ktmud)
- [#11580](https://github.com/apache/superset/pull/11580) fix: filters push out apply button on dashboard (#11580) (@kkucharc)
- [#11863](https://github.com/apache/superset/pull/11863) chore: remove SIP_34_QUERY_SEARCH_UI feature flag (#11863) (@nytai)
- [#11851](https://github.com/apache/superset/pull/11851) chore: Add home link to navbar (#11851) (@agatapst)
- [#11812](https://github.com/apache/superset/pull/11812) chore: move fixtures and helpers to root (#11812) (@eschutho)
- [#11702](https://github.com/apache/superset/pull/11702) feat: list view filters for Query History (#11702) (@nytai)
- [#11855](https://github.com/apache/superset/pull/11855) feat: Create api abstraction layer for dataset network calls (#11855) (@hughhhh)
- [#11858](https://github.com/apache/superset/pull/11858) fix(datasets): renaming openAPI columns (#11858) (@hughhhh)
- [#11678](https://github.com/apache/superset/pull/11678) feat(welcome): add SQL snippets to saved queries card (#11678) (@pkdotson)
- [#11766](https://github.com/apache/superset/pull/11766) Fix chart select borders in BuilderComponentPane (#11766) (@kgabryje)
- [#11852](https://github.com/apache/superset/pull/11852) fix: security converge downgrade procedure (#11852) (@dpgaspar)
- [#11830](https://github.com/apache/superset/pull/11830) fix: update chart doesn't remove all connections to dashboards (#11830) (@kkucharc)
- [#11238](https://github.com/apache/superset/pull/11238) feat: Option to run npm dev-server (hot reload) while calling docker-compose up (#11238) (@adam-stasiak)
- [#11836](https://github.com/apache/superset/pull/11836) feat: Sqllab to Explore UX improvements api changes (#11836) (@hughhhh)
- [#11778](https://github.com/apache/superset/pull/11778) fix: Download as image not working on Dashboard view (#11778) (@kgabryje)
- [#11764](https://github.com/apache/superset/pull/11764) feat(saved queries): security perm simplification (#11764) (@dpgaspar)
- [#11838](https://github.com/apache/superset/pull/11838) chore: type a couple easy to type files (#11838) (@etr2460)
- [#11779](https://github.com/apache/superset/pull/11779) chore: Move styles of Dashboard and FilterScopeSelector modals to Emotion (#11779) (@kgabryje)
- [#11834](https://github.com/apache/superset/pull/11834) Change subtabs order for Data tab (#11834) (@agatapst)
- [#11837](https://github.com/apache/superset/pull/11837) fix: improve Avatar text size consistency (#11837) (@etr2460)
- [#11824](https://github.com/apache/superset/pull/11824) fix: wrong key used FEATURE_FLAGS[LISTVIEW_DEFAULT_CARD_VIEW] (#11824) (@amitmiran137)
- [#11811](https://github.com/apache/superset/pull/11811) fix: Adding and removing annotations (#11811) (@agatapst)
- [#11828](https://github.com/apache/superset/pull/11828) ci(docker): build image on release (#11828) (@dpgaspar)
- [#11827](https://github.com/apache/superset/pull/11827) docs(release): small fixes and deprecate apache docs (#11827) (@dpgaspar)
- [#11825](https://github.com/apache/superset/pull/11825) fix(setup): disallow python 3.6 for pip install (#11825) (@dpgaspar)
- [#11801](https://github.com/apache/superset/pull/11801) fix: delete chart, dashboards, dbs with assoc reports (#11801) (@dpgaspar)
- [#11815](https://github.com/apache/superset/pull/11815) chore: Fix TableModelView super call (#11815) (@john-bodley)
- [#11683](https://github.com/apache/superset/pull/11683) feat: filter by me on CRUD list view (#11683) (@lilykuang)
- [#11805](https://github.com/apache/superset/pull/11805) fix: remove root dir from ZIP bundle (#11805) (@betodealmeida)
- [#11797](https://github.com/apache/superset/pull/11797) fix: add feature flag for domain sharding (#11797) (@graceguo-supercat)
- [#11714](https://github.com/apache/superset/pull/11714) chore: improve analytics (#11714) (@mistercrunch)
- [#10815](https://github.com/apache/superset/pull/10815) chore: type src/logger (#10815) (@etr2460)
- [#11809](https://github.com/apache/superset/pull/11809) docs: 0.38.0 CHANGELOG and UPDATING (#11809) (@dpgaspar)
- [#11762](https://github.com/apache/superset/pull/11762) fix: attachment filename error in sqllab with i18n (#11762) (@auxten)
- [#11795](https://github.com/apache/superset/pull/11795) fix: mutating input df in viz.py (#11795) (@villebro)
- [#11711](https://github.com/apache/superset/pull/11711) feat: new reports scheduler (#11711) (@dpgaspar)
- [#11751](https://github.com/apache/superset/pull/11751) feat: API endpoint to import dashboards (#11751) (@betodealmeida)
- [#11806](https://github.com/apache/superset/pull/11806) chore: unbreak frontend ci (#11806) (@etr2460)
- [#11737](https://github.com/apache/superset/pull/11737) refactor: Replace react-bootstrap tooltips with Antd tooltips (#11737) (@kgabryje)
- [#11798](https://github.com/apache/superset/pull/11798) fix: docker healthcheck (#11798) (@PMExtra)
- [#11785](https://github.com/apache/superset/pull/11785) feat: add certification info to table selector (#11785) (@etr2460)
- [#11783](https://github.com/apache/superset/pull/11783) update docs around email reports (#11783) (@eschutho)
- [#11794](https://github.com/apache/superset/pull/11794) build: split python CI jobs (#11794) (@etr2460)
- [#11675](https://github.com/apache/superset/pull/11675) refactor: use rison for list view filters stateful urls (#11675) (@riahk)
- [#11780](https://github.com/apache/superset/pull/11780) refactor: Replace SqlLab components' styles using Emotion & theme variables (#11780) (@agatapst)
- [#11754](https://github.com/apache/superset/pull/11754) chore: controls.test supporting v1 charts and added force=true to url when r… (#11754) (@adam-stasiak)
- [#11791](https://github.com/apache/superset/pull/11791) add tool tip to cards (#11791) (@pkdotson)
- [#11712](https://github.com/apache/superset/pull/11712) chore: enabled v1 verification in filter and url_params test files (#11712) (@adam-stasiak)
- [#11787](https://github.com/apache/superset/pull/11787) fix: annotation layer crashes when clearing type select (#11787) (@mistercrunch)
- [#11749](https://github.com/apache/superset/pull/11749) feat: add a command to import dashboards (#11749) (@betodealmeida)
- [#11775](https://github.com/apache/superset/pull/11775) docs: add Xite to users list (#11775) (@shashankkoppar)
- [#11732](https://github.com/apache/superset/pull/11732) fix: style multiselect input (#11732) (@eschutho)
- [#11747](https://github.com/apache/superset/pull/11747) Fix docker healthcheck. (#11747) (@PMExtra)
- [#11772](https://github.com/apache/superset/pull/11772) chore: fix typo (#11772) (@etr2460)
- [#11634](https://github.com/apache/superset/pull/11634) feat: SQL preview modal for Query History (#11634) (@nytai)
- [#11744](https://github.com/apache/superset/pull/11744) feat: API endpoint to import charts (#11744) (@betodealmeida)
- [#11743](https://github.com/apache/superset/pull/11743) feat: add a command to import charts (#11743) (@betodealmeida)
- [#11769](https://github.com/apache/superset/pull/11769) fix: Fixing issue around requirements-local.txt (#11769) (@craig-rueda)
- [#11760](https://github.com/apache/superset/pull/11760) feat: Add user info to sqllab via bootstrap data (#11760) (@hughhhh)
- [#11752](https://github.com/apache/superset/pull/11752) fix: Null error when deleting the last owner label in DatasourceEditor/settings (#11752) (@kgabryje)
- [#11709](https://github.com/apache/superset/pull/11709) Make spacings in Settings menu more consistent (#11709) (@kgabryje)
- [#11611](https://github.com/apache/superset/pull/11611) style: dark filter popover background (#11611) (@rusackas)
- [#11736](https://github.com/apache/superset/pull/11736) chore: Text change Allow Data Upload (#11736) (@amitmiran137)
- [#11740](https://github.com/apache/superset/pull/11740) fix: Adding __init__.py in superset.commands.importers (#11740) (@craig-rueda)
- [#11731](https://github.com/apache/superset/pull/11731) fix: do not drop calculated column on metadata sync (#11731) (@villebro)
- [#11703](https://github.com/apache/superset/pull/11703) docs: fix docker config paths (#11703) (@suddjian)
- [#11726](https://github.com/apache/superset/pull/11726) Fix missing styles in FilterScopeSelector modal (#11726) (@kgabryje)
- [#11728](https://github.com/apache/superset/pull/11728) feat: API endpoints to upload dataset/db (#11728) (@betodealmeida)
- [#11727](https://github.com/apache/superset/pull/11727) chore: remove SIP_34_ANNOTATIONS_UI feature flag (#11727) (@lilykuang)
- [#11704](https://github.com/apache/superset/pull/11704) feat(templating): Safer Jinja template processing (#11704) (@robdiciuccio)
- [#11692](https://github.com/apache/superset/pull/11692) Fix "Select all" option in SelectControl (#11692) (@kgabryje)
- [#11719](https://github.com/apache/superset/pull/11719) Fix ModalTriggers styling in SqlLab (#11719) (@kgabryje)
- [#11670](https://github.com/apache/superset/pull/11670) feat: new import commands for dataset and databases (#11670) (@betodealmeida)
- [#11693](https://github.com/apache/superset/pull/11693) Remove "required" from SaveModal Add to dashboard field (#11693) (@kgabryje)
- [#11684](https://github.com/apache/superset/pull/11684) fix: default dashboard/chart cards are vector with perfect corners (#11684) (@rusackas)
- [#11707](https://github.com/apache/superset/pull/11707) Switching Docker compose over to the official image (#11707) (@craig-rueda)
- [#11701](https://github.com/apache/superset/pull/11701) chore: statds metrics for cache invalidation (#11701) (@bkyryliuk)
- [#11685](https://github.com/apache/superset/pull/11685) chore: V1 charts load cypress tests (#11685) (@adam-stasiak)
- [#11698](https://github.com/apache/superset/pull/11698) build(cypress): Fix issue with cypress code-coverage plugin when running locally (#11698) (@robdiciuccio)
- [#11676](https://github.com/apache/superset/pull/11676) chore: remove a few obsolete logic (#11676) (@graceguo-supercat)
- [#11691](https://github.com/apache/superset/pull/11691) Fix overflow hidden issues in Dashboard Builder tabs (#11691) (@kgabryje)
- [#11509](https://github.com/apache/superset/pull/11509) feat: rename TABLE_NAMES_CACHE_CONFIG to DATA_CACHE_CONFIG (#11509) (@ktmud)
- [#11700](https://github.com/apache/superset/pull/11700) feat: Helm improvements (#11700) (@craig-rueda)
- [#11679](https://github.com/apache/superset/pull/11679) fix(saved query): handle null sql field (#11679) (@nytai)
- [#11616](https://github.com/apache/superset/pull/11616) feat: Adding docker build/push (#11616) (@craig-rueda)
- [#11618](https://github.com/apache/superset/pull/11618) feat: keep modal open when saving database failed (#11618) (@ktmud)
- [#11671](https://github.com/apache/superset/pull/11671) fix: Dropdown menu not closing on Dashboard view (#11671) (@kgabryje)
- [#11613](https://github.com/apache/superset/pull/11613) docs: add support for Google Analytics on superset.apache.org (#11613) (@mistercrunch)
- [#11574](https://github.com/apache/superset/pull/11574) feat: Query History CRUD list view (#11574) (@nytai)
- [#11606](https://github.com/apache/superset/pull/11606) feat: new reports models api (#11606) (@dpgaspar)
- [#11672](https://github.com/apache/superset/pull/11672) fix(dashboard): ordering for add chart widget (#11672) (@nytai)
- [#11661](https://github.com/apache/superset/pull/11661) fix (dashboard): remove default filters parameters in dashboard url (#11661) (@graceguo-supercat)
- [#11673](https://github.com/apache/superset/pull/11673) fix: make higher chart box resizable (#11673) (@kkucharc)
- [#11289](https://github.com/apache/superset/pull/11289) keep placeholder on multiselect (#11289) (@eschutho)
- [#11663](https://github.com/apache/superset/pull/11663) chore: clean up a debug line from #11653 (#11663) (@ktmud)
- [#11199](https://github.com/apache/superset/pull/11199) feat: add ECharts BoxPlot chart (#11199) (@villebro)
- [#11653](https://github.com/apache/superset/pull/11653) fix: database connection validation when creation (#11653) (@ktmud)
- [#11533](https://github.com/apache/superset/pull/11533) chore: consolidate datasource import logic (#11533) (@betodealmeida)
- [#11643](https://github.com/apache/superset/pull/11643) Restructure chart header to wrap nicely (#11643) (@kgabryje)
- [#11529](https://github.com/apache/superset/pull/11529) chore: consolidate dashboard import logic (#11529) (@betodealmeida)
- [#11652](https://github.com/apache/superset/pull/11652) add import icon (#11652) (@eschutho)
- [#11644](https://github.com/apache/superset/pull/11644) build: set actions/setup-python to v2 (#11644) (@ktmud)
- [#11648](https://github.com/apache/superset/pull/11648) feat(dev): dont override asset manifest in dev-server (#11648) (@ktmud)
- [#11655](https://github.com/apache/superset/pull/11655) [fix] handle null value in date filter (#11655) (@graceguo-supercat)
- [#11656](https://github.com/apache/superset/pull/11656) fix(chart-data): ignore orderby on sample result type (#11656) (@villebro)
- [#11649](https://github.com/apache/superset/pull/11649) fix(saved-query): handle case where sql_tables in undefined (#11649) (@nytai)
- [#11650](https://github.com/apache/superset/pull/11650) style: various little tweaks to home screen stylin' (#11650) (@rusackas)
- [#11646](https://github.com/apache/superset/pull/11646) chore: pin node and npm versions (#11646) (@ktmud)
- [#11626](https://github.com/apache/superset/pull/11626) feat(sankey-viz): allow sort by metric and bump superset-ui packages (#11626) (@ktmud)
- [#11603](https://github.com/apache/superset/pull/11603) build(deps-dev): update cypress to 5.5.0, improvements for running locally (#11603) (@robdiciuccio)
- [#11458](https://github.com/apache/superset/pull/11458) chore: enabled cypress test in filter file (#11458) (@adam-stasiak)
- [#11535](https://github.com/apache/superset/pull/11535) refactor: Remove reactable arc (#11535) (@kgabryje)
- [#11584](https://github.com/apache/superset/pull/11584) Enabled artifacts for failing tests (#11584) (@adam-stasiak)
- [#11636](https://github.com/apache/superset/pull/11636) chore: rename IMPORT_EXPORT_VERSION (#11636) (@betodealmeida)
- [#11638](https://github.com/apache/superset/pull/11638) fix: card thumbnails now always show border. (#11638) (@rusackas)
- [#11521](https://github.com/apache/superset/pull/11521) Chore: simplify Apache Kylin datetime convert (#11521) (@zhaoyongjie)
- [#11635](https://github.com/apache/superset/pull/11635) fix: CommandInvalidError had invalid init (#11635) (@betodealmeida)
- [#11630](https://github.com/apache/superset/pull/11630) Disabled bubble test (#11630) (@adam-stasiak)
- [#11632](https://github.com/apache/superset/pull/11632) fix: js unit test when save dash (#11632) (@graceguo-supercat)
- [#11631](https://github.com/apache/superset/pull/11631) style: fixing tall filter indicators (#11631) (@rusackas)
- [#11592](https://github.com/apache/superset/pull/11592) feat(dashboard): leaner filter indicator panel with wrapped text (#11592) (@suddjian)
- [#11621](https://github.com/apache/superset/pull/11621) Fix datetime picker issues (#11621) (@kgabryje)
- [#11614](https://github.com/apache/superset/pull/11614) fix(dashboard): use server-side lastModifiedTime for co-edit check (#11614) (@graceguo-supercat)
- [#11540](https://github.com/apache/superset/pull/11540) feat: annotation delete modal, bulk delete and empty state (#11540) (@lilykuang)
- [#11570](https://github.com/apache/superset/pull/11570) fix: minor style touch on dashboards (#11570) (@ktmud)
- [#11569](https://github.com/apache/superset/pull/11569) chore: clean up mountedTab (#11569) (@ktmud)
- [#11583](https://github.com/apache/superset/pull/11583) Fixed unstable test (#11583) (@adam-stasiak)
- [#11525](https://github.com/apache/superset/pull/11525) fix: extended droppable area on the top of dashboards (#11525) (@kkucharc)
- [#11597](https://github.com/apache/superset/pull/11597) build(deps-dev): bump less from 3.9.0 to 3.12.2 in /superset-frontend (#11597) (@dependabot[bot])
- [#11564](https://github.com/apache/superset/pull/11564) chore: cleaning out old deckgl controls (#11564) (@rusackas)
- [#11557](https://github.com/apache/superset/pull/11557) chore(home-screen): fixes for loading states, flicker issue, and reduction of api calls (#11557) (@pkdotson)
- [#11607](https://github.com/apache/superset/pull/11607) fix: Filter and Metric popovers not closing after clicking Save (#11607) (@kgabryje)
- [#11602](https://github.com/apache/superset/pull/11602) style: Wrap chart titles again (#11602) (@rusackas)
- [#11594](https://github.com/apache/superset/pull/11594) fix(dashboard): order charts by changed_on (#11594) (@nytai)
- [#11550](https://github.com/apache/superset/pull/11550) feat: new report schedule models (#11550) (@dpgaspar)
- [#11578](https://github.com/apache/superset/pull/11578) fix: Issues with filters and metrics popovers (#11578) (@kgabryje)
- [#11554](https://github.com/apache/superset/pull/11554) refactor: Replace react-bootstrap MenuItems with Antd Menu (#11554) (@kgabryje)
- [#11579](https://github.com/apache/superset/pull/11579) Changed top overflow for charts. (#11579) (@kkucharc)
- [#11518](https://github.com/apache/superset/pull/11518) build(deps): bump @emotion/core in /superset-frontend (#11518) (@dependabot[bot])
- [#11573](https://github.com/apache/superset/pull/11573) build(deps-dev): bump @storybook/addon-essentials in /superset-frontend (#11573) (@dependabot[bot])
- [#11575](https://github.com/apache/superset/pull/11575) chore(rls): move to feature flag and disable related view (#11575) (@villebro)
- [#11522](https://github.com/apache/superset/pull/11522) build(deps): bump core-js from 3.2.1 to 3.6.5 in /superset-frontend (#11522) (@dependabot[bot])
- [#11314](https://github.com/apache/superset/pull/11314) chore: Cypress dashboard list selectors refactor (#11314) (@adam-stasiak)
- [#11555](https://github.com/apache/superset/pull/11555) refactor: Replace react-bootstrap MenuItems with Antd Menu (#11555) (@kgabryje)
- [#11558](https://github.com/apache/superset/pull/11558) fix(dashboard): properly unset mountedTab in reducer (#11558) (@suddjian)
- [#11559](https://github.com/apache/superset/pull/11559) Front end for VERSIONED_EXPORT (#11559) (@betodealmeida)
- [#11445](https://github.com/apache/superset/pull/11445) fix: Pasting text issues in MetricsControl and AdhocFilterControl inputs (#11445) (@kgabryje)
- [#11487](https://github.com/apache/superset/pull/11487) refactor: Replace react-bootstrap MenuItems with Antd Menu (#11487) (@kgabryje)
- [#11311](https://github.com/apache/superset/pull/11311) style: database modal updates (#11311) (@riahk)
- [#11370](https://github.com/apache/superset/pull/11370) fix: add sort option to filters, sort chart list filter options (#11370) (@riahk)
- [#11551](https://github.com/apache/superset/pull/11551) docs: add Avesta to users list (#11551) (@TheRum)
- [#11527](https://github.com/apache/superset/pull/11527) refactor: Replace react-bootstrap dialogs with Antd dialogs (#11527) (@kgabryje)
- [#11531](https://github.com/apache/superset/pull/11531) chore: remove directory importexport (#11531) (@betodealmeida)
- [#11528](https://github.com/apache/superset/pull/11528) refactor: Use Antd Menu in Menu component (#11528) (@kgabryje)
- [#11530](https://github.com/apache/superset/pull/11530) feat: annotation layers delete logic + linking w/ annotation view (#11530) (@riahk)
- [#11500](https://github.com/apache/superset/pull/11500) feat: annotation edit modal with antd datepicker (#11500) (@lilykuang)
- [#11526](https://github.com/apache/superset/pull/11526) fix(tests): flaky test with dttm on Query API (#11526) (@dpgaspar)
- [#11361](https://github.com/apache/superset/pull/11361) docs: add Xendit to users list (#11361) (@LieAlbertTriAdrian)
- [#11502](https://github.com/apache/superset/pull/11502) refactor: reduce number of api calls needed to fetch favorite status for charts and dashboards (#11502) (@nytai)
- [#11532](https://github.com/apache/superset/pull/11532) chore: remove sanitize (#11532) (@betodealmeida)
- [#11435](https://github.com/apache/superset/pull/11435) refactor: rewrite and enhance chart control withVerification (#11435) (@ktmud)
- [#11501](https://github.com/apache/superset/pull/11501) fix(dashboard): multiple lines and indentation when editing json (#11501) (@suddjian)
- [#11160](https://github.com/apache/superset/pull/11160) refactor: Replace react-bootstrap Tabs with Antd Tabs in DashboardBuilder (#11160) (@kgabryje)
- [#11476](https://github.com/apache/superset/pull/11476) fix: Update "View In SQL Lab" Flow to render source query from datasource object (#11476) (@hughhhh)
- [#11491](https://github.com/apache/superset/pull/11491) feat: globally disable underscore for links in menu items (#11491) (@ktmud)
- [#11389](https://github.com/apache/superset/pull/11389) refactor: Replace react-bootstrap Modals with Antd in Explore (#11389) (@kgabryje)
- [#11519](https://github.com/apache/superset/pull/11519) feat: make logo link point to welcome page (#11519) (@mistercrunch)
- [#11512](https://github.com/apache/superset/pull/11512) chore: run 'npm audit fix', bump react-syntax-highlighter (#11512) (@mistercrunch)
- [#11510](https://github.com/apache/superset/pull/11510) chore: add dependabot.yml config file (#11510) (@mistercrunch)
- [#11511](https://github.com/apache/superset/pull/11511) chore: bump pypi cryptography from 2.4.2 to 3.2.1 (#11511) (@mistercrunch)
- [#11482](https://github.com/apache/superset/pull/11482) feat: query REST API more fields and tests (#11482) (@dpgaspar)
- [#11118](https://github.com/apache/superset/pull/11118) refactor: Replace react-bootstrap tabs with Antd tabs (#11118) (@kgabryje)
- [#11494](https://github.com/apache/superset/pull/11494) feat: annotation layers modal + filters (#11494) (@riahk)
- [#11485](https://github.com/apache/superset/pull/11485) build(deps-dev): bump node-fetch in /superset-frontend (#11485) (@dependabot[bot])
- [#11484](https://github.com/apache/superset/pull/11484) build(deps): bump object-path from 0.11.4 to 0.11.5 in /docs (#11484) (@dependabot[bot])
- [#11483](https://github.com/apache/superset/pull/11483) build(deps): bump lodash in /superset-frontend/cypress-base (#11483) (@dependabot[bot])
- [#11506](https://github.com/apache/superset/pull/11506) fix: import for moment in ActivityTable (#11506) (@pkdotson)
- [#11481](https://github.com/apache/superset/pull/11481) fix: show recent visited dashboards and charts in recent_activity (#11481) (@ktmud)
- [#11463](https://github.com/apache/superset/pull/11463) feat: create base class for export commands (#11463) (@betodealmeida)
- [#11450](https://github.com/apache/superset/pull/11450) feat: add certifications to tables (#11450) (@etr2460)
- [#11460](https://github.com/apache/superset/pull/11460) chore: rename ImportMixin to ImportExportMixin (#11460) (@betodealmeida)
- [#11447](https://github.com/apache/superset/pull/11447) feat: add endpoint to export saved queries using new format (#11447) (@betodealmeida)
- [#11504](https://github.com/apache/superset/pull/11504) docs: fix db drivers PG and ES (#11504) (@dpgaspar)
- [#11503](https://github.com/apache/superset/pull/11503) fix(api): don't log db conn failures on db create/update (#11503) (@dpgaspar)
- [#11206](https://github.com/apache/superset/pull/11206) feat: home screen mvp (#11206) (@pkdotson)
- [#11496](https://github.com/apache/superset/pull/11496) chore: Cleaning up ENABLE_REACT_CRUD_VIEWS config (#11496) (@john-bodley)
- [#11493](https://github.com/apache/superset/pull/11493) feat: disable save button when saving datasource (#11493) (@ktmud)
- [#11307](https://github.com/apache/superset/pull/11307) other: Improvements to bug report template (#11307) (@suddjian)
- [#11497](https://github.com/apache/superset/pull/11497) Revert "fix: change chart title by clicking (#11335)" (#11497) (@graceguo-supercat)
- [#11449](https://github.com/apache/superset/pull/11449) fix: prevent race condition when canceling query (#11449) (@betodealmeida)
- [#11452](https://github.com/apache/superset/pull/11452) fix(datasets): add custom filter for virtual datasets based on sql attribute (#11452) (@nytai)
- [#11456](https://github.com/apache/superset/pull/11456) Added z index to resizible char (#11456) (@kkucharc)
- [#11281](https://github.com/apache/superset/pull/11281) feat(explore): change save button text when users cannot override (#11281) (@ktmud)
- [#11480](https://github.com/apache/superset/pull/11480) fix: dashboard tab only shows move cursor when editing (#11480) (@rusackas)
- [#11473](https://github.com/apache/superset/pull/11473) Add IBM Cloud deployment guide (#11473) (@aklin)
- [#11474](https://github.com/apache/superset/pull/11474) fix: Unwinds icon fallout that came along with filters PR (#11474) (@rusackas)
- [#10936](https://github.com/apache/superset/pull/10936) feat(dashboards): Filter status indicators (#10936) (@suddjian)
- [#11432](https://github.com/apache/superset/pull/11432) feat: annotation layers CRUD list view (#11432) (@riahk)
- [#11390](https://github.com/apache/superset/pull/11390) refactor: Replace react-bootstrap Modals with Antd in Datasource (#11390) (@kgabryje)
- [#11446](https://github.com/apache/superset/pull/11446) feat: annotations list CRUD view (#11446) (@lilykuang)
- [#11459](https://github.com/apache/superset/pull/11459) Disabled chaning caret (#11459) (@kkucharc)
- [#11457](https://github.com/apache/superset/pull/11457) docs: improve docs and update apache release scripts (#11457) (@dpgaspar)
- [#11455](https://github.com/apache/superset/pull/11455) enabled skipped tests in AdhocMetrics Cypress (#11455) (@adam-stasiak)
- [#11428](https://github.com/apache/superset/pull/11428) fix: Explore popovers issues (#11428) (@kgabryje)
- [#11437](https://github.com/apache/superset/pull/11437) fix: add init.py to the annotations module (#11437) (@bkyryliuk)
- [#11401](https://github.com/apache/superset/pull/11401) fix: a space adds the space. (#11401) (@rusackas)
- [#11453](https://github.com/apache/superset/pull/11453) fix: Fixing broken Cypress test (#11453) (@rusackas)
- [#11366](https://github.com/apache/superset/pull/11366) refactor: Use Antd Modals instead of react-bootstrap Modals (#11366) (@kgabryje)
- [#11309](https://github.com/apache/superset/pull/11309) chore: cypress selectors refactor in explore module (#11309) (@adam-stasiak)
- [#11312](https://github.com/apache/superset/pull/11312) chore: Cypress chart selectors refactor (#11312) (@adam-stasiak)
- [#11414](https://github.com/apache/superset/pull/11414) fix: [email report] add multiple schedules per hour (#11414) (@graceguo-supercat)
- [#11397](https://github.com/apache/superset/pull/11397) feat: add UUID column to saved_query for export/import (#11397) (@betodealmeida)
- [#11439](https://github.com/apache/superset/pull/11439) fix filter highlighting (#11439) (@suddjian)
- [#11444](https://github.com/apache/superset/pull/11444) fix: bump FAB to 3.1.1 (#11444) (@dpgaspar)
- [#11407](https://github.com/apache/superset/pull/11407) fix: added meaningful exception for loading births error (#11407) (@kkucharc)
- [#11315](https://github.com/apache/superset/pull/11315) chore: Update testconn logic (#11315) (@john-bodley)
- [#10645](https://github.com/apache/superset/pull/10645) feat: enable metadata sync for virtual tables (#10645) (@villebro)
- [#11429](https://github.com/apache/superset/pull/11429) fix: is_temporal should be overridden by is_dttm value (#11429) (@villebro)
- [#11427](https://github.com/apache/superset/pull/11427) Moved css of inline inputs of DateFilterControl to css of FilterBox where it appears. (#11427) (@kkucharc)
- [#11412](https://github.com/apache/superset/pull/11412) fix: multiple issues with FilterPopover (#11412) (@mistercrunch)
- [#11327](https://github.com/apache/superset/pull/11327) Configured babel plugin for removing data-test from production code (#11327) (@adam-stasiak)
- [#11424](https://github.com/apache/superset/pull/11424) feat(explore): update the order of datasource dropdown menu (#11424) (@hughhhh)
- [#11371](https://github.com/apache/superset/pull/11371) feat: hide datasource legacy based on featureflag (#11371) (@hughhhh)
- [#11382](https://github.com/apache/superset/pull/11382) fix: better error messages for dashboard properties modal (#11382) (@nytai)
- [#11430](https://github.com/apache/superset/pull/11430) fix: saved query list sort by database (#11430) (@nytai)
- [#11433](https://github.com/apache/superset/pull/11433) build: disable pr reviews for pr-lint action (#11433) (@nytai)
- [#11381](https://github.com/apache/superset/pull/11381) fix: better error message for chart properties modal (#11381) (@nytai)
- [#10724](https://github.com/apache/superset/pull/10724) Let the header wrap! (#10724) (@rusackas)
- [#11330](https://github.com/apache/superset/pull/11330) refactor: Use Modals from Antd instead of react-bootstrap (#11330) (@kgabryje)
- [#11391](https://github.com/apache/superset/pull/11391) feat: saved queries with execution info (#11391) (@dpgaspar)
- [#11392](https://github.com/apache/superset/pull/11392) fix: keeping Markdown content while resizing window on Dashboard (#11392) (@kkucharc)
- [#11423](https://github.com/apache/superset/pull/11423) Moved frame from below to currently focused window (#11423) (@kkucharc)
- [#11239](https://github.com/apache/superset/pull/11239) refactor: Replace usages of reactable in TimeTable (#11239) (@kgabryje)
- [#11417](https://github.com/apache/superset/pull/11417) fix(examples): specify 'time_range_endpoints' to prevent toast warning (#11417) (@mistercrunch)
- [#11422](https://github.com/apache/superset/pull/11422) docs: Update Dremio doc with Arrow Flight connection details (#11422) (@narendrans)
- [#11421](https://github.com/apache/superset/pull/11421) chore: upgrade TypeScript (3.8.3 -> 4.0.3) (#11421) (@ktmud)
- [#11415](https://github.com/apache/superset/pull/11415) style: fix labels vertical align (#11415) (@mistercrunch)
- [#11420](https://github.com/apache/superset/pull/11420) fix: error handling for webpack proxy (#11420) (@ktmud)
- [#11416](https://github.com/apache/superset/pull/11416) refactor: typing for explore Control and messageToasts (#11416) (@ktmud)
- [#11336](https://github.com/apache/superset/pull/11336) feat(dashboard): fetch charts by owners instead of created_by (#11336) (@nytai)
- [#11375](https://github.com/apache/superset/pull/11375) chore: Fixed skipped cypress test - refresh dashboard function (#11375) (@adam-stasiak)
- [#11342](https://github.com/apache/superset/pull/11342) chore: Button cruft cleanup (#11342) (@rusackas)
- [#11395](https://github.com/apache/superset/pull/11395) refactor: Use Antd Dropdown instead of react-bootstrap in DatasourceControl (#11395) (@kgabryje)
- [#11344](https://github.com/apache/superset/pull/11344) feat: annotations REST API (#11344) (@dpgaspar)
- [#11396](https://github.com/apache/superset/pull/11396) fix dataset editor for saving schema (#11396) (@lilykuang)
- [#11351](https://github.com/apache/superset/pull/11351) feat: export dashboards as ZIP files (#11351) (@betodealmeida)
- [#11400](https://github.com/apache/superset/pull/11400) fix: long labels now truncate with ellipsis (#11400) (@rusackas)
- [#11398](https://github.com/apache/superset/pull/11398) docs: Add semantic prefix info for PR titles (#11398) (@robdiciuccio)
- [#11335](https://github.com/apache/superset/pull/11335) fix: change chart title by clicking (#11335) (@lilykuang)
- [#11403](https://github.com/apache/superset/pull/11403) build: bump pr-lint-action (#11403) (@nytai)
- [#11129](https://github.com/apache/superset/pull/11129) docs: fix typo (#11129) (@curlup)
- [#10834](https://github.com/apache/superset/pull/10834) fix: dashboard edit/save errors (#10834) (@eschutho)
- [#11211](https://github.com/apache/superset/pull/11211) refactor: Replace react-bootstrap tabs with Antd tabs on Profile (#11211) (@kgabryje)
- [#11240](https://github.com/apache/superset/pull/11240) refactor: Replace usages of reactable in TableLoader (#11240) (@kgabryje)
- [#11376](https://github.com/apache/superset/pull/11376) build: let webpack proxy server handle more content encoding (#11376) (@ktmud)
- [#11369](https://github.com/apache/superset/pull/11369) fix: dashboard cache invalid join query (#11369) (@ktmud)
- [#11349](https://github.com/apache/superset/pull/11349) feat: export charts as ZIP files (#11349) (@betodealmeida)
- [#11332](https://github.com/apache/superset/pull/11332) feat: export datasets as ZIP files (#11332) (@betodealmeida)
- [#11383](https://github.com/apache/superset/pull/11383) style: improve the "Create New Chart" screen's usability (#11383) (@mistercrunch)
- [#11386](https://github.com/apache/superset/pull/11386) docs: add VLMedia to users list (#11386) (@iercan)
- [#11362](https://github.com/apache/superset/pull/11362) feat: add statsd metrics to FAB rest API post, put and delete (#11362) (@dpgaspar)
- [#11346](https://github.com/apache/superset/pull/11346) perf(api): improve API info performance (#11346) (@dpgaspar)
- [#11372](https://github.com/apache/superset/pull/11372) removing outlines on a few key elements (#11372) (@rusackas)
- [#11026](https://github.com/apache/superset/pull/11026) docs: Fix typo in installing from scratch (#11026) (@philipqnguyen)
- [#11334](https://github.com/apache/superset/pull/11334) chore(prophet): ignore logged warning for missing plotly package (#11334) (@villebro)
- [#11271](https://github.com/apache/superset/pull/11271) feat: CSS Templates List Actions (#11271) (@riahk)
- [#11367](https://github.com/apache/superset/pull/11367) Fix overflowing tabs (#11367) (@kgabryje)
- [#11374](https://github.com/apache/superset/pull/11374) Log warning for failure to get table/view names from DB (#11374) (@robdiciuccio)
- [#11354](https://github.com/apache/superset/pull/11354) style(sqllab): wrap text in monospace db-provided error messages (#11354) (@mistercrunch)
- [#11338](https://github.com/apache/superset/pull/11338) fix: 'Save Chart' modal's dashboard dropdown isn't sticky (#11338) (@mistercrunch)
- [#11355](https://github.com/apache/superset/pull/11355) style: make <Label/> not uppercase (#11355) (@mistercrunch)
- [#11340](https://github.com/apache/superset/pull/11340) feat: adding feature flags to escape/hide html in markdown (#11340) (@rusackas)
- [#11286](https://github.com/apache/superset/pull/11286) fix: saved_query search on schema and database not working (#11286) (@dpgaspar)
- [#11348](https://github.com/apache/superset/pull/11348) fix: Allow "EXPLAIN" queries when "Allow DML" setting is False (#11348) (@hughhhh)
- [#11337](https://github.com/apache/superset/pull/11337) fix(listview): hide actions column if no actions are allowed (#11337) (@nytai)
- [#11353](https://github.com/apache/superset/pull/11353) style: using correct + icon on New Query button (#11353) (@rusackas)
- [#11169](https://github.com/apache/superset/pull/11169) docs: add a roadmap page pointing to SIP-53 (#11169) (@mistercrunch)
- [#11274](https://github.com/apache/superset/pull/11274) fix: error around latest partition in BigQuery (#11274) (@mistercrunch)
- [#11227](https://github.com/apache/superset/pull/11227) style(menu): clean up right menu - leaving only "Settings" (#11227) (@mistercrunch)
- [#11343](https://github.com/apache/superset/pull/11343) Fix tabs switching in SouthPane (#11343) (@kgabryje)
- [#11296](https://github.com/apache/superset/pull/11296) feat: css template add/edit modal (#11296) (@lilykuang)
- [#11218](https://github.com/apache/superset/pull/11218) fix: update table_name and schema on dataset editor (#11218) (@lilykuang)
- [#11313](https://github.com/apache/superset/pull/11313) tests: Parameterize some tests in alerts_tests.py (#11313) (@hnle)
- [#11280](https://github.com/apache/superset/pull/11280) chore: Dashboard cypress refactor (#11280) (@adam-stasiak)
- [#11241](https://github.com/apache/superset/pull/11241) refactor: Replace usages of reactable in ChangeDatasourceModal (#11241) (@kgabryje)
- [#11163](https://github.com/apache/superset/pull/11163) refactor: Replace usages of Popover from react-bootstrap with Antd (#11163) (@kgabryje)
- [#11279](https://github.com/apache/superset/pull/11279) refactor: replace AvatarIcon instances with FacePile (#11279) (@nytai)
- [#11290](https://github.com/apache/superset/pull/11290) tests: added fixtures to created dashboards and updated test with proper value (#11290) (@kkucharc)
- [#11333](https://github.com/apache/superset/pull/11333) Fix: bring back type ignore for config import (#11333) (@kkucharc)
- [#11326](https://github.com/apache/superset/pull/11326) fix(chart-api): cached-indicator always shows value is cached (#11326) (@villebro)
- [#11216](https://github.com/apache/superset/pull/11216) refactor: Refactor QueryTable to use react-table (#11216) (@kgabryje)
- [#11259](https://github.com/apache/superset/pull/11259) chore: make config ENABLE_REACT_CRUD_VIEWS = True by default (#11259) (@mistercrunch)
- [#11303](https://github.com/apache/superset/pull/11303) Fix overflowing tab's styling in TabbedSqlEditors (#11303) (@kgabryje)
- [#11229](https://github.com/apache/superset/pull/11229) feat: export databases as a ZIP bundle (#11229) (@betodealmeida)
- [#11305](https://github.com/apache/superset/pull/11305) fix: should update last_modified_time in client-side after save dash (#11305) (@graceguo-supercat)
- [#11300](https://github.com/apache/superset/pull/11300) fix CTAS and CVAS buttons invisible (#11300) (@zhaoyongjie)
- [#11294](https://github.com/apache/superset/pull/11294) feat: update time_compare description and choices (#11294) (@etr2460)
- [#11187](https://github.com/apache/superset/pull/11187) fix: button translations missing (#11187) (@rubenSastre)
- [#11293](https://github.com/apache/superset/pull/11293) fix: use dashboard id for stable cache key (#11293) (@ktmud)
- [#11278](https://github.com/apache/superset/pull/11278) fix: add schema name to datasource field in chart list (#11278) (@nytai)
- [#11287](https://github.com/apache/superset/pull/11287) fix: Fix styling in SqlLab when tabs overflow (#11287) (@kgabryje)
- [#11254](https://github.com/apache/superset/pull/11254) chore: Added data-test attributes for testing (#11254) (@adam-stasiak)
- [#11273](https://github.com/apache/superset/pull/11273) fix: delete the correct dashboard cache key (#11273) (@ktmud)
- [#11260](https://github.com/apache/superset/pull/11260) fix(query search): use new api to fetch users (#11260) (@nytai)
- [#11270](https://github.com/apache/superset/pull/11270) Revert "fix: keep placeholder in multivalue select when a value exists (#11181)" (#11270) (@etr2460)
- [#11249](https://github.com/apache/superset/pull/11249) Refactored api_tests in charts. Split filter test into several unit tests cases. Added table id based on database id (#11249) (@kkucharc)
- [#11217](https://github.com/apache/superset/pull/11217) refactor: Implement TableView component (#11217) (@kgabryje)
- [#11222](https://github.com/apache/superset/pull/11222) refactor: use contextmanager for event_logger decorators (#11222) (@ktmud)
- [#11256](https://github.com/apache/superset/pull/11256) docs: add note about migration in #11098 to Changelog (#11256) (@betodealmeida)
- [#11233](https://github.com/apache/superset/pull/11233) chore(engine): adapt postgres backend connection URI (#11233) (@zhaoyongjie)
- [#11261](https://github.com/apache/superset/pull/11261) docs: Add utair to list of companies using Apache Superset (#11261) (@dmitrijkir)
- [#11193](https://github.com/apache/superset/pull/11193) fix: do not import superset_config on tests (#11193) (@betodealmeida)
- [#11258](https://github.com/apache/superset/pull/11258) update dashboard edit modal (#11258) (@lilykuang)
- [#11234](https://github.com/apache/superset/pull/11234) perf: cache dashboard bootstrap data (#11234) (@ktmud)
- [#11252](https://github.com/apache/superset/pull/11252) fix: improve time compare range error (#11252) (@etr2460)
- [#11242](https://github.com/apache/superset/pull/11242) docs: don't link to database engine pages (#11242) (@mistercrunch)
- [#11181](https://github.com/apache/superset/pull/11181) fix: keep placeholder in multivalue select when a value exists (#11181) (@eschutho)
- [#11209](https://github.com/apache/superset/pull/11209) perf: speed up uuid column generation (#11209) (@ktmud)
- [#11228](https://github.com/apache/superset/pull/11228) test: add admin to the owners of birth_names slices (#11228) (@ktmud)
- [#11246](https://github.com/apache/superset/pull/11246) fix: Ensure consistent naming for testconn (#11246) (@john-bodley)
- [#11210](https://github.com/apache/superset/pull/11210) fix: show TIME COLUMN options in dashboard (#11210) (@graceguo-supercat)
- [#11220](https://github.com/apache/superset/pull/11220) feat: prevent co-edit dashboard collision (#11220) (@graceguo-supercat)
- [#11244](https://github.com/apache/superset/pull/11244) chore: deprecate REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD (#11244) (@etr2460)
- [#11153](https://github.com/apache/superset/pull/11153) fix: questioning a few lines that force an ORDER clause (#11153) (@mistercrunch)
- [#11231](https://github.com/apache/superset/pull/11231) docs: Added Dremio to superset home page (#11231) (@narendrans)
- [#11223](https://github.com/apache/superset/pull/11223) chore: Leverage SQLALchemy ping rather than explicit SELECT 1 for testconn (#11223) (@john-bodley)
- [#11230](https://github.com/apache/superset/pull/11230) fix(cypress): table viz failed to run in postgres12 (#11230) (@zhaoyongjie)
- [#11225](https://github.com/apache/superset/pull/11225) fix: adding nofollow (#11225) (@rusackas)
- [#11212](https://github.com/apache/superset/pull/11212) refactor: Replace react-bootstrap tabs with Antd tabs in SqlLab (#11212) (@kgabryje)
- [#11179](https://github.com/apache/superset/pull/11179) chore: simplify alerting data model to leverage a single class (#11179) (@bkyryliuk)
- [#11189](https://github.com/apache/superset/pull/11189) feat: CSS Templates List (#11189) (@riahk)
- [#11101](https://github.com/apache/superset/pull/11101) style(listview): various changes to get closer to SIP-34 designs (#11101) (@nytai)
- [#11214](https://github.com/apache/superset/pull/11214) Changed cache uid to be depending on table in test_csv_response_format (#11214) (@kkucharc)
- [#11213](https://github.com/apache/superset/pull/11213) test: test_cache_logging is not depending on other dashboard (#11213) (@kkucharc)
- [#11208](https://github.com/apache/superset/pull/11208) chore: Add __pycache__ to gitignore (#11208) (@ktmud)
- [#11204](https://github.com/apache/superset/pull/11204) Fix typo "insode" -> "inside" (#11204) (@jharding-blw)
- [#11203](https://github.com/apache/superset/pull/11203) fix: revert eTag cache feature for dashboard (#11203) (@graceguo-supercat)
- [#11196](https://github.com/apache/superset/pull/11196) fix: skip unit test that is failing in master for test-postgres-hive (#11196) (@betodealmeida)
- [#11172](https://github.com/apache/superset/pull/11172) chore: turn SQL templating off by default (#11172) (@dpgaspar)
- [#11194](https://github.com/apache/superset/pull/11194) Revert "refactor: Replace react-bootstrap tabs with Antd tabs (#11090)" (#11194) (@john-bodley)
- [#11098](https://github.com/apache/superset/pull/11098) feat: add UUID column to ImportMixin (#11098) (@betodealmeida)
- [#11155](https://github.com/apache/superset/pull/11155) chore: cleanup FAB update perms (#11155) (@john-bodley)
- [#11131](https://github.com/apache/superset/pull/11131) test: removed unicode_test example from unit tests (#11131) (@kkucharc)
- [#11173](https://github.com/apache/superset/pull/11173) fix(viz): downgrade exception for missing viz/datasource (#11173) (@villebro)
- [#11180](https://github.com/apache/superset/pull/11180) fixed undefined names error (#11180) (@lilykuang)
- [#11164](https://github.com/apache/superset/pull/11164) fix: save query modal/button styling + convert to ant-d modal (#11164) (@riahk)
- [#11176](https://github.com/apache/superset/pull/11176) fix: cosmetic issue template (#11176) (@mistercrunch)
- [#11175](https://github.com/apache/superset/pull/11175) chore: remove SIP_34_SAVED_QUERIES_UI feature flag (#11175) (@lilykuang)
- [#11174](https://github.com/apache/superset/pull/11174) chore: add issue template for 'Cosmetic Issue' (#11174) (@mistercrunch)
- [#11168](https://github.com/apache/superset/pull/11168) fix: 📜 `/docs/api` won't render (#11168) (@mistercrunch)
- [#11170](https://github.com/apache/superset/pull/11170) style(dashboard): minor improvements to chart context menu (#11170) (@mistercrunch)
- [#11056](https://github.com/apache/superset/pull/11056) style: fix too light form labels in DatabaseModal + DRY css (#11056) (@mistercrunch)
- [#11075](https://github.com/apache/superset/pull/11075) style(sqllab): make database errors more clear and render as monospace (#11075) (@mistercrunch)
- [#11137](https://github.com/apache/superset/pull/11137) fix: enable consistent etag across workers and force no-cache for dashboards (#11137) (@ktmud)
- [#11055](https://github.com/apache/superset/pull/11055) chore: more 'datasource' -> 'dataset' renaming (#11055) (@mistercrunch)
- [#11108](https://github.com/apache/superset/pull/11108) Remove erroneous package-lock.json (#11108) (@robdiciuccio)
- [#11135](https://github.com/apache/superset/pull/11135) feat: saved query preview modal (#11135) (@lilykuang)
- [#11040](https://github.com/apache/superset/pull/11040) allow passing bash args into the pytest (#11040) (@amitmiran137)
- [#11152](https://github.com/apache/superset/pull/11152) docs: typo (#11152) (@jolange)
- [#11154](https://github.com/apache/superset/pull/11154) docs: add API page to docs using Swagger UI (#11154) (@mistercrunch)
- [#11143](https://github.com/apache/superset/pull/11143) chore: Remove obsolete creating missing metric permissions (#11143) (@john-bodley)
- [#11150](https://github.com/apache/superset/pull/11150) Revert "refactor: Remove usages of reactable from TimeTable (#11046)" (#11150) (@etr2460)
- [#11145](https://github.com/apache/superset/pull/11145) fix: fixing CI workflow (#11145) (@henryyeh)
- [#11058](https://github.com/apache/superset/pull/11058) fix: Enable ESLint rule default-props-match-prop-types (#11058) (@kgabryje)
- [#11120](https://github.com/apache/superset/pull/11120) fix: clean up prop type errors in jest tests (#11120) (@eschutho)
- [#11090](https://github.com/apache/superset/pull/11090) refactor: Replace react-bootstrap tabs with Antd tabs (#11090) (@kgabryje)
- [#10924](https://github.com/apache/superset/pull/10924) perf(explore): render datasource details only when needed (#10924) (@ktmud)
- [#11139](https://github.com/apache/superset/pull/11139) style: override ace edit error icon (#11139) (@nytai)
### 0.38.0 (Mon Nov 17 07:23:54 2020 +00:00)
- [#11724](https://github.com/apache/superset/pull/11724) fix: prior npm font source had a glitch (#11724) (@rusackas)
- [#11718](https://github.com/apache/superset/pull/11718) refactor: Load fonts from packages rather than local binaries (#11718) (@rusackas)

View File

@@ -41,6 +41,7 @@ little bit helps, and credit will always be given.
- [Reviewing](#reviewing)
- [Merging](#merging)
- [Post-merge Responsibility](#post-merge-responsibility)
- [Capitalization Guidelines](#capitalization-guidelines)
- [Managing Issues and PRs](#managing-issues-and-prs)
- [Reporting a Security Vulnerability](#reporting-a-security-vulnerability)
- [Revert Guidelines](#revert-guidelines)
@@ -81,6 +82,7 @@ little bit helps, and credit will always be given.
- [Adding a DB migration](#adding-a-db-migration)
- [Merging DB migrations](#merging-db-migrations)
- [SQL Lab Async](#sql-lab-async)
- [Async Chart Queries](#async-chart-queries)
- [Chart Parameters](#chart-parameters)
- [Datasource & Chart Type](#datasource--chart-type)
- [Time](#time)
@@ -246,6 +248,52 @@ Finally, never submit a PR that will put master branch in broken state. If the P
- Project maintainers may contact the PR author if new issues are introduced by the PR.
- Project maintainers may revert your changes if a critical issue is found, such as breaking master branch CI.
## Capitalization Guidelines
### Sentence case
Use sentence-case capitalization for everything in the UI (except these \*\*).
Sentence case is predominantly lowercase. Capitalize only the initial character of the first word, and other words that require capitalization, like:
- Proper nouns. Objects in the product are not considered proper nouns e.g. dashboards, charts, saved queries etc. Proprietary feature names eg. SQL Lab, Preset Manager are considered proper nouns
- Acronyms (e.g. CSS, HTML)
- When referring to **UI labels that are themselves capitalized** from sentence case (e.g. page titles - Dashboards page, Charts page, Saved queries page, etc.)
- User input that is reflected in the UI. E.g. a user-named a dashboard tab
#### Sentence case vs. Title case:
Title case: "A Dog Takes a Walk in Paris"
Sentence case: "A dog takes a walk in Paris"
#### Why sentence case?
- Its generally accepted as the quickest to read
- Its the easiest form to distinguish between common and proper nouns
### How to refer to UI elements
When writing about a UI element, use the same capitalization as used in the UI.
For example, if an input field is labeled “Name” then you refer to this as the “Name input field”. Similarly, if a button has the label “Save” in it, then it is correct to refer to the “Save button”.
Where a product page is titled “Settings”, you refer to this in writing as follows:
“Edit your personal information on the Settings page”.
Often a product page will have the same title as the objects it contains. In this case, refer to the page as it appears in the UI, and the objects as common nouns:
- Upload a dashboard on the Dashboards page
- Go to Dashboards
- View dashboard
- View all dashboards
- Upload CSS templates on the CSS templates page
- Queries that you save will appear on the Saved queries page
- Create custom queries in SQL Lab then create dashboards
### \*\*Exceptions to sentence case:
- Input labels, buttons and tabs are all caps
## Managing Issues and PRs
To handle issues and PRs that are coming in, committers read issues/PRs and flag them with labels to categorize and help contributors spot where to take actions, as contributors usually have different expertises.
@@ -624,6 +672,7 @@ npm run test
```
To run a single test file:
```bash
npm run test -- path/to/file.js
```
@@ -675,14 +724,14 @@ See [`superset-frontend/cypress_build.sh`](https://github.com/apache/superset/bl
As an alternative you can use docker-compose environment for testing:
Make sure you have added below line to your /etc/hosts file:
```127.0.0.1 db```
`127.0.0.1 db`
If you already have launched Docker environment please use the following command to assure a fresh database instance:
```docker-compose down -v```
`docker-compose down -v`
Launch environment:
```CYPRESS_CONFIG=true docker-compose up```
`CYPRESS_CONFIG=true docker-compose up`
It will serve backend and frontend on port 8088.
@@ -746,22 +795,35 @@ LANGUAGES = {
### Extracting new strings for translation
```bash
flask fab babel-extract --target superset/translations --output superset/translations/messages.pot --config superset/translations/babel.cfg -k _ -k __ -k t -k tn -k tct
pybabel extract -F superset/translations/babel.cfg -o superset/translations/messages.pot -k _ -k __ -k t -k tn -k tct .
```
This will update the template file `superset/translations/messages.pot` with current application strings. Do not forget to update
this file with the appropriate license information.
### Updating language files
```bash
pybabel update -i superset/translations/messages.pot -d superset/translations --ignore-obsolete
```
This will update language files with the new extracted strings.
You can then translate the strings gathered in files located under
`superset/translation`, where there's one per language. You can use [Poedit](https://poedit.net/features)
to translate the `po` file more conveniently.
There are some [tutorials in the wiki](https://wiki.lxde.org/en/Translate_*.po_files_with_Poedit).
For the translations to take effect:
In the case of JS translation, we need to convert the PO file into a JSON file, and we need the global download of the npm package po2json.
```bash
# In the case of JS translation, we need to convert the PO file into a JSON file, and we need the global download of the npm package po2json.
npm install -g po2json
flask fab babel-compile --target superset/translations
# Convert the en PO file into a JSON file
po2json -d superset -f jed1.x superset/translations/en/LC_MESSAGES/messages.po superset/translations/en/LC_MESSAGES/messages.json
```
To convert all PO files to formatted JSON files you can use the `po2json.sh` script.
```bash
./scripts/po2json.sh
```
If you get errors running `po2json`, you might be running the Ubuntu package with the same
@@ -771,6 +833,12 @@ the executable path (e.g. `/usr/local/bin/po2json` instead of `po2json`).
If you get a lot of `[null,***]` in `messages.json`, just delete all the `null,`.
For example, `"year":["年"]` is correct while `"year":[null,"年"]`is incorrect.
For the translations to take effect we need to compile translation catalogs into binary MO files.
```bash
pybabel compile -d superset/translations
```
### Creating a new language dictionary
To create a dictionary for a new language, run the following, where `LANGUAGE_CODE` is replaced with
@@ -969,6 +1037,29 @@ Note that:
to your production environment, and use the similar broker as well as
results backend configuration
### Async Chart Queries
It's possible to configure database queries for charts to operate in `async` mode. This is especially useful for dashboards with many charts that may otherwise be affected by browser connection limits. To enable async queries for dashboards and Explore, the following dependencies are required:
- Redis 5.0+ (the feature utilizes [Redis Streams](https://redis.io/topics/streams-intro))
- Cache backends enabled via the `CACHE_CONFIG` and `DATA_CACHE_CONFIG` config settings
- Celery workers configured and running to process async tasks
The following configuration settings are available for async queries (see config.py for default values)
- `GLOBAL_ASYNC_QUERIES` (feature flag) - enable or disable async query operation
- `GLOBAL_ASYNC_QUERIES_REDIS_CONFIG` - Redis connection info
- `GLOBAL_ASYNC_QUERIES_REDIS_STREAM_PREFIX` - the prefix used with Redis Streams
- `GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT` - the maximum number of events for each user-specific event stream (FIFO eviction)
- `GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE` - the maximum number of events for all users (FIFO eviction)
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME` - the async query feature uses a [JWT](https://tools.ietf.org/html/rfc7519) cookie for authentication, this setting is the cookie's name
- `GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE` - JWT cookie secure option
- `GLOBAL_ASYNC_QUERIES_JWT_SECRET` - JWT's use a secret key to sign and validate the contents. This value should be at least 32 bytes and have sufficient randomness for proper security
- `GLOBAL_ASYNC_QUERIES_TRANSPORT` - currently the only available option is (HTTP) `polling`, but support for a WebSocket will be added in future versions
- `GLOBAL_ASYNC_QUERIES_POLLING_DELAY` - the time (in ms) between polling requests
More information on the async query feature can be found in [SIP-39](https://github.com/apache/superset/issues/9190).
## Chart Parameters
Chart parameters are stored as a JSON encoded string the `slices.params` column and are often referenced throughout the code as form-data. Currently the form-data is neither versioned nor typed as thus is somewhat free-formed. Note in the future there may be merit in using something like [JSON Schema](https://json-schema.org/) to both annotate and validate the JSON object in addition to using a Mypy `TypedDict` (introduced in Python 3.8) for typing the form-data in the backend. This section serves as a potential primer for that work.

View File

@@ -17,7 +17,7 @@ specific language governing permissions and limitations
under the License.
-->
## Superset users in the wild
## Superset Users in the Wild
Here's a list of organizations, broken down into broad industry categories, that have taken the time to send a PR to let
the world know they are using Apache Superset. If you are a user and want to be recognized,

126
README.md
View File

@@ -38,105 +38,105 @@ Superset
A modern, enterprise-ready business intelligence web application.
[**Why Superset**](#why-superset) |
[**Why Superset?**](#why-superset) |
[**Supported Databases**](#supported-databases) |
[**Installation and Configuration**](#installation-and-configuration) |
[**Release Notes**](RELEASING/release-notes-0-38/README.md) |
[**Get Help**](#get-help) |
[**Get Involved**](#get-involved) |
[**Contributor Guide**](#contributor-guide) |
[**Resources**](#resources) |
[**Superset Users**](INTHEWILD.md)
[**Organizations Using Superset**](INTHEWILD.md)
## Screenshots & Gifs
**Gallery**
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/gallery.png"></a></kbd><br/>
<kbd><a href="https://superset.apache.org/gallery"><img title="Gallery" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/gallery.jpg"></a></kbd><br/>
**View Dashboards**
<kbd><img title="View Dashboards" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/bank_dash.png"></kbd><br/>
<kbd><img title="View Dashboards" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/slack_dash.jpg"></kbd><br/>
**Slice & dice your data**
<kbd><img title="Slice & dice your data" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/explore.png"></kbd><br/>
<kbd><img title="Slice & dice your data" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/explore.jpg"></kbd><br/>
**Query and visualize your data with SQL Lab**
<kbd><img title="SQL Lab" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/sqllab.png"></kbd><br/>
<kbd><img title="SQL Lab" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/sql_lab.jpg"></kbd><br/>
**Visualize geospatial data with deck.gl**
<kbd><img title="Geospatial" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/deckgl_dash.png"></kbd><br/>
<kbd><img title="Geospatial" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/geospatial_dash.jpg"></kbd><br/>
**Choose from a wide array of visualizations**
<kbd><img title="Visualizations" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/visualizations.png"></kbd><br/>
<kbd><img title="Visualizations" src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/screenshots/explore_visualizations.jpg"></kbd><br/>
## Why Superset
## Why Superset?
Superset provides:
* An intuitive interface to explore and visualize datasets, and
create interactive dashboards
* A wide array of beautiful visualizations to showcase your data.
* Easy, code-free, user flows to drill down and slice and dice the data
underlying exposed dashboards. The dashboards and charts act as a starting
point for deeper analysis
* A state of the art SQL editor/IDE exposing a rich metadata browser, and
an easy workflow to create visualizations out of any result set.
* An extensible, high granularity security model allowing intricate rules
on who can access which product features and datasets.
Integration with major
authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, ...)
* A lightweight semantic layer, allowing to control how data sources are
exposed to the user by defining dimensions and metrics
* Out of the box support for most SQL-speaking databases
* Deep integration with Druid allows for Superset to stay blazing fast while
slicing and dicing large, realtime datasets
* Fast loading dashboards with configurable caching
* An intuitive interface for visualizing datasets and
crafting interactive dashboards
* A wide array of beautiful visualizations to showcase your data
* Code-free visualization builder to extract and present datasets
* A world-class SQL IDE for preparing data for visualization, including a rich metadata browser
* A lightweight semantic layer which empowers data analysts to quickly define custom dimensions and metrics
* Out-of-the-box support for most SQL-speaking databases
* Seamless, in-memory asynchronous caching and queries
* An extensible security model that allows configuration of very intricate rules on
on who can access which product features and datasets.
* Integration with major
authentication backends (database, OpenID, LDAP, OAuth, REMOTE_USER, etc)
* The ability to add custom visualization plugins
* An API for programmatic customization
* A cloud-native archiecture designed from the ground up for scale
## Supported Databases
Superset speaks many SQL dialects through SQLAlchemy - a Python
SQL toolkit that is compatible with most databases. Here are some of the major database solutions that are supported:
Superset can query data from any SQL-speaking datastore or data engine (e.g. Presto or Athena) that has a Python DB-API driver and a SQLAlchemy dialect.
Here are some of the major database solutions that are supported:
<p align="center">
<img src="superset-frontend/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
<img src="superset-frontend/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
<img src="superset-frontend/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
<img src="superset-frontend/images/presto.png" alt="presto" border="0" width="152" height="46"/>
<img src="superset-frontend/images/druid.png" alt="druid" border="0" width="135" height="37" />
<img src="superset-frontend/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
<img src="superset-frontend/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
<img src="superset-frontend/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
<img src="superset-frontend/images/db2.png" alt="db2" border="0" width="62" height="62" />
<img src="superset-frontend/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
<img src="superset-frontend/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
<img src="superset-frontend/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
<img src="superset-frontend/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
<img src="superset-frontend/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
<img src="superset-frontend/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
<img src="superset-frontend/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
<img src="superset-frontend/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
<img src="superset-frontend/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
<img src="superset-frontend/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
<img src="superset-frontend/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/redshift.png" alt="redshift" border="0" width="106" height="41"/>
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/google-biquery.png" alt="google-biquery" border="0" width="114" height="43"/>
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/snowflake.png" alt="snowflake" border="0" width="152" height="46"/>
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/presto.png" alt="presto" border="0" width="152" height="46"/>
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/druid.png" alt="druid" border="0" width="135" height="37" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/postgresql.png" alt="postgresql" border="0" width="132" height="81" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mysql.png" alt="mysql" border="0" width="119" height="62" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mssql-server.png" alt="mssql-server" border="0" width="93" height="74" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/db2.png" alt="db2" border="0" width="62" height="62" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/sqlite.png" alt="sqlite" border="0" width="102" height="45" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/sybase.png" alt="sybase" border="0" width="128" height="47" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/mariadb.png" alt="mariadb" border="0" width="83" height="63" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/vertica.png" alt="vertica" border="0" width="128" height="40" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/oracle.png" alt="oracle" border="0" width="121" height="66" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/firebird.png" alt="firebird" border="0" width="86" height="56" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/greenplum.png" alt="greenplum" border="0" width="140" height="45" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/clickhouse.png" alt="clickhouse" border="0" width="133" height="34" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/exasol.png" alt="exasol" border="0" width="106" height="59" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/monet-db.png" alt="monet-db" border="0" width="106" height="46" />
<img src="https://raw.githubusercontent.com/apache/superset/master/superset-frontend/images/apache-kylin.png" alt="apache-kylin" border="0" width="56" height="64"/>
</p>
A complete list of supported databases can be found
**A more comprehensive list of supported databases** along with the configuration instructions can be found
[here](https://superset.apache.org/docs/databases/installing-database-drivers).
Want to add support for your datastore or data engine? Read more [here](https://superset.apache.org/docs/frequently-asked-questions#does-superset-work-with-insert-database-engine-here) about the technical requirements.
## Installation and Configuration
[See in the documentation](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose)
[Extended documentation for Superset](https://superset.apache.org/docs/installation/installing-superset-using-docker-compose)
## Get Involved
* Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset)
* Ask and answer questions on [StackOverflow](https://stackoverflow.com/questions/tagged/apache-superset) using the **apache-superset** tag
* [Join our community's Slack](https://join.slack.com/t/apache-superset/shared_invite/zt-g8lpruog-HeqpgYrwdfrD5OYhlU7hPQ)
and please read our [Slack Community Guidelines](CODE_OF_CONDUCT.md#slack-community-guidelines)
* [Join our dev@superset.apache.org Mailing list](https://lists.apache.org/list.html?dev@superset.apache.org)
@@ -152,16 +152,26 @@ how to set up a development environment.
## Resources
* Superset 1.0
* [Superset 1.0 Milestone](https://superset.apache.org/docs/version-one)
* [Superset 1.0 Release Notes](https://github.com/apache/superset/tree/master/RELEASING/release-notes-1-0)
* [Presentation on Superset 1.0 Public Roadmap](https://docs.google.com/presentation/d/1FGgyI8tLWLUPSQ5eEno78bylLfobj9O2W4yoUoFYHH8/edit#slide=id.g9c182b81b9_1_0)
* [Public Superset Roadmap](https://github.com/apache-superset/superset-roadmap/projects/1)
* Superset 101 -- Getting Started Guide (From [Preset Blog](https://preset.io/blog/))
* [Installing Apache Superset Locally](https://preset.io/blog/2020-05-11-getting-started-installing-superset/)
* [Installing Database Drivers](https://preset.io/blog/2020-05-18-install-db-drivers/)
* [Connect Superset To Google Sheets](https://preset.io/blog/2020-06-01-connect-superset-google-sheets/)
* [Create Your First Chart](https://preset.io/blog/2020-06-08-first-chart/)
* [Create Time Series Charts](https://preset.io/blog/2020-06-26-timeseries-chart/)
* [Documentation for End-Users (by Preset)](https://docs.preset.io/)
* [Docker image](https://hub.docker.com/r/apache/superset)
* [Youtube Channel](https://www.youtube.com/channel/UCMuwrvBsg_jjI2gLcm04R0g)
* [May 2020: Virtual Meetup Recording. Topics: 0.36 Overview, Committers Self-Intro, Roadmap](https://www.youtube.com/watch?v=tXGDmqjmcTs&t=20s)
* [July 2020: Virtual Meetup Recording. Topics: Visualization Plugins, 0.37 Preview, Demo](https://www.youtube.com/watch?v=f6up5x_iRbI)
* [November 2020: Superset 1.0](https://www.youtube.com/watch?v=GwtWRUSEjk4)
* [Building Custom Viz Plugins](https://superset.apache.org/docs/installation/building-custom-viz-plugins)
* [Recordings of Community Events](https://www.youtube.com/channel/UCMuwrvBsg_jjI2gLcm04R0g)
* [May 2020: Virtual Meetup. Topics: 0.36 Overview, Committers Self-Intro, Roadmap](https://www.youtube.com/watch?v=tXGDmqjmcTs&t=20s)
* [July 2020: Virtual Meetup. Topics: Visualization Plugins, 0.37 Preview, Demo](https://www.youtube.com/watch?v=f6up5x_iRbI)
* [November 2020: Virtual Meetup. Topics: Superset 1.0 & the Roadmap](https://www.youtube.com/watch?v=GwtWRUSEjk4)
* [November 2020: Live Demo. Topic: Superset Semantic Layer](https://www.youtube.com/watch?v=8VL4ZPLFUYI)
* [December 2020: Live Demo. Topic: Annotations](https://www.youtube.com/watch?v=Yk6bKgphj1Q)
* Custom Visualizations
* [Building Custom Viz Plugins](https://superset.apache.org/docs/installation/building-custom-viz-plugins)
* [Managing and Deploying Custom Viz Plugins](https://medium.com/nmc-techblog/apache-superset-manage-custom-viz-plugins-in-production-9fde1a708e55)
* [Superset API](https://superset.apache.org/docs/rest-api)

View File

@@ -114,6 +114,8 @@ git push upstream $SUPERSET_GITHUB_BRANCH
Next, update the `CHANGELOG.md` with all the changes that are included in the release.
Make sure the branch has been pushed to `upstream` to ensure the changelog generator
can pick up changes since the previous release.
Change log script requires a github token and will try to use your env var GITHUB_TOKEN.
you can also pass the token using the parameter `--access_token`.
Example:
```bash

View File

@@ -17,18 +17,22 @@
# pylint: disable=no-value-for-parameter
import csv as lib_csv
import json
import os
import re
import sys
from dataclasses import dataclass
from time import sleep
from typing import Any, Dict, Iterator, List, Optional, Union
from urllib import request
from urllib.error import HTTPError
import click
try:
from github import BadCredentialsException, Github, PullRequest
except ModuleNotFoundError:
print("PyGithub is a required package for this script")
exit(1)
SUPERSET_REPO = "apache/superset"
@dataclass
class GitLog:
@@ -60,47 +64,31 @@ class GitChangeLog:
We want to map a git author to a github login, for that we call github's API
"""
def __init__(self, version: str, logs: List[GitLog]) -> None:
def __init__(
self, version: str, logs: List[GitLog], access_token: Optional[str] = None
) -> None:
self._version = version
self._logs = logs
self._github_login_cache: Dict[str, Optional[str]] = {}
self._wait = 10
github_token = access_token or os.environ.get("GITHUB_TOKEN")
self._github = Github(github_token)
self._superset_repo = ""
def _wait_github_rate_limit(self) -> None:
"""
Waits for available rate limit slots on the github API
"""
while True:
rate_limit_payload = self._fetch_github_rate_limit()
if rate_limit_payload["rate"]["remaining"] > 1:
break
print(".", end="", flush=True)
sleep(self._wait)
print()
@staticmethod
def _fetch_github_rate_limit() -> Dict[str, Any]:
"""
Fetches current github rate limit info
"""
with request.urlopen("https://api.github.com/rate_limit") as response:
payload = json.loads(response.read())
return payload
def _fetch_github_pr(self, pr_number: int) -> Dict[str, Any]:
def _fetch_github_pr(self, pr_number: int) -> PullRequest:
"""
Fetches a github PR info
"""
payload = {}
try:
self._wait_github_rate_limit()
with request.urlopen(
"https://api.github.com/repos/apache/superset/pulls/" f"{pr_number}"
) as response:
payload = json.loads(response.read())
except HTTPError as ex:
print(f"{ex}", flush=True)
return payload
github_repo = self._github.get_repo(SUPERSET_REPO)
except BadCredentialsException as ex:
print(
f"Bad credentials to github provided"
f" use access_token parameter or set GITHUB_TOKEN"
)
sys.exit(1)
return github_repo.get_pull(pr_number)
def _get_github_login(self, git_log: GitLog) -> Optional[str]:
"""
@@ -113,7 +101,7 @@ class GitChangeLog:
if git_log.pr_number:
pr_info = self._fetch_github_pr(git_log.pr_number)
if pr_info:
github_login = pr_info["user"]["login"]
github_login = pr_info.user.login
else:
github_login = author_name
# set cache
@@ -131,7 +119,7 @@ class GitChangeLog:
github_login = log.author
result = result + (
f"- [#{log.pr_number}]"
f"(https://github.com/apache/superset/pull/{log.pr_number}) "
f"(https://github.com/{SUPERSET_REPO}/pull/{log.pr_number}) "
f"{log.message} (@{github_login})\n"
)
print(f"\r {i}/{len(self._logs)}", end="", flush=True)
@@ -141,7 +129,7 @@ class GitChangeLog:
for log in self._logs:
yield {
"pr_number": log.pr_number,
"pr_link": f"https://github.com/apache/superset/pull/"
"pr_link": f"https://github.com/{SUPERSET_REPO}/pull/"
f"{log.pr_number}",
"message": log.message,
"time": log.time,
@@ -276,13 +264,20 @@ def compare(base_parameters: BaseParameters) -> None:
@click.option(
"--csv", help="The csv filename to export the changelog to",
)
@click.option(
"--access_token",
help="The github access token,"
" if not provided will try to fetch from GITHUB_TOKEN env var",
)
@click.pass_obj
def change_log(base_parameters: BaseParameters, csv: str) -> None:
def change_log(base_parameters: BaseParameters, csv: str, access_token: str) -> None:
""" Outputs a changelog (by PR) """
previous_logs = base_parameters.previous_logs
current_logs = base_parameters.current_logs
previous_diff_logs = previous_logs.diff(current_logs)
logs = GitChangeLog(current_logs.git_ref, previous_diff_logs[::-1])
logs = GitChangeLog(
current_logs.git_ref, previous_diff_logs[::-1], access_token=access_token
)
if csv:
with open(csv, "w") as csv_file:
log_items = list(logs)

View File

@@ -23,6 +23,14 @@ This file documents any backwards-incompatible changes in Superset and
assists people when migrating to a new version.
## Next
# Breaking Changes
# Potential Downtime
# Deprecations
## 1.0.0
# Breaking Changes
- [11509](https://github.com/apache/superset/pull/12491): Dataset metadata updates check user ownership, only owners or an Admin are allowed.
- Security simplification (SIP-19), the following permission domains were simplified:
- [12072](https://github.com/apache/superset/pull/12072): `Query` with `can_read`, `can_write`
- [12036](https://github.com/apache/superset/pull/12036): `Database` with `can_read`, `can_write`.
@@ -35,13 +43,11 @@ assists people when migrating to a new version.
- [11856](https://github.com/apache/superset/pull/11856): `CssTemplate` with `can_read`, `can_write`.
- [11764](https://github.com/apache/superset/pull/11764): `SavedQuery` with `can_read`, `can_write`.
Old permissions will be automatically migrated to these new permissions and applied to all existing security Roles.
- [11499](https://github.com/apache/superset/pull/11499): Breaking change: `STORE_CACHE_KEYS_IN_METADATA_DB` config flag added (default=`False`) to write `CacheKey` records to the metadata DB. `CacheKey` recording was enabled by default previously.
- [11920](https://github.com/apache/superset/pull/11920): Undos the DB migration from [11714](https://github.com/apache/superset/pull/11714) to prevent adding new columns to the logs table. Deploying a sha between these two PRs may result in locking your DB.
- [11704](https://github.com/apache/superset/pull/11704) Breaking change: Jinja templating for SQL queries has been updated, removing default modules such as `datetime` and `random` and enforcing static template values. To restore or extend functionality, use `JINJA_CONTEXT_ADDONS` and `CUSTOM_TEMPLATE_PROCESSORS` in `superset_config.py`.
- [11714](https://github.com/apache/superset/pull/11714): Logs
significantly more analytics events (roughly double?), and when
using DBEventLogger (default) could result in stressing the metadata
database more.
- [11509](https://github.com/apache/superset/pull/11509): Config value `TABLE_NAMES_CACHE_CONFIG` has been renamed to `DATA_CACHE_CONFIG`, which will now also hold query results cache from connected datasources (previously held in `CACHE_CONFIG`), in addition to the table names. If you will set `DATA_CACHE_CONFIG` to a new cache backend different than your previous `CACHE_CONFIG`, plan for additional cache warmup to avoid degrading charting performance for the end users.
- [11575](https://github.com/apache/superset/pull/11575) The Row Level Security (RLS) config flag has been moved to a feature flag. To migrate, add `ROW_LEVEL_SECURITY: True` to the `FEATURE_FLAGS` dict in `superset_config.py`.
@@ -50,14 +56,24 @@ assists people when migrating to a new version.
- [11244](https://github.com/apache/superset/pull/11244): The `REDUCE_DASHBOARD_BOOTSTRAP_PAYLOAD` feature flag has been removed after being set to True for multiple months.
- [11098](https://github.com/apache/superset/pull/11098): includes a database migration that adds a `uuid` column to most models, and updates `Dashboard.position_json` to include chart UUIDs. Depending on number of objects, the migration may take up to 5 minutes, requiring planning for downtime.
- [11172](https://github.com/apache/superset/pull/11172): Turning
off language selectors by default as i18n is incomplete in most languages
and requires more work. You can easily turn on the languages you want
to expose in your environment in superset_config.py
off language selectors by default as i18n is incomplete in most languages
and requires more work. You can easily turn on the languages you want
to expose in your environment in superset_config.py
- [11172](https://github.com/apache/superset/pull/11172): Breaking change: SQL templating is turned off by default. To turn it on set `ENABLE_TEMPLATE_PROCESSING` to True on `FEATURE_FLAGS`
# Potential Downtime
- [11920](https://github.com/apache/superset/pull/11920): Undos the DB migration from [11714](https://github.com/apache/superset/pull/11714) to prevent adding new columns to the logs table. Deploying a sha between these two PRs may result in locking your DB.
- [11714](https://github.com/apache/superset/pull/11714): Logs
significantly more analytics events (roughly double?), and when
using DBEventLogger (default) could result in stressing the metadata
database more.
- [11098](https://github.com/apache/superset/pull/11098): includes a database migration that adds a `uuid` column to most models, and updates `Dashboard.position_json` to include chart UUIDs. Depending on number of objects, the migration may take up to 5 minutes, requiring planning for downtime.
# Deprecations
- [11155](https://github.com/apache/superset/pull/11155): The `FAB_UPDATE_PERMS` config parameter is no longer required as the Superset application correctly informs FAB under which context permissions should be updated.
## 0.38.0

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/incubator-superset:latest-dev
x-superset-image: &superset-image apache/superset:latest-dev
x-superset-depends-on: &superset-depends-on
- db
- redis

View File

@@ -14,7 +14,6 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# This file is included in the final Docker image and SHOULD be overridden when
# deploying the image to prod. Settings configured here are intended for use in local
@@ -66,7 +65,6 @@ REDIS_PORT = get_env_variable("REDIS_PORT")
REDIS_CELERY_DB = get_env_variable("REDIS_CELERY_DB", 0)
REDIS_RESULTS_DB = get_env_variable("REDIS_CELERY_DB", 1)
RESULTS_BACKEND = FileSystemCache("/app/superset_home/sqllab")

View File

@@ -533,6 +533,8 @@ Here's a list of some of the recommended packages.
| Apache Pinot | ``"apache-superset[pinot]"`` | ``pinot+http://CONTROLLER:5436/`` |
| | | ``query?server=http://CONTROLLER:5983/`` |
+------------------+-------------------------------------------------------------------+-------------------------------------------------+
| Apache Solr | ``pip install sqlalchemy-solr`` | ``solr://`` |
+------------------+---------------------------------------+-----------------------------------------------------------------------------+
| Apache Spark SQL | ``"apache-superset[hive]"`` | ``jdbc+hive://`` |
+------------------+-------------------------------------------------------------------+-------------------------------------------------+
| BigQuery | ``"apache-superset[bigquery]"`` | ``bigquery://`` |
@@ -685,6 +687,13 @@ You should then be able to connect to your BigQuery datasets.
To be able to upload data, e.g. sample data, the python library `pandas_gbq` is required.
Apache Solr
------------
The connection string for Apache Solr looks like this ::
solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false]
Elasticsearch
-------------
@@ -1104,6 +1113,32 @@ serialization. This can be disabled by setting ``RESULTS_BACKEND_USE_MSGPACK = F
in your configuration, should any issues arise. Please clear your existing results
cache store when upgrading an existing environment.
**Async queries for dashboards and Explore**
It's also possible to configure database queries for charts to operate in `async` mode.
This is especially useful for dashboards with many charts that may otherwise be affected
by browser connection limits. To enable async queries for dashboards and Explore, the
following dependencies are required:
- Redis 5.0+ (the feature utilizes `Redis Streams <https://redis.io/topics/streams-intro>`_)
- Cache backends enabled via the ``CACHE_CONFIG`` and ``DATA_CACHE_CONFIG`` config settings
- Celery workers configured and running to process async tasks
The following configuration settings are available for async queries (see config.py for default values)
- ``GLOBAL_ASYNC_QUERIES`` (feature flag) - enable or disable async query operation
- ``GLOBAL_ASYNC_QUERIES_REDIS_CONFIG`` - Redis connection info
- ``GLOBAL_ASYNC_QUERIES_REDIS_STREAM_PREFIX`` - the prefix used with Redis Streams
- ``GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT`` - the maximum number of events for each user-specific event stream (FIFO eviction)
- ``GLOBAL_ASYNC_QUERIES_REDIS_STREAM_LIMIT_FIREHOSE`` - the maximum number of events for all users (FIFO eviction)
- ``GLOBAL_ASYNC_QUERIES_JWT_COOKIE_NAME`` - the async query feature uses a `JWT <https://tools.ietf.org/html/rfc7519>`_ cookie for authentication, this setting is the cookie's name
- ``GLOBAL_ASYNC_QUERIES_JWT_COOKIE_SECURE`` - JWT cookie secure option
- ``GLOBAL_ASYNC_QUERIES_JWT_SECRET`` - JWT's use a secret key to sign and validate the contents. This value should be at least 32 bytes and have sufficient randomness for proper security
- ``GLOBAL_ASYNC_QUERIES_TRANSPORT`` - currently the only available option is (HTTP) `polling`, but support for a WebSocket will be added in future versions
- ``GLOBAL_ASYNC_QUERIES_POLLING_DELAY`` - the time (in ms) between polling requests
More information on the async query feature can be found in `SIP-39 <https://github.com/apache/superset/issues/9190>`_.
**Important notes**
* It is important that all the worker nodes and web servers in

View File

@@ -30,6 +30,7 @@ A list of some of the recommended packages.
|[Apache Impala](/docs/databases/impala)|```pip install impala```|```impala://{hostname}:{port}/{database}```|
|[Apache Kylin](/docs/databases/kylin)|```pip install kylinpy```|```kylin://<username>:<password>@<hostname>:<port>/<project>?<param1>=<value1>&<param2>=<value2>```|
|[Apache Pinot](/docs/databases/pinot)|```pip install pinotdb```|```pinot+http://CONTROLLER:5436/ query?server=http://CONTROLLER:5983/```|
|[Apache Solr](/docs/databases/solr)|```pip install sqlalchemy-solr```|```solr://{username}:{password}@{hostname}:{port}/{server_path}/{collection}```
|[Apache Spark SQL](/docs/databases/spark)|```pip install pyhive```|```hive://hive@{hostname}:{port}/{database}```
|[Azure MS SQL](/docs/databases/sqlserver)||```mssql+pymssql://UserName@presetSQL:TestPassword@presetSQL.database.windows.net:1433/TestSchema```
|[Big Query](/docs/databases/bigquery)|```pip install pybigquery```|```bigquery://{project_id}```|
@@ -45,7 +46,7 @@ A list of some of the recommended packages.
|[PostgreSQL](/docs/databases/postgresql)|```pip install psycopg2```|```postgresql://<UserName>:<DBPassword>@<Database Host>/<Database Name>```|
|[Presto](/docs/databases/presto)|```pip install pyhive```|```presto://```|
|[SAP Hana](/docs/databases/hana)|```pip install hdbcli sqlalchemy-hana or pip install apache-superset[hana]```|```hana://{username}:{password}@{host}:{port}```|
|[Snowflake](/docs/databases/snowflake)|```pip install snowflake-sqlalchemy```|```ssnowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}```|
|[Snowflake](/docs/databases/snowflake)|```pip install snowflake-sqlalchemy```|```snowflake://{user}:{password}@{account}.{region}/{database}?role={role}&warehouse={warehouse}```|
|SQLite||```sqlite://```|
|[SQL Server](/docs/databases/sqlserver)|```pip install pymssql```|```mssql://```|
|[Teradata](/docs/databases/teradata)|```pip install sqlalchemy-teradata```|```teradata://{user}:{password}@{host}```|

View File

@@ -0,0 +1,18 @@
---
name: Apache Solr
menu: Connecting to Databases
route: /docs/databases/solr
index: 10
version: 1
---
## Apache Solr
The [sqlalchemy-solr](https://pypi.org/project/sqlalchemy-solr/) library provides a
Python / SQLAlchemy interface to Apache Solr.
The connection string for Solr looks like this:
```
solr://{username}:{password}@{host}:{port}/{server_path}/{collection}[/?use_ssl=true|false]
```

View File

@@ -2,7 +2,7 @@
name: Apache Spark SQL
menu: Connecting to Databases
route: /docs/databases/spark-sql
index: 10
index: 11
version: 1
---

View File

@@ -269,7 +269,10 @@ are typical in basic SQL:
### Does Superset offer a public API?
Yes, a public REST API, and the surface of that API formal is expanding steadily. Some of the
Yes, a public REST API, and the surface of that API formal is expanding steadily. You can read more about this API and
interact with it using Swagger [here](/docs/rest-api).
Some of the
original vision for the collection of endpoints under **/api/v1** was originally specified in
[SIP-17](https://github.com/apache/superset/issues/7259) and constant progress has been
made to cover more and more use cases.
@@ -291,7 +294,6 @@ guarantees and are not recommended but may fit your use case temporarily:
### What Does Hours Offset in the Edit Dataset view do?
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.

View File

@@ -44,7 +44,7 @@ extraEnv: {}
configMountPath: "/app/pythonpath"
image:
repository: apache/incubator-superset
repository: apache/superset
tag: latest
pullPolicy: IfNotPresent

View File

@@ -77,7 +77,7 @@ prison==0.1.3 # via flask-appbuilder
py==1.9.0 # via retry
pyarrow==1.0.1 # via apache-superset
pycparser==2.20 # via cffi
pyjwt==1.7.1 # via flask-appbuilder, flask-jwt-extended
pyjwt==1.7.1 # via apache-superset, flask-appbuilder, flask-jwt-extended
pymeeus==0.3.7 # via convertdate
pyparsing==2.4.7 # via apache-superset, packaging
pyrsistent==0.16.1 # via -r requirements/base.in, jsonschema
@@ -92,12 +92,12 @@ redis==3.5.3 # via apache-superset
retry==0.9.2 # via apache-superset
selenium==3.141.0 # via apache-superset
simplejson==3.17.2 # via apache-superset
six==1.15.0 # via bleach, cryptography, flask-jwt-extended, flask-talisman, holidays, isodate, jsonschema, pathlib2, polyline, prison, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
six==1.15.0 # via bleach, cryptography, flask-jwt-extended, flask-talisman, holidays, isodate, jsonschema, packaging, pathlib2, polyline, prison, pyrsistent, python-dateutil, sqlalchemy-utils, wtforms-json
slackclient==2.5.0 # via apache-superset
sqlalchemy-utils==0.36.8 # via apache-superset, flask-appbuilder
sqlalchemy==1.3.20 # via alembic, apache-superset, flask-sqlalchemy, marshmallow-sqlalchemy, sqlalchemy-utils
sqlparse==0.3.0 # via apache-superset
typing-extensions==3.7.4.3 # via aiohttp, yarl
typing-extensions==3.7.4.3 # via aiohttp, apache-superset, yarl
urllib3==1.25.11 # via selenium
vine==1.3.0 # via amqp, celery
webencodings==0.5.1 # via bleach

View File

@@ -24,3 +24,4 @@ pyhive[hive]>=0.6.1
psycopg2-binary==2.8.5
tableschema
thrift>=0.11.0,<1.0.0
pygithub>=1.54.1,<2.0.0

View File

@@ -1,4 +1,4 @@
# SHA1:ae0364cae066a5cb8fb543c4f568bfcdacb6c1b7
# SHA1:b7181d683bed10ffe4892d2f07bc94a503f46b44
#
# This file is autogenerated by pip-compile-multi
# To update, run:
@@ -11,6 +11,7 @@ boto3==1.16.10 # via tabulator
botocore==1.19.10 # via boto3, s3transfer
cached-property==1.5.2 # via tableschema
certifi==2020.6.20 # via requests
deprecated==1.2.11 # via pygithub
et-xmlfile==1.0.1 # via openpyxl
flask-cors==3.0.9 # via -r requirements/development.in
future==0.18.2 # via pyhive
@@ -24,8 +25,9 @@ openpyxl==3.0.5 # via tabulator
pillow==7.2.0 # via -r requirements/development.in
psycopg2-binary==2.8.5 # via -r requirements/development.in
pydruid==0.6.1 # via -r requirements/development.in
pygithub==1.54.1 # via -r requirements/development.in
pyhive[hive]==0.6.3 # via -r requirements/development.in
requests==2.24.0 # via pydruid, tableschema, tabulator
requests==2.24.0 # via pydruid, pygithub, tableschema, tabulator
rfc3986==1.4.0 # via tableschema
s3transfer==0.3.3 # via boto3
sasl==0.2.1 # via pyhive, thrift-sasl
@@ -34,6 +36,7 @@ tabulator==1.52.5 # via tableschema
thrift-sasl==0.4.2 # via pyhive
thrift==0.13.0 # via -r requirements/development.in, pyhive, thrift-sasl
unicodecsv==0.14.1 # via tableschema, tabulator
wrapt==1.12.1 # via deprecated
xlrd==1.2.0 # via tabulator
# The following packages are considered to be unsafe in a requirements file:

View File

@@ -40,7 +40,6 @@ traitlets==5.0.5 # via ipython
typed-ast==1.4.1 # via astroid
wcwidth==0.2.5 # via prompt-toolkit
websocket-client==0.57.0 # via docker
wrapt==1.12.1 # via astroid
# The following packages are considered to be unsafe in a requirements file:
# pip

27
scripts/po2json.sh Executable file
View File

@@ -0,0 +1,27 @@
# 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.
for file in $( find superset/translations/** );
do
extension=${file##*.}
filename="${file%.*}"
if [ $extension == "po" ]
then
po2json --domain superset --format jed1.x $file $filename.json
./superset-frontend/node_modules/.bin/prettier --write $filename.json
fi
done

View File

@@ -30,7 +30,7 @@ combine_as_imports = true
include_trailing_comma = true
line_length = 88
known_first_party = superset
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,contextlib2,cron_descriptor,croniter,cryptography,dateutil,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,freezegun,geohash,geopy,holidays,humanize,isodate,jinja2,jwt,markdown,markupsafe,marshmallow,msgpack,numpy,pandas,parameterized,parsedatetime,pathlib2,pgsanity,pkg_resources,polyline,prison,pyarrow,pyhive,pyparsing,pytest,pytz,redis,requests,retry,selenium,setuptools,simplejson,slack,sqlalchemy,sqlalchemy_utils,sqlparse,typing_extensions,werkzeug,wtforms,wtforms_json,yaml
known_third_party =alembic,apispec,backoff,bleach,cachelib,celery,click,colorama,contextlib2,cron_descriptor,croniter,cryptography,dateutil,flask,flask_appbuilder,flask_babel,flask_caching,flask_compress,flask_login,flask_migrate,flask_sqlalchemy,flask_talisman,flask_testing,flask_wtf,freezegun,geohash,geopy,holidays,humanize,isodate,jinja2,jwt,markdown,markupsafe,marshmallow,marshmallow_enum,msgpack,numpy,pandas,parameterized,parsedatetime,pathlib2,pgsanity,pkg_resources,polyline,prison,pyarrow,pyhive,pyparsing,pytest,pytz,redis,requests,retry,selenium,setuptools,simplejson,slack,sqlalchemy,sqlalchemy_utils,sqlparse,typing_extensions,werkzeug,wtforms,wtforms_json,yaml
multi_line_output = 3
order_by_type = false

View File

@@ -97,6 +97,7 @@ setup(
"python-geohash",
"pyarrow>=1.0.1, <1.1",
"pyyaml>=5.1",
"PyJWT>=1.7.1, <2",
"redis",
"retry>=0.9.2",
"selenium>=3.141.0",
@@ -105,6 +106,7 @@ setup(
"sqlalchemy>=1.3.16, <2.0, !=1.3.21",
"sqlalchemy-utils>=0.36.6,<0.37",
"sqlparse==0.3.0", # PINNED! see https://github.com/andialbrecht/sqlparse/issues/562
"typing-extensions>=3.7.4.3,<4", # needed to support typing.Literal on py37
"wtforms-json",
"pyparsing>=2.4.7, <3.0.0",
"holidays==0.10.3", # PINNED! https://github.com/dr-prodigy/python-holidays/issues/406
@@ -123,6 +125,7 @@ setup(
"dremio": ["sqlalchemy-dremio>=1.1.5, <1.2"],
"drill": ["sqlalchemy-drill==0.1.dev"],
"druid": ["pydruid>=0.6.1,<0.7"],
"solr": ["sqlalchemy-solr >= 0.2.0"],
"elasticsearch": ["elasticsearch-dbapi>=0.1.0, <0.2.0"],
"exasol": ["sqlalchemy-exasol>=2.1.0, <2.2"],
"excel": ["xlrd>=1.2.0, <1.3"],

View File

@@ -135,6 +135,7 @@ module.exports = {
'react/no-unused-prop-types': 0,
'react/prop-types': 0,
'react/require-default-props': 0,
'react/sort-comp': 0, // TODO: re-enable in separate PR
'react/static-property-placement': 0, // re-enable up for discussion
'prettier/prettier': 'error',
},
@@ -246,6 +247,7 @@ module.exports = {
'react/no-unused-prop-types': 0,
'react/prop-types': 0,
'react/require-default-props': 0,
'react/sort-comp': 0, // TODO: re-enable in separate PR
'react/static-property-placement': 0, // disabled temporarily
'prettier/prettier': 'error',
},

View File

@@ -42,8 +42,9 @@ module.exports = {
plugins: [
'lodash',
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-optional-chaining',
['@babel/plugin-proposal-class-properties', { loose: true }],
['@babel/plugin-proposal-optional-chaining', { loose: true }],
['@babel/plugin-proposal-private-methods', { loose: true }],
['@babel/plugin-transform-runtime', { corejs: 3 }],
'react-hot-loader/babel',
],

View File

@@ -30,11 +30,11 @@ describe('chart list view', () => {
cy.get('[data-test="listview-table"]').should('be.visible');
// check chart list view header
cy.get('[data-test="sort-header"]').eq(1).contains('Chart');
cy.get('[data-test="sort-header"]').eq(2).contains('Visualization Type');
cy.get('[data-test="sort-header"]').eq(2).contains('Visualization type');
cy.get('[data-test="sort-header"]').eq(3).contains('Dataset');
cy.get('[data-test="sort-header"]').eq(4).contains('Modified By');
cy.get('[data-test="sort-header"]').eq(5).contains('Last Modified');
cy.get('[data-test="sort-header"]').eq(6).contains('Created By');
cy.get('[data-test="sort-header"]').eq(4).contains('Modified by');
cy.get('[data-test="sort-header"]').eq(5).contains('Last modified');
cy.get('[data-test="sort-header"]').eq(6).contains('Created by');
cy.get('[data-test="sort-header"]').eq(7).contains('Actions');
cy.get('[data-test="table-row"]').should('have.length', 25);
});

View File

@@ -40,9 +40,7 @@ describe('Dashboard filter', () => {
let filterId: number;
let aliases: string[];
const getAlias = (id: number) => {
return `@${DASHBOARD_CHART_ALIAS_PREFIX}${id}`;
};
const getAlias = (id: number) => `@${DASHBOARD_CHART_ALIAS_PREFIX}${id}`;
beforeEach(() => {
cy.server();
@@ -87,8 +85,8 @@ describe('Dashboard filter', () => {
});
cy.get('.filter_box button').click({ force: true });
cy.wait(aliases.filter(x => x !== getAlias(filterId))).then(requests => {
return Promise.all(
cy.wait(aliases.filter(x => x !== getAlias(filterId))).then(requests =>
Promise.all(
requests.map(async xhr => {
expect(xhr.status).to.eq(200);
const responseBody = await readResponseBlob(xhr.response.body);
@@ -108,8 +106,8 @@ describe('Dashboard filter', () => {
val: 'South Asia',
});
}),
);
});
),
);
// TODO add test with South Asia{enter} type action to select filter
});

View File

@@ -44,8 +44,8 @@ describe('Dashboard load', () => {
it('should load dashboard', () => {
// wait and verify one-by-one
cy.wait(aliases).then(requests => {
return Promise.all(
cy.wait(aliases).then(requests =>
Promise.all(
requests.map(async xhr => {
expect(xhr.status).to.eq(200);
const responseBody = await readResponseBlob(xhr.response.body);
@@ -65,7 +65,7 @@ describe('Dashboard load', () => {
.find(`#chart-id-${sliceId}`)
.should('be.visible');
}),
);
});
),
);
});
});

View File

@@ -31,9 +31,6 @@ describe('Dashboard save action', () => {
cy.server();
cy.login();
cy.visit(WORLD_HEALTH_DASHBOARD);
});
it('should save as new dashboard', () => {
cy.get('#app').then(data => {
const bootstrapData = JSON.parse(data[0].dataset.bootstrap);
const dashboard = bootstrapData.dashboard_data;
@@ -50,6 +47,14 @@ describe('Dashboard save action', () => {
});
});
it('should save as new dashboard', () => {
cy.wait('@copyRequest').then(xhr => {
expect(xhr.response.body.dashboard_title).to.not.equal(
`World Bank's Data`,
);
});
});
it('should save/overwrite dashboard', () => {
cy.get('[data-test="grid-row-background--transparent"]').within(() => {
cy.get('.box_plot', { timeout: 10000 }).should('be.visible');
@@ -92,7 +97,7 @@ describe('Dashboard save action', () => {
// open color scheme dropdown
cy.get('.ant-modal-body')
.contains('Color Scheme')
.contains('Color scheme')
.parents('.ControlHeader')
.next('.Select')
.click()

View File

@@ -39,8 +39,8 @@ describe('Dashboard form data', () => {
it('should apply url params to slice requests', () => {
const aliases = getChartAliases(dashboard.slices);
// wait and verify one-by-one
cy.wait(aliases).then(requests => {
return Promise.all(
cy.wait(aliases, { timeout: 18000 }).then(requests =>
Promise.all(
requests.map(async xhr => {
expect(xhr.status).to.eq(200);
const responseBody = await readResponseBlob(xhr.response.body);
@@ -55,7 +55,7 @@ describe('Dashboard form data', () => {
});
}
}),
);
});
),
);
});
});

View File

@@ -37,6 +37,9 @@ describe('AdhocMetrics', () => {
.find('[data-test="add-metric-button"]')
.click();
// Title edit for saved metrics is disabled - switch to Simple
cy.get('[id="adhoc-metric-edit-tabs-tab-SIMPLE"]').click();
cy.get('[data-test="AdhocMetricEditTitle#trigger"]').click();
cy.get('[data-test="AdhocMetricEditTitle#input"]').type(metricName);

View File

@@ -35,13 +35,9 @@ describe('Advanced analytics', () => {
.find('input[type=text]')
.type('28 days{enter}');
cy.get('[data-test=time_compare]').find('.Select__control').click();
cy.get('[data-test=time_compare]')
.find('input[type=text]')
.type('364 days{enter}');
cy.get('[data-test=time_compare]')
.find('.Select__multi-value__label')
.contains('364 days');
.type('1 year{enter}');
cy.get('button[data-test="run-query-button"]').click();
cy.wait('@postJson');
@@ -51,10 +47,13 @@ describe('Advanced analytics', () => {
chartSelector: 'svg',
});
cy.get('[data-test=time_compare]').within(() => {
cy.get('.Select__multi-value__label').contains('364 days');
cy.get('.Select__multi-value__label').contains('28 days');
});
cy.get('.panel-title').contains('Advanced Analytics').click();
cy.get('[data-test=time_compare]')
.find('.Select__multi-value__label')
.contains('28 days');
cy.get('[data-test=time_compare]')
.find('.Select__multi-value__label')
.contains('1 year');
});
});

View File

@@ -24,9 +24,8 @@ import rison from 'rison';
import shortid from 'shortid';
import { HEALTH_POP_FORM_DATA_DEFAULTS } from './visualizations/shared.helper';
const apiURL = (endpoint, queryObject) => {
return `${endpoint}?q=${rison.encode(queryObject)}`;
};
const apiURL = (endpoint, queryObject) =>
`${endpoint}?q=${rison.encode(queryObject)}`;
describe('Test explore links', () => {
beforeEach(() => {

View File

@@ -35,10 +35,10 @@ describe('Visualization > Line', () => {
it('should preload mathjs', () => {
cy.get('script[src*="mathjs"]').should('have.length', 1);
cy.contains('Add Annotation Layer').scrollIntoView().click();
cy.contains('Add annotation layer').scrollIntoView().click();
// should not load additional mathjs
cy.get('script[src*="mathjs"]').should('have.length', 1);
cy.contains('Layer Configuration');
cy.contains('Layer configuration');
});
it('should not show validator error when metric added', () => {
@@ -50,6 +50,10 @@ describe('Visualization > Line', () => {
cy.get('[data-test=metrics]')
.find('[data-test="add-metric-button"]')
.click();
// Title edit for saved metrics is disabled - switch to Simple
cy.get('[id="adhoc-metric-edit-tabs-tab-SIMPLE"]').click();
cy.get('[name="select-column"]').click().type('num{enter}');
cy.get('[name="select-aggregate"]').click().type('sum{enter}');
cy.get('[data-test="AdhocMetricEdit#save"]').contains('Save').click();

View File

@@ -48,9 +48,9 @@ Cypress.Commands.add('visitChartByName', name => {
});
});
Cypress.Commands.add('visitChartById', chartId => {
return cy.visit(`${BASE_EXPLORE_URL}{"slice_id": ${chartId}}`);
});
Cypress.Commands.add('visitChartById', chartId =>
cy.visit(`${BASE_EXPLORE_URL}{"slice_id": ${chartId}}`),
);
Cypress.Commands.add('visitChartByParams', params => {
const queryString =

View File

@@ -0,0 +1 @@
slack_dash.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 MiB

After

Width:  |  Height:  |  Size: 19 B

View File

@@ -0,0 +1 @@
geospatial_dash.jpg

Before

Width:  |  Height:  |  Size: 6.5 MiB

After

Width:  |  Height:  |  Size: 19 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 KiB

After

Width:  |  Height:  |  Size: 11 B

View File

@@ -0,0 +1 @@
explore.jpg

Before

Width:  |  Height:  |  Size: 644 KiB

After

Width:  |  Height:  |  Size: 11 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 474 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 MiB

After

Width:  |  Height:  |  Size: 11 B

View File

@@ -0,0 +1 @@
gallery.jpg

Before

Width:  |  Height:  |  Size: 3.4 MiB

After

Width:  |  Height:  |  Size: 11 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 371 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 KiB

View File

@@ -0,0 +1 @@
sql_lab.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 773 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 26 B

View File

@@ -0,0 +1 @@
explore_visualizations.jpg

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 26 B

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "superset",
"version": "0.999.0dev",
"version": "1.0.1",
"description": "Superset is a data exploration platform designed to be visual, intuitive, and interactive.",
"license": "Apache-2.0",
"directories": {
@@ -62,38 +62,37 @@
"homepage": "https://superset.apache.org/",
"dependencies": {
"@ant-design/icons": "^4.2.2",
"@babel/runtime-corejs3": "^7.8.4",
"@babel/runtime-corejs3": "^7.12.5",
"@data-ui/sparkline": "^0.0.84",
"@emotion/core": "^10.0.35",
"@superset-ui/chart-controls": "^0.16.4",
"@superset-ui/core": "^0.16.4",
"@superset-ui/legacy-plugin-chart-calendar": "^0.16.4",
"@superset-ui/legacy-plugin-chart-chord": "^0.16.4",
"@superset-ui/legacy-plugin-chart-country-map": "^0.16.4",
"@superset-ui/legacy-plugin-chart-event-flow": "^0.16.4",
"@superset-ui/legacy-plugin-chart-force-directed": "^0.16.4",
"@superset-ui/legacy-plugin-chart-heatmap": "^0.16.4",
"@superset-ui/legacy-plugin-chart-histogram": "^0.16.4",
"@superset-ui/legacy-plugin-chart-horizon": "^0.16.4",
"@superset-ui/legacy-plugin-chart-map-box": "^0.16.4",
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.16.4",
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.16.4",
"@superset-ui/legacy-plugin-chart-partition": "^0.16.4",
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.16.4",
"@superset-ui/legacy-plugin-chart-rose": "^0.16.4",
"@superset-ui/legacy-plugin-chart-sankey": "^0.16.4",
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.16.4",
"@superset-ui/legacy-plugin-chart-sunburst": "^0.16.4",
"@superset-ui/legacy-plugin-chart-treemap": "^0.16.4",
"@superset-ui/legacy-plugin-chart-world-map": "^0.16.4",
"@superset-ui/legacy-preset-chart-big-number": "^0.16.4",
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.0",
"@superset-ui/legacy-preset-chart-nvd3": "^0.16.5",
"@superset-ui/plugin-chart-echarts": "^0.16.4",
"@superset-ui/plugin-chart-table": "^0.16.4",
"@superset-ui/plugin-chart-word-cloud": "^0.16.4",
"@superset-ui/plugin-filter-antd": "^0.16.4",
"@superset-ui/preset-chart-xy": "^0.16.4",
"@superset-ui/chart-controls": "^0.16.9",
"@superset-ui/core": "^0.16.7",
"@superset-ui/legacy-plugin-chart-calendar": "^0.16.9",
"@superset-ui/legacy-plugin-chart-chord": "^0.16.9",
"@superset-ui/legacy-plugin-chart-country-map": "^0.16.9",
"@superset-ui/legacy-plugin-chart-event-flow": "^0.16.9",
"@superset-ui/legacy-plugin-chart-force-directed": "^0.16.9",
"@superset-ui/legacy-plugin-chart-heatmap": "^0.16.9",
"@superset-ui/legacy-plugin-chart-histogram": "^0.16.9",
"@superset-ui/legacy-plugin-chart-horizon": "^0.16.9",
"@superset-ui/legacy-plugin-chart-map-box": "^0.16.9",
"@superset-ui/legacy-plugin-chart-paired-t-test": "^0.16.9",
"@superset-ui/legacy-plugin-chart-parallel-coordinates": "^0.16.9",
"@superset-ui/legacy-plugin-chart-partition": "^0.16.9",
"@superset-ui/legacy-plugin-chart-pivot-table": "^0.16.9",
"@superset-ui/legacy-plugin-chart-rose": "^0.16.9",
"@superset-ui/legacy-plugin-chart-sankey": "^0.16.9",
"@superset-ui/legacy-plugin-chart-sankey-loop": "^0.16.9",
"@superset-ui/legacy-plugin-chart-sunburst": "^0.16.9",
"@superset-ui/legacy-plugin-chart-treemap": "^0.16.9",
"@superset-ui/legacy-plugin-chart-world-map": "^0.16.9",
"@superset-ui/legacy-preset-chart-big-number": "^0.16.9",
"@superset-ui/legacy-preset-chart-deckgl": "^0.4.1",
"@superset-ui/legacy-preset-chart-nvd3": "^0.16.10",
"@superset-ui/plugin-chart-echarts": "^0.16.9",
"@superset-ui/plugin-chart-table": "^0.16.9",
"@superset-ui/plugin-chart-word-cloud": "^0.16.9",
"@superset-ui/preset-chart-xy": "^0.16.9",
"@vx/responsive": "^0.0.195",
"abortcontroller-polyfill": "^1.1.9",
"antd": "^4.9.4",
@@ -121,7 +120,7 @@
"json-stringify-pretty-compact": "^2.0.0",
"lodash": "^4.17.20",
"lodash-es": "^4.17.14",
"match-sorter": "^4.1.0",
"match-sorter": "^6.1.0",
"mathjs": "^8.0.1",
"memoize-one": "^5.1.1",
"moment": "^2.26.0",
@@ -150,6 +149,7 @@
"react-loadable": "^5.5.0",
"react-markdown": "^4.3.1",
"react-redux": "^7.2.0",
"react-resize-detector": "^6.0.1-rc.1",
"react-router-dom": "^5.1.2",
"react-search-input": "^0.11.3",
"react-select": "^3.1.0",
@@ -176,18 +176,18 @@
"use-query-params": "^1.1.9"
},
"devDependencies": {
"@babel/cli": "^7.11.5",
"@babel/compat-data": "^7.9.6",
"@babel/core": "^7.8.7",
"@babel/node": "^7.8.7",
"@babel/plugin-proposal-class-properties": "^7.8.3",
"@babel/plugin-proposal-optional-chaining": "^7.8.3",
"@babel/cli": "^7.12.10",
"@babel/compat-data": "^7.12.7",
"@babel/core": "^7.12.10",
"@babel/node": "^7.12.10",
"@babel/plugin-proposal-class-properties": "^7.12.1",
"@babel/plugin-proposal-optional-chaining": "^7.12.7",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-transform-runtime": "^7.8.3",
"@babel/preset-env": "^7.8.7",
"@babel/preset-react": "^7.8.3",
"@babel/register": "^7.8.6",
"@emotion/babel-preset-css-prop": "^10.0.27",
"@babel/plugin-transform-runtime": "^7.12.10",
"@babel/preset-env": "^7.12.11",
"@babel/preset-react": "^7.12.10",
"@babel/register": "^7.12.10",
"@emotion/babel-preset-css-prop": "^10.2.1",
"@hot-loader/react-dom": "^16.13.0",
"@istanbuljs/nyc-config-typescript": "^1.0.1",
"@storybook/addon-actions": "^6.0.13",
@@ -231,10 +231,10 @@
"@typescript-eslint/eslint-plugin": "^4.1.0",
"@typescript-eslint/parser": "^4.1.0",
"babel-eslint": "^10.1.0",
"babel-jest": "^26.1.0",
"babel-loader": "^8.0.6",
"babel-plugin-dynamic-import-node": "^2.3.0",
"babel-plugin-emotion": "^10.0.29",
"babel-jest": "^26.6.3",
"babel-loader": "^8.2.2",
"babel-plugin-dynamic-import-node": "^2.3.3",
"babel-plugin-emotion": "^10.0.33",
"babel-plugin-jsx-remove-data-test-id": "^2.1.3",
"babel-plugin-lodash": "^3.3.4",
"cache-loader": "^1.2.2",
@@ -245,20 +245,20 @@
"emotion-ts-plugin": "^0.5.3",
"enzyme": "^3.10.0",
"enzyme-adapter-react-16": "^1.14.0",
"eslint": "^7.8.1",
"eslint-config-airbnb": "^18.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint": "^7.17.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^7.1.0",
"eslint-import-resolver-typescript": "^2.3.0",
"eslint-import-resolver-webpack": "^0.12.2",
"eslint-plugin-cypress": "^2.11.1",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-jest": "^23.17.1",
"eslint-plugin-jest-dom": "^3.2.4",
"eslint-plugin-jsx-a11y": "^6.3.1",
"eslint-plugin-no-only-tests": "^2.0.1",
"eslint-plugin-prettier": "^3.1.3",
"eslint-plugin-react": "^7.20.6",
"eslint-plugin-react-hooks": "^4.1.2",
"eslint-import-resolver-webpack": "^0.13.0",
"eslint-plugin-cypress": "^2.11.2",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jest": "^24.1.3",
"eslint-plugin-jest-dom": "^3.6.5",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-no-only-tests": "^2.4.0",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"eslint-plugin-testing-library": "^3.10.1",
"exports-loader": "^0.7.0",
"fetch-mock": "^7.7.3",
@@ -276,7 +276,7 @@
"node-fetch": "^2.6.1",
"optimize-css-assets-webpack-plugin": "^5.0.1",
"po2json": "^0.4.5",
"prettier": "^2.1.1",
"prettier": "^2.2.1",
"react-test-renderer": "^16.9.0",
"redux-mock-store": "^1.5.4",
"sinon": "^9.0.2",

View File

@@ -62,8 +62,8 @@ describe('AsyncSelect', () => {
});
describe('auto select', () => {
it('should not call onChange if autoSelect=false', () => {
return new Promise(done => {
it('should not call onChange if autoSelect=false', () =>
new Promise(done => {
expect.assertions(2);
const onChangeSpy = jest.fn();
@@ -74,11 +74,10 @@ describe('AsyncSelect', () => {
expect(onChangeSpy.mock.calls).toHaveLength(0);
done();
});
});
});
}));
it('should auto select the first option if autoSelect=true', () => {
return new Promise(done => {
it('should auto select the first option if autoSelect=true', () =>
new Promise(done => {
expect.assertions(3);
const onChangeSpy = jest.fn();
@@ -94,11 +93,10 @@ describe('AsyncSelect', () => {
);
done();
});
});
});
}));
it('should not auto select when value prop is set and autoSelect=true', () => {
return new Promise(done => {
it('should not auto select when value prop is set and autoSelect=true', () =>
new Promise(done => {
expect.assertions(3);
const onChangeSpy = jest.fn();
@@ -117,8 +115,7 @@ describe('AsyncSelect', () => {
expect(wrapper.find(Select)).toExist();
done();
});
});
});
}));
it('should call onAsyncError if there is an error fetching options', () => {
expect.assertions(3);

View File

@@ -489,7 +489,7 @@ describe('dashboardLayout actions', () => {
});
describe('undoLayoutAction', () => {
it('should dispatch a redux-undo .undo() action ', () => {
it('should dispatch a redux-undo .undo() action', () => {
const { getState, dispatch } = setup({
dashboardLayout: { past: ['non-empty'] },
});
@@ -513,7 +513,7 @@ describe('dashboardLayout actions', () => {
});
describe('redoLayoutAction', () => {
it('should dispatch a redux-undo .redo() action ', () => {
it('should dispatch a redux-undo .redo() action', () => {
const { getState, dispatch } = setup();
const thunk = redoLayoutAction();
thunk(dispatch, getState);

View File

@@ -17,7 +17,7 @@
* under the License.
*/
import React from 'react';
import { mount, shallow } from 'enzyme';
import { mount } from 'enzyme';
import ModalTrigger from 'src/components/ModalTrigger';
import RefreshIntervalModal from 'src/dashboard/components/RefreshIntervalModal';
@@ -66,11 +66,15 @@ describe('RefreshIntervalModal', () => {
refreshWarning: 'Show warning',
};
const wrapper = shallow(<RefreshIntervalModal {...props} />);
const wrapper = getMountWrapper(props);
wrapper.find('span[role="button"]').simulate('click');
wrapper.instance().handleFrequencyChange({ value: 30 });
expect(wrapper.find(ModalTrigger).dive().find(Alert)).toExist();
wrapper.update();
expect(wrapper.find(ModalTrigger).find(Alert)).toExist();
wrapper.instance().handleFrequencyChange({ value: 3601 });
expect(wrapper.find(ModalTrigger).dive().find(Alert)).not.toExist();
wrapper.update();
expect(wrapper.find(ModalTrigger).find(Alert)).not.toExist();
});
});

View File

@@ -26,7 +26,7 @@ describe('FilterConfigurationButton', () => {
const mockedProps = {
createNewOnOpen: false,
};
it('it is valid', () => {
it('is valid', () => {
expect(
React.isValidElement(<FilterConfigurationLink {...mockedProps} />),
).toBe(true);

View File

@@ -19,7 +19,9 @@
import React from 'react';
import { styledMount as mount } from 'spec/helpers/theming';
import { act } from 'react-dom/test-utils';
import { ReactWrapper } from 'enzyme';
import { Provider } from 'react-redux';
import Alert from 'react-bootstrap/lib/Alert';
import { FilterConfigModal } from 'src/dashboard/components/nativeFilters/FilterConfigModal';
import waitForComponentToPaint from 'spec/helpers/waitForComponentToPaint';
import { mockStore } from 'spec/fixtures/mockStore';
@@ -74,4 +76,51 @@ describe('FiltersConfigModal', () => {
await waitForComponentToPaint(wrapper);
expect(onSave.mock.calls).toHaveLength(0);
});
describe('when click cancel', () => {
let onCancel: jest.Mock;
let wrapper: ReactWrapper;
beforeEach(() => {
onCancel = jest.fn();
wrapper = setup({ onCancel, createNewOnOpen: false });
});
async function clickCancel() {
act(() => {
wrapper.find('.ant-modal-footer button').at(0).simulate('click');
});
await waitForComponentToPaint(wrapper);
}
function addFilter() {
act(() => {
wrapper.find('button[aria-label="Add tab"]').at(0).simulate('click');
});
}
it('does not show alert when there is no unsaved filters', async () => {
await clickCancel();
expect(onCancel.mock.calls).toHaveLength(1);
});
it('shows correct alert message for an unsaved filter', async () => {
addFilter();
await clickCancel();
expect(onCancel.mock.calls).toHaveLength(0);
expect(wrapper.find(Alert).text()).toContain(
'Are you sure you want to cancel? "New filter" will not be saved.',
);
});
it('shows correct alert message for 2 unsaved filters', async () => {
addFilter();
addFilter();
await clickCancel();
expect(onCancel.mock.calls).toHaveLength(0);
expect(wrapper.find(Alert).text()).toContain(
'Are you sure you want to cancel? "New filter" and "New filter" will not be saved.',
);
});
});
});

View File

@@ -81,19 +81,24 @@ describe('ChangeDatasourceModal', () => {
});
it('fetches datasources', async () => {
expect(fetchMock.calls(/api\/v1\/dataset/)).toHaveLength(6);
expect(fetchMock.calls(/api\/v1\/dataset/)).toHaveLength(3);
});
it('renders confirmation message', async () => {
await waitForComponentToPaint(wrapper, 1000);
act(() => {
wrapper.find('[data-test="datasource-link"]').at(0).props().onClick();
});
await waitForComponentToPaint(wrapper);
expect(wrapper.find('.proceed-btn')).toExist();
});
it('changes the datasource', async () => {
await waitForComponentToPaint(wrapper, 1000);
act(() => {
wrapper.find('[data-test="datasource-link"]').at(0).props().onClick();
});

View File

@@ -64,8 +64,8 @@ describe('DatasourceEditor', () => {
expect(wrapper.find(Tabs)).toExist();
});
it('makes an async request', () => {
return new Promise(done => {
it('makes an async request', () =>
new Promise(done => {
wrapper.setState({ activeTabKey: 2 });
const syncButton = wrapper.find('.sync-from-source');
expect(syncButton).toHaveLength(1);
@@ -76,8 +76,7 @@ describe('DatasourceEditor', () => {
fetchMock.reset();
done();
}, 0);
});
});
}));
it('to add, remove and modify columns accordingly', () => {
const columns = [

View File

@@ -0,0 +1,93 @@
/**
* 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.
*/
export const columns = [
{
column_name: 'bootcamp_attend',
description: null,
expression: null,
filterable: true,
groupby: true,
id: 516,
is_dttm: false,
python_date_format: null,
type: 'DOUBLE PRECISION',
verbose_name: null,
},
{
column_name: 'calc_first_time_dev',
description: null,
expression:
'CASE WHEN is_first_dev_job = 0 THEN "No" WHEN is_first_dev_job = 1 THEN "Yes" END',
filterable: true,
groupby: true,
id: 477,
is_dttm: false,
python_date_format: null,
type: 'STRING',
verbose_name: null,
},
{
column_name: 'aaaaaaaaaaa',
description: null,
expression: null,
filterable: true,
groupby: true,
id: 516,
is_dttm: false,
python_date_format: null,
type: 'DOUBLE PRECISION',
verbose_name: null,
},
];
const metricsFiltered = {
certified: [
{
certification_details: null,
certified_by: 'user',
d3format: null,
description: null,
expression: '',
id: 56,
is_certified: true,
metric_name: 'metric_end_certified',
verbose_name: '',
warning_text: null,
},
],
uncertified: [
{
certification_details: null,
certified_by: null,
d3format: null,
description: null,
expression: '',
id: 57,
is_certified: false,
metric_name: 'metric_end',
verbose_name: '',
warning_text: null,
},
],
};
export const metrics = [
...metricsFiltered.certified,
...metricsFiltered.uncertified,
];

View File

@@ -19,7 +19,7 @@
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
describe('AdhocFilter', () => {
it('sets filterOptionName in constructor', () => {

View File

@@ -16,8 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
import AdhocMetric, { EXPRESSION_TYPES } from 'src/explore/AdhocMetric';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
const valueColumn = { type: 'DOUBLE', column_name: 'value' };

View File

@@ -25,11 +25,11 @@ import { supersetTheme } from '@superset-ui/core';
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
import AdhocFilterControl from 'src/explore/components/controls/AdhocFilterControl';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
import { LabelsContainer } from 'src/explore/components/OptionControls';
import AdhocMetric from 'src/explore/AdhocMetric';
import { AGGREGATES, OPERATORS } from 'src/explore/constants';
import AdhocFilterControl from 'src/explore/components/controls/FilterControl/AdhocFilterControl';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const simpleAdhocFilter = new AdhocFilter({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -25,10 +25,10 @@ import { FormGroup } from 'react-bootstrap';
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
import AdhocMetric from 'src/explore/AdhocMetric';
import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/AdhocFilterEditPopoverSimpleTabContent';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
import { AGGREGATES } from 'src/explore/constants';
import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const simpleAdhocFilter = new AdhocFilter({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -25,8 +25,8 @@ import { FormGroup } from 'react-bootstrap';
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/AdhocFilterEditPopoverSqlTabContent';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent';
const sqlAdhocFilter = new AdhocFilter({
expressionType: EXPRESSION_TYPES.SQL,

View File

@@ -27,12 +27,12 @@ import Tabs from 'src/common/components/Tabs';
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
import AdhocMetric from 'src/explore/AdhocMetric';
import AdhocFilterEditPopover from 'src/explore/components/AdhocFilterEditPopover';
import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/AdhocFilterEditPopoverSimpleTabContent';
import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/AdhocFilterEditPopoverSqlTabContent';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
import { AGGREGATES } from 'src/explore/constants';
import AdhocFilterEditPopover from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopover';
import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent';
import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const simpleAdhocFilter = new AdhocFilter({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -25,8 +25,8 @@ import Popover from 'src/common/components/Popover';
import AdhocFilter, {
EXPRESSION_TYPES,
CLAUSES,
} from 'src/explore/AdhocFilter';
import AdhocFilterOption from 'src/explore/components/AdhocFilterOption';
} from 'src/explore/components/controls/FilterControl/AdhocFilter';
import AdhocFilterOption from 'src/explore/components/controls/FilterControl/AdhocFilterOption';
const simpleAdhocFilter = new AdhocFilter({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -22,7 +22,7 @@ import sinon from 'sinon';
import { shallow } from 'enzyme';
import { Tooltip } from 'src/common/components/Tooltip';
import AdhocMetricEditPopoverTitle from 'src/explore/components/AdhocMetricEditPopoverTitle';
import AdhocMetricEditPopoverTitle from 'src/explore/components/controls/MetricControl/AdhocMetricEditPopoverTitle';
const title = {
label: 'Title',
@@ -46,15 +46,25 @@ describe('AdhocMetricEditPopoverTitle', () => {
expect(wrapper.find(Tooltip)).toExist();
expect(
wrapper.find('[data-test="AdhocMetricEditTitle#trigger"]').text(),
).toBe('My Metric\xa0');
).toBe(`${title.label}\xa0`);
});
it('transfers to edit mode when clicked', () => {
const { wrapper } = setup();
expect(wrapper.state('isEditable')).toBe(false);
expect(wrapper.state('isEditMode')).toBe(false);
wrapper
.find('[data-test="AdhocMetricEditTitle#trigger"]')
.simulate('click');
expect(wrapper.state('isEditable')).toBe(true);
expect(wrapper.state('isEditMode')).toBe(true);
});
it('Render non-interactive span with title when edit is disabled', () => {
const { wrapper } = setup({ isEditDisabled: true });
expect(
wrapper.find('[data-test="AdhocMetricTitle"]').exists(),
).toBeTruthy();
expect(
wrapper.find('[data-test="AdhocMetricEditTitle#trigger"]').exists(),
).toBeFalsy();
});
});

View File

@@ -23,9 +23,11 @@ import { shallow } from 'enzyme';
import { FormGroup } from 'react-bootstrap';
import Button from 'src/components/Button';
import AdhocMetric, { EXPRESSION_TYPES } from 'src/explore/AdhocMetric';
import AdhocMetricEditPopover from 'src/explore/components/AdhocMetricEditPopover';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetricEditPopover from 'src/explore/components/controls/MetricControl/AdhocMetricEditPopover';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
const columns = [
{ type: 'VARCHAR(255)', column_name: 'source', id: 1 },
@@ -54,6 +56,7 @@ function setup(overrides) {
onChange,
onClose,
onResize: () => {},
getCurrentLabel: () => {},
columns,
...overrides,
};

View File

@@ -22,9 +22,9 @@ import sinon from 'sinon';
import { shallow } from 'enzyme';
import Popover from 'src/common/components/Popover';
import AdhocMetric from 'src/explore/AdhocMetric';
import AdhocMetricOption from 'src/explore/components/AdhocMetricOption';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetricOption from 'src/explore/components/controls/MetricControl/AdhocMetricOption';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const columns = [
{ type: 'VARCHAR(255)', column_name: 'source' },

View File

@@ -20,9 +20,11 @@
import React from 'react';
import { shallow } from 'enzyme';
import AdhocMetricStaticOption from 'src/explore/components/AdhocMetricStaticOption';
import AdhocMetric, { EXPRESSION_TYPES } from 'src/explore/AdhocMetric';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetricStaticOption from 'src/explore/components/controls/MetricControl/AdhocMetricStaticOption';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
const sumValueAdhocMetric = new AdhocMetric({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -99,7 +99,7 @@ describe('DatasourceControl', () => {
const wrapper = setup();
const alert = wrapper.find(Icon);
expect(alert.at(1).prop('name')).toBe('alert-solid');
const tooltip = wrapper.find(Tooltip).at(1);
const tooltip = wrapper.find(Tooltip).at(0);
expect(tooltip.prop('title')).toBe(
defaultProps.datasource.health_check_message,
);

View File

@@ -17,9 +17,11 @@
* under the License.
*/
import React from 'react';
import { render, screen } from '@testing-library/react';
import { Simulate } from 'react-dom/test-utils';
import { render, screen, fireEvent } from '@testing-library/react';
import { supersetTheme, ThemeProvider } from '@superset-ui/core';
import DatasourcePanel from 'src/explore/components/DatasourcePanel';
import { columns, metrics } from 'spec/javascripts/datasource/fixtures';
describe('datasourcepanel', () => {
const datasource = {
@@ -27,8 +29,8 @@ describe('datasourcepanel', () => {
type: 'table',
uid: '1__table',
id: 1,
columns: [],
metrics: [],
columns,
metrics,
database: {
backend: 'mysql',
name: 'main',
@@ -47,6 +49,14 @@ describe('datasourcepanel', () => {
},
actions: null,
};
function search(value, input) {
fireEvent.change(input, {
target: { value },
});
Simulate.change(input);
}
it('should render', () => {
const { container } = render(
<ThemeProvider theme={supersetTheme}>
@@ -66,4 +76,46 @@ describe('datasourcepanel', () => {
expect(screen.getByText('Columns')).toBeTruthy();
expect(screen.getByText('Metrics')).toBeTruthy();
});
it('should render search results', () => {
const { container } = render(
<ThemeProvider theme={supersetTheme}>
<DatasourcePanel {...props} />
</ThemeProvider>,
);
const c = container.getElementsByClassName('option-label');
expect(c).toHaveLength(5);
});
it('should render 0 search results', () => {
const { container } = render(
<ThemeProvider theme={supersetTheme}>
<DatasourcePanel {...props} />
</ThemeProvider>,
);
const c = container.getElementsByClassName('option-label');
const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
search('sssssssss', searchInput);
setTimeout(() => {
expect(c).toHaveLength(0);
}, 201);
});
it('should render and sort search results', () => {
const { container } = render(
<ThemeProvider theme={supersetTheme}>
<DatasourcePanel {...props} />
</ThemeProvider>,
);
const c = container.getElementsByClassName('option-label');
const searchInput = screen.getByPlaceholderText('Search Metrics & Columns');
search('end', searchInput);
setTimeout(() => {
expect(c).toHaveLength(4);
expect(c[0].value).toBe('metric_end_certified');
}, 201);
});
});

View File

@@ -0,0 +1,298 @@
/**
* 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 {
customTimeRangeEncode,
customTimeRangeDecode,
} from 'src/explore/components/controls/DateFilterControl/utils';
describe('Custom TimeRange', () => {
describe('customTimeRangeEncode', () => {
it('1) specific : specific', () => {
expect(
customTimeRangeEncode({
sinceDatetime: '2021-01-20T00:00:00',
sinceMode: 'specific',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'specific',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual('2021-01-20T00:00:00 : 2021-01-27T00:00:00');
});
it('2) specific : relative', () => {
expect(
customTimeRangeEncode({
sinceDatetime: '2021-01-20T00:00:00',
sinceMode: 'specific',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-20T00:00:00',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual(
'2021-01-20T00:00:00 : DATEADD(DATETIME("2021-01-20T00:00:00"), 7, day)',
);
});
it('3) now : relative', () => {
expect(
customTimeRangeEncode({
sinceDatetime: 'now',
sinceMode: 'now',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'now',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual('now : DATEADD(DATETIME("now"), 7, day)');
});
it('4) today : relative', () => {
expect(
customTimeRangeEncode({
sinceDatetime: 'today',
sinceMode: 'today',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'today',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual('today : DATEADD(DATETIME("today"), 7, day)');
});
it('5) relative : specific', () => {
expect(
customTimeRangeEncode({
sinceDatetime: '2021-01-27T00:00:00',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'specific',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual(
'DATEADD(DATETIME("2021-01-27T00:00:00"), -7, day) : 2021-01-27T00:00:00',
);
});
it('6) relative : now', () => {
expect(
customTimeRangeEncode({
sinceDatetime: 'now',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'now',
untilMode: 'now',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual('DATEADD(DATETIME("now"), -7, day) : now');
});
it('7) relative : today', () => {
expect(
customTimeRangeEncode({
sinceDatetime: 'today',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'today',
untilMode: 'today',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual('DATEADD(DATETIME("today"), -7, day) : today');
});
it('8) relative : relative (now)', () => {
expect(
customTimeRangeEncode({
sinceDatetime: 'now',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'now',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
}),
).toEqual(
'DATEADD(DATETIME("now"), -7, day) : DATEADD(DATETIME("now"), 7, day)',
);
});
it('9) relative : relative (date/time)', () => {
expect(
customTimeRangeEncode({
sinceDatetime: '2021-01-27T00:00:00',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'specific',
anchorValue: '2021-01-27T00:00:00',
}),
).toEqual(
'DATEADD(DATETIME("2021-01-27T00:00:00"), -7, day) : DATEADD(DATETIME("2021-01-27T00:00:00"), 7, day)',
);
});
});
describe('customTimeRangeDecode', () => {
it('1) specific : specific', () => {
expect(
customTimeRangeDecode('2021-01-20T00:00:00 : 2021-01-27T00:00:00'),
).toEqual({
customRange: {
sinceDatetime: '2021-01-20T00:00:00',
sinceMode: 'specific',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'specific',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
},
matchedFlag: true,
});
});
it('2) specific : relative', () => {
expect(
customTimeRangeDecode(
'2021-01-20T00:00:00 : DATEADD(DATETIME("2021-01-20T00:00:00"), 7, day)',
),
).toEqual({
customRange: {
sinceDatetime: '2021-01-20T00:00:00',
sinceMode: 'specific',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-20T00:00:00',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
},
matchedFlag: true,
});
});
it('3) relative : specific', () => {
expect(
customTimeRangeDecode(
'DATEADD(DATETIME("2021-01-27T00:00:00"), -7, day) : 2021-01-27T00:00:00',
),
).toEqual({
customRange: {
sinceDatetime: '2021-01-27T00:00:00',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'specific',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
},
matchedFlag: true,
});
});
it('4) relative : relative (now)', () => {
expect(
customTimeRangeDecode(
'DATEADD(DATETIME("now"), -7, day) : DATEADD(DATETIME("now"), 7, day)',
),
).toEqual({
customRange: {
sinceDatetime: 'now',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: 'now',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'now',
anchorValue: 'now',
},
matchedFlag: true,
});
});
it('5) relative : relative (date/time)', () => {
expect(
customTimeRangeDecode(
'DATEADD(DATETIME("2021-01-27T00:00:00"), -7, day) : DATEADD(DATETIME("2021-01-27T00:00:00"), 7, day)',
),
).toEqual({
customRange: {
sinceDatetime: '2021-01-27T00:00:00',
sinceMode: 'relative',
sinceGrain: 'day',
sinceGrainValue: -7,
untilDatetime: '2021-01-27T00:00:00',
untilMode: 'relative',
untilGrain: 'day',
untilGrainValue: 7,
anchorMode: 'specific',
anchorValue: '2021-01-27T00:00:00',
},
matchedFlag: true,
});
});
});
});

View File

@@ -21,10 +21,12 @@ import React from 'react';
import { shallow } from 'enzyme';
import { ColumnOption } from '@superset-ui/chart-controls';
import FilterDefinitionOption from 'src/explore/components/FilterDefinitionOption';
import AdhocMetricStaticOption from 'src/explore/components/AdhocMetricStaticOption';
import AdhocMetric, { EXPRESSION_TYPES } from 'src/explore/AdhocMetric';
import FilterDefinitionOption from 'src/explore/components/controls/MetricControl/FilterDefinitionOption';
import AdhocMetricStaticOption from 'src/explore/components/controls/MetricControl/AdhocMetricStaticOption';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
const sumValueAdhocMetric = new AdhocMetric({
expressionType: EXPRESSION_TYPES.SIMPLE,

View File

@@ -20,9 +20,9 @@
import React from 'react';
import { shallow } from 'enzyme';
import FixedOrMetricControl from 'src/explore/components/controls/FixedOrMetricControl';
import TextControl from 'src/explore/components/controls/TextControl';
import MetricsControl from 'src/explore/components/controls/MetricsControl';
import FixedOrMetricControl from 'src/explore/components/controls/FixedOrMetricControl';
import MetricsControl from 'src/explore/components/controls/MetricControl/MetricsControl';
const defaultProps = {
value: {},

View File

@@ -21,7 +21,7 @@ import configureStore from 'redux-mock-store';
import { shallow } from 'enzyme';
import { ColumnOption, MetricOption } from '@superset-ui/chart-controls';
import MetricDefinitionOption from 'src/explore/components/MetricDefinitionOption';
import MetricDefinitionOption from 'src/explore/components/controls/MetricControl/MetricDefinitionOption';
import AggregateOption from 'src/explore/components/AggregateOption';
describe('MetricDefinitionOption', () => {

View File

@@ -20,10 +20,10 @@
import React from 'react';
import { shallow } from 'enzyme';
import MetricDefinitionValue from 'src/explore/components/MetricDefinitionValue';
import AdhocMetricOption from 'src/explore/components/AdhocMetricOption';
import AdhocMetric from 'src/explore/AdhocMetric';
import { AGGREGATES } from 'src/explore/constants';
import MetricDefinitionValue from 'src/explore/components/controls/MetricControl/MetricDefinitionValue';
import AdhocMetricOption from 'src/explore/components/controls/MetricControl/AdhocMetricOption';
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
const sumValueAdhocMetric = new AdhocMetric({
column: { type: 'DOUBLE', column_name: 'value' },

View File

@@ -21,11 +21,13 @@ import React from 'react';
import sinon from 'sinon';
import { shallow } from 'enzyme';
import MetricsControl from 'src/explore/components/controls/MetricsControl';
import { AGGREGATES } from 'src/explore/constants';
import AdhocMetric, { EXPRESSION_TYPES } from 'src/explore/AdhocMetric';
import { LabelsContainer } from 'src/explore/components/OptionControls';
import { supersetTheme } from '@superset-ui/core';
import MetricsControl from 'src/explore/components/controls/MetricControl/MetricsControl';
import AdhocMetric, {
EXPRESSION_TYPES,
} from 'src/explore/components/controls/MetricControl/AdhocMetric';
const defaultProps = {
name: 'metrics',

View File

@@ -29,10 +29,9 @@ import Button from 'src/components/Button';
import sinon from 'sinon';
import fetchMock from 'fetch-mock';
import Modal from 'src/common/components/Modal';
import * as exploreUtils from 'src/explore/exploreUtils';
import * as saveModalActions from 'src/explore/actions/saveModalActions';
import SaveModal from 'src/explore/components/SaveModal';
import SaveModal, { StyledModal } from 'src/explore/components/SaveModal';
describe('SaveModal', () => {
const middlewares = [thunk];
@@ -79,11 +78,11 @@ describe('SaveModal', () => {
it('renders a Modal with the right set of components', () => {
const wrapper = getWrapper();
expect(wrapper.find(Modal)).toExist();
expect(wrapper.find(StyledModal)).toExist();
expect(wrapper.find(FormControl)).toExist();
expect(wrapper.find(Radio)).toHaveLength(2);
const footerWrapper = shallow(wrapper.find('Modal').props().footer);
const footerWrapper = shallow(wrapper.find(StyledModal).props().footer);
expect(footerWrapper.find(Button)).toHaveLength(3);
});
@@ -201,8 +200,8 @@ describe('SaveModal', () => {
Object.defineProperty(window, 'location', windowLocation);
});
it('Save & go to dashboard', () => {
return new Promise(done => {
it('Save & go to dashboard', () =>
new Promise(done => {
wrapper.instance().saveOrOverwrite(true);
defaultProps.actions.saveSlice().then(() => {
expect(window.location.assign.callCount).toEqual(1);
@@ -211,11 +210,10 @@ describe('SaveModal', () => {
);
done();
});
});
});
}));
it('saveas new slice', () => {
return new Promise(done => {
it('saveas new slice', () =>
new Promise(done => {
wrapper.setState({
action: 'saveas',
newSliceName: 'new slice name',
@@ -228,11 +226,10 @@ describe('SaveModal', () => {
);
done();
});
});
});
}));
it('overwrite original slice', () => {
return new Promise(done => {
it('overwrite original slice', () =>
new Promise(done => {
wrapper.setState({ action: 'overwrite' });
wrapper.instance().saveOrOverwrite(false);
defaultProps.actions.saveSlice().then(() => {
@@ -242,8 +239,7 @@ describe('SaveModal', () => {
);
done();
});
});
});
}));
});
});

View File

@@ -78,7 +78,7 @@ describe('SelectControl', () => {
onChange: sinon.spy(),
};
wrapper.setProps(selectAllProps);
wrapper.instance().onChange([{ meta: true, value: 'Select All' }]);
wrapper.instance().onChange([{ meta: true, value: 'Select all' }]);
expect(selectAllProps.onChange.calledWith(expectedValues)).toBe(true);
});
@@ -112,7 +112,7 @@ describe('SelectControl', () => {
placeholder="add something"
/>,
);
expect(withMulti.html()).not.toContain('placeholder=');
expect(withMulti.html()).not.toContain('option(s');
});
});
describe('withSingleChoice', () => {
@@ -125,7 +125,7 @@ describe('SelectControl', () => {
placeholder="add something"
/>,
);
expect(singleChoice.html()).not.toContain('placeholder=');
expect(singleChoice.html()).not.toContain('option(s');
});
});
describe('default placeholder', () => {
@@ -133,7 +133,7 @@ describe('SelectControl', () => {
const defaultPlaceholder = mount(
<SelectControl {...defaultProps} choices={[]} multi />,
);
expect(defaultPlaceholder.html()).not.toContain('placeholder=');
expect(defaultPlaceholder.html()).not.toContain('option(s');
});
});
describe('all choices selected', () => {
@@ -145,12 +145,12 @@ describe('SelectControl', () => {
value={['today', '1 year ago']}
/>,
);
expect(allChoicesSelected.html()).toContain('placeholder=""');
expect(allChoicesSelected.html()).not.toContain('option(s');
});
});
});
describe('when select is multi', () => {
it('renders the placeholder when a selection has been made', () => {
it('does not render the placeholder when a selection has been made', () => {
wrapper = mount(
<SelectControl
{...defaultProps}
@@ -159,7 +159,7 @@ describe('SelectControl', () => {
placeholder="add something"
/>,
);
expect(wrapper.html()).toContain('add something');
expect(wrapper.html()).not.toContain('add something');
});
it('shows numbers of options as a placeholder by default', () => {
wrapper = mount(<SelectControl {...defaultProps} multi />);
@@ -207,7 +207,7 @@ describe('SelectControl', () => {
expect(wrapper.instance().optionsRemaining()).toEqual(2);
});
});
describe('with Select All', () => {
describe('with Select all', () => {
it('does not count it', () => {
const props = { ...defaultProps, multi: true, allowAll: true };
const wrapper = mount(<SelectControl {...props} />);
@@ -234,9 +234,9 @@ describe('SelectControl', () => {
};
wrapper.setProps(selectAllProps);
expect(wrapper.instance().getOptions(selectAllProps)).toContainEqual({
label: 'Select All',
label: 'Select all',
meta: true,
value: 'Select All',
value: 'Select all',
});
});

View File

@@ -21,12 +21,12 @@ import { ReactWrapper } from 'enzyme';
import { styledMount as mount } from 'spec/helpers/theming';
import { act } from 'react-dom/test-utils';
import MetricsControl from 'src/explore/components/controls/MetricsControl';
import withAsyncVerification, {
ControlPropsWithExtras,
WithAsyncVerificationOptions,
} from 'src/explore/components/controls/withAsyncVerification';
import { ExtraControlProps } from '@superset-ui/chart-controls';
import MetricsControl from 'src/explore/components/controls/MetricControl/MetricsControl';
const VALID_METRIC = {
metric_name: 'sum__value',
@@ -57,9 +57,9 @@ const defaultProps = {
function verify(sourceProp: string) {
const mock = jest.fn();
mock.mockImplementation(async (props: ControlPropsWithExtras) => {
return { [sourceProp]: props.validMetrics || [VALID_METRIC] };
});
mock.mockImplementation(async (props: ControlPropsWithExtras) => ({
[sourceProp]: props.validMetrics || [VALID_METRIC],
}));
return mock;
}

View File

@@ -43,8 +43,8 @@ describe('Toast', () => {
expect(alert.childAt(0).childAt(1).text()).toBe(props.toast.text);
});
it('should call onCloseToast upon alert dismissal', () => {
return new Promise(done => {
it('should call onCloseToast upon alert dismissal', () =>
new Promise(done => {
const onCloseToast = id => {
expect(id).toBe(props.toast.id);
done();
@@ -57,6 +57,5 @@ describe('Toast', () => {
const alertProps = wrapper.find(Alert).props();
expect(alertProps.onDismiss).toBe(handleClosePress);
handleClosePress(); // there is a timeout for onCloseToast to be called
});
});
}));
});

View File

@@ -50,7 +50,7 @@ describe('SaveDatasetModal', () => {
const wrapper = shallow(<SaveDatasetModal {...mockedProps} />);
expect(wrapper.find(AutoComplete)).toExist();
});
it('renders an input form ', () => {
it('renders an input form', () => {
// @ts-ignore
const wrapper = shallow(<SaveDatasetModal {...mockedProps} />);
expect(wrapper.find(Input)).toExist();

View File

@@ -20,7 +20,7 @@ import React from 'react';
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { styledShallow as shallow } from 'spec/helpers/theming';
import SouthPaneContainer, { SouthPane } from 'src/SqlLab/components/SouthPane';
import SouthPaneContainer from 'src/SqlLab/components/SouthPane';
import ResultSet from 'src/SqlLab/components/ResultSet';
import { STATUS_OPTIONS } from 'src/SqlLab/constants';
import { initialState } from './fixtures';
@@ -80,12 +80,6 @@ describe('SouthPane', () => {
let wrapper;
beforeAll(() => {
jest
.spyOn(SouthPane.prototype, 'getSouthPaneHeight')
.mockImplementation(() => 500);
});
it('should render offline when the state is offline', () => {
wrapper = getWrapper();
wrapper.setProps({ offline: true });

View File

@@ -86,7 +86,7 @@ describe('sqlLabReducer', () => {
newState = sqlLabReducer(newState, action);
expect(newState.queryEditors[1].schema).toBe(schema);
});
it('should not fail while setting autorun ', () => {
it('should not fail while setting autorun', () => {
const action = {
type: actions.QUERY_EDITOR_SET_AUTORUN,
queryEditor: qe,

View File

@@ -83,7 +83,7 @@ describe('getControlsForVizType', () => {
JSON.stringify({
label_colors: {
type: 'ColorMapControl',
label: t('Color Map'),
label: t('Color map'),
default: {},
renderTrigger: true,
mapStateToProps: state => ({

View File

@@ -21,9 +21,7 @@ import parseCookie from 'src/utils/parseCookie';
describe('parseCookie', () => {
let cookieVal = '';
Object.defineProperty(document, 'cookie', {
get: jest.fn().mockImplementation(() => {
return cookieVal;
}),
get: jest.fn().mockImplementation(() => cookieVal),
});
it('parses cookie strings', () => {
cookieVal = 'val1=foo; val2=bar';

View File

@@ -80,12 +80,12 @@ describe('AnnotationModal', () => {
const addWrapper = await mountAndWait({});
expect(
addWrapper.find('[data-test="annotaion-modal-title"]').text(),
).toEqual('Add Annotation');
).toEqual('Add annotation');
});
it('renders edit header when annotation prop is included', () => {
expect(wrapper.find('[data-test="annotaion-modal-title"]').text()).toEqual(
'Edit Annotation',
'Edit annotation',
);
});

View File

@@ -73,13 +73,13 @@ describe('AnnotationLayerModal', () => {
const addWrapper = await mountAndWait({});
expect(
addWrapper.find('[data-test="annotation-layer-modal-title"]').text(),
).toEqual('Add Annotation Layer');
).toEqual('Add annotation layer');
});
it('renders edit header when layer prop is included', () => {
expect(
wrapper.find('[data-test="annotation-layer-modal-title"]').text(),
).toEqual('Edit Annotation Layer Properties');
).toEqual('Edit annotation layer properties');
});
it('renders input element for name', () => {

View File

@@ -74,13 +74,13 @@ describe('CssTemplateModal', () => {
const addWrapper = await mountAndWait({});
expect(
addWrapper.find('[data-test="css-template-modal-title"]').text(),
).toEqual('Add CSS Template');
).toEqual('Add CSS template');
});
it('renders edit header when css template prop is included', () => {
expect(
wrapper.find('[data-test="css-template-modal-title"]').text(),
).toEqual('Edit CSS Template Properties');
).toEqual('Edit CSS template properties');
});
it('renders input elements for template name', () => {

View File

@@ -70,13 +70,13 @@ describe('ActivityTable', () => {
await waitForComponentToPaint(wrapper);
});
it('the component renders ', () => {
it('the component renders', () => {
expect(wrapper.find(ActivityTable)).toExist();
});
it('renders tabs with three buttons', () => {
expect(wrapper.find('li')).toHaveLength(3);
});
it('it renders ActivityCards', async () => {
it('renders ActivityCards', async () => {
expect(wrapper.find('ListViewCard')).toExist();
});
});

View File

@@ -58,11 +58,11 @@ describe('ChartTable', () => {
},
};
const wrapper = mount(<ChartTable store={store} {...mockedProps} />);
it('it renders', () => {
it('renders', () => {
expect(wrapper.find(ChartTable)).toExist();
});
it('fetches chart favorites and renders chart cards ', async () => {
it('fetches chart favorites and renders chart cards', async () => {
act(() => {
const handler = wrapper.find('li.no-router a').at(0).prop('onClick');
if (handler) {

View File

@@ -103,7 +103,7 @@ describe('SavedQueries', () => {
expect(wrapper.find('ListViewCard')).toExist();
});
it('it renders a submenu with clickable tables and buttons', async () => {
it('renders a submenu with clickable tables and buttons', async () => {
expect(wrapper.find(SubMenu)).toExist();
expect(wrapper.find('li')).toHaveLength(1);
expect(wrapper.find('button')).toHaveLength(2);

View File

@@ -18,7 +18,7 @@
*/
import React, { ReactNode } from 'react';
import shortid from 'shortid';
import { t } from '@superset-ui/core';
import { t, styled } from '@superset-ui/core';
import Button from 'src/components/Button';
import Fieldset from './Fieldset';
import { recurseReactClone } from './utils';
@@ -41,6 +41,7 @@ interface CRUDCollectionProps {
) => ReactNode)[];
onChange?: (arg0: any) => void;
tableColumns: Array<any>;
stickyHeader?: boolean;
}
interface CRUDCollectionState {
@@ -60,6 +61,27 @@ function createKeyedCollection(arr: Array<object>) {
return map;
}
const CrudTableWrapper = styled.div<{ stickyHeader?: boolean }>`
${({ stickyHeader }) =>
stickyHeader &&
`
height: 350px;
overflow: auto;
thead th {
background: #fff;
position: sticky;
top: 0;
z-index: 9;
}
`}
`;
const CrudButtonWrapper = styled.div`
text-align: right;
${({ theme }) => `margin-bottom: ${theme.gridUnit * 2}px`}
`;
export default class CRUDCollection extends React.PureComponent<
CRUDCollectionProps,
CRUDCollectionState
@@ -281,25 +303,32 @@ export default class CRUDCollection extends React.PureComponent<
render() {
return (
<div className="CRUD">
<span className="float-right m-t-10 m-r-10">
<>
<CrudButtonWrapper>
{this.props.allowAddItem && (
<Button
buttonSize="sm"
buttonStyle="primary"
onClick={this.onAddItem}
data-test="add-item-button"
>
<i data-test="crud-add-table-item" className="fa fa-plus" />{' '}
{t('Add Item')}
</Button>
<span className="m-t-10 m-r-10">
<Button
buttonSize="sm"
buttonStyle="primary"
onClick={this.onAddItem}
data-test="add-item-button"
>
<i data-test="crud-add-table-item" className="fa fa-plus" />{' '}
{t('Add item')}
</Button>
</span>
)}
</span>
<table data-test="crud-table" className="table">
{this.renderHeaderRow()}
{this.renderTableBody()}
</table>
</div>
</CrudButtonWrapper>
<CrudTableWrapper
className="CRUD"
stickyHeader={this.props.stickyHeader}
>
<table data-test="crud-table" className="table">
{this.renderHeaderRow()}
{this.renderTableBody()}
</table>
</CrudTableWrapper>
</>
);
}
}

View File

@@ -188,7 +188,7 @@ export function scheduleQuery(query) {
dispatch(
addSuccessToast(
t(
'Your query has been scheduled. To see details of your query, navigate to Saved Queries',
'Your query has been scheduled. To see details of your query, navigate to Saved queries',
),
),
),
@@ -1176,7 +1176,7 @@ export function popStoredQuery(urlId) {
.then(({ json }) =>
dispatch(
addQueryEditor({
title: json.title ? json.title : t('Sjsonhared query'),
title: json.title ? json.title : t('Shared query'),
dbId: json.dbId ? parseInt(json.dbId, 10) : null,
schema: json.schema ? json.schema : null,
autorun: json.autorun ? json.autorun : false,

View File

@@ -65,8 +65,8 @@ const iconMap = {
index: 'fa-bookmark',
};
const tooltipTitleMap = {
pk: 'Primary Key',
fk: 'Foreign Key',
pk: 'Primary key',
fk: 'Foreign key',
index: 'Index',
};

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