| <script> |
| import { toast } from 'svelte-sonner'; |
| import { getContext } from 'svelte'; |
|
|
| const i18n = getContext('i18n'); |
|
|
| import { deleteGroupById, updateGroupById } from '$lib/apis/groups'; |
|
|
| import Pencil from '$lib/components/icons/Pencil.svelte'; |
| import User from '$lib/components/icons/User.svelte'; |
| import UserCircleSolid from '$lib/components/icons/UserCircleSolid.svelte'; |
| import GroupModal from './EditGroupModal.svelte'; |
|
|
| export let users = []; |
| export let group = { |
| name: 'Admins', |
| user_ids: [1, 2, 3] |
| }; |
|
|
| export let setGroups = () => {}; |
|
|
| let showEdit = false; |
|
|
| const updateHandler = async (_group) => { |
| const res = await updateGroupById(localStorage.token, group.id, _group).catch((error) => { |
| toast.error(`${error}`); |
| return null; |
| }); |
|
|
| if (res) { |
| toast.success($i18n.t('Group updated successfully')); |
| setGroups(); |
| } |
| }; |
|
|
| const deleteHandler = async () => { |
| const res = await deleteGroupById(localStorage.token, group.id).catch((error) => { |
| toast.error(`${error}`); |
| return null; |
| }); |
|
|
| if (res) { |
| toast.success($i18n.t('Group deleted successfully')); |
| setGroups(); |
| } |
| }; |
| </script> |
|
|
| <GroupModal |
| bind:show={showEdit} |
| edit |
| {users} |
| {group} |
| onSubmit={updateHandler} |
| onDelete={deleteHandler} |
| /> |
|
|
| <button |
| class="flex items-center gap-3 justify-between px-1 text-xs w-full transition" |
| on:click={() => { |
| showEdit = true; |
| }} |
| > |
| <div class="flex items-center gap-1.5 w-full font-medium"> |
| <div> |
| <UserCircleSolid className="size-4" /> |
| </div> |
| {group.name} |
| </div> |
|
|
| <div class="flex items-center gap-1.5 w-full font-medium"> |
| {group.user_ids.length} |
|
|
| <div> |
| <User className="size-3.5" /> |
| </div> |
| </div> |
|
|
| <div class="w-full flex justify-end"> |
| <div class=" rounded-lg p-1 hover:bg-gray-100 dark:hover:bg-gray-850 transition"> |
| <Pencil className="size-3.5" /> |
| </div> |
| </div> |
| </button> |
|
|