open-webui/src/lib/components/admin/Users/Groups/GroupItem.svelte

93 lines
2 KiB
Svelte
Raw Normal View History

2024-11-14 10:20:34 +00:00
<script>
2024-11-15 04:51:49 +00:00
import { toast } from 'svelte-sonner';
import { onMount, getContext } from 'svelte';
2024-11-15 04:51:49 +00:00
const i18n = getContext('i18n');
import { deleteGroupById, updateGroupById } from '$lib/apis/groups';
2024-11-14 10:20:34 +00:00
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';
import { querystringValue } from '$lib/utils';
2024-11-14 10:20:34 +00:00
export let users = [];
export let group = {
name: 'Admins',
user_ids: [1, 2, 3]
};
2024-11-15 04:51:49 +00:00
export let setGroups = () => {};
2024-11-14 10:20:34 +00:00
let showEdit = false;
2024-11-15 04:51:49 +00:00
const updateHandler = async (_group) => {
const res = await updateGroupById(localStorage.token, group.id, _group).catch((error) => {
2025-01-21 06:41:32 +00:00
toast.error(`${error}`);
2024-11-15 04:51:49 +00:00
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) => {
2025-01-21 06:41:32 +00:00
toast.error(`${error}`);
2024-11-15 04:51:49 +00:00
return null;
});
if (res) {
toast.success($i18n.t('Group deleted successfully'));
setGroups();
}
};
onMount(() => {
const groupId = querystringValue('id');
if (groupId && groupId === group.id) {
showEdit = true;
}
});
2024-11-14 10:20:34 +00:00
</script>
2024-11-15 04:51:49 +00:00
<GroupModal
bind:show={showEdit}
edit
{users}
{group}
onSubmit={updateHandler}
onDelete={deleteHandler}
/>
2024-11-14 10:20:34 +00:00
2024-11-18 17:00:51 +00:00
<button
class="flex items-center gap-3 justify-between px-1 text-xs w-full transition"
on:click={() => {
showEdit = true;
}}
>
2025-07-14 17:24:31 +00:00
<div class="flex items-center gap-1.5 w-full font-medium flex-1">
2024-11-14 10:20:34 +00:00
<div>
<UserCircleSolid className="size-4" />
</div>
2025-07-14 16:08:49 +00:00
<div class="line-clamp-1">
{group.name}
</div>
2024-11-14 10:20:34 +00:00
</div>
2025-07-14 17:24:31 +00:00
<div class="flex items-center gap-1.5 w-fit font-medium text-right justify-end">
2024-11-14 10:20:34 +00:00
{group.user_ids.length}
<div>
<User className="size-3.5" />
</div>
2024-11-18 17:00:51 +00:00
<div class=" rounded-lg p-1 hover:bg-gray-100 dark:hover:bg-gray-850 transition">
2024-11-14 11:16:26 +00:00
<Pencil className="size-3.5" />
2024-11-18 17:00:51 +00:00
</div>
2024-11-14 10:20:34 +00:00
</div>
2024-11-18 17:00:51 +00:00
</button>