mirror of
				https://github.com/livebook-dev/livebook.git
				synced 2025-10-31 07:46:18 +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 | ||||
|   )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…
	
	Add table
		
		Reference in a new issue