| 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 |
2x
2x
2x
2x
2x
2x
2x
2x
2x
| import {
IBasicComponentSetup,
IComponentConstructor,
IComponentConstructorWithModalBox,
IComponentConstructorWithResult,
IComponentConstructorWithResultAndModalBox,
ISearchInterfaceConstructor,
ISearchInterfaceSetup,
IBasicComponentSetupWithModalBox
} from "./ComponentsSetup";
import {
MockEnvironmentBuilder,
IMockEnvironment
} from "./MockEnvironmentBuilder";
import {
BaseComponent,
ModalBox,
IComponentBindings,
Component,
IQueryResult,
SearchInterface,
$$,
ISearchInterfaceOptions,
OS_NAME
} from "coveo-search-ui";
import * as Simulate from "../Simulate";
export type EnvironmentBuilderModifier = (
env: MockEnvironmentBuilder
) => MockEnvironmentBuilder;
export interface IAdvancedComponentConstructor<T> {
new (
element: HTMLElement,
options: any,
bindings: IComponentBindings,
result: IQueryResult,
os: OS_NAME
): T;
}
export class AdvancedComponentSetupOptions {
constructor(
public element: HTMLElement = $$("div").el,
public cmpOptions: any = {},
public modifyBuilder: EnvironmentBuilderModifier = (
env: MockEnvironmentBuilder
) => env
) {}
public merge(toMerge: AdvancedComponentSetupOptions): this {
if (toMerge) {
this.element = toMerge.element ? toMerge.element : this.element;
this.cmpOptions = toMerge.cmpOptions
? toMerge.cmpOptions
: this.cmpOptions;
this.modifyBuilder = toMerge.modifyBuilder
? toMerge.modifyBuilder
: this.modifyBuilder;
}
return this;
}
}
export function advancedComponentSetup<T extends Component>(
klass: IComponentConstructor<T>,
options?: AdvancedComponentSetupOptions
): IBasicComponentSetup<T> {
const baseOptions = new AdvancedComponentSetupOptions();
const optsMerged = baseOptions.merge(options);
let envBuilder = new MockEnvironmentBuilder().withElement(optsMerged.element);
envBuilder = optsMerged.modifyBuilder(envBuilder);
return {
env: envBuilder.build(),
cmp: <T>new klass(
envBuilder.getBindings().element,
optsMerged.cmpOptions,
envBuilder.getBindings()
)
};
}
export function advancedComponentSetupWithModalBox<T extends Component>(
klass: IComponentConstructorWithModalBox<T>,
options?: AdvancedComponentSetupOptions
): IBasicComponentSetupWithModalBox<T> {
const baseOptions = new AdvancedComponentSetupOptions();
const optsMerged = baseOptions.merge(options);
const modalBox = Simulate.modalBoxModule();
let envBuilder = new MockEnvironmentBuilder().withElement(optsMerged.element);
envBuilder = optsMerged.modifyBuilder(envBuilder);
return {
env: envBuilder.build(),
modalBox: modalBox,
cmp: <T>new klass(
envBuilder.getBindings().element,
optsMerged.cmpOptions,
envBuilder.getBindings(),
modalBox
)
};
}
export function advancedResultComponentSetup<T extends Component>(
klass: IAdvancedComponentConstructor<T>,
result: IQueryResult,
options?: AdvancedComponentSetupOptions
): IBasicComponentSetup<T> {
const baseOptions = new AdvancedComponentSetupOptions();
const optsMerged = baseOptions.merge(options);
let envBuilder = new MockEnvironmentBuilder()
.withElement(optsMerged.element)
.withResult(result);
envBuilder = optsMerged.modifyBuilder(envBuilder);
return {
env: envBuilder.build(),
cmp: <T>new klass(
envBuilder.getBindings().element,
optsMerged.cmpOptions,
envBuilder.getBindings(),
envBuilder.result,
envBuilder.os
)
};
}
|