Skip to content

features file selection and loading

Douwe de Vries edited this page Jul 2, 2026 · 1 revision

File selection and loading

Active contributors: Douwe de Vries

Purpose

File loading lets users choose two local CSV files, parse them safely, detect available columns, and prepare a session for mapping. It works through browser multipart uploads and desktop raw IPC byte uploads.

Directory layout

frontend/src/components/FileSelector.tsx
frontend/src/components/app/FileSelectionStep.tsx
frontend/src/hooks/useWorkflowComparisonActions.ts
frontend/src/services/tauri.ts
src/backend/workflow.rs
src/data/csv_loader.rs

Key abstractions

Name File Description
FileSelectionStep frontend/src/components/app/FileSelectionStep.tsx Step 1 UI for File A, File B, and loading snapshots.
loadFile frontend/src/services/tauri.ts Browser/Tauri file upload abstraction.
CsvLoadSource src/backend/workflow.rs Backend input enum for file paths or bytes.
LoadedCsv src/backend/workflow.rs Parsed CSV plus column metadata and response payload.
load_csv_from_bytes src/data/csv_loader.rs CSV parsing entry point for uploaded bytes.

How it works

graph TD
    Select[User chooses CSV] --> Service[loadFile]
    Service -->|browser| Multipart[HTTP multipart]
    Service -->|desktop| RawIPC[Tauri raw IPC bytes]
    Multipart --> Workflow[load_csv_workflow]
    RawIPC --> Workflow
    Workflow --> Parser[src/data/csv_loader.rs]
    Workflow --> Virtual[src/data/json_fields.rs]
    Workflow --> Session[apply_loaded_csv_for_session]
Loading

Loading either file advances data_revision, stores CSV data and column metadata, clears stale comparison results, and refreshes suggested mappings when both files are present.

Integration points

The frontend stores headers, virtualHeaders, columns, and rowCount in AppState through frontend/src/hooks/useComparisonWorkflow.reducer.ts. The backend response is created by src/presentation/responses.rs.

Entry points for modification

Change file constraints in src/backend/workflow.rs and frontend/src/services/contracts.ts. Change parsing behavior in src/data/csv_loader.rs. Change the selection UI in frontend/src/components/FileSelector.tsx or frontend/src/components/app/FileSelectionStep.tsx.

Key source files

File Purpose
frontend/src/components/FileSelector.tsx CSV picker UI.
frontend/src/hooks/useWorkflowComparisonActions.ts File load action and stale-response guard.
frontend/src/services/tauri.ts Upload transport abstraction.
src/backend/workflow.rs File workflow and session application.
src/data/csv_loader.rs CSV decode and parse logic.

Clone this wiki locally