feat: deprecate old API on core superset fave_dashboards (#19754)

* feat: deprecate old API on core superset fave_dashboards

* fix js lint

* remove unused type
This commit is contained in:
Daniel Vaz Gaspar 2022-05-02 16:24:48 +01:00 committed by GitHub
parent aff10a7fad
commit 85b0ef8526
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 17 deletions

View File

@ -17,12 +17,13 @@
* under the License.
*/
import React from 'react';
import rison from 'rison';
import moment from 'moment';
import { t } from '@superset-ui/core';
import TableLoader from '../../components/TableLoader';
import { Slice } from '../types';
import { User, Dashboard } from '../../types/bootstrapTypes';
import { User, DashboardResponse } from '../../types/bootstrapTypes';
interface FavoritesProps {
user: User;
@ -50,19 +51,29 @@ export default class Favorites extends React.PureComponent<FavoritesProps> {
}
renderDashboardTable() {
const mutator = (data: Dashboard[]) =>
data.map(dash => ({
dashboard: <a href={dash.url}>{dash.title}</a>,
creator: <a href={dash.creator_url}>{dash.creator}</a>,
favorited: moment.utc(dash.dttm).fromNow(),
const search = [{ col: 'id', opr: 'dashboard_is_favorite', value: true }];
const query = rison.encode({
keys: ['none'],
columns: ['created_on_delta_humanized', 'dashboard_title', 'url'],
filters: search,
order_column: 'changed_on',
order_direction: 'desc',
page: 0,
page_size: 100,
});
const mutator = (data: DashboardResponse) =>
data.result.map(dash => ({
dashboard: <a href={dash.url}>{dash.dashboard_title}</a>,
created: dash.created_on_delta_humanized,
_created: dash.created_on_delta_humanized,
}));
return (
<TableLoader
className="table-condensed"
mutator={mutator}
dataEndpoint={`/superset/fave_dashboards/${this.props.user.userId}/`}
dataEndpoint={`/api/v1/dashboard/?q=${query}`}
noDataText={t('No favorite dashboards yet, go click on stars!')}
columns={['dashboard', 'creator', 'favorited']}
columns={['dashboard', 'creator', 'created']}
sortable
/>
);

View File

@ -40,15 +40,6 @@ export interface UserWithPermissionsAndRoles extends User {
export type UndefinedUser = {};
export type Dashboard = {
dttm: number;
id: number;
url: string;
title: string;
creator?: string;
creator_url?: string;
};
export type DashboardData = {
dashboard_title?: string;
created_on_delta_humanized?: string;

View File

@ -1543,6 +1543,11 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
@expose("/fave_dashboards_by_username/<username>/", methods=["GET"])
def fave_dashboards_by_username(self, username: str) -> FlaskResponse:
"""This lets us use a user's username to pull favourite dashboards"""
logger.warning(
"%s.fave_dashboards_by_username "
"This API endpoint is deprecated and will be removed in version 3.0.0",
self.__class__.__name__,
)
user = security_manager.find_user(username=username)
return self.fave_dashboards(user.id)
@ -1551,6 +1556,11 @@ class Superset(BaseSupersetView): # pylint: disable=too-many-public-methods
@event_logger.log_this
@expose("/fave_dashboards/<int:user_id>/", methods=["GET"])
def fave_dashboards(self, user_id: int) -> FlaskResponse:
logger.warning(
"%s.fave_dashboards "
"This API endpoint is deprecated and will be removed in version 3.0.0",
self.__class__.__name__,
)
error_obj = self.get_user_activity_access_error(user_id)
if error_obj:
return error_obj