Skip to content

Commit 882914f

Browse files
committed
Hide the other options and leave default as Run now
1 parent 7453bf6 commit 882914f

File tree

2 files changed

+130
-137
lines changed

2 files changed

+130
-137
lines changed

lib/lightning_web/live/job_live/cron_run_component.ex

+38-63
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ defmodule LightningWeb.JobLive.CronRunButton do
44
"""
55
use LightningWeb, :live_component
66

7+
import Ecto.Query
8+
9+
alias Lightning.Repo
710
alias Lightning.Run
11+
alias Lightning.WorkOrder
812

913
require Run
1014

@@ -15,9 +19,8 @@ defmodule LightningWeb.JobLive.CronRunButton do
1519
<div>
1620
<.button
1721
id={@id}
18-
phx-hook="DefaultRunViaCtrlEnter"
19-
type="button"
2022
phx-click={@selected_option}
23+
phx-hook="DefaultRunViaCtrlEnter"
2124
class={cron_trigger_bt_classes(assigns)}
2225
disabled={@disabled}
2326
>
@@ -31,102 +34,74 @@ defmodule LightningWeb.JobLive.CronRunButton do
3134
<% end %>
3235
</.button>
3336
</div>
34-
<div class="relative -ml-px block">
35-
<.dropdown_action {assigns} />
36-
</div>
3737
</div>
3838
"""
3939
end
4040

4141
@impl true
4242
def update(
43-
assigns,
43+
%{follow_run: follow_run} = assigns,
4444
socket
4545
) do
46-
follow_run = Map.get(assigns, :follow_run)
4746
snapshot_version_tag = "latest"
4847
disabled = processing(follow_run) or snapshot_version_tag != "latest"
49-
selected_option = Map.get(assigns, :selected_option, "clear_and_run")
5048

5149
{:ok,
5250
socket
5351
|> assign(assigns)
5452
|> assign(
5553
disabled: disabled,
56-
follow_run: follow_run,
57-
selected_option: selected_option
54+
follow_run: nil,
55+
selected_option: "clear_and_run"
5856
)}
5957
end
6058

6159
@impl true
6260
def handle_event("clear_and_run", _params, socket) do
63-
{:noreply, assign(socket, selected_option: "clear_and_run")}
64-
end
61+
cron_trigger =
62+
Enum.find(socket.assigns.workflow.triggers, &(&1.type == :cron))
6563

66-
def handle_event("run_last_state", _params, socket) do
67-
{:noreply, assign(socket, selected_option: "run_last_state")}
68-
end
64+
dataclip_id =
65+
Repo.one(
66+
from(wo in WorkOrder,
67+
where: wo.trigger_id == ^cron_trigger.id,
68+
select: wo.dataclip_id,
69+
limit: 1,
70+
order_by: [desc: :inserted_at]
71+
)
72+
)
73+
74+
send(
75+
self(),
76+
{__MODULE__, "cron_trigger_manual_run", %{dataclip_id: dataclip_id}}
77+
)
6978

70-
def handle_event("run_custom_state", _params, socket) do
71-
{:noreply, assign(socket, selected_option: "run_custom_state")}
79+
{:noreply, socket}
7280
end
7381

82+
# @impl true
83+
# def handle_info(
84+
# %RunUpdated{run: run},
85+
# %{assigns: %{follow_run: %{id: follow_run_id}}} = socket
86+
# )
87+
# when run.id === follow_run_id do
88+
# {:noreply,
89+
# socket
90+
# |> assign(follow_run: run)}
91+
# end
92+
7493
defp cron_trigger_bt_classes(_assigns) do
75-
["relative inline-flex rounded-r-none"]
94+
["relative inline-flex"]
7695
end
7796

7897
def button_text(selected) do
7998
case selected do
80-
"clear_and_run" -> "Clear state and run"
99+
"clear_and_run" -> "Run now"
81100
"run_last_state" -> "Run with last state"
82101
"run_custom_state" -> "Run with custom state"
83102
end
84103
end
85104

86105
defp processing(%{state: state}), do: state not in Run.final_states()
87106
defp processing(_run), do: false
88-
89-
defp dropdown_action(assigns) do
90-
~H"""
91-
<.button
92-
type="button"
93-
class="h-full rounded-l-none pr-1 pl-1 focus:ring-inset"
94-
id="option-menu-button"
95-
aria-expanded="true"
96-
aria-haspopup="true"
97-
disabled={@disabled}
98-
phx-click={show_dropdown("dropdown-bt")}
99-
>
100-
<span class="sr-only">Open options</span>
101-
<.icon name="hero-chevron-down" class="w-4 h-4" />
102-
</.button>
103-
<div
104-
role="menu"
105-
aria-orientation="vertical"
106-
aria-labelledby="option-menu-button"
107-
tabindex="-1"
108-
>
109-
<button
110-
id="dropdown-bt"
111-
phx-target={@myself}
112-
phx-click-away={hide_dropdown("dropdown-bt")}
113-
phx-hook="AltRunViaCtrlShiftEnter"
114-
type="submit"
115-
class={[
116-
"flex justify-start hidden absolute right-0 bottom-9 z-10 mb-2 w-max",
117-
"rounded-md bg-white px-4 py-2 text-sm font-semibold",
118-
"text-gray-900 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50"
119-
]}
120-
disabled={@disabled}
121-
>
122-
<div phx-click="run_last_state">
123-
<.icon name="hero-play-solid" class="w-4 h-4 mr-1" /> Run with last state
124-
</div>
125-
<div phx-click="run_custom_state" class="mt-2">
126-
<.icon name="hero-play-solid" class="w-4 h-4 mr-1" /> Run with custom state
127-
</div>
128-
</button>
129-
</div>
130-
"""
131-
end
132107
end

lib/lightning_web/live/workflow_live/edit.ex

+92-74
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,9 @@ defmodule LightningWeb.WorkflowLive.Edit do
566566
<.live_component
567567
id="cron-run-button"
568568
module={LightningWeb.JobLive.CronRunButton}
569+
workflow={@workflow}
570+
follow_run={@follow_run}
571+
snapshot_version_tag={@snapshot_version_tag}
569572
/>
570573
</div>
571574
</div>
@@ -1670,80 +1673,7 @@ defmodule LightningWeb.WorkflowLive.Edit do
16701673
# The manual_run_submit event is for create a new work order from a dataclip and
16711674
# a job.
16721675
def handle_event("manual_run_submit", params, socket) do
1673-
%{
1674-
project: project,
1675-
selected_job: selected_job,
1676-
current_user: current_user,
1677-
workflow_params: workflow_params,
1678-
has_presence_edit_priority: has_presence_edit_priority,
1679-
workflow: workflow,
1680-
manual_run_form: form
1681-
} = socket.assigns
1682-
1683-
manual_params = Map.get(params, "manual", %{})
1684-
1685-
params =
1686-
case form do
1687-
nil -> manual_params
1688-
%{params: form_params} -> Map.merge(form_params, manual_params)
1689-
end
1690-
1691-
socket = socket |> apply_params(workflow_params, :workflow)
1692-
1693-
workflow_or_changeset =
1694-
if has_presence_edit_priority do
1695-
socket.assigns.changeset
1696-
else
1697-
get_workflow_by_id(workflow.id)
1698-
end
1699-
1700-
with :ok <- check_user_can_manual_run_workflow(socket) do
1701-
case Helpers.run_workflow(
1702-
workflow_or_changeset,
1703-
params,
1704-
project: project,
1705-
selected_job: selected_job,
1706-
created_by: current_user
1707-
) do
1708-
{:ok, %{workorder: workorder, workflow: workflow}} ->
1709-
%{runs: [run]} = workorder
1710-
1711-
Runs.subscribe(run)
1712-
1713-
snapshot = snapshot_by_version(workflow.id, workflow.lock_version)
1714-
1715-
{:noreply,
1716-
socket
1717-
|> assign_workflow(workflow, snapshot)
1718-
|> follow_run(run)
1719-
|> push_event("push-hash", %{"hash" => "log"})}
1720-
1721-
{:error, %Ecto.Changeset{data: %WorkOrders.Manual{}} = changeset} ->
1722-
{:noreply,
1723-
socket
1724-
|> assign_manual_run_form(changeset)}
1725-
1726-
{:error, %Ecto.Changeset{data: %Workflow{}} = changeset} ->
1727-
{
1728-
:noreply,
1729-
socket
1730-
|> assign_changeset(changeset)
1731-
|> mark_validated()
1732-
|> put_flash(:error, "Workflow could not be saved")
1733-
}
1734-
1735-
{:error, %{text: message}} ->
1736-
{:noreply, put_flash(socket, :error, message)}
1737-
1738-
{:error, :workflow_deleted} ->
1739-
{:noreply,
1740-
put_flash(
1741-
socket,
1742-
:error,
1743-
"Oops! You cannot modify a deleted workflow"
1744-
)}
1745-
end
1746-
end
1676+
handle_manual_run_submit(socket, params)
17471677
end
17481678

17491679
def handle_event("toggle_workflow_state", %{"workflow_state" => state}, socket) do
@@ -1800,6 +1730,15 @@ defmodule LightningWeb.WorkflowLive.Edit do
18001730
end
18011731
end
18021732

1733+
def handle_info(
1734+
{LightningWeb.JobLive.CronRunButton, "cron_trigger_manual_run",
1735+
dataclip_id},
1736+
socket
1737+
) do
1738+
params = %{"manual" => %{"dataclip_id" => dataclip_id}}
1739+
handle_manual_run_submit(socket, params)
1740+
end
1741+
18031742
def handle_info({"form_changed", %{"workflow" => params}}, socket) do
18041743
{:noreply, handle_new_params(socket, params, :workflow)}
18051744
end
@@ -2637,4 +2576,83 @@ defmodule LightningWeb.WorkflowLive.Edit do
26372576
end
26382577

26392578
defp loaded?(%Workflow{} = workflow), do: workflow.__meta__.state == :loaded
2579+
2580+
defp handle_manual_run_submit(socket, params) do
2581+
IO.inspect(params)
2582+
2583+
%{
2584+
project: project,
2585+
selected_job: selected_job,
2586+
current_user: current_user,
2587+
workflow_params: workflow_params,
2588+
has_presence_edit_priority: has_presence_edit_priority,
2589+
workflow: workflow,
2590+
manual_run_form: form
2591+
} = socket.assigns
2592+
2593+
manual_params = Map.get(params, "manual", %{})
2594+
2595+
params =
2596+
case form do
2597+
nil -> manual_params
2598+
%{params: form_params} -> Map.merge(form_params, manual_params)
2599+
end
2600+
2601+
socket = socket |> apply_params(workflow_params, :workflow)
2602+
2603+
workflow_or_changeset =
2604+
if has_presence_edit_priority do
2605+
socket.assigns.changeset
2606+
else
2607+
get_workflow_by_id(workflow.id)
2608+
end
2609+
2610+
with :ok <- check_user_can_manual_run_workflow(socket) do
2611+
case Helpers.run_workflow(
2612+
workflow_or_changeset,
2613+
params,
2614+
project: project,
2615+
selected_job: selected_job,
2616+
created_by: current_user
2617+
) do
2618+
{:ok, %{workorder: workorder, workflow: workflow}} ->
2619+
%{runs: [run]} = workorder
2620+
2621+
Runs.subscribe(run)
2622+
2623+
snapshot = snapshot_by_version(workflow.id, workflow.lock_version)
2624+
2625+
{:noreply,
2626+
socket
2627+
|> assign_workflow(workflow, snapshot)
2628+
|> follow_run(run)
2629+
|> push_event("push-hash", %{"hash" => "log"})}
2630+
2631+
{:error, %Ecto.Changeset{data: %WorkOrders.Manual{}} = changeset} ->
2632+
{:noreply,
2633+
socket
2634+
|> assign_manual_run_form(changeset)}
2635+
2636+
{:error, %Ecto.Changeset{data: %Workflow{}} = changeset} ->
2637+
{
2638+
:noreply,
2639+
socket
2640+
|> assign_changeset(changeset)
2641+
|> mark_validated()
2642+
|> put_flash(:error, "Workflow could not be saved")
2643+
}
2644+
2645+
{:error, %{text: message}} ->
2646+
{:noreply, put_flash(socket, :error, message)}
2647+
2648+
{:error, :workflow_deleted} ->
2649+
{:noreply,
2650+
put_flash(
2651+
socket,
2652+
:error,
2653+
"Oops! You cannot modify a deleted workflow"
2654+
)}
2655+
end
2656+
end
2657+
end
26402658
end

0 commit comments

Comments
 (0)