Add support for saving dashboard parameters after clicking the Apply button. Parameters are applied in the following order: URL, dashboard parameters, query parameters.
Persist the queued values only when “Done Editing” is clicked, keeping Query and Dashboard editors aligned.
"Query in queue" should switch to "Executing query", but does not.
Commands:
git revert --no-commit bd17662005
git revert --no-commit 5ac5d86f5e
vim tests/handlers/test_query_results.py
git add tests/handlers/test_query_results.py
Co-authored-by: Justin Clift <justin@postgresql.org>
* Added screen reader CSS
* Added description to external links
* Added spinner icon accessibility
* Added accessibility to exclamation and big message
* Added question and exclamation accessibility
* Hide decorative icons
* Standardized link design
* Added a11y to refresh icons
* Added aria-label to anchors and buttons
* Added a11y to conditional icons
* Added applicable labels to Ant Icons
* Changed escape to interpolation
* Replaced external links with opens in new tab
* Improved Tooltip hosts
* Added aria live to temporary elements
* Removed mistakenly added redundant helper
* Undoes unnecessarily added interpolation
* Replaced empty label with hidden
* Improved full icon label
* Improved display of live regions
* Added note
* remove unused class
* Created unique id
* Remove TODOs
* Proper action label
* Improved feedback for autocomplete toggle
* feature: add id hook
* refactor: use id hook
* standardize white space
* Add My Dashboards filter option to the Dashboards list. Added API endpoint to get the list of a user's dashboards, similar to the My Queries feature.
* Update empty dashboard list state to show an invite to create a new dashboard, like My Queries
* Update to Levko's suggested approach. Clean up some of the formatting for consistency. Put the 'My Queries/Dashboards' item before the Favorites since that organization seems cleaner to me.
* Address Levko's comments
* Ask user to log in when session expires
* Update implementation
* Update implementation
* Minor fix
* Update modal
* Do not intercept calls to api/session as Auth.requireSession() relies on it
* Refine code; adjust popup size and position
* expire CSRF tokens after 6 hours
* use axios' built-in cookie to header copy mechanism
* add axios-auth-refresh
* retry CSRF-related 400 errors by refreshing the cookie
* export the auth refresh interceptor to support ejecting it if neccessary
* reject the original request if it's unrelated to CSRF
* add default limit 1000
* Add frontend changes and connect to backend
* Fix query hash because of default limit
* fix CircleCI test
* adjust for comment
* Set corejs version in .babelrc so Jest doesn't complain.
* Rewrite services/routes in TypeScript.
* Add TypeScript definitions for DialogComponent.
* Make image paths more portable
* Add current route context and hook.
* Make EmptyState more flexible by being able to pass in getSteps function.
* Rewrite ItemsList in TypeScript.
* Introduce the possibility to add custom sorters for a column.
* Rearrange props to be friendly to TypeScript.
* Type definitions for NotificationApi.
* Use Databricks query editor components for databricks_internal type of query runner.
* URL Escape password in Alembic configuration.
* Compare types in migrations.
* add flask-wtf
* add CSRF tokens to all static forms
* add CSRF tokens to all axios requests
* disable CSRF validation in unit tests
* support CSRF-protected requests in *most* cypress tests
* don't enfroce CSRF checks by default
* avoid CSRF enforcement in unit tests
* remove redundant spread
* some camel casing hiccups
* always yield the CSRF cookie, but avoid enforcing it if CSRF toggle is off
* Restyled by prettier (#5056)
Co-authored-by: Restyled.io <commits@restyled.io>
* set a CSRF header only if cookie is present
* enforce CSRF in CI
* install lodash directly for Cypress
* install request-cookies directly for Cypress. We should probably start loading package.json deps
* enable CSRF support when logout and login happen within the same spec
Co-authored-by: restyled-io[bot] <32688539+restyled-io[bot]@users.noreply.github.com>
Co-authored-by: Restyled.io <commits@restyled.io>
* Add refresh button in the bottom
* Add caching
* Drop allSettled
* Simplify refresh button
* Update error to return 500
* Load tables before loading columns
* Don't mutate schema
* Reset db name and schemas when changing data source
* Load both tables and columns
* Return error with code 200
* Code review updates
* Add expiration time to the cache Keys
* Back with RQ
* on dashboard api calls - take the id from the beginning of the slug, unless there is no number in it - in that case, take the entire slug as id
* add dashboard id when showing links to dashboards
* change path to include new name when renaming dashboards
* move slug generation to backend
* redirect to new name after changing (this time with a proper promise)
* oh right, we already have a slug function
* add spec that makes sure that renamed dashboards are redirected to the
url which contains their new name
* use id-slug in all Cypress specs
* move dashboards from /dashboard/:slug to /dashboards/:id-:name_as_slug
* Update dashboard url as its name changes
* Update separator to be "/"
* Update missing dashboard urls
* Update api not to depend on int id
* Use '-' instead of '/' as separator and update Dashboard.get calls
* slug -> name_as_slug
* Keep slug urls on cypress
* Update route path
* Use legacy attr for GET
* Use getter for urlForDashboard
* Update dashboard url when loaded by slug
* Update Dashboard routes to use id instead of slug
* Update Dashboard handler tests
* Update Cypress tests
* Fix create new dashboard spec
* Use axios { params }
* Drop Ternary operator
* Send updated slug directly in 'slug' attr
* Update multiple urls Dashboard test name
* Update route names
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
Co-authored-by: Gabriel Dutra <nesk.frz@gmail.com>
Co-authored-by: Levko Kravets <levko.ne@gmail.com>
* run queries through adhoc SSH tunnels
* reduce indent by losing try/else clause
* document host/port getters and setters
* handle forceful schema refreshes in RQ and poll for their results using the /jobs endpoint
* set schema refresh timeout to 5 minutes
* Restyled by prettier (#4847)
Co-authored-by: Restyled.io <commits@restyled.io>
* send schema refresh errors as part of API response
* Use correct get_schema call.
Co-authored-by: restyled-io[bot] <32688539+restyled-io[bot]@users.noreply.github.com>
Co-authored-by: Restyled.io <commits@restyled.io>
Co-authored-by: Arik Fraimovich <arik@arikfr.com>
* Add visualizations project settings
* Move visualizations to redash-visualizations
* Delete shared components
* Remove antd from deps
* Remove p-r-5 from table utils
* Remove visualization deps from package.json
* Rename package and change its version
* Test preinstall script
* Update Dockerfile build for frontend
* Test adding dockerignore
* Update jest tests
* Add step for jest tests
* Include viz-lib on dev commands
* User prettier v1 for now
* Delete unused libs on the app
* Add readme draft (to be finished)
* Add getOptions to Editor
* Add required libraries and finish basic example
* Bump version
* Fix: showing current settings tab broken in MULTI_ORG.
* Revert "Fix: showing current settings tab broken in MULTI_ORG."
This reverts commit a88defd0b5.
* Add test for SettingsMenu#isActive
* Use stripBase to remove slug from url
Let the notifications go into browser/OS notification trays so users can click on them from there if they miss the initial notification. Modern browsers generally use OS notifications so the user is in control of the notification at the OS level.
* Fix query based param with no results crashing page
* Add message for empty dropdown parameters
* Handle 500 no results case with empty result set
* Cypress: Make sure it shows the message
* Use .ant-select-selection to open dropdown