mirror of
https://github.com/livebook-dev/livebook.git
synced 2025-10-13 23:16:03 +08:00
Use a more scoped changeset on teams hub update (#2328)
This commit is contained in:
parent
07f1c34fab
commit
90c3cfe3a7
3 changed files with 22 additions and 14 deletions
|
@ -56,6 +56,8 @@ defmodule Livebook.Hubs.Team do
|
||||||
hub_emoji
|
hub_emoji
|
||||||
)a
|
)a
|
||||||
|
|
||||||
|
@editable_fields ~w(hub_emoji)a
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Initializes a new Team hub.
|
Initializes a new Team hub.
|
||||||
"""
|
"""
|
||||||
|
@ -71,21 +73,19 @@ defmodule Livebook.Hubs.Team do
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
def creation_changeset(team, attrs) do
|
||||||
Returns an `%Ecto.Changeset{}` for tracking hub changes.
|
|
||||||
"""
|
|
||||||
@spec change_hub(t(), map()) :: Ecto.Changeset.t()
|
|
||||||
def change_hub(%__MODULE__{} = team, attrs \\ %{}) do
|
|
||||||
changeset(team, attrs)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp changeset(team, attrs) do
|
|
||||||
team
|
team
|
||||||
|> cast(attrs, @fields)
|
|> cast(attrs, @fields)
|
||||||
|> validate_required(@fields)
|
|> validate_required(@fields)
|
||||||
|> add_id()
|
|> add_id()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def update_changeset(team, attrs) do
|
||||||
|
team
|
||||||
|
|> cast(attrs, @editable_fields)
|
||||||
|
|> validate_required(@editable_fields)
|
||||||
|
end
|
||||||
|
|
||||||
defp add_id(changeset) do
|
defp add_id(changeset) do
|
||||||
if name = get_field(changeset, :hub_name) do
|
if name = get_field(changeset, :hub_name) do
|
||||||
change(changeset, %{id: "team-#{name}"})
|
change(changeset, %{id: "team-#{name}"})
|
||||||
|
|
|
@ -187,6 +187,14 @@ defmodule Livebook.Teams do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns an `%Ecto.Changeset{}` for tracking hub changes.
|
||||||
|
"""
|
||||||
|
@spec change_hub(Team.t(), map()) :: Ecto.Changeset.t()
|
||||||
|
def change_hub(%Team{} = team, attrs \\ %{}) do
|
||||||
|
Team.update_changeset(team, attrs)
|
||||||
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Creates a Hub.
|
Creates a Hub.
|
||||||
|
|
||||||
|
@ -194,7 +202,7 @@ defmodule Livebook.Teams do
|
||||||
"""
|
"""
|
||||||
@spec create_hub!(map()) :: Team.t()
|
@spec create_hub!(map()) :: Team.t()
|
||||||
def create_hub!(attrs) do
|
def create_hub!(attrs) do
|
||||||
changeset = Team.change_hub(Team.new(), attrs)
|
changeset = Team.creation_changeset(Team.new(), attrs)
|
||||||
team = apply_action!(changeset, :insert)
|
team = apply_action!(changeset, :insert)
|
||||||
|
|
||||||
Hubs.save_hub(team)
|
Hubs.save_hub(team)
|
||||||
|
@ -208,7 +216,7 @@ defmodule Livebook.Teams do
|
||||||
"""
|
"""
|
||||||
@spec update_hub(Team.t(), map()) :: {:ok, Team.t()} | {:error, Ecto.Changeset.t()}
|
@spec update_hub(Team.t(), map()) :: {:ok, Team.t()} | {:error, Ecto.Changeset.t()}
|
||||||
def update_hub(%Team{} = team, attrs) do
|
def update_hub(%Team{} = team, attrs) do
|
||||||
changeset = Team.change_hub(team, attrs)
|
changeset = Team.update_changeset(team, attrs)
|
||||||
id = get_field(changeset, :id)
|
id = get_field(changeset, :id)
|
||||||
|
|
||||||
if Hubs.hub_exists?(id) do
|
if Hubs.hub_exists?(id) do
|
||||||
|
|
|
@ -2,7 +2,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
|
||||||
use LivebookWeb, :live_component
|
use LivebookWeb, :live_component
|
||||||
|
|
||||||
alias Livebook.Hubs
|
alias Livebook.Hubs
|
||||||
alias Livebook.Hubs.{Provider, Team}
|
alias Livebook.Hubs.Provider
|
||||||
alias Livebook.Teams
|
alias Livebook.Teams
|
||||||
alias LivebookWeb.LayoutHelpers
|
alias LivebookWeb.LayoutHelpers
|
||||||
alias LivebookWeb.NotFoundError
|
alias LivebookWeb.NotFoundError
|
||||||
|
@ -10,7 +10,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
|
||||||
@impl true
|
@impl true
|
||||||
def update(assigns, socket) do
|
def update(assigns, socket) do
|
||||||
socket = assign(socket, assigns)
|
socket = assign(socket, assigns)
|
||||||
changeset = Team.change_hub(assigns.hub)
|
changeset = Teams.change_hub(assigns.hub)
|
||||||
show_key? = assigns.params["show-key"] == "true"
|
show_key? = assigns.params["show-key"] == "true"
|
||||||
secrets = Hubs.get_secrets(assigns.hub)
|
secrets = Hubs.get_secrets(assigns.hub)
|
||||||
file_systems = Hubs.get_file_systems(assigns.hub, hub_only: true)
|
file_systems = Hubs.get_file_systems(assigns.hub, hub_only: true)
|
||||||
|
@ -387,7 +387,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
|
||||||
def handle_event("validate", %{"team" => attrs}, socket) do
|
def handle_event("validate", %{"team" => attrs}, socket) do
|
||||||
changeset =
|
changeset =
|
||||||
socket.assigns.hub
|
socket.assigns.hub
|
||||||
|> Team.change_hub(attrs)
|
|> Teams.change_hub(attrs)
|
||||||
|> Map.replace!(:action, :validate)
|
|> Map.replace!(:action, :validate)
|
||||||
|
|
||||||
{:noreply, assign_form(socket, changeset)}
|
{:noreply, assign_form(socket, changeset)}
|
||||||
|
|
Loading…
Add table
Reference in a new issue