2023-04-22 16:33:28 +12:00
|
|
|
defmodule AshStateMachine.Transformers.FillInTransitionDefaults do
|
2023-04-22 05:43:36 +12:00
|
|
|
use Spark.Dsl.Transformer
|
|
|
|
alias Spark.Dsl.Transformer
|
|
|
|
@moduledoc false
|
|
|
|
|
|
|
|
def transform(dsl_state) do
|
2023-04-23 12:39:29 +12:00
|
|
|
initial_states = AshStateMachine.Info.state_machine_initial_states!(dsl_state)
|
2023-04-22 05:43:36 +12:00
|
|
|
|
2023-04-22 16:33:28 +12:00
|
|
|
transitions =
|
2023-04-22 05:43:36 +12:00
|
|
|
dsl_state
|
2023-04-22 16:33:28 +12:00
|
|
|
|> AshStateMachine.Info.state_machine_transitions()
|
2023-04-22 05:43:36 +12:00
|
|
|
|
|
|
|
all_states =
|
2023-04-22 16:33:28 +12:00
|
|
|
transitions
|
|
|
|
|> Enum.flat_map(fn transition ->
|
|
|
|
List.wrap(transition.from) ++ List.wrap(transition.to)
|
2023-04-22 05:43:36 +12:00
|
|
|
end)
|
|
|
|
|> Enum.concat(List.wrap(initial_states))
|
2023-04-22 07:25:39 +12:00
|
|
|
|> Enum.uniq()
|
2023-04-22 05:43:36 +12:00
|
|
|
|
|
|
|
dsl_state =
|
2023-04-23 12:39:29 +12:00
|
|
|
Transformer.set_option(
|
|
|
|
dsl_state,
|
|
|
|
[:state_machine],
|
|
|
|
:initial_states,
|
|
|
|
List.wrap(initial_states)
|
|
|
|
)
|
2023-04-22 05:43:36 +12:00
|
|
|
|
2023-04-23 12:12:11 +12:00
|
|
|
{:ok, Transformer.persist(dsl_state, :all_state_machine_states, all_states)}
|
2023-04-22 05:43:36 +12:00
|
|
|
end
|
|
|
|
end
|