阅读量:0
接口 | PUT | api/v1/dashboard/<dashboard_ID> |
---|
前端文件
superset-frontend\src\dashboard\components\PublishedStatus\index.jsx
69行 togglePublished()
togglePublished() {
this.props.savePublished(this.props.dashboardId, !this.props.isPublished);
}
superset-frontend\src\dashboard\actions\dashboardState.js
export function savePublished(id, isPublished) { return function savePublishedThunk(dispatch) { return SupersetClient.put({ endpoint: `/api/v1/dashboard/${id}`, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ published: isPublished, }), }) .then(() => { dispatch( addSuccessToast( isPublished ? t('This dashboard is now published') : t('This dashboard is now hidden'), ), ); dispatch(togglePublished(isPublished)); }) .catch(() => { dispatch( addDangerToast( t('You do not have permissions to edit this dashboard.'), ), ); }); };
代码解读
这个函数的核心逻辑是通过API请求更新仪表板的发布状态,然后根据请求的结果更新应用的UI状态和通知用户。它使用了Redux的Thunk中间件来处理异步操作,并根据请求的成功或失败情况显示相应的通知。
函数定义:
savePublished(id, isPublished)
:这是一个带有两个参数的函数。id
是仪表板的唯一标识符,isPublished
是一个布尔值,表示仪表板是否被发布。Thunk Action Creator:
savePublishedThunk(dispatch)
:这是一个Thunk action creator,返回一个函数,接收dispatch
作为参数。Thunk是Redux中的一个中间件,用于处理异步操作。API 请求:
SupersetClient.put({...})
:使用SupersetClient发送一个PUT请求,更新指定仪表板的发布状态。请求的endpoint
是/api/v1/dashboard/${id}
,其中${id}
代表仪表板的唯一标识符。headers
指定了请求的内容类型为JSON,body
包含了将published
状态设置为isPublished
的JSON字符串。Promise 处理:
.then(...)
:如果请求成功,执行以下操作:
- 调用
addSuccessToast
函数,根据isPublished
的值显示成功消息:如果仪表板已发布,显示“仪表板现在已发布”;如果未发布,显示“仪表板现在已隐藏”。- 调用
togglePublished(isPublished)
更新Redux状态,以反映仪表板的发布状态变化。
.catch(...)
:如果请求失败,执行以下操作:
- 调用
addDangerToast
函数,显示错误消息“您没有权限编辑此仪表板”。