/
ExperimentController.ts
104 lines (95 loc) · 3.81 KB
/
ExperimentController.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import { EditorAPI, Id } from '../types/CommonTypes';
import { getEditorResponseData } from '../utils/EditorResponseData';
import { ImageSourceTypeEnum, ImageFrameVariableSource } from '../types/FrameTypes';
import { TextType } from '../types/TextTypes';
/**
* The ExperimentController contains all SDK functions that are considered for addition,
* or functions we want to keep open for changing definitions. This is a sneak peak
* into future versions of the SDK. Never build production code relying on functions in
* this controller.
*/
export class ExperimentController {
/**
* @ignore
*/
#editorAPI: EditorAPI;
/**
* @ignore
*/
constructor(editorAPI: EditorAPI) {
this.#editorAPI = editorAPI;
}
/**
* This method will assign an image from a variable to the correct ImageFrame
* @param imageFrameId the id of the imageFrame where an image needs to be assigned to
* @param variableId the id of the variable which contains the image
* @returns
*/
insertImageVariableToFrame = async (imageFrameId: Id, variableId: Id) => {
const res = await this.#editorAPI;
const src: ImageFrameVariableSource = { id: variableId, type: ImageSourceTypeEnum.variable };
return res
.setImageSource(imageFrameId, JSON.stringify(src))
.then((result) => getEditorResponseData<null>(result));
};
/**
* This method will insert a text variable in the selected frame. Calling this method
* requires that the selected frame is in text editing mode.
* @param id the id of the variable to be inserted.
* @returns
*/
insertTextVariable = async (id: Id) => {
const res = await this.#editorAPI;
return res.insertTextVariable(id).then((result) => getEditorResponseData<null>(result));
};
/**
* This method will enter text editing mode on the provided frame.
* @param id the id frame to enter text edit mode on.
* @returns
*/
enterTextEditMode = async (id: Id) => {
const res = await this.#editorAPI;
return res.enterTextEditMode(id).then((result) => getEditorResponseData<null>(result));
};
/**
* This method will exit text editing mode.
* @returns
*/
exitTextEditMode = async () => {
const res = await this.#editorAPI;
return res.exitTextEditMode().then((result) => getEditorResponseData<null>(result));
};
/**
* This method gets the text content of a text frame.
* The variables contained in the text will return their values only if you
* are in text editing mode.
* @param frameId The ID of a text frame
* @param textType The type of the text
* @returns the text content
*/
getText = async (frameId: string, textType: TextType) => {
const res = await this.#editorAPI;
return res.getTextByFrameId(frameId, textType).then((result) => getEditorResponseData<string>(result));
};
/**
* This method sets the text content of a text frame
* @param frameId The ID of a text frame
* @param text The new text content
* @returns
*/
setText = async (frameId: string, text: string) => {
const res = await this.#editorAPI;
return res.setTextByFrameId(frameId, text).then((result) => getEditorResponseData<null>(result));
};
/**
* This method selects the text content of a text frame
* @param frameId The ID of a text frame
* @param startIndex The index where the selection starts
* @param length The length of selection from startIndex
* @returns
*/
selectText = async (frameId: string, startIndex: number, length: number) => {
const res = await this.#editorAPI;
return res.selectTextById(frameId, startIndex, length).then((result) => getEditorResponseData<null>(result));
};
}