Packages
ash_admin
0.13.13
1.1.0
1.0.0-rc.0
0.14.0
0.13.26
0.13.25
0.13.24
0.13.23
0.13.22
0.13.21
0.13.20
0.13.19
0.13.18
0.13.17
0.13.16
0.13.15
0.13.14
0.13.13
0.13.12
0.13.11
0.13.10
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.11
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.12
0.10.11
0.10.10
retired
0.10.10-rc.1
0.10.10-rc.0
0.10.9
0.10.8
0.10.7
0.10.6
0.10.5
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.8
0.9.7
0.9.6
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0-rc.2
0.6.0-rc.1
0.6.0-rc.0
0.5.2
0.5.1-rc.0
0.5.0
0.4.5-rc.0
0.4.4
0.4.2
0.4.0
0.3.0-rc.0
0.2.22
0.2.21
0.2.20
0.2.19
0.2.18
0.2.17
0.2.16-rc.1
0.2.16-rc.0
0.2.15
0.2.14
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.1
0.1.6
0.1.5
0.1.3
0.1.2
0.1.0
A super-admin UI for Ash Framework, built with Phoenix LiveView.
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/ash_admin.install.ex
defmodule Mix.Tasks.AshAdmin.Install.Docs do
@moduledoc false
def short_doc do
"Installs AshAdmin"
end
def example do
"mix ash_admin.install --example arg"
end
def long_doc do
"""
#{short_doc()}
## Example
```bash
#{example()}
```
"""
end
end
if Code.ensure_loaded?(Igniter) do
defmodule Mix.Tasks.AshAdmin.Install do
@shortdoc "#{__MODULE__.Docs.short_doc()}"
@moduledoc __MODULE__.Docs.long_doc()
use Igniter.Mix.Task
@impl Igniter.Mix.Task
def info(_argv, _composing_task) do
%Igniter.Mix.Task.Info{
# Groups allow for overlapping arguments for tasks by the same author
# See the generators guide for more.
group: :ash_admin,
# dependencies to add
adds_deps: [],
# dependencies to add and call their associated installers, if they exist
installs: [],
# An example invocation
example: __MODULE__.Docs.example(),
# A list of environments that this should be installed in.
only: nil,
# a list of positional arguments, i.e `[:file]`
positional: [],
# Other tasks your task composes using `Igniter.compose_task`, passing in the CLI argv
# This ensures your option schema includes options from nested tasks
composes: [],
# `OptionParser` schema
schema: [],
# Default values for the options in the `schema`
defaults: [],
# CLI aliases
aliases: [],
# A list of options in the schema that are required
required: []
}
end
@impl Igniter.Mix.Task
def igniter(igniter) do
app_name = Igniter.Project.Application.app_name(igniter)
{igniter, router} =
Igniter.Libs.Phoenix.select_router(igniter, "Which router should AshAdmin be added to?")
{igniter, domains} = Ash.Domain.Igniter.list_domains(igniter)
igniter
|> Igniter.Project.Formatter.import_dep(:ash_admin)
|> Spark.Igniter.prepend_to_section_order(:"Ash.Resource", [:admin])
|> Spark.Igniter.prepend_to_section_order(:"Ash.Domain", [:admin])
|> add_to_router(app_name, router)
|> add_admin_to_all_domains(domains)
end
defp add_admin_to_all_domains(igniter, domains) do
Enum.reduce(domains, igniter, fn domain, igniter ->
igniter
|> Spark.Igniter.add_extension(domain, Ash.Domain, :extensions, AshAdmin.Domain)
|> Spark.Igniter.set_option(domain, [:admin, :show?], true)
end)
end
defp add_to_router(igniter, app_name, router) do
if router do
Igniter.Project.Module.find_and_update_module!(igniter, router, fn zipper ->
zipper =
case Igniter.Code.Common.move_to(
zipper,
&Igniter.Code.Function.function_call?(&1, :ash_admin, [1, 2])
) do
:error ->
Igniter.Code.Common.add_code(
zipper,
"""
if Application.compile_env(#{inspect(app_name)}, :dev_routes) do
import AshAdmin.Router
scope "/admin" do
pipe_through :browser
ash_admin "/"
end
end
""",
placement: :after
)
_ ->
zipper
end
{:ok, zipper}
end)
else
Igniter.add_warning(igniter, """
No Phoenix router found or selected. Please ensure that Phoenix is set up
and then run this installer again with
mix igniter.install ash_admin
""")
end
end
end
else
defmodule Mix.Tasks.AshAdmin.Install do
@shortdoc "#{__MODULE__.Docs.short_doc()} | Install `igniter` to use"
@moduledoc __MODULE__.Docs.long_doc()
use Mix.Task
def run(_argv) do
Mix.shell().error("""
The task 'ash_admin.install' requires igniter. Please install igniter and try again.
For more information, see: https://hexdocs.pm/igniter/readme.html#installation
""")
exit({:shutdown, 1})
end
end
end