diff --git a/src/lib/components/admin/SettingsModal.svelte b/src/lib/components/admin/SettingsModal.svelte deleted file mode 100644 index 0ed32e551..000000000 --- a/src/lib/components/admin/SettingsModal.svelte +++ /dev/null @@ -1,43 +0,0 @@ - - - -
-
-
{$i18n.t('Admin Settings')}
- -
-
-
diff --git a/src/lib/components/workspace/Playground.svelte b/src/lib/components/playground/Playground.svelte similarity index 100% rename from src/lib/components/workspace/Playground.svelte rename to src/lib/components/playground/Playground.svelte diff --git a/src/lib/components/workspace/Functions.svelte b/src/lib/components/workspace/Functions.svelte index a7de54f91..ffa5c8b4b 100644 --- a/src/lib/components/workspace/Functions.svelte +++ b/src/lib/components/workspace/Functions.svelte @@ -168,7 +168,7 @@ -
+
-
+ -
+
+ import { toast } from 'svelte-sonner'; + import { createEventDispatcher } from 'svelte'; + import { onMount, getContext } from 'svelte'; + import { addUser } from '$lib/apis/auths'; + + import Modal from '../common/Modal.svelte'; + import { WEBUI_BASE_URL } from '$lib/constants'; + + const i18n = getContext('i18n'); + const dispatch = createEventDispatcher(); + + export let show = false; + + let loading = false; + let tab = ''; + let inputFiles; + + let _user = { + name: '', + email: '', + password: '', + role: 'user' + }; + + $: if (show) { + _user = { + name: '', + email: '', + password: '', + role: 'user' + }; + } + + const submitHandler = async () => { + const stopLoading = () => { + dispatch('save'); + loading = false; + }; + + if (tab === '') { + loading = true; + + const res = await addUser( + localStorage.token, + _user.name, + _user.email, + _user.password, + _user.role + ).catch((error) => { + toast.error(error); + }); + + if (res) { + stopLoading(); + show = false; + } + } else { + if (inputFiles) { + loading = true; + + const file = inputFiles[0]; + const reader = new FileReader(); + + reader.onload = async (e) => { + const csv = e.target.result; + const rows = csv.split('\n'); + + let userCount = 0; + + for (const [idx, row] of rows.entries()) { + const columns = row.split(',').map((col) => col.trim()); + console.log(idx, columns); + + if (idx > 0) { + if ( + columns.length === 4 && + ['admin', 'user', 'pending'].includes(columns[3].toLowerCase()) + ) { + const res = await addUser( + localStorage.token, + columns[0], + columns[1], + columns[2], + columns[3].toLowerCase() + ).catch((error) => { + toast.error(`Row ${idx + 1}: ${error}`); + return null; + }); + + if (res) { + userCount = userCount + 1; + } + } else { + toast.error(`Row ${idx + 1}: invalid format.`); + } + } + } + + toast.success(`Successfully imported ${userCount} users.`); + inputFiles = null; + const uploadInputElement = document.getElementById('upload-user-csv-input'); + + if (uploadInputElement) { + uploadInputElement.value = null; + } + + stopLoading(); + }; + + reader.readAsText(file); + } else { + toast.error($i18n.t('File not found.')); + } + } + }; + + + +
+
+
{$i18n.t('Add User')}
+ +
+ +
+
+ + + diff --git a/src/routes/(app)/playground/+page.svelte b/src/routes/(app)/playground/+page.svelte index 40c1ce4d7..32e6e25be 100644 --- a/src/routes/(app)/playground/+page.svelte +++ b/src/routes/(app)/playground/+page.svelte @@ -1,7 +1,7 @@