Skip to content

Layout Persistence API

useLayoutPersistence

用于管理布局状态和版本的组合式函数。

类型定义

typescript
interface LayoutPersistenceState {
  id: string          // UUID
  state_id: string    // 用户提供的标识符
  layout: any         // 布局数据
  created_at: string
  updated_at: string
}

interface LayoutPersistenceVersion {
  id: string          // UUID
  state_id: string    // 引用 layout_states.id
  version_name: string
  layout: any         // 布局数据
  created_at: string
}

interface UseLayoutPersistenceOptions {
  supabase: SupabaseClient       // Supabase 客户端实例
  stateId?: string              // 可选:布局状态的唯一标识符
  layoutInstance: Ref<any>      // 布局组件的引用
  autoSync?: boolean            // 是否自动同步(默认:true)
  autoSyncDebounce?: number     // 自动同步的防抖延迟(毫秒)(默认:1000)
  onError?: (error: any) => void // 错误处理函数
  tables?: {                    // 自定义表名
    states?: string
    versions?: string
  }
  columns?: {                   // 自定义列名
    stateId?: string
    layout?: string
    versionName?: string
    createdAt?: string
    updatedAt?: string
  }
  additionalData?: Record<string, any> | (() => Record<string, any>) // 保存时包含的额外数据
}

返回值

typescript
{
  currentState: Ref<LayoutPersistenceState | null>  // 当前布局状态
  versions: Ref<LayoutPersistenceVersion[]>         // 可用的版本列表
  loadState: () => Promise<void>                    // 加载状态
  saveState: () => Promise<void>                    // 保存状态
  createVersion: (name: string) => Promise<void>    // 创建新版本
  loadVersion: (version: LayoutPersistenceVersion) => Promise<void>  // 加载特定版本
  fetchVersions: (stateId: string) => Promise<void> // 获取版本列表
}

示例

typescript
const layoutRef = ref()
const layoutState = useLayoutPersistence({
  supabase,
  stateId: 'my-layout',
  layoutInstance: layoutRef,
  autoSync: true,
  autoSyncDebounce: 1000,
  onError: console.error
})

// 加载初始状态
await layoutState.loadState()

// 创建新版本
await layoutState.createVersion('版本 1')

// 加载特定版本
await layoutState.loadVersion(version)

配置选项

supabase

  • 类型:SupabaseClient
  • 必填:是
  • 说明:已配置的 Supabase 客户端实例

stateId

  • 类型:string
  • 必填:否
  • 默认值:undefined
  • 说明:布局状态的唯一标识符。如果未提供,将从 URL 参数或 localStorage 中获取

layoutInstance

  • 类型:Ref<any>
  • 必填:是
  • 说明:布局组件的引用,用于获取和设置布局状态

autoSync

  • 类型:boolean
  • 必填:否
  • 默认值:true
  • 说明:是否在布局更改时自动保存状态

autoSyncDebounce

  • 类型:number
  • 必填:否
  • 默认值:1000
  • 说明:自动保存的防抖延迟(毫秒)

onError

  • 类型:(error: any) => void
  • 必填:否
  • 默认值:undefined
  • 说明:错误处理函数

tables

  • 类型:object
  • 必填:否
  • 说明:自定义数据库表名
    • states:状态表名(默认:'layout_states')
    • versions:版本表名(默认:'layout_state_versions')

columns

  • 类型:object
  • 必填:否
  • 说明:自定义数据库列名
    • stateId:状态 ID 列名(默认:'state_id')
    • layout:布局数据列名(默认:'layout')
    • versionName:版本名称列名(默认:'version_name')
    • createdAt:创建时间列名(默认:'created_at')
    • updatedAt:更新时间列名(默认:'updated_at')

additionalData

  • 类型:Record<string, any> | (() => Record<string, any>)
  • 必填:否
  • 说明:保存状态时要包含的额外数据,可以是对象或返回对象的函数

Released under the MIT License.