FrappeUIPhx.Components.Sortable (frappe_ui_phx v0.3.1)

Copy Markdown View Source

Lista reordenável por arrastar-e-soltar (HTML5 nativo).

O cliente só serializa o mínimo (id, to, position) e o drop termina em pushEvent — a persistência é decisão do servidor (use move/5 para reordenar o assign e salve numa transação). O hook (Sortable) é reutilizado por List e Tree pelo nome completo FrappeUIPhx.Components.Sortable.Sortable.

Summary

Functions

Nome do hook colocated, derivado do módulo (renomear o módulo não quebra List/Tree em silêncio; um teste confere que o nome existe no manifesto de hooks).

Atributos de um item arrastável. parent identifica o nível (Tree): o hook só aceita soltar entre itens com o mesmo parent. Vazio quando enabled? é falso.

Move o item id para antes/depois de to (função pura, para o handle_event do drop).

Atributos da raiz da lista reordenável (phx-hook e o evento de drop). Vazio sem on_drop. Único dono do protocolo de DOM, usado por sortable, list e tree.

Functions

hook_name()

Nome do hook colocated, derivado do módulo (renomear o módulo não quebra List/Tree em silêncio; um teste confere que o nome existe no manifesto de hooks).

item_attrs(id, enabled?, parent \\ nil)

@spec item_attrs(term(), boolean(), term()) :: map()

Atributos de um item arrastável. parent identifica o nível (Tree): o hook só aceita soltar entre itens com o mesmo parent. Vazio quando enabled? é falso.

move(items, item_id, id, to, position)

@spec move(
  [term()],
  (term() -> term()),
  String.t(),
  String.t(),
  :before | :after | String.t()
) :: [
  term()
]

Move o item id para antes/depois de to (função pura, para o handle_event do drop).

Ids são comparados como texto (vêm do DOM). Id inexistente ou igual ao destino devolve a lista inalterada — evento forjado não corrompe a ordem.

root_attrs(on_drop)

@spec root_attrs(String.t() | nil) :: map()

Atributos da raiz da lista reordenável (phx-hook e o evento de drop). Vazio sem on_drop. Único dono do protocolo de DOM, usado por sortable, list e tree.

sortable(assigns)

Attributes

  • id (:string) (required)
  • items (:list) (required)
  • item_id (:any) - função item -> id (padrão: item.id). Defaults to &FrappeUIPhx.Components.Sortable.default_id/1.
  • on_drop (:string) (required) - evento do servidor: %{"id", "to", "position"}.
  • class (:any) - Defaults to nil.
  • Global attributes are accepted.

Slots

  • item (required)