Current section
Files
Jump to
Current section
Files
lib/livefilter.ex
defmodule LiveFilter do
@moduledoc """
LiveFilter is a comprehensive, reusable filtering library for Phoenix LiveView applications.
Inspired by modern tools like Notion and Airtable, it provides a complete solution for
filtering, sorting, and pagination with clean URL state management and a modern UI
built on SaladUI.
## Key Features
- **Complete Filter System**: 20+ operators across all data types (string, numeric, boolean, date, enum, array)
- **Database Pagination**: Efficient queries that scale to any dataset size
- **URL State Management**: Shareable, bookmarkable URLs with complete state restoration
- **Table Sorting**: Multi-column sorting with visual indicators
- **Column Management**: Dynamic column visibility
- **Modern UI**: Built on SaladUI with shadcn/ui design system
- **Production Ready**: Comprehensive validation, error handling, and performance optimization
## Quick Start
Add LiveFilter to your Phoenix LiveView:
defmodule MyAppWeb.ProductLive do
use MyAppWeb, :live_view
use LiveFilter.Mountable
def mount(_params, _session, socket) do
socket = mount_filters(socket, registry: my_field_registry())
{:ok, socket}
end
def handle_params(params, _url, socket) do
socket = handle_filter_params(socket, params)
{:noreply, socket}
end
end
## JavaScript Assets
Some components require JavaScript hooks. Install them with:
mix live_filter.install.assets
Then add to your app.js:
import LiveFilter from "./hooks/live_filter/live_filter"
let liveSocket = new LiveSocket("/live", Socket, {
hooks: { LiveFilter }
})
## Main Modules
- `LiveFilter.Mountable` - LiveView integration
- `LiveFilter.Components.*` - UI components
- `LiveFilter.QueryBuilder` - Ecto query generation
- `LiveFilter.UrlSerializer` - URL state management
- `LiveFilter.Field` - Field type system
"""
@doc """
Returns the current version of LiveFilter.
"""
def version, do: "0.1.0"
end