mirror of
https://github.com/livebook-dev/livebook.git
synced 2024-09-20 10:05:57 +08:00
Use a more scoped changeset on teams hub update (#2328)
This commit is contained in:
parent
07f1c34fab
commit
90c3cfe3a7
|
@ -56,6 +56,8 @@ defmodule Livebook.Hubs.Team do
|
|||
hub_emoji
|
||||
)a
|
||||
|
||||
@editable_fields ~w(hub_emoji)a
|
||||
|
||||
@doc """
|
||||
Initializes a new Team hub.
|
||||
"""
|
||||
|
@ -71,21 +73,19 @@ defmodule Livebook.Hubs.Team do
|
|||
}
|
||||
end
|
||||
|
||||
@doc """
|
||||
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
|
||||
def creation_changeset(team, attrs) do
|
||||
team
|
||||
|> cast(attrs, @fields)
|
||||
|> validate_required(@fields)
|
||||
|> add_id()
|
||||
end
|
||||
|
||||
def update_changeset(team, attrs) do
|
||||
team
|
||||
|> cast(attrs, @editable_fields)
|
||||
|> validate_required(@editable_fields)
|
||||
end
|
||||
|
||||
defp add_id(changeset) do
|
||||
if name = get_field(changeset, :hub_name) do
|
||||
change(changeset, %{id: "team-#{name}"})
|
||||
|
|
|
@ -187,6 +187,14 @@ defmodule Livebook.Teams do
|
|||
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 """
|
||||
Creates a Hub.
|
||||
|
||||
|
@ -194,7 +202,7 @@ defmodule Livebook.Teams do
|
|||
"""
|
||||
@spec create_hub!(map()) :: Team.t()
|
||||
def create_hub!(attrs) do
|
||||
changeset = Team.change_hub(Team.new(), attrs)
|
||||
changeset = Team.creation_changeset(Team.new(), attrs)
|
||||
team = apply_action!(changeset, :insert)
|
||||
|
||||
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()}
|
||||
def update_hub(%Team{} = team, attrs) do
|
||||
changeset = Team.change_hub(team, attrs)
|
||||
changeset = Team.update_changeset(team, attrs)
|
||||
id = get_field(changeset, :id)
|
||||
|
||||
if Hubs.hub_exists?(id) do
|
||||
|
|
|
@ -2,7 +2,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
|
|||
use LivebookWeb, :live_component
|
||||
|
||||
alias Livebook.Hubs
|
||||
alias Livebook.Hubs.{Provider, Team}
|
||||
alias Livebook.Hubs.Provider
|
||||
alias Livebook.Teams
|
||||
alias LivebookWeb.LayoutHelpers
|
||||
alias LivebookWeb.NotFoundError
|
||||
|
@ -10,7 +10,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
|
|||
@impl true
|
||||
def update(assigns, socket) do
|
||||
socket = assign(socket, assigns)
|
||||
changeset = Team.change_hub(assigns.hub)
|
||||
changeset = Teams.change_hub(assigns.hub)
|
||||
show_key? = assigns.params["show-key"] == "true"
|
||||
secrets = Hubs.get_secrets(assigns.hub)
|
||||
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
|
||||
changeset =
|
||||
socket.assigns.hub
|
||||
|> Team.change_hub(attrs)
|
||||
|> Teams.change_hub(attrs)
|
||||
|> Map.replace!(:action, :validate)
|
||||
|
||||
{:noreply, assign_form(socket, changeset)}
|
||||
|
|
Loading…
Reference in a new issue