Skip to content

Commit 8d4b095

Browse files
nreesekibanamachineelasticmachineolapawlus
authored
[Embeddable] document embeddable transform registry (elastic#235673)
Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Co-authored-by: Elastic Machine <elasticmachine@users.noreply.github.com> Co-authored-by: Ola Pawlus <98127445+olapawlus@users.noreply.github.com>
1 parent 848cbce commit 8d4b095

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

src/platform/plugins/shared/embeddable/common/types.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,18 @@
1010
import type { Reference } from '@kbn/content-management-utils';
1111

1212
export type EmbeddableTransforms<
13-
StoredState extends object = object,
14-
State extends object = object
13+
StoredEmbeddableState extends object = object,
14+
EmbeddableState extends object = object
1515
> = {
16-
transformOut?: (state: StoredState, references?: Reference[]) => State;
17-
transformIn?: (state: State) => {
18-
state: StoredState;
16+
/**
17+
* Converts StoredEmbeddableState and injects references into EmbeddableState
18+
*/
19+
transformOut?: (storedState: StoredEmbeddableState, references?: Reference[]) => EmbeddableState;
20+
/**
21+
* Converts EmbeddableState into StoredEmbeddableState and extracts references
22+
*/
23+
transformIn?: (state: EmbeddableState) => {
24+
state: StoredEmbeddableState;
1925
references?: Reference[];
2026
};
2127
};

src/platform/plugins/shared/embeddable/public/types.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ export interface EmbeddableSetup {
7070
*/
7171
registerReactEmbeddableFactory: typeof registerReactEmbeddableFactory;
7272

73+
/**
74+
* Use registerTransforms to register transforms for an embeddable type.
75+
* Public transforms registry uses transformOut to convert StoredEmbeddableState from URL into EmbeddableState.
76+
* transformIn is not used.
77+
*/
7378
registerTransforms: (
7479
type: string,
7580
getTransforms: () => Promise<EmbeddableTransforms<any, any> | undefined>

src/platform/plugins/shared/embeddable/server/plugin.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ import type { EnhancementRegistryDefinition } from '../common/enhancements/types
3030

3131
export interface EmbeddableSetup extends PersistableStateService<EmbeddableStateWithType> {
3232
registerEmbeddableFactory: (factory: EmbeddableRegistryDefinition) => void;
33+
/**
34+
* Use registerTransforms to register transforms for an embeddable type.
35+
* Transforms decouple REST API state from stored state,
36+
* allowing embeddables to have one shape for REST APIs and another for storage.
37+
* Embeddable containers, such as dashboard, use transforms to convert EmbeddableState into StoreEmbeddableState and vice versa.
38+
* On read, transformOut is used to convert StoredEmbeddableState and inject references into EmbeddableState.
39+
* On write, transformIn is used to extract references and convert EmbeddableState into StoredEmbeddableState.
40+
*/
3341
registerTransforms: (type: string, transforms: EmbeddableTransforms<any, any>) => void;
3442
registerEnhancement: (enhancement: EnhancementRegistryDefinition) => void;
3543
getAllMigrations: () => MigrateFunctionsObject;

0 commit comments

Comments
 (0)