Current section
Files
Jump to
Current section
Files
src/gbr@ui@admin@user.erl
-module(gbr@ui@admin@user).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\gbr\\ui\\admin\\user.gleam").
-export([new/2, username/2, email/2, department/2, name_full/2, picture/2, dropdown_opt/2, dropdown/2, toggle/1, at/1, on_submit_opt/2, on_submit/2, on_dropdown_opt/2, on_dropdown/2, render/1]).
-export_type([u_i_profile/0, u_i_user/0, u_i_user_render/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
"\n"
" Gleam UI admin user super element.\n"
"\n"
).
-opaque u_i_profile() :: {u_i_profile,
binary(),
binary(),
binary(),
binary(),
binary()}.
-opaque u_i_user() :: {u_i_user,
gbr@ui@core@el:u_i_el(),
u_i_profile(),
gleam@option:option(gbr@ui@admin@user@dropdown:u_i_dropdown())}.
-opaque u_i_user_render(PDI) :: {u_i_user_render,
u_i_user(),
gleam@option:option(PDI),
gleam@option:option(fun((binary()) -> PDI))}.
-file("src\\gbr\\ui\\admin\\user.gleam", 59).
?DOC(
" New user element\n"
"\n"
" - id: html id\n"
" - username: Username\n"
).
-spec new(binary(), binary()) -> u_i_user().
new(Id, Username) ->
El = begin
_pipe = gbr@ui@core@el:new(Id),
gbr@ui@core@el:class(_pipe, <<"relative"/utf8>>)
end,
Profile = {u_i_profile,
Username,
<<""/utf8>>,
<<""/utf8>>,
<<""/utf8>>,
<<""/utf8>>},
{u_i_user, El, Profile, none}.
-file("src\\gbr\\ui\\admin\\user.gleam", 70).
-spec username(u_i_user(), binary()) -> u_i_user().
username(In, Username) ->
{u_i_user,
erlang:element(2, In),
begin
_record = erlang:element(3, In),
{u_i_profile,
Username,
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record)}
end,
erlang:element(4, In)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 74).
-spec email(u_i_user(), binary()) -> u_i_user().
email(In, Email) ->
{u_i_user,
erlang:element(2, In),
begin
_record = erlang:element(3, In),
{u_i_profile,
erlang:element(2, _record),
Email,
erlang:element(4, _record),
erlang:element(5, _record),
erlang:element(6, _record)}
end,
erlang:element(4, In)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 78).
-spec department(u_i_user(), binary()) -> u_i_user().
department(In, Department) ->
{u_i_user,
erlang:element(2, In),
begin
_record = erlang:element(3, In),
{u_i_profile,
erlang:element(2, _record),
erlang:element(3, _record),
Department,
erlang:element(5, _record),
erlang:element(6, _record)}
end,
erlang:element(4, In)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 82).
-spec name_full(u_i_user(), binary()) -> u_i_user().
name_full(In, Full_name) ->
{u_i_user,
erlang:element(2, In),
begin
_record = erlang:element(3, In),
{u_i_profile,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
Full_name,
erlang:element(6, _record)}
end,
erlang:element(4, In)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 86).
-spec picture(u_i_user(), binary()) -> u_i_user().
picture(In, Picture) ->
{u_i_user,
erlang:element(2, In),
begin
_record = erlang:element(3, In),
{u_i_profile,
erlang:element(2, _record),
erlang:element(3, _record),
erlang:element(4, _record),
erlang:element(5, _record),
Picture}
end,
erlang:element(4, In)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 94).
-spec dropdown_opt(
u_i_user(),
gleam@option:option(gbr@ui@admin@user@dropdown:u_i_dropdown())
) -> u_i_user().
dropdown_opt(In, Dropdown) ->
{u_i_user, erlang:element(2, In), erlang:element(3, In), Dropdown}.
-file("src\\gbr\\ui\\admin\\user.gleam", 90).
-spec dropdown(u_i_user(), gbr@ui@admin@user@dropdown:u_i_dropdown()) -> u_i_user().
dropdown(In, Dropdown) ->
dropdown_opt(In, {some, Dropdown}).
-file("src\\gbr\\ui\\admin\\user.gleam", 98).
-spec toggle(u_i_user()) -> u_i_user().
toggle(In) ->
Dropdown = begin
_pipe = erlang:element(4, In),
gleam@option:map(_pipe, fun gbr@ui@admin@user@dropdown:toggle/1)
end,
{u_i_user, erlang:element(2, In), erlang:element(3, In), Dropdown}.
-file("src\\gbr\\ui\\admin\\user.gleam", 106).
-spec at(u_i_user()) -> u_i_user_render(any()).
at(In) ->
{u_i_user_render, In, none, none}.
-file("src\\gbr\\ui\\admin\\user.gleam", 110).
-spec on_submit_opt(
u_i_user_render(PDO),
gleam@option:option(fun((binary()) -> PDO))
) -> u_i_user_render(PDO).
on_submit_opt(At, On_submit) ->
{u_i_user_render, erlang:element(2, At), erlang:element(3, At), On_submit}.
-file("src\\gbr\\ui\\admin\\user.gleam", 117).
-spec on_submit(u_i_user_render(PDS), fun((binary()) -> PDS)) -> u_i_user_render(PDS).
on_submit(At, Onsubmit) ->
on_submit_opt(At, {some, Onsubmit}).
-file("src\\gbr\\ui\\admin\\user.gleam", 125).
-spec on_dropdown_opt(u_i_user_render(PDY), gleam@option:option(PDY)) -> u_i_user_render(PDY).
on_dropdown_opt(At, On_dropdown) ->
{u_i_user_render, erlang:element(2, At), On_dropdown, erlang:element(4, At)}.
-file("src\\gbr\\ui\\admin\\user.gleam", 121).
-spec on_dropdown(u_i_user_render(PDV), PDV) -> u_i_user_render(PDV).
on_dropdown(At, Ondropdown) ->
on_dropdown_opt(At, {some, Ondropdown}).
-file("src\\gbr\\ui\\admin\\user.gleam", 254).
-spec get_on_dropdown(gleam@option:option(PFS)) -> lustre@vdom@vattr:attribute(PFS).
get_on_dropdown(Ondropdown) ->
case Ondropdown of
{some, Ondropdown@1} ->
lustre@event:on_click(Ondropdown@1);
none ->
lustre@attribute:none()
end.
-file("src\\gbr\\ui\\admin\\user.gleam", 261).
-spec get_on_dropdown_mouse(gleam@option:option(PFX)) -> lustre@vdom@vattr:attribute(PFX).
get_on_dropdown_mouse(Ondropdown) ->
case Ondropdown of
{some, Ondropdown@1} ->
lustre@event:on_mouse_leave(Ondropdown@1);
none ->
lustre@attribute:none()
end.
-file("src\\gbr\\ui\\admin\\user.gleam", 268).
-spec get_on_submit(PEP, gleam@option:option(fun((PEP) -> PGE))) -> lustre@vdom@vattr:attribute(PGE).
get_on_submit(Id, Onsubmit) ->
case Onsubmit of
{some, Onsubmit@1} ->
lustre@event:on_click(Onsubmit@1(Id));
none ->
lustre@attribute:none()
end.
-file("src\\gbr\\ui\\admin\\user.gleam", 206).
-spec menu_list_(
gbr@ui@admin@user@dropdown:u_i_dropdown(),
gleam@option:option(fun((binary()) -> PEG))
) -> list(lustre@vdom@vnode:element(PEG)).
menu_list_(Dropdown, Onsubmit) ->
gbr@ui@admin@user@dropdown:in_menus(
Dropdown,
fun(Id, Text, Icon) ->
Item = case Icon of
{some, Identity} ->
[begin
_pipe = gbr@ui@svg:new(24, 24),
_pipe@1 = Identity(_pipe),
_pipe@2 = fun gbr@ui@svg@core:class/2(
_pipe@1,
<<"fill-gray-500 group-hover:fill-gray-700 dark:fill-gray-400 dark:group-hover:fill-gray-300"/utf8>>
),
gbr@ui@svg:render(_pipe@2)
end,
lustre@element@html:text(Text)];
none ->
[lustre@element@html:text(Text)]
end,
lustre@element@html:li(
[lustre@attribute:id(Id)],
[lustre@element@html:a(
[lustre@attribute:class(
<<"group text-theme-sm flex items-center gap-3 rounded-lg px-3 py-2 font-medium text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300"/utf8>>
),
get_on_submit(Id, Onsubmit)],
Item
)]
)
end
).
-file("src\\gbr\\ui\\admin\\user.gleam", 231).
-spec button_list_(
gbr@ui@admin@user@dropdown:u_i_dropdown(),
gleam@option:option(fun((binary()) -> PEJ))
) -> list(lustre@vdom@vnode:element(PEJ)).
button_list_(Dropdown, Onsubmit) ->
gbr@ui@admin@user@dropdown:in_buttons(
Dropdown,
fun(Id, Label, Icon) ->
Item = case Icon of
{some, Identity} ->
[begin
_pipe = gbr@ui@svg:new(24, 24),
_pipe@1 = Identity(_pipe),
_pipe@2 = fun gbr@ui@svg@core:class/2(
_pipe@1,
<<"fill-gray-500 group-hover:fill-gray-700 dark:group-hover:fill-gray-300"/utf8>>
),
gbr@ui@svg:render(_pipe@2)
end,
lustre@element@html:text(Label)];
none ->
[lustre@element@html:text(Label)]
end,
lustre@element@html:button(
[lustre@attribute:class(
<<"group text-theme-sm mt-3 flex items-center gap-3 rounded-lg px-3 py-2 font-medium text-gray-700 hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-gray-300"/utf8>>
),
get_on_submit(Id, Onsubmit)],
Item
)
end
).
-file("src\\gbr\\ui\\admin\\user.gleam", 129).
-spec render(u_i_user_render(PEC)) -> lustre@vdom@vnode:element(PEC).
render(At) ->
{u_i_user_render, In, On_dropdown, On_submit} = At,
{u_i_user, El, Profile, Dropdown} = In,
{u_i_profile, Username, Email, Department, Full_name, Picture} = Profile,
Is_visible = begin
_pipe = gleam@option:map(
Dropdown,
fun gbr@ui@admin@user@dropdown:is_visible/1
),
gleam@option:unwrap(_pipe, false)
end,
Evt_dropdown = get_on_dropdown(On_dropdown),
Evt_dropdown_click_out = get_on_dropdown(On_dropdown),
Evt_dropdown_mouse_out = get_on_dropdown_mouse(On_dropdown),
Attrs = gbr@ui@core@el:attrs(El),
lustre@element@html:'div'(
Attrs,
[lustre@element@html:a(
[lustre@attribute:class(
<<"flex items-center text-gray-700 dark:text-gray-400 cursor-pointer"/utf8>>
),
Evt_dropdown],
[lustre@element@html:span(
[],
[lustre@element@html:img(
[lustre@attribute:src(Picture),
lustre@attribute:class(
<<"mr-3 h-11 w-11 overflow-hidden rounded-full"/utf8>>
)]
)]
),
lustre@element@html:span(
[lustre@attribute:class(
<<"text-theme-sm mr-1 block font-medium"/utf8>>
)],
[lustre@element@html:text(Username)]
),
begin
_pipe@1 = gbr@ui@svg:new(20, 18),
_pipe@2 = fun gbr@ui@svg@core:class/2(
_pipe@1,
<<"stroke-gray-500 dark:stroke-gray-400"/utf8>>
),
_pipe@3 = fun gbr@ui@svg@core:classes/2(
_pipe@2,
[{<<"rotate-180"/utf8>>, Is_visible}]
),
_pipe@4 = gbr@ui@svg@icons:arrow(_pipe@3),
gbr@ui@svg:render(_pipe@4)
end]
),
case {Dropdown, Is_visible} of
{{some, Dropdown@1}, true} ->
lustre@element@html:'div'(
[lustre@attribute:class(
<<"shadow-theme-lg dark:bg-gray-dark absolute right-0 mt-[17px] flex w-[260px] flex-col rounded-2xl border border-gray-200 bg-white p-3 dark:border-gray-800"/utf8>>
),
lustre@attribute:classes(
[{<<"block"/utf8>>, Is_visible},
{<<"hidden"/utf8>>, not Is_visible}]
),
Evt_dropdown_click_out,
Evt_dropdown_mouse_out],
[lustre@element@html:'div'(
[lustre@attribute:class(
<<"pb-2 border-b border-gray-200 dark:border-gray-800"/utf8>>
)],
[lustre@element@html:'div'(
[lustre@attribute:class(
<<"inline-flex justify-between w-full"/utf8>>
)],
[lustre@element@html:span(
[lustre@attribute:class(
<<"text-theme-sm block ont-medium text-gray-700 dark:text-gray-400"/utf8>>
)],
[lustre@element@html:text(
Full_name
)]
),
lustre@element@html:span(
[lustre@attribute:class(
<<"text-theme-sm block ont-medium text-gray-700 dark:text-gray-400"/utf8>>
),
lustre@attribute:class(
<<"text-orange-400 dark:text-orange-700"/utf8>>
)],
[lustre@element@html:text(
Department
)]
)]
),
lustre@element@html:span(
[lustre@attribute:class(
<<"text-theme-xs mt-0.5 block text-gray-500 dark:text-gray-400"/utf8>>
)],
[lustre@element@html:text(Email)]
)]
),
lustre@element@html:ul(
[lustre@attribute:class(
<<"flex flex-col gap-1 order-b order-gray-200 ark:border-gray-800 t-4 b-3"/utf8>>
)],
menu_list_(Dropdown@1, On_submit)
) |
button_list_(Dropdown@1, On_submit)]
);
{_, _} ->
lustre@element:none()
end]
).