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

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 (for example: detail, aggregate, graph, timeseries, chart, table, map) 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