anitnilay20 / anitnilay20/thoth

feat(plugins): event routing for file-viewer custom-cell widgets

Ouverte
#97 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
enhancement
Langage dominant
Rust
Étoiles
70
Forks
5
Merge moyen
10 h 33 min
PR mergées (30 j)
2

Description

## Summary

File-viewer plugins (capability `file-viewer`) render record rows via `render-record`, and in **Custom** display mode each row is a serialized `RenderNode` tree drawn by the host (see `PluginTableViewer` → `TableView::show_rows`). Those rows can contain **interactive** widgets (buttons, inputs, toggles, …), but there is currently **no path to deliver their events back to the plugin** — so a file-viewer's custom cells are effectively read-only.

Surfaced during the #96 review (`src/components/file_viewer/plugin_table_viewer.rs`, ~97–150): the `RenderNode` cells are rendered with a throwaway event sink (`&mut Vec::new()`), and `FileType` / the `FileFormatViewer` trait expose no `handle_event` analogous to the `ui-component` / `data-source` plugins.

## Why it was deferred

The SDK migration (#96) intentionally left this out — it's a cross-cutting feature, not a minimal review fix. There is also no existing consumer: today's bundled viewers only display records.

## Scope / proposed work

Thread a real event channel through the file-viewer path so custom-cell widget events round-trip to the plugin:

1. **WIT**: add a `handle-event` (or `handle-record-event`) export to the `file-viewer` interface (mirroring `ui-component`'s `handle-event(ui-event) -> ui-output`), carrying the `UiEvent { widget_id, kind, value }` plus the record index/row context.
2. **Host**: thread a `&mut Vec` sink through `FileFormatViewer::render` (and the 3 impls + `viewer_trait`/`mod.rs`), collect events from `TableView::show_rows`/custom cells, and dispatch them to the loader, then re-render the affected row(s).
3. **Loader API**: add the corresponding method to `FileType` / the wasm file-viewer loader to forward events to the plugin and apply the returned node update.
4. **SDK/docs**: document the file-viewer event flow in `docs/PLUGIN_SYSTEM.md`; consider a small example in a bundled plugin.

## Acceptance

- A `file-viewer` plugin can render an interactive widget in a Custom-mode cell, receive its event, mutate state, and have the cell re-render.
- Existing read-only viewers are unaffected (no behavior change when a plugin doesn't implement the new export).

Follow-up from #96.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.