Skip to content

Front components: <input type="file"> opens the picker but the selected File never reaches the component (no change event / files not marshaled through Remote DOM) #23826

Description

@pankaj-mgd

Bug / feature gap

In an application front component (twenty-sdk), an <input type="file"> renders and the native file picker opens on click — but after the user selects a file, nothing reaches the component: the onChange handler never fires (or fires without target.files), so the File object is unreachable from app code.

Environment

  • Self-hosted, twentycrm/twenty:latest (pulled 2026-08-05, image c98904f79a2d) — also reproduced on the June 2026 image
  • twenty-sdk 2.27.0
  • Front component mounted as a FRONT_COMPONENT widget in a RECORD_PAGE page-layout tab

Repro

const Picker = () => (
  <input
    type="file"
    onChange={(e: any) => {
      // never reached after choosing a file
      console.log(e.target?.files?.[0]);
    }}
  />
);
  1. Mount in a record-page tab, click the input → OS file dialog opens ✅
  2. Choose any file → no change event, no files, no error ❌

Tried: visible input, label-wrapped hidden input, transparent overlay input — picker always opens, the file never crosses the sandbox boundary. File is structured-cloneable, so marshaling target.files through the Remote DOM event bridge (or exposing a host API to read picked files) seems feasible.

Use case

A WhatsApp-conversation tab on a CRM record: users want to pick a file inside the chat and have it uploaded/attached/sent. Everything else works (uploads via MetadataApiClient/server-side work fine once bytes are available) — only the in-component file pick is impossible, forcing a detour through the native Files tab.

Ask

Marshal FileList/File objects through the sandbox for file inputs (change event and/or drag-drop dataTransfer.files), or provide a host command like pickFile() returning the bytes.

Metadata

Metadata

Assignees

Labels

Type

Fields

Priority

None yet

Dev status

None yet

Start date

None yet

Target date

None yet

Quarter

None yet

Projects

Status
In project

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions