@@ -21,7 +21,9 @@ import {
2121 buildWorkflowsExportRows ,
2222 buildWorkflowsXlsxBuffer ,
2323 downloadWorkflowsExcel ,
24+ TWorkflowExportFormat ,
2425} from '../utils/workflows/exportWorkflowsToExcel' ;
26+ import { downloadWorkflowsCsv } from '../utils/workflows/exportWorkflowsToCsv' ;
2527import { NotificationManager } from '../components/UI/Notifications' ;
2628import { ALL_SYSTEM_FIELD_NAMES } from '../components/Workflows/WorkflowsTablePage/WorkflowsTable/constants' ;
2729
@@ -62,68 +64,75 @@ export function useWorkflowsExport() {
6264 const groups = useSelector ( getGroupsList ) ;
6365 const timezone = useSelector ( getTimezone ) ;
6466
65- const handleExportClick = useCallback ( async ( ) => {
66- setIsExporting ( true ) ;
67- try {
68- const fields = selectedFields . length ? selectedFields : ALL_SYSTEM_FIELD_NAMES ;
69- const items = await fetchAllWorkflowsForExport ( {
70- statusFilter,
71- sorting,
72- templatesIdsFilter,
73- tasksApiNamesFilter,
74- performersIdsFilter,
75- performersGroupIdsFilter,
76- workflowStartersIdsFilter,
77- searchText,
78- fields,
79- } ) ;
67+ const handleExportClick = useCallback (
68+ async ( exportFormat : TWorkflowExportFormat ) => {
69+ setIsExporting ( true ) ;
70+ try {
71+ const fields = selectedFields . length ? selectedFields : ALL_SYSTEM_FIELD_NAMES ;
72+ const items = await fetchAllWorkflowsForExport ( {
73+ statusFilter,
74+ sorting,
75+ templatesIdsFilter,
76+ tasksApiNamesFilter,
77+ performersIdsFilter,
78+ performersGroupIdsFilter,
79+ workflowStartersIdsFilter,
80+ searchText,
81+ fields,
82+ } ) ;
83+
84+ if ( items . length === 0 ) {
85+ NotificationManager . warning ( {
86+ title : formatMessage ( { id : 'workflows.export-excel-empty-title' } ) ,
87+ message : formatMessage ( { id : 'workflows.export-excel-empty-message' } ) ,
88+ } ) ;
89+ return ;
90+ }
8091
81- if ( items . length === 0 ) {
82- NotificationManager . warning ( {
83- title : formatMessage ( { id : 'workflows.export-excel-empty-title' } ) ,
84- message : formatMessage ( { id : 'workflows.export-excel-empty-message' } ) ,
92+ const optionalFieldsFromWorkflow = items [ 0 ] ?. fields ?? [ ] ;
93+ const headerLabels = getExportHeaderLabels ( formatMessage , optionalFieldsFromWorkflow ) ;
94+ const rows = buildWorkflowsExportRows ( {
95+ workflows : items ,
96+ users,
97+ groups,
98+ selectedFields : fields ,
99+ optionalFieldsFromWorkflow,
100+ timezone : timezone ?? undefined ,
101+ headerLabels,
102+ multipleTasksLabel : formatMessage ( { id : 'workflows.multiple-active-tasks' } ) ,
103+ deletedGroupFallbackTemplate : formatMessage (
104+ { id : 'workflows.export-deleted-group' } ,
105+ { id : '{id}' } ,
106+ ) ,
85107 } ) ;
86- return ;
108+ if ( exportFormat === 'csv' ) {
109+ downloadWorkflowsCsv ( rows ) ;
110+ } else {
111+ const buffer = await buildWorkflowsXlsxBuffer ( rows ) ;
112+ downloadWorkflowsExcel ( buffer ) ;
113+ }
114+ } catch ( error ) {
115+ NotificationManager . notifyApiError ( error , { message : 'workflows.export-excel-fail' } ) ;
116+ } finally {
117+ setIsExporting ( false ) ;
87118 }
88-
89- const optionalFieldsFromWorkflow = items [ 0 ] ?. fields ?? [ ] ;
90- const headerLabels = getExportHeaderLabels ( formatMessage , optionalFieldsFromWorkflow ) ;
91- const rows = buildWorkflowsExportRows ( {
92- workflows : items ,
93- users,
94- groups,
95- selectedFields : fields ,
96- optionalFieldsFromWorkflow,
97- timezone : timezone ?? undefined ,
98- headerLabels,
99- multipleTasksLabel : formatMessage ( { id : 'workflows.multiple-active-tasks' } ) ,
100- deletedGroupFallbackTemplate : formatMessage (
101- { id : 'workflows.export-deleted-group' } ,
102- { id : '{id}' } ,
103- ) ,
104- } ) ;
105- const buffer = await buildWorkflowsXlsxBuffer ( rows ) ;
106- downloadWorkflowsExcel ( buffer ) ;
107- } catch ( error ) {
108- NotificationManager . notifyApiError ( error , { message : 'workflows.export-excel-fail' } ) ;
109- } finally {
110- setIsExporting ( false ) ;
111- }
112- } , [
113- formatMessage ,
114- selectedFields ,
115- statusFilter ,
116- sorting ,
117- templatesIdsFilter ,
118- tasksApiNamesFilter ,
119- performersIdsFilter ,
120- performersGroupIdsFilter ,
121- workflowStartersIdsFilter ,
122- searchText ,
123- users ,
124- groups ,
125- timezone ,
126- ] ) ;
119+ } ,
120+ [
121+ formatMessage ,
122+ selectedFields ,
123+ statusFilter ,
124+ sorting ,
125+ templatesIdsFilter ,
126+ tasksApiNamesFilter ,
127+ performersIdsFilter ,
128+ performersGroupIdsFilter ,
129+ workflowStartersIdsFilter ,
130+ searchText ,
131+ users ,
132+ groups ,
133+ timezone ,
134+ ] ,
135+ ) ;
127136
128137 return { handleExportClick, isExporting } ;
129138}
0 commit comments