diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt index 44f64cda0d..09b8cf2491 100644 --- a/backend/ee-repo-ref.txt +++ b/backend/ee-repo-ref.txt @@ -1 +1 @@ -76f66b0a9738d8c0f676ebf808ee82fa5073d77d \ No newline at end of file +38883ef6510db7d87d78e7f8fc74ab3e6f944447 \ No newline at end of file diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index b4f03e227b..4168431900 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -7949,6 +7949,10 @@ paths: in: query schema: type: string + - name: csv_separator + in: query + schema: + type: string responses: "200": description: Csv Preview diff --git a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte b/frontend/src/lib/components/ParqetCsvTableRenderer.svelte index 7967ab18ed..53b90a55f8 100644 --- a/frontend/src/lib/components/ParqetCsvTableRenderer.svelte +++ b/frontend/src/lib/components/ParqetCsvTableRenderer.svelte @@ -17,11 +17,14 @@ export let workspaceId: string | undefined export let disable_download: boolean = false + let csvSeparatorChar: string = ',' let datasource: IDatasource = { rowCount: 0, getRows: async function (params) { try { const searchCol = params.filterModel ? Object.keys(params.filterModel)?.[0] : undefined + const csv = s3resource.endsWith('.csv') + const requestBody = { workspace: workspaceId ?? $workspaceStore!, path: s3resource, @@ -31,9 +34,9 @@ sortDesc: params.sortModel?.[0]?.sort == 'desc', searchCol: searchCol, searchTerm: searchCol ? params.filterModel?.[searchCol]?.filter : undefined, - storage: storage + storage: storage, + csvSeparator: csv ? csvSeparatorChar : undefined } - const csv = s3resource.endsWith('.csv') const res = ( csv ? await HelpersService.loadCsvPreview(requestBody) @@ -77,59 +80,67 @@ $: eGui && mountGrid() + let error: string | undefined = undefined async function mountGrid() { if (eGui) { - const csv = s3resource.endsWith('.csv') + try { + const csv = s3resource.endsWith('.csv') - const res = csv - ? await HelpersService.loadCsvPreview({ - workspace: $workspaceStore!, - path: s3resource, - limit: 0, - storage: storage - }) - : await HelpersService.loadParquetPreview({ - workspace: $workspaceStore!, - path: s3resource, - limit: 0, - storage: storage - }) + const res = csv + ? await HelpersService.loadCsvPreview({ + workspace: $workspaceStore!, + path: s3resource, + limit: 0, + storage: storage, + csvSeparator: csvSeparatorChar + }) + : await HelpersService.loadParquetPreview({ + workspace: $workspaceStore!, + path: s3resource, + limit: 0, + storage: storage + }) - createGrid( - eGui, - { - rowModelType: 'infinite', - datasource, - // @ts-ignore - columnDefs: res.columns.map((c) => { - return { - field: c, - sortable: true, - filter: true, - filterParams: { - filterOptions: ['contains'], - maxNumConditions: 1 + createGrid( + eGui, + { + rowModelType: 'infinite', + datasource, + // @ts-ignore + columnDefs: res.columns.map((c) => { + return { + field: c, + sortable: true, + filter: true, + filterParams: { + filterOptions: ['contains'], + maxNumConditions: 1 + } } - } - }), - pagination: false, - // defaultColDef: { - // flex: 1 - // }, - suppressColumnMoveAnimation: true, - rowSelection: 'multiple', - rowMultiSelectWithClick: true, - suppressRowDeselection: true, + }), + pagination: false, + // defaultColDef: { + // flex: 1 + // }, + suppressColumnMoveAnimation: true, + rowSelection: 'multiple', + rowMultiSelectWithClick: true, + suppressRowDeselection: true, - onSelectionChanged: (e) => { - onSelectionChanged(e.api) + onSelectionChanged: (e) => { + onSelectionChanged(e.api) + }, + getRowId: (data) => { + return (data as any).data['__index'] + } }, - getRowId: (data) => { - return (data as any).data['__index'] - } - }, - {} - ) + {} + ) + error = undefined + } catch (e) { + error = e.body + console.error(e) + } } } @@ -146,6 +157,22 @@
+ {#if s3resource.endsWith('.csv')} +
+
+ + +
+ +
+
+
+ {/if} {#if !disable_download && !s3resource.endsWith('.csv')} + {#if error} +
{error}
+
Try changing separator to fix it
+ {/if}
diff --git a/frontend/src/lib/components/S3FilePicker.svelte b/frontend/src/lib/components/S3FilePicker.svelte index 8e334136e2..e26b8db5a7 100644 --- a/frontend/src/lib/components/S3FilePicker.svelte +++ b/frontend/src/lib/components/S3FilePicker.svelte @@ -567,7 +567,9 @@ title="Download file from S3" variant="border" color="light" - href={`/api/w/${$workspaceStore}/job_helpers/download_s3_file?file_key=${fileMetadata?.fileKey}`} + href={`/api/w/${$workspaceStore}/job_helpers/download_s3_file?file_key=${ + fileMetadata?.fileKey + }${storage ? `&storage=${storage}` : ''}`} download={fileMetadata?.fileKey.split('/').pop() ?? 'unnamed_download.file'} startIcon={{ icon: Download }} iconOnly={true}