From f037cd9a355482eaa817d275a8ca892310d7d948 Mon Sep 17 00:00:00 2001 From: Mitch Lillie Date: Thu, 26 Sep 2024 14:26:03 -0700 Subject: [PATCH] Add generic picker API --- .../src/surfaces/admin/api/picker/picker.ts | 36 +++++++++++++++++++ .../surfaces/admin/api/standard/standard.ts | 6 ++++ 2 files changed, 42 insertions(+) create mode 100644 packages/ui-extensions/src/surfaces/admin/api/picker/picker.ts diff --git a/packages/ui-extensions/src/surfaces/admin/api/picker/picker.ts b/packages/ui-extensions/src/surfaces/admin/api/picker/picker.ts new file mode 100644 index 000000000..84a38cd36 --- /dev/null +++ b/packages/ui-extensions/src/surfaces/admin/api/picker/picker.ts @@ -0,0 +1,36 @@ +import {Tone} from "../../components/shared"; + +interface Picker { + update: (options: PickerOptions) => Promise; + selectedItems: Item[]; +} + +interface PickerOptions { + heading?: string; + description?: string; + multiple?: boolean | number; + loading?: boolean; + items: Item[]; + onSelect?(event: any): void; + onCancel?(): void; +} + +interface Item { + thumbnail?: {url: string}; + heading?: string; + subheading?: string; + action?: { + content: string; + tone?: Tone; + } + tags?: { + content: string; + }[]; + data?: [string] | [string, string] | [string, string, string]; + items?: NestedItem[]; +} + +interface NestedItem extends Pick { +} + +export type PickerApi = (options: PickerOptions) => Promise; \ No newline at end of file diff --git a/packages/ui-extensions/src/surfaces/admin/api/standard/standard.ts b/packages/ui-extensions/src/surfaces/admin/api/standard/standard.ts index 7fbbf0b7e..7a1287c2f 100644 --- a/packages/ui-extensions/src/surfaces/admin/api/standard/standard.ts +++ b/packages/ui-extensions/src/surfaces/admin/api/standard/standard.ts @@ -1,6 +1,7 @@ import type {I18n} from '../../../../api'; import {ApiVersion} from '../../../../shared'; import type {ExtensionTarget as AnyExtensionTarget} from '../../extension-targets'; +import {PickerApi} from '../picker/picker'; export interface Intents { /** @@ -49,4 +50,9 @@ export interface StandardApi { query: string, options?: {variables?: Variables; version?: Omit}, ) => Promise<{data?: Data; errors?: GraphQLError[]}>; + + /** + * Renders the [Picker](/docs/api/app-bridge-library/apis/picker), allowing users to select a resource for the extension to use as part of its flow. + */ + picker: PickerApi; }