mix selecto.gen.saved_view_configs (selecto_mix v0.3.16)

Generate SavedViewConfigs implementation for separate view type configurations.

This task generates the necessary files to implement saved view configurations that are separate by view type (detail, aggregate, graph) in your SelectoComponents application.

Examples

# Generate for MyApp with default naming
mix selecto.gen.saved_view_configs MyApp

# Generate with custom context module name
mix selecto.gen.saved_view_configs MyApp --context-module MyApp.ViewConfigs.Context

# Generate with custom schema module name
mix selecto.gen.saved_view_configs MyApp --schema-module MyApp.ViewConfigs.SavedConfig

# Generate with custom table name
mix selecto.gen.saved_view_configs MyApp --table-name view_configurations

# Show what would be generated without creating files
mix selecto.gen.saved_view_configs MyApp --dry-run

Options

  • --context-module - Name for the context module (default: APP.SavedViewConfigContext)
  • --schema-module - Name for the schema module (default: APP.SavedViewConfig)
  • --table-name - Database table name (default: saved_view_configs)
  • --repo-module - Repository module name (default: APP.Repo)
  • --dry-run - Show what would be generated without creating files

Generated Files

This task generates:

  • Migration file for the saved_view_configs table with view_type separation
  • Ecto schema module for SavedViewConfig
  • Context module with view_type filtering support

Usage in Domains

After running the generator, use the context in your domains:

defmodule MyApp.Domains.UserDomain do
  use MyApp.SavedViewConfigContext

  # ... rest of domain configuration
end

Then in your LiveView, use the new saved view configurations:

def handle_event("save_view_config", params, socket) do
  view_type = socket.assigns.view_config.view_mode

  MyApp.Domains.UserDomain.save_view_config(
    params["name"],
    socket.assigns.saved_view_context,
    view_type,
    view_config_to_params(socket.assigns.view_config),
    user_id: socket.assigns.current_user.id,
    description: params["description"]
  )

  {:noreply, socket}
end