Packages
phoenix_kit
1.7.54
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/modules/tickets/web/settings.ex
defmodule PhoenixKit.Modules.Tickets.Web.Settings do
@moduledoc """
LiveView for configuring the Tickets module settings.
"""
use PhoenixKitWeb, :live_view
alias PhoenixKit.Modules.Tickets
alias PhoenixKit.Settings
@impl true
def mount(_params, _session, socket) do
current_user = socket.assigns[:phoenix_kit_current_user]
project_title = Settings.get_project_title()
socket =
socket
|> assign(:page_title, "Tickets Settings")
|> assign(:project_title, project_title)
|> assign(:current_user, current_user)
|> load_settings()
{:ok, socket}
end
@impl true
def handle_params(_params, uri, socket) do
{:noreply, assign(socket, :url_path, URI.parse(uri).path)}
end
@impl true
def handle_event("toggle_enabled", _params, socket) do
new_value = !socket.assigns.enabled
result =
if new_value do
Tickets.enable_system()
else
Tickets.disable_system()
end
case result do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, if(new_value, do: "Tickets enabled", else: "Tickets disabled"))
|> assign(:enabled, new_value)}
{:error, _} ->
{:noreply, put_flash(socket, :error, "Failed to update setting")}
end
end
@impl true
def handle_event("toggle_internal_notes", _params, socket) do
toggle_boolean_setting(
socket,
"tickets_internal_notes_enabled",
:internal_notes_enabled,
"Internal notes"
)
end
@impl true
def handle_event("toggle_attachments", _params, socket) do
toggle_boolean_setting(
socket,
"tickets_attachments_enabled",
:attachments_enabled,
"Attachments"
)
end
@impl true
def handle_event("toggle_allow_reopen", _params, socket) do
toggle_boolean_setting(socket, "tickets_allow_reopen", :allow_reopen, "Allow reopen")
end
@impl true
def handle_event("update_per_page", %{"per_page" => value}, socket) do
case Settings.update_setting("tickets_per_page", value) do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, "Per page setting updated")
|> assign(:per_page, String.to_integer(value))}
{:error, _} ->
{:noreply, put_flash(socket, :error, "Failed to update setting")}
end
end
defp toggle_boolean_setting(socket, key, assign_key, label) do
current_value = Map.get(socket.assigns, assign_key)
new_value = !current_value
case Settings.update_setting(key, to_string(new_value)) do
{:ok, _} ->
{:noreply,
socket
|> put_flash(:info, "#{label} #{if new_value, do: "enabled", else: "disabled"}")
|> assign(assign_key, new_value)}
{:error, _} ->
{:noreply, put_flash(socket, :error, "Failed to update setting")}
end
end
defp load_settings(socket) do
socket
|> assign(:enabled, Tickets.enabled?())
|> assign(:per_page, Settings.get_setting("tickets_per_page", "20") |> String.to_integer())
|> assign(
:internal_notes_enabled,
Settings.get_boolean_setting("tickets_internal_notes_enabled", true)
)
|> assign(
:attachments_enabled,
Settings.get_boolean_setting("tickets_attachments_enabled", true)
)
|> assign(:allow_reopen, Settings.get_boolean_setting("tickets_allow_reopen", true))
|> assign(:stats, Tickets.get_stats())
end
end