calendar slug added, settings quick change working
This commit is contained in:
parent
56b72f8038
commit
873723d776
7 changed files with 88 additions and 1 deletions
|
@ -473,4 +473,15 @@ defmodule Shift73k.Accounts do
|
||||||
|> where(id: ^user_id)
|
|> where(id: ^user_id)
|
||||||
|> Repo.update_all(set: [week_start_at: day])
|
|> Repo.update_all(set: [week_start_at: day])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
## Calendar slug
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Sets a new calendar url slug for user
|
||||||
|
"""
|
||||||
|
def change_user_calendar_slug(user_id) do
|
||||||
|
User
|
||||||
|
|> where(id: ^user_id)
|
||||||
|
|> Repo.update_all(set: [calendar_slug: Ecto.UUID.generate()])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,6 +24,7 @@ defmodule Shift73k.Accounts.User do
|
||||||
field(:password, :string, virtual: true)
|
field(:password, :string, virtual: true)
|
||||||
field(:hashed_password, :string)
|
field(:hashed_password, :string)
|
||||||
field(:confirmed_at, :naive_datetime)
|
field(:confirmed_at, :naive_datetime)
|
||||||
|
field(:calendar_slug, :string, default: Ecto.UUID.generate())
|
||||||
|
|
||||||
field(:role, Ecto.Enum, values: Keyword.keys(@roles), default: :user)
|
field(:role, Ecto.Enum, values: Keyword.keys(@roles), default: :user)
|
||||||
field(:week_start_at, Ecto.Enum, values: weekdays(), default: :monday)
|
field(:week_start_at, Ecto.Enum, values: weekdays(), default: :monday)
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
<%= live_component @socket, Shift73kWeb.UserLive.Settings.Email, id: "email-#{@current_user.id}", current_user: @current_user %>
|
<%= live_component @socket, Shift73kWeb.UserLive.Settings.Email, id: "email-#{@current_user.id}", current_user: @current_user %>
|
||||||
<%= live_component @socket, Shift73kWeb.UserLive.Settings.Password, id: "password-#{@current_user.id}", current_user: @current_user %>
|
<%= live_component @socket, Shift73kWeb.UserLive.Settings.Password, id: "password-#{@current_user.id}", current_user: @current_user %>
|
||||||
<%= live_component @socket, Shift73kWeb.UserLive.Settings.WeekStart, id: "week_start-#{@current_user.id}", current_user: @current_user %>
|
<%= live_component @socket, Shift73kWeb.UserLive.Settings.WeekStart, id: "week_start-#{@current_user.id}", current_user: @current_user %>
|
||||||
|
<%= live_component @socket, Shift73kWeb.UserLive.Settings.CalendarUrl, id: "calendar_url-#{@current_user.id}", current_user: @current_user %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
39
lib/shift73k_web/live/user/settings/calendar_url.ex
Normal file
39
lib/shift73k_web/live/user/settings/calendar_url.ex
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
defmodule Shift73kWeb.UserLive.Settings.CalendarUrl do
|
||||||
|
use Shift73kWeb, :live_component
|
||||||
|
|
||||||
|
alias Shift73k.Accounts
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def update(%{current_user: user} = assigns, socket) do
|
||||||
|
socket
|
||||||
|
|> assign(id: assigns.id)
|
||||||
|
|> assign(current_user: user)
|
||||||
|
|> live_okreply()
|
||||||
|
|
||||||
|
# |> assign(form_week_start_at: user.week_start_at)
|
||||||
|
end
|
||||||
|
|
||||||
|
# def week_start_options do
|
||||||
|
# week_start = Date.beginning_of_week(Date.utc_today(), hd(weekdays()))
|
||||||
|
|
||||||
|
# week_start
|
||||||
|
# |> Date.range(Date.add(week_start, 6))
|
||||||
|
# |> Enum.map(&Calendar.strftime(&1, "%A"))
|
||||||
|
# |> Enum.zip(weekdays())
|
||||||
|
# end
|
||||||
|
|
||||||
|
# @impl true
|
||||||
|
# def handle_event("changed", %{"calendar_view" => %{"week_start_at" => day}}, socket) do
|
||||||
|
# {:noreply, assign(socket, form_week_start_at: String.to_existing_atom(day))}
|
||||||
|
# end
|
||||||
|
|
||||||
|
@impl true
|
||||||
|
def handle_event("save", _params, socket) do
|
||||||
|
Accounts.change_user_calendar_slug(socket.assigns.current_user.id)
|
||||||
|
flash_msg = {:info, "New calendar URL generated."}
|
||||||
|
send(self(), {:clear_flash_message, :error})
|
||||||
|
send(self(), {:put_flash_message, flash_msg})
|
||||||
|
send(self(), {:reload_current_user, true})
|
||||||
|
{:noreply, socket}
|
||||||
|
end
|
||||||
|
end
|
33
lib/shift73k_web/live/user/settings/calendar_url.html.leex
Normal file
33
lib/shift73k_web/live/user/settings/calendar_url.html.leex
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
<div id="<%= @id %>" class="col-12 col-sm-10 col-md-9 col-lg-8 col-xl-7 col-xxl-6 mt-1">
|
||||||
|
|
||||||
|
<h3>Calendar URL</h3>
|
||||||
|
|
||||||
|
<p><%= @current_user.calendar_slug %></p>
|
||||||
|
|
||||||
|
<%= form_for :calendar_slug, "#", [phx_submit: :save, phx_target: @myself], fn csf -> %>
|
||||||
|
<%= submit "Generate new", class: "btn btn-primary" %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<%#= form_for :calendar_view, "#", [phx_change: :changed, phx_submit: :save, phx_target: @myself], fn cvf -> %>
|
||||||
|
|
||||||
|
<%#= label cvf, :week_start_at, class: "form-label" %>
|
||||||
|
<%# <div class="inner-addon left-addon mb-3"> %>
|
||||||
|
<%#= icon_div @socket, "bi-calendar2-range", [class: "icon is-left text-muted fs-5"] %>
|
||||||
|
<%#= select cvf, :week_start_at, week_start_options(),
|
||||||
|
value: @current_user.week_start_at,
|
||||||
|
class: "form-select"
|
||||||
|
%>
|
||||||
|
<%# </div> %>
|
||||||
|
|
||||||
|
<%# <div class="mb-3"> %>
|
||||||
|
<%#= submit "Save",
|
||||||
|
class: "btn btn-primary",
|
||||||
|
disabled: @form_week_start_at == @current_user.week_start_at,
|
||||||
|
aria_disabled: (@form_week_start_at == @current_user.week_start_at) && "true" || false,
|
||||||
|
phx_disable_with: "Saving..."
|
||||||
|
%>
|
||||||
|
<%# </div> %>
|
||||||
|
|
||||||
|
<%# end %>
|
||||||
|
|
||||||
|
</div>
|
|
@ -11,10 +11,11 @@ defmodule Shift73k.Repo.Migrations.CreateUsersAuthTables do
|
||||||
add(:role, :string, null: false)
|
add(:role, :string, null: false)
|
||||||
add(:confirmed_at, :naive_datetime)
|
add(:confirmed_at, :naive_datetime)
|
||||||
add(:week_start_at, :string, null: false)
|
add(:week_start_at, :string, null: false)
|
||||||
|
add(:calendar_slug, :string, null: false)
|
||||||
timestamps()
|
timestamps()
|
||||||
end
|
end
|
||||||
|
|
||||||
create(unique_index(:users, [:email]))
|
create(unique_index(:users, [:email, :calendar_slug]))
|
||||||
|
|
||||||
create table(:users_tokens, primary_key: false) do
|
create table(:users_tokens, primary_key: false) do
|
||||||
add(:id, :binary_id, primary_key: true)
|
add(:id, :binary_id, primary_key: true)
|
||||||
|
|
|
@ -71,6 +71,7 @@ mock_users =
|
||||||
role: String.to_existing_atom(e["role"]),
|
role: String.to_existing_atom(e["role"]),
|
||||||
hashed_password: Bcrypt.hash_pwd_salt(e["password"]),
|
hashed_password: Bcrypt.hash_pwd_salt(e["password"]),
|
||||||
week_start_at: Enum.at(week_starts, Enum.random(0..2)),
|
week_start_at: Enum.at(week_starts, Enum.random(0..2)),
|
||||||
|
calendar_slug: Ecto.UUID.generate(),
|
||||||
inserted_at: add_dt,
|
inserted_at: add_dt,
|
||||||
updated_at: add_dt,
|
updated_at: add_dt,
|
||||||
confirmed_at: (e["confirmed_at"] && NaiveDateTime.add(add_dt, 300, :second)) || nil
|
confirmed_at: (e["confirmed_at"] && NaiveDateTime.add(add_dt, 300, :second)) || nil
|
||||||
|
|
Loading…
Reference in a new issue