Automations

The Automations component lets you review and manage schedule and alert automations directly inside your GoodData applications. It handles data loading, permission checks, and bulk actions while staying configurable through props and context providers.

Features

  • Inspect automations at workspace or organization scope from a single React component
  • Filter by dashboard, workspace, recipients, status, or owner depending on scope
  • Sort results by title or last execution and search within the visible list
  • Perform pause, resume, unsubscribe, and delete operations (single item or bulk)
  • Customize visible columns, default filters, and list dimensions to fit your layout
  • Plug into custom dashboard/widget routing through URL builder callbacks
  • Localize UI labels and date formatting via locale and timezone props

Basic Integration Example

import { Automations } from "@gooddata/sdk-ui-ext";

// Import required styles
import "@gooddata/sdk-ui-ext/styles/scss/main.scss";

function WorkspaceAutomations({ backend, workspace }) {
    return <Automations backend={backend} workspace={workspace} scope="workspace" />;
}

Wrap the component with BackendProvider, WorkspaceProvider or OrganizationProvider if you prefer context-based configuration instead of passing props explicitly.

Props

NameTypeDefaultDescription
backendIAnalyticalBackend-Analytical backend instance. Falls back to BackendProvider context.
workspacestring-Workspace identifier. Falls back to WorkspaceProvider context.
organizationstring-Organization identifier. Falls back to OrganizationProvider context.
scope“workspace” | “organization”-Chooses whether automations are limited to a workspace or span the org.
localestring“en-US”Locale used for number/date formatting and translations.
timezonestring“UTC”Timezone used when rendering schedule timestamps.
selectedColumnDefinitionsAutomationColumnDefinitions-Overrides the visible column set and widths.
availableFiltersAutomationsAvailableFiltersscope defaultsControls which filters are rendered in the header.
preselectedFiltersAutomationsPreselectedFilters{}Supplies initial filter selections (e.g., status, recipients).
maxHeightnumber500Maximum table height in pixels.
pageSizenumber30Number of automations fetched per page.
type“schedule” | “alert”“schedule”Restricts the listing to a single automation type.
isSmallbooleanfalseEnables a compact layout optimized for tight spaces.
invalidateItemsRefAutomationsInvalidateItemsRef-Imperative handle for refreshing the list after external changes.
dashboardUrlBuilderIDashboardUrlBuilderbuildDashboardUrlMaps dashboard references to navigable URLs.
widgetUrlBuilderIWidgetUrlBuilderbuildWidgetUrlMaps widget references to navigable URLs.
editAutomation(automation, workspaceId, dashboardId) => voiddefaultEditAutomationCallback used when users choose to edit an automation.
onLoadAutomationsOnLoad-Fires after each data load with (items, isInitial) for telemetry or sync.

Filter Availability and Defaults

Filtering options depend on the selected scope. Defaults come from defaultAvailableFilters in @gooddata/sdk-ui-ext.

ScopeDefault Filters
workspacedashboard, recipients, status
organizationworkspace, recipients, status
FilterDescriptionWorkspace scopeOrganization scope
dashboardFilter by dashboard owning the automation
workspaceFilter by originating workspace
recipientsFilter by recipient (user or email)
statusFilter by automation state (active, paused)
createdByFilter by automation owner

Adjust the set with the availableFilters prop and pre-populate UI controls with preselectedFilters:

import { Automations, defaultAvailableFilters } from "@gooddata/sdk-ui-ext";

function OrganizationAutomations({ backend, organization }) {
    return (
        <Automations
            backend={backend}
            organization={organization}
            scope="organization"
            availableFilters={["workspace", "status"]}
            preselectedFilters={{
                status: [{ value: "FAILED", label: "Failed" }],
            }}
        />
    );
}

Automations support sorting by title and last run. The component exposes sort controls in the header and persists the choice via its internal state. Combine sorting with the built-in search box and filters to narrow long lists quickly.

Column Customization

Tailor the table layout with selectedColumnDefinitions:

const customColumns = [
    { name: "title", width: 320 },
    { name: "dashboard" },
    { name: "recipients" },
    { name: "state" },
    { name: "lastRun" },
];

<Automations
    backend={backend}
    workspace={workspace}
    scope="workspace"
    selectedColumnDefinitions={customColumns}
/>;

Columns accept optional width hints (pixels). Omit a column from this array to hide it from the list.

Default column picks are part of defaultAvailableColumns and mirror the filter defaults per scope:

ScopeDefault Columns
workspacetitle, dashboard, recipients, lastRun, menu
organizationtitle, workspace, recipients, lastRun, menu

Full column catalog:

ColumnDescriptionWorkspace contextOrganization contextSchedulesAlerts
idAutomation identifier (useful for debugging)
titleAutomation name with type icon and subtitle
dashboardDashboard title with navigation link
workspaceWorkspace title
widgetWidget title with navigation link
attachmentsExport formats attached to the schedule
nextRunUpcoming execution time
recipientsNumber of subscribed recipients with tooltip list
lastRunTimestamp and status icon of the most recent execution
lastRunStatusStatus text of the most recent execution
stateActive, paused, or draft automation state
createdByCreator name with email tooltip
createdAtCreation timestamp
notificationChannelDelivery channel (email, Slack, etc.)
menuRow action menu (edit, pause, unsubscribe, delete)

Actions, Bulk Actions, and Callbacks

Automations bundle built-in handlers for destructive and maintenance actions such as:

  • Delete single or multiple automations
  • Pause or resume selected automations
  • Unsubscribe users from notifications

Override the editAutomation callback to trigger custom edit flows (e.g., open a side panel).

After performing external updates, call invalidateItemsRef.current?.() to refresh the data.

Best Practices

  • Provide both BackendProvider and WorkspaceProvider/OrganizationProvider so the component can derive context automatically.
  • Align pageSize with maxHeight to achieve optimal data loading.
  • Align locale and timezone with your organization, workspace, or user settings for consistent formatting.