mirror of
https://github.com/open-webui/open-webui
synced 2024-11-06 16:59:42 +00:00
feat: folders db migration
This commit is contained in:
parent
eef9045dcc
commit
dedb26fd5c
@ -0,0 +1,41 @@
|
|||||||
|
"""Add folder table
|
||||||
|
|
||||||
|
Revision ID: c69f45358db4
|
||||||
|
Revises: 3ab32c4b8f59
|
||||||
|
Create Date: 2024-10-16 02:02:35.241684
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
revision = "c69f45358db4"
|
||||||
|
down_revision = "3ab32c4b8f59"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.create_table(
|
||||||
|
"folder",
|
||||||
|
sa.Column("id", sa.Text(), primary_key=True, nullable=False),
|
||||||
|
sa.Column("parent_id", sa.Text(), nullable=True),
|
||||||
|
sa.Column("user_id", sa.Text(), nullable=True),
|
||||||
|
sa.Column("name", sa.Text(), nullable=False),
|
||||||
|
sa.Column("items", sa.JSON(), nullable=True),
|
||||||
|
sa.Column("meta", sa.JSON(), nullable=True),
|
||||||
|
sa.Column(
|
||||||
|
"created_at", sa.DateTime(), server_default=sa.func.now(), nullable=False
|
||||||
|
),
|
||||||
|
sa.Column(
|
||||||
|
"updated_at",
|
||||||
|
sa.DateTime(),
|
||||||
|
nullable=False,
|
||||||
|
server_default=sa.func.now(),
|
||||||
|
onupdate=sa.func.now(),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_table("folder")
|
@ -38,15 +38,11 @@
|
|||||||
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
|
import DeleteConfirmDialog from '$lib/components/common/ConfirmDialog.svelte';
|
||||||
import Spinner from '../common/Spinner.svelte';
|
import Spinner from '../common/Spinner.svelte';
|
||||||
import Loader from '../common/Loader.svelte';
|
import Loader from '../common/Loader.svelte';
|
||||||
import FilesOverlay from '../chat/MessageInput/FilesOverlay.svelte';
|
|
||||||
import AddFilesPlaceholder from '../AddFilesPlaceholder.svelte';
|
import AddFilesPlaceholder from '../AddFilesPlaceholder.svelte';
|
||||||
import { select } from 'd3-selection';
|
|
||||||
import SearchInput from './Sidebar/SearchInput.svelte';
|
import SearchInput from './Sidebar/SearchInput.svelte';
|
||||||
import ChevronDown from '../icons/ChevronDown.svelte';
|
|
||||||
import ChevronUp from '../icons/ChevronUp.svelte';
|
|
||||||
import ChevronRight from '../icons/ChevronRight.svelte';
|
|
||||||
import Collapsible from '../common/Collapsible.svelte';
|
|
||||||
import Folder from '../common/Folder.svelte';
|
import Folder from '../common/Folder.svelte';
|
||||||
|
import Plus from '../icons/Plus.svelte';
|
||||||
|
import Tooltip from '../common/Tooltip.svelte';
|
||||||
|
|
||||||
const BREAKPOINT = 768;
|
const BREAKPOINT = 768;
|
||||||
|
|
||||||
@ -381,7 +377,7 @@
|
|||||||
<div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400">
|
<div class="px-2.5 flex justify-between space-x-1 text-gray-600 dark:text-gray-400">
|
||||||
<a
|
<a
|
||||||
id="sidebar-new-chat-button"
|
id="sidebar-new-chat-button"
|
||||||
class="flex flex-1 justify-between rounded-xl px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
class="flex flex-1 justify-between rounded-lg px-2 h-full hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
||||||
href="/"
|
href="/"
|
||||||
draggable="false"
|
draggable="false"
|
||||||
on:click={async () => {
|
on:click={async () => {
|
||||||
@ -425,7 +421,7 @@
|
|||||||
</a>
|
</a>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
class=" cursor-pointer px-2 py-2 flex rounded-xl hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
class=" cursor-pointer px-2 py-2 flex rounded-lg hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
showSidebar.set(!$showSidebar);
|
showSidebar.set(!$showSidebar);
|
||||||
}}
|
}}
|
||||||
@ -452,7 +448,7 @@
|
|||||||
{#if $user?.role === 'admin'}
|
{#if $user?.role === 'admin'}
|
||||||
<div class="px-2.5 flex justify-center text-gray-800 dark:text-gray-200">
|
<div class="px-2.5 flex justify-center text-gray-800 dark:text-gray-200">
|
||||||
<a
|
<a
|
||||||
class="flex-grow flex space-x-3 rounded-xl px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
class="flex-grow flex space-x-3 rounded-lg px-2.5 py-2 hover:bg-gray-100 dark:hover:bg-gray-900 transition"
|
||||||
href="/workspace"
|
href="/workspace"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
selectedChatId = null;
|
selectedChatId = null;
|
||||||
@ -493,6 +489,14 @@
|
|||||||
<div class="absolute z-40 w-full h-full flex justify-center"></div>
|
<div class="absolute z-40 w-full h-full flex justify-center"></div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
<div class="absolute z-40 right-4 top-1">
|
||||||
|
<Tooltip content={$i18n.t('New folder')}>
|
||||||
|
<button class="p-1 rounded-lg hover:bg-white/5 transition">
|
||||||
|
<Plus />
|
||||||
|
</button>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
|
||||||
<SearchInput
|
<SearchInput
|
||||||
bind:value={search}
|
bind:value={search}
|
||||||
on:input={searchDebounceHandler}
|
on:input={searchDebounceHandler}
|
||||||
|
Loading…
Reference in New Issue
Block a user