Browse Source

feature:
1.开启ShareDashBoard的导出面板

WanRuixiang 10 months ago
parent
commit
d2fc8a6a8c

+ 19 - 4
src/app/pages/DashBoardPage/components/ActionProvider/BoardActionProvider.tsx

@@ -19,13 +19,17 @@
 import { DownloadFileType } from 'app/constants';
 import { generateShareLinkAsync } from 'app/utils/fetch';
 import { createContext, FC, memo, useMemo } from 'react';
-import { useDispatch } from 'react-redux';
+import { useDispatch, useSelector } from 'react-redux';
 import { useHistory } from 'react-router';
 import { BOARD_UNDO } from '../../constants';
 import { boardDownLoadAction } from '../../pages/Board/slice/asyncActions';
 import { fetchBoardDetail } from '../../pages/Board/slice/thunk';
 import { clearEditBoardState } from '../../pages/BoardEditor/slice/actions/actions';
 import { toUpdateDashboard } from '../../pages/BoardEditor/slice/thunk';
+import { StorageKeys } from '../../../../../globalConstants';
+import { selectNeedVerify, selectShareExecuteTokenMap, selectSharePassword } from '../../../SharePage/slice/selectors';
+import { selectShareBoard } from '../../pages/Board/slice/selector';
+import { useRouteMatch } from 'react-router-dom';
 
 export interface BoardActionContextProps {
   // read
@@ -42,7 +46,7 @@ export interface BoardActionContextProps {
     users: string[];
     rowPermissionBy: string;
   }) => any;
-  onBoardToDownLoad: (downloadType: DownloadFileType,direct:boolean) => any;
+  onBoardToDownLoad: (downloadType: DownloadFileType) => any;
   // edit
   updateBoard?: (callback?: () => void) => void;
 
@@ -58,6 +62,12 @@ export const BoardActionProvider: FC<{
 }> = memo(({ boardId, children }) => {
   const dispatch = useDispatch();
   const history = useHistory();
+  const clientId = localStorage.getItem(StorageKeys.ShareClientId);
+  const needVerify = useSelector(selectNeedVerify);
+  const shareBoard = useSelector(selectShareBoard);
+  const executeTokenMap = useSelector(selectShareExecuteTokenMap);
+  const routerParams: { params: { token: string } } = useRouteMatch();
+  const sharePassword = useSelector(selectSharePassword);
 
   const actions = useMemo(() => {
     const actionObj: BoardActionContextProps = {
@@ -83,12 +93,17 @@ export const BoardActionProvider: FC<{
         });
         return result;
       },
-      onBoardToDownLoad: (downloadType,direct) => {
+      onBoardToDownLoad: (downloadType) => {
         dispatch(
           boardDownLoadAction({
             boardId,
             downloadType,
-            direct
+            clientId,
+            needVerify,
+            shareBoard,
+            executeTokenMap,
+            routerParams,
+            sharePassword
           }),
         );
       },

+ 3 - 3
src/app/pages/DashBoardPage/components/BoardDropdownList/BoardDropdownList.tsx

@@ -92,7 +92,7 @@ export const BoardDropdownList: FC<Props> = memo(
                 okText={t('common.ok')}
                 cancelText={t('common.cancel')}
                 onConfirm={() => {
-                  onBoardToDownLoad?.(DownloadFileType.Excel,false);
+                  onBoardToDownLoad?.(DownloadFileType.Excel);
                 }}
               >
                 {t('share.exportData')}
@@ -105,7 +105,7 @@ export const BoardDropdownList: FC<Props> = memo(
                 okText={t('common.ok')}
                 cancelText={t('common.cancel')}
                 onConfirm={() => {
-                  onBoardToDownLoad?.(DownloadFileType.Pdf,false);
+                  onBoardToDownLoad?.(DownloadFileType.Pdf);
                 }}
               >
                 {t('share.exportPDF')}
@@ -118,7 +118,7 @@ export const BoardDropdownList: FC<Props> = memo(
                 okText={t('common.ok')}
                 cancelText={t('common.cancel')}
                 onConfirm={() => {
-                  onBoardToDownLoad?.(DownloadFileType.Image,false);
+                  onBoardToDownLoad?.(DownloadFileType.Image);
                 }}
               >
                 {t('share.exportPicture')}

+ 1 - 1
src/app/pages/DashBoardPage/components/Widgets/ExportBtnWidget/ExportBtnWidgetCore.tsx

@@ -12,7 +12,7 @@ export const ExportBtnWidgetCore: React.FC<{}> = () => {
   const { onBoardToDownLoad } = useContext(BoardActionContext);
   const onQuery = e => {
     e.stopPropagation();
-    onBoardToDownLoad?.(DownloadFileType.Excel,true);
+    onBoardToDownLoad?.(DownloadFileType.Excel);
   };
 
   const title = getWidgetTitle(widget.config.customConfig.props);

+ 55 - 23
src/app/pages/DashBoardPage/pages/Board/slice/asyncActions.ts

@@ -22,7 +22,7 @@ import { FilterSearchParamsWithMatch } from 'app/pages/MainPage/pages/VizPage/sl
 import { mainActions } from 'app/pages/MainPage/slice';
 import { ExecuteToken } from 'app/pages/SharePage/slice/types';
 import { ChartDataRequest } from 'app/types/ChartDataRequest';
-import { downloadFile, makeDownloadDataTask } from 'app/utils/fetch';
+import { downloadFile, makeDownloadDataTask, makeShareDownloadDataTask } from 'app/utils/fetch';
 import { RootState } from 'types';
 import { UniqWith } from 'utils/object';
 import { boardActions } from '.';
@@ -48,6 +48,7 @@ import {
   VizRenderMode,
   WidgetData,
 } from './types';
+import { shareActions } from '../../../../SharePage/slice';
 
 export const handleServerBoardAction =
   (params: {
@@ -60,7 +61,6 @@ export const handleServerBoardAction =
     const { data, renderMode, filterSearchMap, executeToken } = params;
     const dashboard = getDashBoardByResBoard(data);
     const { datacharts, views: serverViews, widgets: serverWidgets } = data;
-
     const dataCharts: DataChart[] = getDataChartsByServer(
       datacharts,
       serverViews,
@@ -167,10 +167,23 @@ export const getBoardStateAction =
     };
   };
 export const boardDownLoadAction =
-  (params: { boardId: string; downloadType: DownloadFileType,direct:any }) =>
+  (params: { boardId: string; downloadType: DownloadFileType, clientId:any,
+    needVerify:any,
+    shareBoard:any,
+    executeTokenMap:any,
+    routerParams:any,
+    sharePassword:any}) =>
   async (dispatch, getState) => {
+    const {
+      clientId,
+      needVerify,
+      shareBoard,
+      executeTokenMap,
+      routerParams,
+      sharePassword
+    } = params
     const state = getState() as RootState;
-    const { boardId, downloadType,direct } = params;
+    const { boardId, downloadType } = params;
     const vizs = state.viz?.vizs;
     const folderId = vizs?.filter(v => v.relId === boardId)[0].id;
     const boardInfoRecord = state.board?.boardInfoRecord;
@@ -185,25 +198,44 @@ export const boardDownLoadAction =
       getBoardDownloadParams({ boardId }),
     );
 
-    dispatch(
-      makeDownloadDataTask({
-        downloadParams:
-          downloadType === DownloadFileType.Excel
-            ? requestParams
-            : [{ analytics: false, vizType: 'dashboard', vizId: folderId }],
-        fileName,
-        downloadType,
-        imageWidth,
-        resolve: (res) => {
-          if (direct){
-            downloadFile(res.id).then(() => {
-              dispatch(mainActions.setDownloadPolling(true));
-            });
-          }
-          dispatch(mainActions.setDownloadPolling(true));
-        },
-      }),
-    );
+    if (!Boolean(needVerify) && shareBoard && !folderId){
+      if (clientId && executeTokenMap) {
+        const { requestParams, fileName } = await dispatch(
+          getBoardDownloadParams({ boardId }),
+        );
+        if (requestParams) {
+          dispatch(
+            makeShareDownloadDataTask({
+              clientId: clientId,
+              executeToken: executeTokenMap,
+              downloadParams: requestParams,
+              shareToken:routerParams?.params.token,
+              fileName: fileName,
+              resolve: () => {
+                dispatch(shareActions.setShareDownloadPolling(true));
+              },
+              password: sharePassword,
+            }),
+          );
+        }
+
+      }
+    }else {
+      dispatch(
+        makeDownloadDataTask({
+          downloadParams:
+            downloadType === DownloadFileType.Excel
+              ? requestParams
+              : [{ analytics: false, vizType: 'dashboard', vizId: folderId }],
+          fileName,
+          downloadType,
+          imageWidth,
+          resolve: (res) => {
+            dispatch(mainActions.setDownloadPolling(true));
+          },
+        }),
+      );
+    }
   };
 export const getBoardDownloadParams =
   (params: { boardId: string }) => (dispatch, getState) => {

+ 1 - 1
src/app/pages/SharePage/Dashboard/ShareDashboardPage.tsx

@@ -241,7 +241,7 @@ function ShareDashboardPage() {
       {!Boolean(needVerify) && shareBoard && (
         <DashboardForShare
           dashboard={shareBoard}
-          allowDownload={false}
+          allowDownload={true}
           loadVizData={loadVizData}
           onMakeShareDownloadDataTask={onMakeShareDownloadDataTask}
           renderMode={renderMode}