Compare commits
112 Commits
enxdev/cha
...
1.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c9a755f253 | ||
|
|
4b8f54dfa1 | ||
|
|
ae4449383c | ||
|
|
98edd6a039 | ||
|
|
fd84a6fed9 | ||
|
|
d6bd5b8ea2 | ||
|
|
3496b73f8b | ||
|
|
b90ac851ad | ||
|
|
39c7cc3128 | ||
|
|
cb355f1000 | ||
|
|
ad41e6d973 | ||
|
|
8d44afe6ea | ||
|
|
72b4c7ec8d | ||
|
|
51dc845e0a | ||
|
|
0456563493 | ||
|
|
926fdce425 | ||
|
|
7b94db0bff | ||
|
|
8e6c195718 | ||
|
|
d28b44a10c | ||
|
|
4c2303e638 | ||
|
|
3a962f81f6 | ||
|
|
99534f2cfd | ||
|
|
2fc03f88a8 | ||
|
|
c1c798aac6 | ||
|
|
3b1a84c34a | ||
|
|
bd83087c3e | ||
|
|
550098211a | ||
|
|
fd6a75d5ba | ||
|
|
368691383b | ||
|
|
73523e2822 | ||
|
|
60545c9b23 | ||
|
|
be51717c37 | ||
|
|
51c7b896f4 | ||
|
|
4ee6317be9 | ||
|
|
278e5b80a1 | ||
|
|
b07188e11d | ||
|
|
c277b8466c | ||
|
|
ca0c07722e | ||
|
|
8d80262bed | ||
|
|
39e3b28292 | ||
|
|
7e9a042ed1 | ||
|
|
0686a1c347 | ||
|
|
d8a7d83a06 | ||
|
|
e2ce27fe46 | ||
|
|
fe0b9f419b | ||
|
|
3d770aeeb9 | ||
|
|
522f466b23 | ||
|
|
41505bb2d4 | ||
|
|
c7284fe242 | ||
|
|
bc53be95a5 | ||
|
|
0acd2ccaaa | ||
|
|
8b09414806 | ||
|
|
3ccb23c4a3 | ||
|
|
0fc2bc5f02 | ||
|
|
a4d7e9c35d | ||
|
|
10ca58f89a | ||
|
|
33dd4e55f2 | ||
|
|
630bb7264e | ||
|
|
749db0b944 | ||
|
|
342f5eae71 | ||
|
|
6d22b42e41 | ||
|
|
46507ba58a | ||
|
|
e4453a77f7 | ||
|
|
74f64b1794 | ||
|
|
f659d66fee | ||
|
|
5e4ce48ccf | ||
|
|
200cc1a5c4 | ||
|
|
2641a65feb | ||
|
|
3d8185383d | ||
|
|
2cdb92d05c | ||
|
|
e6b916c06f | ||
|
|
968ab8d22f | ||
|
|
bc1a2a2258 | ||
|
|
5719fefdd4 | ||
|
|
2187d1a409 | ||
|
|
c38a5fc1d8 | ||
|
|
147f750829 | ||
|
|
5786513cbb | ||
|
|
ae6e54025b | ||
|
|
7e0eedccf8 | ||
|
|
c4e6baef3b | ||
|
|
b652995b56 | ||
|
|
739ab14136 | ||
|
|
a1f53fb645 | ||
|
|
52b581f922 | ||
|
|
5f2de1df71 | ||
|
|
603ab75a62 | ||
|
|
027e2075f5 | ||
|
|
5791f23e73 | ||
|
|
cf69f29144 | ||
|
|
72977fc71f | ||
|
|
46fd85a141 | ||
|
|
78e4b02305 | ||
|
|
696c9773bd | ||
|
|
4f35234f3e | ||
|
|
b213c1cb1f | ||
|
|
b3e7ef2da6 | ||
|
|
ea54e0a7cf | ||
|
|
3a553c9ef2 | ||
|
|
34da995dd9 | ||
|
|
288f6bb88c | ||
|
|
507302d639 | ||
|
|
35c15b8b3a | ||
|
|
90915db60d | ||
|
|
d940cae8d5 | ||
|
|
a83653735f | ||
|
|
e3b65f2519 | ||
|
|
f2afee9832 | ||
|
|
bd6525fdf5 | ||
|
|
dc203c174c | ||
|
|
6d59351462 | ||
|
|
c837c1c739 |
8
.github/workflows/docker_build_push.sh
vendored
@@ -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
|
||||
|
||||
|
||||
747
CHANGELOG.md
@@ -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)
|
||||
|
||||
109
CONTRIBUTING.md
@@ -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?
|
||||
|
||||
- It’s generally accepted as the quickest to read
|
||||
- It’s 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.
|
||||
|
||||
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
34
UPDATING.md
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}```|
|
||||
|
||||
18
docs/src/pages/docs/Connecting to Databases/solr.mdx
Normal 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]
|
||||
```
|
||||
@@ -2,7 +2,7 @@
|
||||
name: Apache Spark SQL
|
||||
menu: Connecting to Databases
|
||||
route: /docs/databases/spark-sql
|
||||
index: 10
|
||||
index: 11
|
||||
version: 1
|
||||
---
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -44,7 +44,7 @@ extraEnv: {}
|
||||
configMountPath: "/app/pythonpath"
|
||||
|
||||
image:
|
||||
repository: apache/incubator-superset
|
||||
repository: apache/superset
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
3
setup.py
@@ -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"],
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
|
||||
@@ -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',
|
||||
],
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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
|
||||
});
|
||||
|
||||
@@ -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');
|
||||
}),
|
||||
);
|
||||
});
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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', () => {
|
||||
});
|
||||
}
|
||||
}),
|
||||
);
|
||||
});
|
||||
),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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');
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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(() => {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 =
|
||||
|
||||
1
superset-frontend/images/screenshots/bank_dash.jpg
Symbolic link
@@ -0,0 +1 @@
|
||||
slack_dash.jpg
|
||||
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 6.5 MiB After Width: | Height: | Size: 19 B |
1
superset-frontend/images/screenshots/deckgl_dash.png
Symbolic link
@@ -0,0 +1 @@
|
||||
geospatial_dash.jpg
|
||||
|
Before Width: | Height: | Size: 6.5 MiB After Width: | Height: | Size: 19 B |
BIN
superset-frontend/images/screenshots/explore.jpg
Normal file
|
After Width: | Height: | Size: 435 KiB |
|
Before Width: | Height: | Size: 644 KiB After Width: | Height: | Size: 11 B |
1
superset-frontend/images/screenshots/explore.png
Symbolic link
@@ -0,0 +1 @@
|
||||
explore.jpg
|
||||
|
Before Width: | Height: | Size: 644 KiB After Width: | Height: | Size: 11 B |
BIN
superset-frontend/images/screenshots/explore_visualizations.jpg
Normal file
|
After Width: | Height: | Size: 474 KiB |
BIN
superset-frontend/images/screenshots/gallery.jpg
Normal file
|
After Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 11 B |
1
superset-frontend/images/screenshots/gallery.png
Symbolic link
@@ -0,0 +1 @@
|
||||
gallery.jpg
|
||||
|
Before Width: | Height: | Size: 3.4 MiB After Width: | Height: | Size: 11 B |
BIN
superset-frontend/images/screenshots/geospatial_dash.jpg
Normal file
|
After Width: | Height: | Size: 482 KiB |
BIN
superset-frontend/images/screenshots/slack_dash.jpg
Normal file
|
After Width: | Height: | Size: 371 KiB |
BIN
superset-frontend/images/screenshots/sql_lab.jpg
Normal file
|
After Width: | Height: | Size: 406 KiB |
1
superset-frontend/images/screenshots/sqllab.jpg
Symbolic link
@@ -0,0 +1 @@
|
||||
sql_lab.jpg
|
||||
|
Before Width: | Height: | Size: 773 KiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 26 B |
1
superset-frontend/images/screenshots/visualizations.png
Symbolic link
@@ -0,0 +1 @@
|
||||
explore_visualizations.jpg
|
||||
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 26 B |
5479
superset-frontend/package-lock.json
generated
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -26,7 +26,7 @@ describe('FilterConfigurationButton', () => {
|
||||
const mockedProps = {
|
||||
createNewOnOpen: false,
|
||||
};
|
||||
it('it is valid', () => {
|
||||
it('is valid', () => {
|
||||
expect(
|
||||
React.isValidElement(<FilterConfigurationLink {...mockedProps} />),
|
||||
).toBe(true);
|
||||
|
||||
@@ -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.',
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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 = [
|
||||
|
||||
93
superset-frontend/spec/javascripts/datasource/fixtures.tsx
Normal 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,
|
||||
];
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -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' };
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
|
||||
@@ -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' },
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -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,
|
||||
|
||||
@@ -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: {},
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -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' },
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
});
|
||||
}));
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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',
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
});
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 });
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 => ({
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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',
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -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', () => {
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
};
|
||||
|
||||
|
||||