Skip to main content

CnIntegrationTab

Generic sidebar tab for the pluggable integration registry. Used as the tab component for the 18 leaf integrations that don't yet need a bespoke UI — every leaf registration points its tab at this component and passes the integration's id via the registration descriptor.

Fetches from OpenRegister's pluggable-integration sub-resource (/api/objects/{register}/{schema}/{objectId}/integrations/{integrationId}), renders rows generically (title / optional subtitle or breadcrumb / optional external url), and supports unlink. A 503 from the endpoint renders a quiet "currently unavailable" banner; 501 hides the unlink action.

Bespoke per-leaf tabs supersede this one by repointing the registration's tab to a dedicated Vue component (collision policy: first wins).

Usage

You don't normally mount CnIntegrationTab directly — CnObjectSidebar with :use-registry="true" resolves it from the registry. To register a leaf using the generic tab:

import { CnIntegrationTab, CnIntegrationCard } from '@conduction/nextcloud-vue'

window.OCA.OpenRegister.integrations.register({
id: 'calendar',
label: t('myapp', 'Meetings'),
icon: 'Calendar',
requiredApp: 'calendar',
group: 'comms',
tab: CnIntegrationTab,
widget: CnIntegrationCard,
})

Props

PropTypeDefaultNotes
integrationIdString— (required)Stable provider id (matches PHP-side).
objectIdString— (required)Parent object uuid.
registerString''OpenRegister register id (slug or uuid).
schemaString''OpenRegister schema id (slug or uuid).
apiBaseString'/apps/openregister/api'Base API URL.
allowUnlinkBooleantrueWhether the per-row unlink button is shown.
emptyLabelStringtranslated 'Nothing linked yet'Empty-state label.
unlinkLabelStringtranslated 'Unlink'aria-label for the unlink button.
unavailableLabelStringtranslated 'This integration is currently unavailable.'503 banner copy.

Events

EventPayloadWhen
unlinkedstring — the row's idAfter a row is successfully unlinked.

See also