mirror of
https://github.com/open-webui/open-webui.git
synced 2025-12-13 21:05:19 +00:00
enh: folder background image
This commit is contained in:
parent
d46b7b8f1b
commit
2a234829f5
4 changed files with 87 additions and 3 deletions
|
|
@ -2263,7 +2263,18 @@
|
|||
>
|
||||
{#if !loading}
|
||||
<div in:fade={{ duration: 50 }} class="w-full h-full flex flex-col">
|
||||
{#if $settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? null}
|
||||
{#if $selectedFolder && $selectedFolder?.meta?.background_image_url}
|
||||
<div
|
||||
class="absolute {$showSidebar
|
||||
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
||||
: ''} top-0 left-0 w-full h-full bg-cover bg-center bg-no-repeat"
|
||||
style="background-image: url({$selectedFolder?.meta?.background_image_url}) "
|
||||
/>
|
||||
|
||||
<div
|
||||
class="absolute top-0 left-0 w-full h-full bg-linear-to-t from-white to-white/85 dark:from-gray-900 dark:to-gray-900/90 z-0"
|
||||
/>
|
||||
{:else if $settings?.backgroundImageUrl ?? $config?.license_metadata?.background_image_url ?? null}
|
||||
<div
|
||||
class="absolute {$showSidebar
|
||||
? 'md:max-w-[calc(100%-260px)] md:translate-x-[260px]'
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
let showFolderModal = false;
|
||||
let showDeleteConfirm = false;
|
||||
|
||||
const updateHandler = async ({ name, data }) => {
|
||||
const updateHandler = async ({ name, meta, data }) => {
|
||||
if (name === '') {
|
||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||
return;
|
||||
|
|
@ -45,6 +45,7 @@
|
|||
|
||||
const res = await updateFolderById(localStorage.token, folder.id, {
|
||||
name,
|
||||
...(meta ? { meta } : {}),
|
||||
...(data ? { data } : {})
|
||||
}).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
|
|
|
|||
|
|
@ -22,6 +22,9 @@
|
|||
export let folder = null;
|
||||
|
||||
let name = '';
|
||||
let meta = {
|
||||
background_image_url: null
|
||||
};
|
||||
let data = {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
|
|
@ -40,6 +43,7 @@
|
|||
|
||||
await onSubmit({
|
||||
name,
|
||||
meta,
|
||||
data
|
||||
});
|
||||
show = false;
|
||||
|
|
@ -48,10 +52,15 @@
|
|||
|
||||
const init = () => {
|
||||
name = folder.name;
|
||||
meta = folder.meta || {
|
||||
background_image_url: null
|
||||
};
|
||||
data = folder.data || {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
};
|
||||
|
||||
console.log(folder);
|
||||
};
|
||||
|
||||
const focusInput = async () => {
|
||||
|
|
@ -73,6 +82,9 @@
|
|||
|
||||
$: if (!show && !edit) {
|
||||
name = '';
|
||||
meta = {
|
||||
background_image_url: null
|
||||
};
|
||||
data = {
|
||||
system_prompt: '',
|
||||
files: []
|
||||
|
|
@ -123,6 +135,65 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<input
|
||||
id="folder-background-image-input"
|
||||
type="file"
|
||||
hidden
|
||||
accept="image/*"
|
||||
on:change={(e) => {
|
||||
const inputFiles = e.target.files;
|
||||
|
||||
let reader = new FileReader();
|
||||
reader.onload = (event) => {
|
||||
let originalImageUrl = `${event.target.result}`;
|
||||
meta.background_image_url = originalImageUrl;
|
||||
};
|
||||
|
||||
if (
|
||||
inputFiles &&
|
||||
inputFiles.length > 0 &&
|
||||
['image/gif', 'image/webp', 'image/jpeg', 'image/png'].includes(
|
||||
inputFiles[0]['type']
|
||||
)
|
||||
) {
|
||||
reader.readAsDataURL(inputFiles[0]);
|
||||
} else {
|
||||
console.log(`Unsupported File Type '${inputFiles[0]['type']}'.`);
|
||||
|
||||
// clear the input
|
||||
e.target.value = '';
|
||||
}
|
||||
}}
|
||||
/>
|
||||
|
||||
<div class="flex justify-between w-full mt-1 items-center">
|
||||
<div class="text-xs text-gray-500">{$i18n.t('Folder Background Image')}</div>
|
||||
|
||||
<div class="">
|
||||
<button
|
||||
aria-labelledby="chat-background-label background-image-url-state"
|
||||
class="p-1 px-3 text-xs flex rounded-sm transition"
|
||||
on:click={() => {
|
||||
if (meta?.background_image_url !== null) {
|
||||
meta.background_image_url = null;
|
||||
} else {
|
||||
const input = document.getElementById('folder-background-image-input');
|
||||
if (input) {
|
||||
input.click();
|
||||
}
|
||||
}
|
||||
}}
|
||||
type="button"
|
||||
>
|
||||
<span class="ml-2 self-center" id="background-image-url-state"
|
||||
>{meta?.background_image_url !== null
|
||||
? $i18n.t('Reset')
|
||||
: $i18n.t('Upload')}</span
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr class=" border-gray-50 dark:border-gray-850 my-2.5 w-full" />
|
||||
|
||||
{#if $user?.role === 'admin' || ($user?.permissions.chat?.system_prompt ?? true)}
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@
|
|||
}
|
||||
};
|
||||
|
||||
const updateHandler = async ({ name, data }) => {
|
||||
const updateHandler = async ({ name, meta, data }) => {
|
||||
if (name === '') {
|
||||
toast.error($i18n.t('Folder name cannot be empty.'));
|
||||
return;
|
||||
|
|
@ -295,6 +295,7 @@
|
|||
|
||||
const res = await updateFolderById(localStorage.token, folderId, {
|
||||
name,
|
||||
...(meta ? { meta } : {}),
|
||||
...(data ? { data } : {})
|
||||
}).catch((error) => {
|
||||
toast.error(`${error}`);
|
||||
|
|
|
|||
Loading…
Reference in a new issue