Skip to content

Commit

Permalink
chg: [connections] specify whether connections can be full duplex - c…
Browse files Browse the repository at this point in the history
…ontinued
  • Loading branch information
gallypette committed Jan 10, 2025
1 parent a182dfc commit 78e61cb
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 36 deletions.
19 changes: 16 additions & 3 deletions lib/cocktailparty/input.ex
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ defmodule Cocktailparty.Input do
|> Repo.preload(:sources)
end

def get_fullduplex!(id) do
Repo.one(from c in Connection, where: c.id == ^id, select: c.type)
|> ConnectionTypes.get_full_duplex()
end

@doc """
Switch Connection's config representation between YAML string and map
"""
Expand Down Expand Up @@ -180,8 +185,8 @@ defmodule Cocktailparty.Input do
end
end

defp validate_full_duplex(changeset) do
if ConnectionTypes.get_full_duplex (get_field(changeset, :type)) == true do
def validate_full_duplex(changeset) do
if ConnectionTypes.get_full_duplex(get_field(changeset, :type)) == true do
changeset
else
add_error(changeset, :sink, "This connection type does not support fullduplex connections")
Expand All @@ -205,7 +210,15 @@ defmodule Cocktailparty.Input do

# We restart related processes if needed
if changed?(changeset, :config) do
case Repo.update(changeset) do
connection =
if get_change(changeset, :sink) do
changeset
|> validate_full_duplex()
else
changeset
end

case Repo.update(connection) do
{:ok, connection} ->
Connection.terminate(connection)
ConnectionManager.start_connection(connection)
Expand Down
2 changes: 1 addition & 1 deletion lib/cocktailparty/input/connection_type.ex
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ defmodule Cocktailparty.Input.ConnectionTypes do
return whether the connection type support fullduplex connections
"""
def get_full_duplex(type) do
Map.get(@connection_types, type)
Map.get(@connection_types, type).fullduplex
end

def validate_config(type, config) do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,13 @@ defmodule CocktailpartyWeb.Admin.ConnectionController do
Input.change_edit_connection(connection_map)
|> Map.put(:data, Input.switch_config_repr!(connection_map))

connection_types = ConnectionTypes.all()
fullduplex = Input.get_fullduplex!(id)
dbg(fullduplex)

render(conn, :edit,
connection: connection_map,
changeset: changeset,
show_connection_types: false,
connection_types: connection_types
fullduplex: fullduplex
)
end

Expand All @@ -103,7 +103,6 @@ defmodule CocktailpartyWeb.Admin.ConnectionController do
new_changeset = Map.put(changeset, :changes, new_changes)

connection_types = ConnectionTypes.all()
dbg(new_changeset)

render(conn, :edit,
connection: connection,
Expand Down
1 change: 0 additions & 1 deletion lib/cocktailparty_web/controllers/admin/connection_html.ex
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ defmodule CocktailpartyWeb.Admin.ConnectionHTML do
"""
attr :changeset, Ecto.Changeset, required: true
attr :connection_types, :list, required: true
attr :show_connection_types, :boolean, default: true
attr :action, :string, required: true

def connection_form(assigns)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
</.error>
<.input field={f[:name]} type="text" label="Name" />
<.input
:if={@show_connection_types}
field={f[:type]}
type="select"
label="Type"
Expand All @@ -30,35 +29,35 @@
</.simple_form>

<script>
// Include the connection_types map as a JavaScript variable
var connectionTypes = <%= raw(Jason.encode!(@connection_types)) %>;
// Include the connection_types map as a JavaScript variable
var connectionTypes = <%= raw(Jason.encode!(@connection_types)) %>;

// Function to update the required fields display based on the selected connection type
function updateRequiredFields() {
const ConnectionTypeId = document.getElementById("connection_type").value;
const requiredFieldsDiv = document.getElementById("required-fields");
requiredFieldsDiv.innerHTML = '';
// Function to update the required fields display based on the selected connection type
function updateRequiredFields() {
const ConnectionTypeId = document.getElementById("connection_type").value;
const requiredFieldsDiv = document.getElementById("required-fields");
requiredFieldsDiv.innerHTML = '';

var heading = document.createElement("dt");
heading.setAttribute("class", "w-1/4 flex-none text-[0.8125rem] leading-6 text-zinc-500");
var content = document.createTextNode("Required fields:");
heading.appendChild(content);
requiredFieldsDiv.appendChild(heading);
var heading = document.createElement("dt");
heading.setAttribute("class", "w-1/4 flex-none text-[0.8125rem] leading-6 text-zinc-500");
var content = document.createTextNode("Required fields:");
heading.appendChild(content);
requiredFieldsDiv.appendChild(heading);

connectionTypes[ConnectionTypeId].required_fields.forEach(function(field) {
var listItem = document.createElement("dd");
listItem.setAttribute("class", "text-sm leading-6 text-zinc-700");
listItem.innerText = field;
requiredFieldsDiv.appendChild(listItem);
});
connectionTypes[ConnectionTypeId].required_fields.forEach(function(field) {
var listItem = document.createElement("dd");
listItem.setAttribute("class", "text-sm leading-6 text-zinc-700");
listItem.innerText = field;
requiredFieldsDiv.appendChild(listItem);
});

// Disable and uncheck the sink checkbox if the type of connection does not support fullduplex
// Disable and uncheck the sink checkbox if the type of connection does not support fullduplex
document.getElementById("connection_sink").disabled = !connectionTypes[ConnectionTypeId].fullduplex;
document.getElementById("connection_sink").checked = connectionTypes[ConnectionTypeId].fullduplex ? document.getElementById("connection_sink").checked : false;

}
}

// Event listener for when the connection type selection changes
document.getElementById("connection_type").addEventListener("change", updateRequiredFields);
updateRequiredFields();
// Event listener for when the connection type selection changes
document.getElementById("connection_type").addEventListener("change", updateRequiredFields);
updateRequiredFields();
</script>
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
<:subtitle>Use this form to manage connection records in your database.</:subtitle>
</.header>

<.connection_form
<.connection_edit_form
changeset={@changeset}
action={~p"/admin/connections/#{@connection}"}
connection_types={@connection_types}
show_connection_types={@show_connection_types}
fullduplex={@fullduplex}
/>

<.back navigate={~p"/admin/connections"}>Back to connections</.back>

0 comments on commit 78e61cb

Please sign in to comment.