> Documentation index: https://www.gooddata.ai/docs/gooddata-ui/llms.txt lists every page of these docs as Markdown.

# Dashboard plugin API

> Implement the dashboard plugin lifecycle, customize visualizations, widgets, layouts, filters, and exports, and register dashboard event handlers.

API reference: [IDashboardCustomizationProps](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizationprops/index.md) (interface)

Use this page to implement the plugin contract and choose the dashboard API
that matches the behavior you want to change. The main extension points are:

- visualization rendering through `insightWidgets()`;
- arbitrary content through `customWidgets()`;
- dashboard structure and exports through `layout()`;
- filters through `filterBar()` and `filters()`; and
- dashboard events and state through the event handler API, selectors, and commands.

All the public and most of the beta-level APIs have detailed TSDoc comments, from which the
[API reference](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/index.md) is generated.

## [Plugin contract](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#plugin-contract)

The plugin contract is the first API that you will come in contact with. The contract defines properties that you need
to fill in and functions to implement, including the functions that allow you to specify code
to run on load, during registration, and after unload.

A new plugin that is bootstrapped with `@gooddata/plugin-toolkit` sets up
all the contract essentials and provides a template implementation of some of the functions by subclassing
the [`DashboardPluginV1`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.dashboardpluginv1/index.md).

You can modify your subclass as needed. You can even add a plugin-specific internal state into this class, if needed.

### [onPluginLoaded](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#onpluginloaded)

When implemented, this function is called right after your plugin is loaded and is about to be used on a dashboard.
At this point, your code receives information about the context in which it will operate. Most notably:

-   The Analytical Backend that is currently in use, authenticated and ready to use in case your plugin needs to read additional data from the backend
-   The workspace that the user works with
-   The reference of the dashboard that is about to be loaded
-   The dashboard configuration, if the embedding application passed one

This function may return a promise. In that case, the dashboard loader waits until the promise is resolved and
then proceeds. The loader does not impose any timeout on the `onPluginLoaded` call. If you make calls over the network,
a good practice is to consider potential failures and include timeouts and necessary fallbacks.

> **A failing onPluginLoaded excludes the plugin:**
> If your implementation of this function fails with an exception, the loader excludes your plugin from further processing.

#### [Parameterization](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#parameterization)

To allow a plugin to be reused across dashboards, you can make each link between a dashboard and your plugin specify
additional parameters. These parameters can then be used to customize the behavior of the plugin for
a particular dashboard.

GoodData treats parameters opaquely. Only soft-size limits of 2,048 bytes for
the length of the parameter string are imposed. Otherwise, the parameters are fully under your control and responsibility.

If the parameters are specified on the link between a dashboard and your plugin, the loader sends them as the
second argument to the `onPluginLoaded` function.

### [register](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#register)

This is a mandatory function that your plugin must implement. This function is called after the plugin is loaded.
In this function, you then can register customizations to the dashboard.

Your function is always called with the following parameters:

-   Dashboard context

    Similar to `onPluginLoaded`, the context contains essential information describing the backend, workspace, and
    dashboard.

-   Customization API

    The customization API allows your code to add new content to a dashboard. Calls to these APIs are only valid
    during the registration phase. If you hold onto the received APIs and attempt to make changes later on, they
    will have no effect and will result in warnings in the browser console.

-   Event handler API

    The event handler API allows your code to add or remove your own custom event handlers for different events
    happening on the dashboard. If needed, you can hold onto the event handler API and use it to add or remove handlers
    at any time during the plugin lifecycle.

### [onPluginUnload](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#onpluginunload)

When implemented, this function is called right before the dashboard that uses your plugin is unmounted.
In this function, your code can do additional teardown and cleanup specific to your plugin.

Your function may be asynchronous and return a promise. At this point, the dashboard loader does not wait for the returned
promise to resolve.

## [Customization API](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#customization-api)

The customization API is an entry point to all the customization and enhancement capabilities that your code can take advantage of. The
API is described in detail in the [API reference](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizer/index.md).

### [Customize rendering of visualizations](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#customize-rendering-of-visualizations)

Call the `insightWidgets()` method on the customization API to get to the API through which you can customize
how the [visualization widgets](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardinsightcustomizer/index.md)
on your dashboard will be rendered. [Customize widgets and visualizations](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/customize-widgets/index.md) explains how
these methods relate to the widget, visualization, and visualization body layers, and when to replace only the body.

-   To **render data for one or more visualizations** using your own custom visualizations, the visualization widget customization API provides the following methods:

    -   `withCustomProvider()`

        When calling this method, you can register a function that will be called by the Dashboard component every time it
        wants to render a visualization widget. The function will receive a widget definition and the visualization to be rendered. This function
        is expected to return a React component to use for rendering that widget. If the function does not return
        a custom component, the Dashboard component falls back and uses the built-in component.

        Your function must determine that a particular visualization widget should be rendered using
        a custom component and then return the custom component. How your function determines this is up to you.

    -   `withTag()`

        This is a convenience method on top of the `withCustomProvider` method. To identify visualization widgets to render
        using custom components, use tags. You can assign arbitrary tags to your saved visualizations and then use this
        method to register a renderer for the visualization widgets that have this tag.

        To tag a visualization, set `attributes.tags` on its `visualizationObjects` entity through the
        [GoodData Cloud API](https://www.gooddata.ai/docs/cloud/api-and-sdk/api/api_reference_all/).

-   To **add additional elements on top of the visualization widgets** that are rendered using the built-in renderers, the visualization widget customization API provides
    a method to register a "decorator" called `withCustomDecorator()`.

    In some way, the decorators resemble a concept of middleware that you may be familiar with from `express` or `redux`. Instead of
    registering a function that evaluates the widget and visualization and returns a React component, for decorators you have to
    register a factory function. This factory function receives a provider for the component to decorate
    and must then return a function to provide a decorator component. The function to return has the same signature as
    the visualization provider function that you register in `withCustomProvider`.

    This is best described in code:

    ```tsx
    import { insightTags } from "@gooddata/sdk-model";
    import type { IDashboardCustomizer, IDashboardInsightProps } from "@gooddata/sdk-ui-dashboard";

    export function registerDecorator(customize: IDashboardCustomizer): void {
        customize.insightWidgets().withCustomDecorator((next) => {
            return (insight, widget) => {
                if (!insightTags(insight).includes("decorate")) {
                    return undefined;
                }

                // Make sure you call this outside the component render function,
                // otherwise a new instance of the decorated component is created on each re-render.
                const Decorated = next(insight, widget);

                function MyCustomDecorator(props: IDashboardInsightProps) {
                    return (
                        <div>
                            <p>My Custom Decoration</p>
                            <Decorated {...props} />
                        </div>
                    );
                }

                return MyCustomDecorator;
            };
        });
    }
    ```

#### [Enable CSV and XLSX export for custom visualization renderers](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#enable-csv-and-xlsx-export-for-custom-visualization-renderers)

When a plugin replaces a visualization renderer, it must call or forward the
`pushData` callback when the visualization data is ready. The Dashboard
component uses the data supplied through `pushData` to enable the CSV and XLSX
options in the widget's Export popup.

If the renderer does not call `pushData`, the widget's Export popup does not
offer CSV or XLSX export, even if the renderer has loaded the data itself.

Forward the callback to the GoodData.UI visualization component:

```tsx
import { InsightView } from "@gooddata/sdk-ui-ext";
import type { IDashboardInsightProps } from "@gooddata/sdk-ui-dashboard";

function CustomVisualization(props: IDashboardInsightProps) {
    return <InsightView insight={props.insight} pushData={props.pushData} />;
}
```

This requirement applies to visualization renderers registered through
`insightWidgets()`. Arbitrary custom widgets registered through
`customWidgets()` receive [`IDashboardWidgetProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardwidgetprops/index.md) and do not receive this
visualization callback.

### [Use custom widgets](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#use-custom-widgets)

With custom widgets, you can enrich dashboards with arbitrary content. For example, your dashboard can use
the built-in visualization and widget renderers and then use the custom widgets to add extra content such as images,
additional text, or forms.

You must first register a custom widget type, which is a declaration of the custom widget type. The declaration links the custom widget type name and the React component to use for rendering.

Once you have registered the custom widget type, you can add any number of widgets of this type to your dashboard using the layout manipulation API.

The default plugin bootstrapped by `@gooddata/plugin-toolkit` defines a sample custom widget
that you can try out right away.

#### [Register types of custom widgets](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#register-types-of-custom-widgets)

Call the `customWidgets()` method on the customization API to get to the API through which you can
register [custom widget types](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardwidgetcustomizer/index.md).

Use the `addCustomWidget()` method to register a custom widget type and provide your custom React component. The
props for this component will be of the [`IDashboardWidgetProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardwidgetprops/index.md) type. The `widget` property contains a payload
for the custom widget.

#### [Add custom widgets to a dashboard](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#add-custom-widgets-to-a-dashboard)

Once you have a custom widget type registered, you can add instances of the widgets of this type to a dashboard. To do so,
use the layout manipulation API.

Call the `layout()` method on the customization API to get to the API through which you can
[customize the layout](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardlayoutcustomizer/index.md).
To be prepared for different types of layouts that may be implemented in the future, the layout manipulation API contains
methods to customize the layout of a particular type.

The Dashboard component supports only the fluid 12-column grid layout. To customize this layout, use
the `customizeFluidLayout()` function to register your customization function.

You have to implement the fluid layout customization function yourself. This function is called with
the following parameters:

-   The layout as currently defined on the dashboard

    The layout is provided so that your code can inspect the layout and determine what and where
    to customize if needed. Depending on your use case, you may or may not need to inspect the layout. For instance, if you
    are adding a custom header on top of the dashboard, you can just do that.

-   [The fluid layout customization API](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.ifluidlayoutcustomizer/index.md)

    This API allows you to add new sections (rows) to a dashboard or add new items (columns) to existing
    sections. Use `addSectionToPath` to add a section and `addItemToPath` to add an item. Both take a path
    instead of a plain index, so they can also target sections and items nested inside a layout widget:

    -   A section path is an object: `{ sectionIndex: 0 }` in the root layout, plus a `parent` item path when
        the section is nested.
    -   An item path is an array of `{ sectionIndex, itemIndex }` coordinates, one per level of nesting.

    Pass `-1` as an index to append at the end.

> **The layout customization runs once:**
> The function that you register here is called once during the dashboard initialization, to modify
> the layout before it is stored in the Dashboard component's state. It can't change a layout that is
> already rendered. To add, move, or remove widgets after the Dashboard component renders, use its alpha-level commands.

> **Warning:**
> `addSection` and `addItem`, which take plain numeric indexes, are deprecated. Use `addSectionToPath` and
> `addItemToPath` instead; they take the same section and item objects.

#### [Create sections, items, and custom widgets](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#create-sections-items-and-custom-widgets)

Don't create sections, items, and custom widget objects by hand. Use the factory functions of the Dashboard component:

-   `newDashboardSection` creates a new section (row) with a number of items (columns) that contain custom widgets.
-   `newDashboardItem` creates a new item (column) that contains a custom widget.
-   `newCustomWidget` creates a custom widget.

    When creating a custom widget, you have to specify a unique identifier for this widget, the type of the custom widget,
    and optionally additional data to include in the widget.

    The custom widget renderer that you registered previously will receive all this information so you can customize rendering
    based on the additional data.

#### [Calculate data for a custom widget](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#calculate-data-for-a-custom-widget)

When creating a custom widget, you often need to calculate some data for it similar to how the standard widgets do it.
To calculate data for a custom widget, use the following convenient hooks:

-   [`useCustomWidgetExecutionDataView()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.usecustomwidgetexecutiondataview/index.md) allows you to get data for free-form execution in the context of the widget.
-   [`useCustomWidgetInsightDataView()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.usecustomwidgetinsightdataview/index.md) allows you to get data for a specific visualization in the context of the widget.

By default, the data computation respects the filters set on the dashboard. If you want a custom widget to ignore some filters during the data computation, set it up when creating the widget using the `newCustomWidget()` function:

```ts
import { attributeDisplayFormRef } from "@gooddata/sdk-model";
import { newCustomWidget } from "@gooddata/sdk-ui-dashboard";
import * as Md from "./catalog.js";

const customWidget = newCustomWidget("myWidget1", "myCustomWidget", {
    // specify which date dataset to use when applying the date filter to this widget
    // if not specified, the date filter is ignored
    dateDataSet: Md.DateDatasets.Date,
    // specify which attribute filters to ignore for this widget
    // if empty or not specified, all attribute filters are applied
    ignoreDashboardFilters: [
        {
           type: "attributeFilterReference",
           displayForm: attributeDisplayFormRef(Md.RestaurantCategory),
        },
    ],
});
```

#### [Trigger commands from a custom widget](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#trigger-commands-from-a-custom-widget)

To interact with the dashboard from within a custom widget, dispatch commands with
[`useDispatchDashboardCommand`](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard/index.md#commands).

#### [Prepare custom widget for PDF exports](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#prepare-custom-widget-for-pdf-exports)

If you are loading asynchronous data for your custom widget or visualization, use `useDashboardAsyncRender` so
export waits for it. Exports render on a GoodData service that loads the dashboard with your plugin, see
[Exports and scheduled deliveries](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins/index.md#exports-and-scheduled-deliveries). To trigger a
whole-dashboard export, detect export mode in a custom widget, or customize how a dashboard decomposes into
export slides, see [Customize dashboard export](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/customize-dashboard-export/index.md).

### [Customize the filter bar](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#customize-the-filter-bar)

Call the `filterBar()` method on the customization API to get the API through which you can customize how the Filter bar will be rendered on your dashboard.

To change the rendering mode of the Filter bar, call the `setRenderingMode` method with one of the following parameters:

-   `"default"` shows the Filter bar as usual. This is equal to when you do not call the `setRenderingMode` method at all.
-   `"hidden"` hides the Filter bar.

    This only hides the Filter bar from the user interface. The filters that are set still apply.

### [Customize attribute filters and date filter](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#customize-attribute-filters-and-date-filter)

Call the `filters()` method on the customization API to get the API through which you can customize how the attribute or date filters will be rendered on your dashboard. It has one method per filter kind: `attribute()` returns the attribute filters customization API and `date()` returns the date filters customization API.

-   To **render one or more attribute filters** using your custom components, the attribute filters customization API (`filters().attribute()`) provides the `withCustomProvider()` method [similar to visualization widgets](#customize-rendering-of-visualizations).

    When calling this method, you can register a function that will be called by the Dashboard component every time it
    wants to render an attribute filter. The function will receive a filter definition to be rendered. This function
    is expected to return a React component to use for rendering that attribute filter. If the function does not return
    a custom component, the Dashboard component falls back and uses the built-in component.

    Your function must determine that a particular attribute filter should be rendered using
    a custom component and then return the custom component. How your function determines this is up to you.

    To [customize the default AttributeFilter component](https://www.gooddata.ai/docs/gooddata-ui/latest/filters/attribute-filter/index.md#customizing-attributefilter-components) or implement your own, use [`useAttributeFilterController`](https://www.gooddata.ai/docs/gooddata-ui/latest/filters/use-attribute-filter-controller/index.md).

-   To **render a date filter** using your custom component, the date filters customization API (`filters().date()`) provides the `withCustomProvider()` method. It works in the same way as the attribute filter method.

## [Event handler API](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#event-handler-api)

The event handler API is an entry point to the event handling and subscription subsystem of the Dashboard component.
The Dashboard component is designed to be fully observable via events, and you can register handlers for any of these events.

> **Most events are beta or alpha:**
> Most of the events are `@beta` and some are `@alpha`, so they may change in a future version of GoodData.UI and
> break your plugin when you upgrade. Check the maturity annotation of each event in the API reference.

The [event handler API](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md) has several methods
that can be divided into the following groups:

-   [`addEventHandler()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingaddeventhandler) and [`removeEventHandler()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingremoveeventhandler)

    These are convenience methods that allow you to add or remove event handlers for a single type of the event or
    for all events. You can specify a particular event type such as `"GDC.DASH/EVT.INITIALIZED"`, and add a function to
    receive the event; or, you can specify an event type as `"*"`, and add a function to receive events of all types.

    For more information, see the API reference for the event handler API.

-   [`addCustomEventHandler()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingaddcustomeventhandler) and [`removeCustomEventHandler()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingremovecustomeventhandler)

    These methods allow you to customize the event handling setup. For each custom event handler,
    you can specify a function to evaluate whether the event should be dispatched to the handler function.

    For more information, see the API reference for the event handler API.

-   [`subscribeToStateChanges()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingsubscribetostatechanges) and [`unsubscribeFromStateChanges()`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardeventhandling/index.md#idashboardeventhandlingunsubscribefromstatechanges)

    In more advanced use cases, your non-React code may need to `select` data from the Dashboard component's state using
    selectors. To do that, your code needs the latest version of the Dashboard component's state. Using
    these methods, you can subscribe to receive the state updates.

    You need to subscribe to the state changes only if code outside of React components and outside
    of the event handlers needs to `select` from the state. When in React components, you can use the `useDashboardSelector`
    to `select` from the state.

## [Interacting with the Dashboard component APIs](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#interacting-with-the-dashboard-component-apis)

The Dashboard component APIs are described in the API reference. This section describes how code in your plugin can access those APIs.

The way to interact with the Dashboard component's APIs depends on from where you want to do so.

### [Using the APIs from React components](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#using-the-apis-from-react-components)

Your custom React components are mounted right into the dashboard's React tree from where they can use hooks
to interact with the Redux-based dashboard APIs:

-   The [`useDashboardSelector`](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/use-dashboard-selector/index.md) hook reads state through selectors.
-   The [`useDispatchDashboardCommand`](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard/index.md#commands) hook dispatches commands.

> **Many commands are beta or alpha:**
> Many commands are beta- or alpha-level APIs and may change in a future release of the Dashboard component.

### [Using the APIs from outside React components](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#using-the-apis-from-outside-react-components)

Your custom non-React code may need to read state through selectors or dispatch commands.
Because that code is completely out of any React tree, you need to access these APIs differently.

-   In the **event handler code**, you receive access points to selectors and commands as arguments. Event handler functions have the following arguments:

    -   `event` to handle
    -   The `dashboardDispatch` function to dispatch commands
    -   The `stateSelect` function to evaluate selectors

    `dashboardDispatch` works like the function returned by `useDashboardDispatch`, and `stateSelect` like
    `useDashboardSelector`.

-   In **all other code** that is not connected to the Dashboard component using React or using an event handler, you need to
    use the `subscribeToStateChanges()` method. The callback function that you pass to this method will be triggered
    every time the Dashboard component's state changes. Your function can store this somewhere and
    pass it as input to the selectors. To make the process of accessing the state easier, use the
    [utilities for accessing the state of the Dashboard component from outside](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard/index.md#access-the-state-of-the-dashboard-component-from-outside-the-component).

    Never modify the state to which you subscribe. The only supported way to change the state is to dispatch commands.

## [Props](https://www.gooddata.ai/docs/gooddata-ui/latest/dashboard-plugins/dashboard-plugins-api/#props)

| Prop | Type | Required | Description | Inherited from |
|------|------|----------|-------------|----------------|
| [`customizationFns`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizationprops/index.md#idashboardcustomizationpropscustomizationfns) | [`DashboardModelCustomizationFns`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.dashboardmodelcustomizationfns/index.md) | No | Specify customization functions. | — |
| [`insightMenuItemsProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizationprops/index.md#idashboardcustomizationpropsinsightmenuitemsprovider) | [`InsightMenuItemsProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.insightmenuitemsprovider/index.md) | No | _(Alpha)_ Provide custom provider to change items rendered in insight menus. | — |
| [`menuButtonConfig`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizationprops/index.md#idashboardcustomizationpropsmenubuttonconfig) | [`IMenuButtonConfiguration`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.imenubuttonconfiguration/index.md) | No | _(Alpha)_ Provide custom configuration for the Menu button. | — |
| [`richTextMenuItemsProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomizationprops/index.md#idashboardcustomizationpropsrichtextmenuitemsprovider) | [`RichTextMenuItemsProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.richtextmenuitemsprovider/index.md) | No | _(Alpha)_ Provide custom provider to change items rendered in rich text menus. | — |
| [`AlertingDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsalertingdialogcomponent) | [`CustomAlertingDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingdialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the alerting dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`AlertingDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsalertingdialogcontextdecoratorcomponent) | [`CustomAlertingDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingdialogcontextdecoratorcomponent/index.md) | No | _(Alpha)_ Specify component to decorate the data the alerting dialog reads. Rendered between the dialog's data context and its state model; see [`CustomAlertingDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingdialogcontextdecoratorcomponent/index.md) for the contract and an example. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`AlertingManagementDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsalertingmanagementdialogcomponent) | [`CustomAlertingManagementDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingmanagementdialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the alerting management dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`AlertingManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsalertingmanagementdialogcontextdecoratorcomponent) | [`CustomAlertingManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingmanagementdialogcontextdecoratorcomponent/index.md) | No | _(Alpha)_ Specify component to decorate the data the alerting management dialog reads. Rendered between the connector-provided management dialog context and the resolved management dialog component; see [`CustomAlertingManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customalertingmanagementdialogcontextdecoratorcomponent/index.md) for the contract and an example. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`AutomationsContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsautomationscontextdecoratorcomponent) | [`CustomAutomationsContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customautomationscontextdecoratorcomponent/index.md) | No | _(Alpha)_ Specify component to decorate the data the automation dialogs' shared context carries. Rendered once per dialog tree, directly inside each connector-provided automations context; see [`CustomAutomationsContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customautomationscontextdecoratorcomponent/index.md) for the contract and an example. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ButtonBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsbuttonbarcomponent) | [`CustomButtonBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.custombuttonbarcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the button bar. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardAttributeFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboardattributefiltercomponentprovider) | [`OptionalAttributeFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalattributefiltercomponentprovider/index.md) | No | _(Alpha)_ Specify custom component to use for rendering all attribute filters or a factory function to customize the component per different attribute filter. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardContentComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboardcontentcomponentprovider) | [`OptionalDashboardContentComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionaldashboardcontentcomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain custom component to use for extend rendering of dashboard content. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardDateFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboarddatefiltercomponentprovider) | [`OptionalDateFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionaldatefiltercomponentprovider/index.md) | No | _(Alpha)_ Specify component to use for rendering the date filters. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardFilterGroupComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboardfiltergroupcomponentprovider) | [`OptionalFilterGroupComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalfiltergroupcomponentprovider/index.md) | No | _(Alpha)_ Specify custom component to use for rendering all filter groups or a factory function to customize the component per different filter group. - If not provided, the default implementation DefaultDashboardFilterGroup will be used. - If factory function is provided and it returns undefined, then the default implementation DefaultDashboardFilterGroup. This is useful if you want to customize just one particular filter group and keep all other filter groups the same. - If you want to customize each filter in a filter group, use this provider and customize DefaultDashboardFilterGroup in it. It accepts some customization props fro deeper component. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardLayoutComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboardlayoutcomponentprovider) | [`OptionalDashboardLayoutComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionaldashboardlayoutcomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering a dashboard layout (nested). | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DashboardMeasureValueFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdashboardmeasurevaluefiltercomponentprovider) | [`OptionalMeasureValueFilterComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalmeasurevaluefiltercomponentprovider/index.md) | No | _(Alpha)_ Specify component to use for rendering the measure value filters. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`DrillDialogExportDropdownComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsdrilldialogexportdropdowncomponentprovider) | [`OptionalDrillDialogExportDropdownComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionaldrilldialogexportdropdowncomponentprovider/index.md) | No | _(Alpha)_ Specify the component rendered as drill dialog export dropdown. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ErrorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropserrorcomponent) | `ComponentType<`[`IErrorProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui/sdk-ui.ierrorprops/index.md)`>` | No | _(Alpha)_ Component to render if embedding fails. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`FilterBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsfilterbarcomponent) | [`CustomFilterBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customfilterbarcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the filter bar. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`InsightBodyComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsinsightbodycomponentprovider) | [`OptionalInsightBodyComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalinsightbodycomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain custom component to use for rendering an insight body (i.e. the insight itself) in the DefaultDashboardInsight. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`InsightComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsinsightcomponentprovider) | [`OptionalInsightComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalinsightcomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering an insight. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`InsightMenuButtonComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsinsightmenubuttoncomponentprovider) | [`OptionalInsightMenuButtonComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalinsightmenubuttoncomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain custom component to use for rendering an insight menu button. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`InsightMenuComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsinsightmenucomponentprovider) | [`OptionalInsightMenuComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalinsightmenucomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain custom component to use for rendering an insight menu. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`LayoutComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropslayoutcomponent) | [`CustomDashboardLayoutComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customdashboardlayoutcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the layout. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`LoadingComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsloadingcomponent) | `ComponentType<`[`ILoadingProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui/sdk-ui.iloadingprops/index.md)`>` | No | _(Alpha)_ Component to render while the dashboard or a widget is loading. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`MenuButtonComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsmenubuttoncomponent) | [`CustomMenuButtonComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.custommenubuttoncomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the menu button. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`RestrictedFiltersPlaceholderComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsrestrictedfiltersplaceholdercomponentprovider) | [`OptionalRestrictedFiltersPlaceholderComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalrestrictedfiltersplaceholdercomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain a custom component reporting the filters the current user is not allowed to see. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`RestrictedPlaceholderComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsrestrictedplaceholdercomponentprovider) | [`OptionalRestrictedPlaceholderComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalrestrictedplaceholdercomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain a custom component standing in for an insight widget the current user is not allowed to see. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`RichTextComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsrichtextcomponentprovider) | [`OptionalRichTextComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalrichtextcomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering a rich text. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`RichTextMenuComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsrichtextmenucomponentprovider) | [`OptionalRichTextMenuComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalrichtextmenucomponentprovider/index.md) | No | _(Alpha)_ Specify function to obtain custom component to use for rendering an rich text menu. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`SaveAsDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropssaveasdialogcomponent) | [`CustomSaveAsDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customsaveasdialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the save as dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ScheduledEmailDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsscheduledemaildialogcomponent) | [`CustomScheduledEmailDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemaildialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the scheduled email dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ScheduledEmailDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsscheduledemaildialogcontextdecoratorcomponent) | [`CustomScheduledEmailDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemaildialogcontextdecoratorcomponent/index.md) | No | _(Alpha)_ Specify component to decorate the data the scheduled email dialog reads. Rendered between the dialog's data context and its state model; see [`CustomScheduledEmailDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemaildialogcontextdecoratorcomponent/index.md) for the contract and an example. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ScheduledEmailManagementDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsscheduledemailmanagementdialogcomponent) | [`CustomScheduledEmailManagementDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemailmanagementdialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the scheduled email management dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ScheduledEmailManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsscheduledemailmanagementdialogcontextdecoratorcomponent) | [`CustomScheduledEmailManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemailmanagementdialogcontextdecoratorcomponent/index.md) | No | _(Alpha)_ Specify component to decorate the data the scheduled email management dialog reads. Rendered between the connector-provided management dialog context and the resolved management dialog component; see [`CustomScheduledEmailManagementDialogContextDecoratorComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customscheduledemailmanagementdialogcontextdecoratorcomponent/index.md) for the contract and an example. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ShareDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropssharedialogcomponent) | [`CustomShareDialogComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customsharedialogcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the share dialog. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`ShowAsTableButtonComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsshowastablebuttoncomponentprovider) | [`OptionalShowAsTableButtonComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalshowastablebuttoncomponentprovider/index.md) | No | _(Alpha)_ Specify the component rendered as show as table button. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`SidebarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropssidebarcomponent) | [`CustomSidebarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customsidebarcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the sidebar. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`TitleComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropstitlecomponent) | [`CustomTitleComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customtitlecomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the title. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`TopBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropstopbarcomponent) | [`CustomTopBarComponent`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.customtopbarcomponent/index.md) | No | _(Alpha)_ Specify component to use for rendering the top bar. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`VisualizationSwitcherComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsvisualizationswitchercomponentprovider) | [`OptionalVisualizationSwitcherComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalvisualizationswitchercomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering a visualization switcher. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`VisualizationSwitcherToolbarComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropsvisualizationswitchertoolbarcomponentprovider) | [`OptionalVisualizationSwitcherToolbarComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalvisualizationswitchertoolbarcomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering a visualization switcher toolbar. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
| [`WidgetComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md#idashboardcustomcomponentpropswidgetcomponentprovider) | [`OptionalWidgetComponentProvider`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.optionalwidgetcomponentprovider/index.md) | No | Specify function to obtain custom component to use for rendering a widget. | [`IDashboardCustomComponentProps`](https://www.gooddata.ai/docs/gooddata-ui/latest/api-reference/sdk-ui-dashboard/sdk-ui-dashboard.idashboardcustomcomponentprops/index.md) |
