A picker can be the editor of a grid's cells: a column of Masu whose cells are a status, labels or a person.
The column
Erabi.cell_editor/2 gives the column's editor, with its options,
rules and words resolved on the server:
<.data_grid id="tasks" source={@tasks}>
<:col field={:status} editor={Erabi.cell_editor(:select, options: @statuses)} />
<:col field={:labels} editor={Erabi.cell_editor(:multi_select, options: @labels, max: 3)} />
<:col field={:owner_id} editor={Erabi.cell_editor(:person, options: @members, me: @current_user)} />
</.data_grid>The kinds are :select, :multi_select, :combobox, :tags,
:person (with multiple: true for several people), :color and
:emoji, and
the options those of the components: options, rules and its
shortcuts, filter, me, placeholder, locale and messages; and
for :color, palette, custom and contrast:
<:col field={:color} editor={Erabi.cell_editor(:color, custom: true)} />The browser
Register the editors once, in your app's JavaScript:
import { configure } from "masu"
import { erabiEditors } from "erabi"
import "erabi/color" // for color columns
import "erabi/emoji" // for emoji columns
configure({ editors: erabiEditors() })Without erabi/color or erabi/emoji, such a column is a select of its
options.
How it edits
An emoji is saved as it is chosen, and a letter typed on the cell searches; closed with none, the edit is cancelled. A color is saved as its popup closes (a swatch, Enter, or a click away), so that a drag in its area saves once; closed with no change, the edit is cancelled. A letter that opened the editor goes to its hex box.
The picker draws over the cell, with its list open; a letter that opened the editor is typed into it. A picker of one value saves it as it is chosen. A picker of several saves when the editor closes: Tab or a click away, as the grid's own editors do. Escape closes the picker's list first, and then lets the edit go.
The grid's rules hold as for its own editors: it checks the value by the column's type and the changeset, and keeps undo, conflicts and "Ada is editing".