Horizon Framework

UI API — View Override

apiClient.ui.viewOverride manages user view customisations — per-user, per-view configuration overrides that personalise the UI without changing the shared base configuration.

Methods

create

Create a new view override.

const viewOverride = await apiClient.ui.viewOverride.create({
  viewOverride: {
    name: 'My Custom View',
    viewId: 'jobs-list-view',
    userId: 'user-uid',
    tenantId: 'tenant-uid',
    data: JSON.stringify({ columns: ['name', 'start', 'status'] }),
  },
})
console.log(viewOverride.uid)

get

Fetch a single view override by UID.

const viewOverride = await apiClient.ui.viewOverride.get({ uid: 'abc123' })

getMany

Fetch multiple view overrides, with optional filters.

// By view ID
const overrides = await apiClient.ui.viewOverride.getMany({
  viewId: 'jobs-list-view',
})

// By name
const named = await apiClient.ui.viewOverride.getMany({
  name: 'My Custom View',
})

// Paginated
const page = await apiClient.ui.viewOverride.getMany({ limit: 20, page: 1 })

put

Update an existing view override. Uses merge-and-put — only include the fields you want to change.

await apiClient.ui.viewOverride.put({
  viewOverride: {
    uid: 'abc123',
    data: JSON.stringify({ columns: ['name', 'status'] }),
  },
})

del

Delete a view override by UID.

await apiClient.ui.viewOverride.del({ uid: 'abc123' })

View Override Type

FieldTypeDescription
uidstringUnique identifier
namestringDisplay name
viewIdstringThe view this override applies to
userIdstringThe user this override belongs to
tenantIdstringThe tenant this override belongs to
datastringSerialised override data (defaults to '')

React Example

import { useApiClient } from '@skedulo/horizon-core'
import { useEffect, useState, useCallback } from 'react'

const useViewOverride = (viewId) => {
  const apiClient = useApiClient()
  const [override, setOverride] = useState(null)

  useEffect(() => {
    apiClient?.ui.viewOverride.getMany({ viewId }).then((overrides) => {
      setOverride(overrides[0] ?? null)
    })
  }, [apiClient, viewId])

  const save = useCallback(
    async (data) => {
      if (override) {
        const updated = await apiClient?.ui.viewOverride.put({
          viewOverride: { uid: override.uid, data: JSON.stringify(data) },
        })
        setOverride(updated ?? null)
      } else {
        const created = await apiClient?.ui.viewOverride.create({
          viewOverride: {
            name: viewId,
            viewId,
            userId: apiClient.userId,
            tenantId: apiClient.tenantId,
            data: JSON.stringify(data),
          },
        })
        setOverride(created)
      }
    },
    [apiClient, override, viewId],
  )

  return { override, save }
}