Files
lucent-laravel/front/js/svelte/members/MemberSettingsCard.svelte
T

83 lines
2.1 KiB
Svelte
Raw Normal View History

2023-10-02 23:10:49 +03:00
<script>
2026-01-07 23:49:55 +02:00
import Avatar from "../../common/Avatar.svelte";
import { fly } from "svelte/transition";
import { createEventDispatcher } from "svelte";
2024-08-17 21:10:01 +03:00
import Dropdown from "../common/Dropdown.svelte";
2023-10-02 23:10:49 +03:00
const dispatch = createEventDispatcher();
export let member;
export let roles;
2023-10-17 22:57:25 +03:00
function removeFrom(e, aRole) {
e.preventDefault();
let newRoles = member.roles.filter((r) => r !== aRole);
dispatch("update", {
user: member.id,
roles: newRoles,
});
}
function addTo(e, aRole) {
2023-10-02 23:10:49 +03:00
e.preventDefault();
2023-10-17 22:57:25 +03:00
let newRoles = [...member.roles, aRole];
2026-01-07 23:49:55 +02:00
console.log(member.roles);
console.log(aRole);
console.log(newRoles);
2023-10-02 23:10:49 +03:00
dispatch("update", {
user: member.id,
2023-10-17 22:57:25 +03:00
roles: newRoles,
2023-10-02 23:10:49 +03:00
});
}
</script>
2026-01-07 23:49:55 +02:00
<div transition:fly={{ duration: 200 }} class="member-item">
<div
class="member-name status-{member.roles.includes('removed')
? 'removed'
: 'active'}"
>
<Avatar name={member.name ?? ""} side={32} />
2024-08-17 21:10:01 +03:00
<div>
2023-10-02 23:10:49 +03:00
<div>
2024-08-17 21:10:01 +03:00
{member.name}
</div>
<div>
{member.email}
2023-10-02 23:10:49 +03:00
</div>
</div>
</div>
2024-08-17 21:10:01 +03:00
<Dropdown orientation="right">
2026-01-07 23:49:55 +02:00
<div slot="button">Roles</div>
2024-08-17 21:10:01 +03:00
<h6 class="dropdown-header">Remove role</h6>
{#each roles as role}
{#if member.roles.includes(role)}
<button
2026-01-07 23:49:55 +02:00
class="dropdown-item button"
on:click={(e) => removeFrom(e, role)}
2024-08-17 21:10:01 +03:00
>
{role}
</button>
{/if}
{/each}
2023-10-17 22:57:25 +03:00
2024-08-17 21:10:01 +03:00
<h6 class="dropdown-header">Add role</h6>
{#each roles as role}
{#if !member.roles.includes(role)}
<button
2026-01-07 23:49:55 +02:00
class="dropdown-item button"
on:click={(e) => addTo(e, role)}
2024-08-17 21:10:01 +03:00
>
{role}
</button>
{/if}
{/each}
</Dropdown>
2023-10-02 23:10:49 +03:00
</div>
2026-01-07 23:49:55 +02:00
2023-10-02 23:10:49 +03:00
<style>
.status-removed {
2026-01-07 23:49:55 +02:00
opacity: 0.5;
2023-10-02 23:10:49 +03:00
}
</style>