diff --git a/superset/assets/javascripts/SqlLab/actions.js b/superset/assets/javascripts/SqlLab/actions.js index e9e9103d0236..fb5292c552ac 100644 --- a/superset/assets/javascripts/SqlLab/actions.js +++ b/superset/assets/javascripts/SqlLab/actions.js @@ -186,16 +186,16 @@ export function removeQuery(query) { } export const FAVE_QUERY_SUCCESS = 'FAVE_QUERY_SUCCESS'; -export function faveQuerySuccess(query) { - return { type: FAVE_QUERY_SUCCESS, query }; +export function faveQuerySuccess(query, fave) { + return { type: FAVE_QUERY_SUCCESS, query, fave }; } const FAVEQUERY_BASE_URL = '/superset/favstar/query'; -export function favouriteQuery(query) { +export function favouriteQuery(query, fave) { return function (dispatch) { - const favAction = query.faved ? 'unselect' : 'select'; + const favAction = fave ? 'select' : 'unselect'; $.get(`${FAVEQUERY_BASE_URL}/${query.id}/${favAction}/`); - dispatch(faveQuerySuccess(query)); + dispatch(faveQuerySuccess(query, fave)); }; } diff --git a/superset/assets/javascripts/SqlLab/components/FaveQueries.jsx b/superset/assets/javascripts/SqlLab/components/FaveQueries.jsx index c0da43df590d..04b1b3b4b41d 100644 --- a/superset/assets/javascripts/SqlLab/components/FaveQueries.jsx +++ b/superset/assets/javascripts/SqlLab/components/FaveQueries.jsx @@ -16,13 +16,8 @@ class FaveQueries extends React.PureComponent { } deleteQuery(query) { - $.ajax({ - type: 'GET', - url: `/superset/favstar/query/${query.id}/unselect/`, - success: () => { - this.fetchFaveQueries(); - }, - }); + this.props.actions.favouriteQuery(query, false); + this.fetchFaveQueries(); } fetchFaveQueries() { this.setState({ fetching: true }); diff --git a/superset/assets/javascripts/SqlLab/components/QueryTable.jsx b/superset/assets/javascripts/SqlLab/components/QueryTable.jsx index 63f360b00c83..90f8f39e8109 100644 --- a/superset/assets/javascripts/SqlLab/components/QueryTable.jsx +++ b/superset/assets/javascripts/SqlLab/components/QueryTable.jsx @@ -75,7 +75,7 @@ class QueryTable extends React.PureComponent { this.props.actions.removeQuery(query); } favQuery(query) { - this.props.actions.favouriteQuery(query); + this.props.actions.favouriteQuery(query, !query.faved); } render() { const data = this.props.queries.map((query) => { diff --git a/superset/assets/javascripts/SqlLab/reducers.js b/superset/assets/javascripts/SqlLab/reducers.js index 50739f76dcd0..61eb627c7290 100644 --- a/superset/assets/javascripts/SqlLab/reducers.js +++ b/superset/assets/javascripts/SqlLab/reducers.js @@ -72,11 +72,7 @@ export const sqlLabReducer = function (state, action) { return Object.assign({}, state, { queries: newQueries }); }, [actions.FAVE_QUERY_SUCCESS]() { - let faved = false; - if (!state.queries[action.query.id].faved) { - faved = true; - } - return alterInObject(state, 'queries', action.query, { faved }); + return alterInObject(state, 'queries', action.query, { faved: action.fave }); }, [actions.RESET_STATE]() { return Object.assign({}, getInitialState()); diff --git a/superset/assets/spec/javascripts/sqllab/FaveQueries_spec.js b/superset/assets/spec/javascripts/sqllab/FaveQueries_spec.jsx similarity index 73% rename from superset/assets/spec/javascripts/sqllab/FaveQueries_spec.js rename to superset/assets/spec/javascripts/sqllab/FaveQueries_spec.jsx index 00b40cdc90f1..cebfc8cb70cc 100644 --- a/superset/assets/spec/javascripts/sqllab/FaveQueries_spec.js +++ b/superset/assets/spec/javascripts/sqllab/FaveQueries_spec.jsx @@ -1,12 +1,9 @@ import React from 'react'; -import Select from 'react-select'; import FaveQueries from '../../../javascripts/SqlLab/components/FaveQueries'; -import { shallow } from 'enzyme'; import { describe, it } from 'mocha'; import { expect } from 'chai'; -import sinon from 'sinon'; -describe('QuerySearch', () => { +describe('FaveQueries', () => { const mockedProps = { actions: {}, }; diff --git a/superset/views/core.py b/superset/views/core.py index 1bec77a6dad6..6089c8b22d02 100755 --- a/superset/views/core.py +++ b/superset/views/core.py @@ -1526,7 +1526,7 @@ def fave_queries(self): sqla.and_( models.FavStar.user_id == int(g.user.id), models.FavStar.class_name == 'query', - models.Query.client_id == models.FavStar.obj_id, + models.Query.id == models.FavStar.obj_id, ) ) .order_by( @@ -1696,6 +1696,13 @@ def favstar(self, class_name, obj_id, action): session = db.session() FavStar = models.FavStar # noqa count = 0 + if class_name == 'query': + query = session.query(models.Query).filter_by( + client_id=obj_id).first() + if not query: + return json_error_response( + json.dumps({'error': 'No query was found!'})) + obj_id = query.id favs = session.query(FavStar).filter_by( class_name=class_name, obj_id=obj_id, user_id=g.user.get_id()).all()