MishkaGervaz.Table.Types.Filter (MishkaGervaz v0.0.1-alpha.2)

Copy Markdown View Source

Built-in filter type registry.

Provides lookup for built-in filter types by atom name. Custom filter types can be used directly by passing the module.

Built-in Types

  • :text - Text search input (default)
  • :select - Dropdown select
  • :boolean - Checkbox
  • :number - Number input
  • :date - Date picker
  • :date_range - Date range picker
  • :relation - Relationship select (auto-loads options)

Usage in DSL

filters do
  filter :name                           # Auto-detects type (text)
  filter :status, type: :select          # Built-in type
  filter :created_at, type: :date_range  # Built-in type
  filter :category, type: MyApp.TreeFilter # Custom type
end

See MishkaGervaz.Table.Behaviours.TypeRegistry (base), MishkaGervaz.Table.Behaviours.FilterType, and MishkaGervaz.Table.Entities.Filter.

Summary

Functions

Check if type name is registered.

List all built-in type names.

Get the default type module.

Get module by type name.

Get module, falling back to type itself for custom modules.

Resolve filter type module from filter configuration.

Functions

builtin?(type)

@spec builtin?(atom()) :: boolean()

Check if type name is registered.

builtin_types()

@spec builtin_types() :: [atom()]

List all built-in type names.

default()

@spec default() :: module() | nil

Get the default type module.

get(type)

@spec get(atom()) :: module() | nil

Get module by type name.

Returns the module for built-in types, or the type itself if it's already a module (for custom types).

get_or_passthrough(type)

@spec get_or_passthrough(atom()) :: module()

Get module, falling back to type itself for custom modules.

Unlike get/1 which returns nil for unknown types, this returns the type as-is (assuming it's a custom module).

resolve_type(filter)

@spec resolve_type(map()) :: module()

Resolve filter type module from filter configuration.

Checks in order:

  1. If type is a module with render_input/3, use it directly
  2. If type is an atom, look up in built-in registry
  3. Otherwise, default to Text filter

Examples

iex> MishkaGervaz.Table.Types.Filter.resolve_type(%{type: :select})
MishkaGervaz.Table.Types.Filter.Select

iex> MishkaGervaz.Table.Types.Filter.resolve_type(%{})
MishkaGervaz.Table.Types.Filter.Text