@sprucelabs/heartwood-view-controllers 118.1.0 → 118.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema.d.ts +3 -0
  2. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema.js +38 -0
  3. package/build/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema.js +9 -0
  4. package/build/.spruce/schemas/schemas.types.d.ts +51 -0
  5. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema.d.ts +3 -0
  6. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema.js +36 -0
  7. package/build/esm/.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema.js +6 -0
  8. package/build/esm/.spruce/schemas/schemas.types.d.ts +51 -0
  9. package/build/esm/index.d.ts +3 -0
  10. package/build/esm/index.js +3 -0
  11. package/build/esm/schemas/v2021_02_11/webRtcPlayer.builder.d.ts +26 -0
  12. package/build/esm/schemas/v2021_02_11/webRtcPlayer.builder.js +26 -0
  13. package/build/esm/tests/utilities/webRtcAssert.d.ts +12 -1
  14. package/build/esm/tests/utilities/webRtcAssert.js +62 -1
  15. package/build/esm/tests/utilities/webRtcInteractor.d.ts +6 -0
  16. package/build/esm/tests/utilities/webRtcInteractor.js +20 -0
  17. package/build/esm/types/heartwood.types.d.ts +3 -8
  18. package/build/esm/viewControllers/webRtcStreaming/WebRtcPlayer.vc.d.ts +5 -1
  19. package/build/esm/viewControllers/webRtcStreaming/WebRtcPlayer.vc.js +20 -1
  20. package/build/esm/webRtcStreaming/WebRtcConnection.d.ts +1 -1
  21. package/build/index.d.ts +3 -0
  22. package/build/index.js +7 -2
  23. package/build/schemas/v2021_02_11/webRtcPlayer.builder.d.ts +26 -0
  24. package/build/schemas/v2021_02_11/webRtcPlayer.builder.js +26 -0
  25. package/build/tests/utilities/webRtcAssert.d.ts +12 -1
  26. package/build/tests/utilities/webRtcAssert.js +49 -0
  27. package/build/tests/utilities/webRtcInteractor.d.ts +6 -0
  28. package/build/tests/utilities/webRtcInteractor.js +15 -0
  29. package/build/types/heartwood.types.d.ts +3 -8
  30. package/build/viewControllers/webRtcStreaming/WebRtcPlayer.vc.d.ts +5 -1
  31. package/build/viewControllers/webRtcStreaming/WebRtcPlayer.vc.js +22 -1
  32. package/build/webRtcStreaming/WebRtcConnection.d.ts +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1,3 @@
1
+ import { SpruceSchemas } from '../../schemas.types';
2
+ declare const webRtcCropPointSchema: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema;
3
+ export default webRtcCropPointSchema;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const schema_1 = require("@sprucelabs/schema");
4
+ const webRtcCropPointSchema = {
5
+ id: 'webRtcCropPoint',
6
+ version: 'v2021_02_11',
7
+ namespace: 'HeartwoodViewControllers',
8
+ name: '',
9
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers',
10
+ fields: {
11
+ /** . */
12
+ 'xPercent': {
13
+ type: 'number',
14
+ isRequired: true,
15
+ options: undefined
16
+ },
17
+ /** . */
18
+ 'yPercent': {
19
+ type: 'number',
20
+ isRequired: true,
21
+ options: undefined
22
+ },
23
+ /** . */
24
+ 'widthPercent': {
25
+ type: 'number',
26
+ isRequired: true,
27
+ options: undefined
28
+ },
29
+ /** . */
30
+ 'heightPercent': {
31
+ type: 'number',
32
+ isRequired: true,
33
+ options: undefined
34
+ },
35
+ }
36
+ };
37
+ schema_1.SchemaRegistry.getInstance().trackSchema(webRtcCropPointSchema);
38
+ exports.default = webRtcCropPointSchema;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const schema_1 = require("@sprucelabs/schema");
7
+ const webRtcCropPoint_schema_1 = __importDefault(require("./webRtcCropPoint.schema"));
4
8
  const webRtcPlayerSchema = {
5
9
  id: 'webRtcPlayer',
6
10
  version: 'v2021_02_11',
@@ -29,6 +33,11 @@ const webRtcPlayerSchema = {
29
33
  options: { valueType: `HeartwoodTypes.WebRtcPlayerCropHandler`, }
30
34
  },
31
35
  /** . */
36
+ 'crop': {
37
+ type: 'schema',
38
+ options: { schema: webRtcCropPoint_schema_1.default, }
39
+ },
40
+ /** . */
32
41
  'connection': {
33
42
  type: 'raw',
34
43
  options: { valueType: `HeartwoodTypes.WebRtcConnection`, }
@@ -704,12 +704,56 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
704
704
  interface InputEntity extends SchemaEntity<SpruceSchemas.HeartwoodViewControllers.v2021_02_11.InputSchema> {
705
705
  }
706
706
  }
707
+ namespace SpruceSchemas.HeartwoodViewControllers.v2021_02_11 {
708
+ interface WebRtcCropPoint {
709
+ 'xPercent': number;
710
+ 'yPercent': number;
711
+ 'widthPercent': number;
712
+ 'heightPercent': number;
713
+ }
714
+ interface WebRtcCropPointSchema extends SpruceSchema.Schema {
715
+ id: 'webRtcCropPoint';
716
+ version: 'v2021_02_11';
717
+ namespace: 'HeartwoodViewControllers';
718
+ name: '';
719
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers';
720
+ fields: {
721
+ /** . */
722
+ 'xPercent': {
723
+ type: 'number';
724
+ isRequired: true;
725
+ options: undefined;
726
+ };
727
+ /** . */
728
+ 'yPercent': {
729
+ type: 'number';
730
+ isRequired: true;
731
+ options: undefined;
732
+ };
733
+ /** . */
734
+ 'widthPercent': {
735
+ type: 'number';
736
+ isRequired: true;
737
+ options: undefined;
738
+ };
739
+ /** . */
740
+ 'heightPercent': {
741
+ type: 'number';
742
+ isRequired: true;
743
+ options: undefined;
744
+ };
745
+ };
746
+ }
747
+ interface WebRtcCropPointEntity extends SchemaEntity<SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema> {
748
+ }
749
+ }
707
750
  namespace SpruceSchemas.HeartwoodViewControllers.v2021_02_11 {
708
751
  interface WebRtcPlayer {
709
752
  'id'?: string | undefined | null;
710
753
  'controller'?: (HeartwoodTypes.ViewController<HeartwoodTypes.WebRtcPlayer>) | undefined | null;
711
754
  'shouldAllowCropping'?: boolean | undefined | null;
712
755
  'onCrop'?: (HeartwoodTypes.WebRtcPlayerCropHandler) | undefined | null;
756
+ 'crop'?: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint | undefined | null;
713
757
  'connection'?: (HeartwoodTypes.WebRtcConnection) | undefined | null;
714
758
  'streamer'?: (HeartwoodTypes.WebRtcStreamer) | undefined | null;
715
759
  }
@@ -745,6 +789,13 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
745
789
  };
746
790
  };
747
791
  /** . */
792
+ 'crop': {
793
+ type: 'schema';
794
+ options: {
795
+ schema: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema;
796
+ };
797
+ };
798
+ /** . */
748
799
  'connection': {
749
800
  type: 'raw';
750
801
  options: {
@@ -0,0 +1,3 @@
1
+ import { SpruceSchemas } from '../../schemas.types';
2
+ declare const webRtcCropPointSchema: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema;
3
+ export default webRtcCropPointSchema;
@@ -0,0 +1,36 @@
1
+ import { SchemaRegistry } from '@sprucelabs/schema';
2
+ const webRtcCropPointSchema = {
3
+ id: 'webRtcCropPoint',
4
+ version: 'v2021_02_11',
5
+ namespace: 'HeartwoodViewControllers',
6
+ name: '',
7
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers',
8
+ fields: {
9
+ /** . */
10
+ 'xPercent': {
11
+ type: 'number',
12
+ isRequired: true,
13
+ options: undefined
14
+ },
15
+ /** . */
16
+ 'yPercent': {
17
+ type: 'number',
18
+ isRequired: true,
19
+ options: undefined
20
+ },
21
+ /** . */
22
+ 'widthPercent': {
23
+ type: 'number',
24
+ isRequired: true,
25
+ options: undefined
26
+ },
27
+ /** . */
28
+ 'heightPercent': {
29
+ type: 'number',
30
+ isRequired: true,
31
+ options: undefined
32
+ },
33
+ }
34
+ };
35
+ SchemaRegistry.getInstance().trackSchema(webRtcCropPointSchema);
36
+ export default webRtcCropPointSchema;
@@ -1,4 +1,5 @@
1
1
  import { SchemaRegistry } from '@sprucelabs/schema';
2
+ import webRtcCropPointSchema_v2021_02_11 from './webRtcCropPoint.schema.js';
2
3
  const webRtcPlayerSchema = {
3
4
  id: 'webRtcPlayer',
4
5
  version: 'v2021_02_11',
@@ -27,6 +28,11 @@ const webRtcPlayerSchema = {
27
28
  options: { valueType: `HeartwoodTypes.WebRtcPlayerCropHandler`, }
28
29
  },
29
30
  /** . */
31
+ 'crop': {
32
+ type: 'schema',
33
+ options: { schema: webRtcCropPointSchema_v2021_02_11, }
34
+ },
35
+ /** . */
30
36
  'connection': {
31
37
  type: 'raw',
32
38
  options: { valueType: `HeartwoodTypes.WebRtcConnection`, }
@@ -704,12 +704,56 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
704
704
  interface InputEntity extends SchemaEntity<SpruceSchemas.HeartwoodViewControllers.v2021_02_11.InputSchema> {
705
705
  }
706
706
  }
707
+ namespace SpruceSchemas.HeartwoodViewControllers.v2021_02_11 {
708
+ interface WebRtcCropPoint {
709
+ 'xPercent': number;
710
+ 'yPercent': number;
711
+ 'widthPercent': number;
712
+ 'heightPercent': number;
713
+ }
714
+ interface WebRtcCropPointSchema extends SpruceSchema.Schema {
715
+ id: 'webRtcCropPoint';
716
+ version: 'v2021_02_11';
717
+ namespace: 'HeartwoodViewControllers';
718
+ name: '';
719
+ moduleToImportFromWhenRemote: '@sprucelabs/heartwood-view-controllers';
720
+ fields: {
721
+ /** . */
722
+ 'xPercent': {
723
+ type: 'number';
724
+ isRequired: true;
725
+ options: undefined;
726
+ };
727
+ /** . */
728
+ 'yPercent': {
729
+ type: 'number';
730
+ isRequired: true;
731
+ options: undefined;
732
+ };
733
+ /** . */
734
+ 'widthPercent': {
735
+ type: 'number';
736
+ isRequired: true;
737
+ options: undefined;
738
+ };
739
+ /** . */
740
+ 'heightPercent': {
741
+ type: 'number';
742
+ isRequired: true;
743
+ options: undefined;
744
+ };
745
+ };
746
+ }
747
+ interface WebRtcCropPointEntity extends SchemaEntity<SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema> {
748
+ }
749
+ }
707
750
  namespace SpruceSchemas.HeartwoodViewControllers.v2021_02_11 {
708
751
  interface WebRtcPlayer {
709
752
  'id'?: string | undefined | null;
710
753
  'controller'?: (HeartwoodTypes.ViewController<HeartwoodTypes.WebRtcPlayer>) | undefined | null;
711
754
  'shouldAllowCropping'?: boolean | undefined | null;
712
755
  'onCrop'?: (HeartwoodTypes.WebRtcPlayerCropHandler) | undefined | null;
756
+ 'crop'?: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint | undefined | null;
713
757
  'connection'?: (HeartwoodTypes.WebRtcConnection) | undefined | null;
714
758
  'streamer'?: (HeartwoodTypes.WebRtcStreamer) | undefined | null;
715
759
  }
@@ -745,6 +789,13 @@ declare module '@sprucelabs/spruce-core-schemas/build/.spruce/schemas/core.schem
745
789
  };
746
790
  };
747
791
  /** . */
792
+ 'crop': {
793
+ type: 'schema';
794
+ options: {
795
+ schema: SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPointSchema;
796
+ };
797
+ };
798
+ /** . */
748
799
  'connection': {
749
800
  type: 'raw';
750
801
  options: {
@@ -152,6 +152,7 @@ export { default as polarAreaSchema } from './.spruce/schemas/heartwoodViewContr
152
152
  export { default as polarAreaDataItemSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/polarAreaDataItem.schema';
153
153
  export { default as pagerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/pager.schema';
154
154
  export { default as webRtcPlayerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema';
155
+ export { default as webRtcCropPointSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema';
155
156
  export { default as ViewControllerExporter } from './viewControllers/ViewControllerExporter';
156
157
  export { default as ViewControllerImporter } from './viewControllers/ViewControllerImporter';
157
158
  export { default as ViewControllerFactory } from './viewControllers/ViewControllerFactory';
@@ -175,6 +176,8 @@ export { default as listAssert } from './tests/utilities/listAssert';
175
176
  export { default as autocompleteAssert } from './tests/utilities/autocompleteAssert';
176
177
  export { default as formAssert } from './tests/utilities/formAssert';
177
178
  export { default as webRtcAssert } from './tests/utilities/webRtcAssert';
179
+ export * from './tests/utilities/webRtcAssert';
180
+ export { default as webRtcInteractor } from './tests/utilities/webRtcInteractor';
178
181
  export { default as autocompleteInteractor } from './tests/utilities/autocompleteInteractor';
179
182
  export { normalizeScopeFromVc } from './tests/utilities/vcAssert';
180
183
  export { default as interactor } from './tests/utilities/interactor';
@@ -151,6 +151,7 @@ export { default as polarAreaSchema } from './.spruce/schemas/heartwoodViewContr
151
151
  export { default as polarAreaDataItemSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/polarAreaDataItem.schema.js';
152
152
  export { default as pagerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/pager.schema.js';
153
153
  export { default as webRtcPlayerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema.js';
154
+ export { default as webRtcCropPointSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema.js';
154
155
  export { default as ViewControllerExporter } from './viewControllers/ViewControllerExporter.js';
155
156
  export { default as ViewControllerImporter } from './viewControllers/ViewControllerImporter.js';
156
157
  export { default as ViewControllerFactory } from './viewControllers/ViewControllerFactory.js';
@@ -174,6 +175,8 @@ export { default as listAssert } from './tests/utilities/listAssert.js';
174
175
  export { default as autocompleteAssert } from './tests/utilities/autocompleteAssert.js';
175
176
  export { default as formAssert } from './tests/utilities/formAssert.js';
176
177
  export { default as webRtcAssert } from './tests/utilities/webRtcAssert.js';
178
+ export * from './tests/utilities/webRtcAssert.js';
179
+ export { default as webRtcInteractor } from './tests/utilities/webRtcInteractor.js';
177
180
  export { default as autocompleteInteractor } from './tests/utilities/autocompleteInteractor.js';
178
181
  export { normalizeScopeFromVc } from './tests/utilities/vcAssert.js';
179
182
  export { default as interactor } from './tests/utilities/interactor.js';
@@ -19,6 +19,32 @@ declare const _default: {
19
19
  valueType: string;
20
20
  };
21
21
  };
22
+ crop: {
23
+ type: "schema";
24
+ options: {
25
+ schema: {
26
+ id: string;
27
+ fields: {
28
+ xPercent: {
29
+ type: "number";
30
+ isRequired: true;
31
+ };
32
+ yPercent: {
33
+ type: "number";
34
+ isRequired: true;
35
+ };
36
+ widthPercent: {
37
+ type: "number";
38
+ isRequired: true;
39
+ };
40
+ heightPercent: {
41
+ type: "number";
42
+ isRequired: true;
43
+ };
44
+ };
45
+ };
46
+ };
47
+ };
22
48
  connection: {
23
49
  type: "raw";
24
50
  options: {
@@ -20,6 +20,32 @@ export default buildSchema({
20
20
  valueType: 'HeartwoodTypes.WebRtcPlayerCropHandler',
21
21
  },
22
22
  },
23
+ crop: {
24
+ type: 'schema',
25
+ options: {
26
+ schema: buildSchema({
27
+ id: 'webRtcCropPoint',
28
+ fields: {
29
+ xPercent: {
30
+ type: 'number',
31
+ isRequired: true,
32
+ },
33
+ yPercent: {
34
+ type: 'number',
35
+ isRequired: true,
36
+ },
37
+ widthPercent: {
38
+ type: 'number',
39
+ isRequired: true,
40
+ },
41
+ heightPercent: {
42
+ type: 'number',
43
+ isRequired: true,
44
+ },
45
+ },
46
+ }),
47
+ },
48
+ },
23
49
  connection: {
24
50
  type: 'raw',
25
51
  options: {
@@ -1,6 +1,17 @@
1
- import { ViewController, Card } from '../../types/heartwood.types';
1
+ import { ViewController, Card, SimpleViewControllerFactory } from '../../types/heartwood.types';
2
2
  import WebRtcPlayerViewController from '../../viewControllers/webRtcStreaming/WebRtcPlayer.vc';
3
3
  declare const webRtcAssert: {
4
+ beforeEach: (views: SimpleViewControllerFactory) => void;
4
5
  cardRendersPlayer: (vc: ViewController<Card>, id?: string) => WebRtcPlayerViewController;
6
+ actionCreatesOffer: (vc: WebRtcPlayerViewController, action: () => void | Promise<void>, expectedOptions?: RTCOfferOptions) => Promise<void>;
7
+ answerSet: (vc: WebRtcPlayerViewController, answerSdp?: string) => Promise<void>;
5
8
  };
6
9
  export default webRtcAssert;
10
+ export declare class AssertingWebRtcPlayerViewController extends WebRtcPlayerViewController {
11
+ private onCreateOfferHandler?;
12
+ private passedAnswer?;
13
+ onCreateOffer(cb: (offerOptions: RTCOfferOptions) => void): void;
14
+ createOffer(offerOptions: RTCOfferOptions): Promise<string>;
15
+ setAnswer(answerSdp: string): Promise<void>;
16
+ assertAnswerWasSet(answerSdp?: string): void;
17
+ }
@@ -1,8 +1,21 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
1
10
  import { assertOptions } from '@sprucelabs/schema';
2
- import { assert } from '@sprucelabs/test-utils';
11
+ import { assert, generateId } from '@sprucelabs/test-utils';
3
12
  import renderUtil from '../../utilities/render.utility.js';
13
+ import WebRtcPlayerViewController from '../../viewControllers/webRtcStreaming/WebRtcPlayer.vc.js';
4
14
  import { pluckAllFromView } from './assertSupport.js';
5
15
  const webRtcAssert = {
16
+ beforeEach: (views) => {
17
+ views.setController('web-rtc-player', AssertingWebRtcPlayerViewController);
18
+ },
6
19
  cardRendersPlayer: (vc, id) => {
7
20
  assertOptions({ vc }, ['vc']);
8
21
  const model = renderUtil.render(vc);
@@ -18,5 +31,53 @@ const webRtcAssert = {
18
31
  }
19
32
  return players[0].controller;
20
33
  },
34
+ actionCreatesOffer: (vc, action, expectedOptions) => __awaiter(void 0, void 0, void 0, function* () {
35
+ assertOptions({ vc, action }, ['vc', 'action']);
36
+ const assertingVc = assertCalledBeforeEach(vc);
37
+ let wasHit = false;
38
+ let passedOptions;
39
+ assertingVc.onCreateOffer((options) => {
40
+ passedOptions = options;
41
+ wasHit = true;
42
+ });
43
+ yield action();
44
+ if (expectedOptions) {
45
+ assert.isEqualDeep(passedOptions, expectedOptions, `The options you passed to createOffer did not matching.`);
46
+ }
47
+ assert.isTrue(wasHit, `You did not create an offer. Try 'const offer = await this.plaperVc.createOffer()'`);
48
+ }),
49
+ answerSet: (vc, answerSdp) => __awaiter(void 0, void 0, void 0, function* () {
50
+ assertOptions({ vc }, ['vc']);
51
+ const assertingVc = assertCalledBeforeEach(vc);
52
+ assertingVc.assertAnswerWasSet(answerSdp);
53
+ }),
21
54
  };
22
55
  export default webRtcAssert;
56
+ export class AssertingWebRtcPlayerViewController extends WebRtcPlayerViewController {
57
+ onCreateOffer(cb) {
58
+ this.onCreateOfferHandler = cb;
59
+ }
60
+ createOffer(offerOptions) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ var _a;
63
+ (_a = this.onCreateOfferHandler) === null || _a === void 0 ? void 0 : _a.call(this, offerOptions);
64
+ return generateId();
65
+ });
66
+ }
67
+ setAnswer(answerSdp) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ this.passedAnswer = answerSdp;
70
+ });
71
+ }
72
+ assertAnswerWasSet(answerSdp) {
73
+ assert.isTruthy(this.passedAnswer, `You did not call setAnswer. Try 'await this.playerVc.setAnswer(offer)'`);
74
+ if (answerSdp) {
75
+ assert.isEqual(this.passedAnswer, answerSdp, `The answer you passed to 'await this.playerVc.setAnswer(...)' did not match expected.`);
76
+ }
77
+ }
78
+ }
79
+ function assertCalledBeforeEach(vc) {
80
+ assert.isInstanceOf(vc, AssertingWebRtcPlayerViewController, `You have to run webRtcAssert.beforeEach(this.views) in your beforeEach before you create any ViewControllers.`);
81
+ const assertingVc = vc;
82
+ return assertingVc;
83
+ }
@@ -0,0 +1,6 @@
1
+ import { WebRtcCropPoint } from '../../types/heartwood.types';
2
+ import WebRtcPlayerViewController from '../../viewControllers/webRtcStreaming/WebRtcPlayer.vc';
3
+ declare const webRtcInteractor: {
4
+ simulateCrop: (vc: WebRtcPlayerViewController, cropPoint?: WebRtcCropPoint) => Promise<void>;
5
+ };
6
+ export default webRtcInteractor;
@@ -0,0 +1,20 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { assertOptions } from '@sprucelabs/schema';
11
+ import renderUtil from '../../utilities/render.utility.js';
12
+ const webRtcInteractor = {
13
+ simulateCrop: (vc, cropPoint) => __awaiter(void 0, void 0, void 0, function* () {
14
+ var _a;
15
+ assertOptions({ vc }, ['vc']);
16
+ const model = renderUtil.render(vc);
17
+ yield ((_a = model.onCrop) === null || _a === void 0 ? void 0 : _a.call(model, cropPoint));
18
+ }),
19
+ };
20
+ export default webRtcInteractor;
@@ -216,7 +216,7 @@ export type Button = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Button;
216
216
  export type ToolBelt = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ToolBelt;
217
217
  export type Feed = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Feed;
218
218
  export type Layout = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Layout;
219
- export type SimpleViewControllerFactory = Pick<ViewControllerFactory, 'Controller'>;
219
+ export type SimpleViewControllerFactory = Pick<ViewControllerFactory, 'Controller' | 'setController'>;
220
220
  export type CalendarSelectedDate = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.CalendarSelectedDate;
221
221
  export type FormSection<S extends Schema> = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.FormSection<S>;
222
222
  export type Map = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Map;
@@ -258,13 +258,8 @@ export type TriggerRender = () => void;
258
258
  export type TriggerRenderHandler = () => void;
259
259
  export { WebRtcStreamer } from '../webRtcStreaming/WebRtcStreamer';
260
260
  export * from '../webRtcStreaming/WebRtcConnection';
261
- export interface Point {
262
- x: number;
263
- y: number;
264
- width: number;
265
- height: number;
266
- }
267
- export type WebRtcPlayerCropHandler = (point?: Point) => void;
261
+ export type WebRtcCropPoint = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint;
262
+ export type WebRtcPlayerCropHandler = (point?: WebRtcCropPoint) => void | Promise<void>;
268
263
  export interface ViewController<ViewModel extends Record<string, any>> {
269
264
  render(): ViewModel;
270
265
  setTriggerRenderHandler: (handler: TriggerRenderHandler) => void;
@@ -1,4 +1,4 @@
1
- import { ViewControllerOptions, WebRtcPlayer } from '../../types/heartwood.types';
1
+ import { ViewControllerOptions, WebRtcCropPoint, WebRtcPlayer } from '../../types/heartwood.types';
2
2
  import { WebRtcStreamer } from '../../webRtcStreaming/WebRtcStreamer';
3
3
  import AbstractViewController from '../Abstract.vc';
4
4
  export default class WebRtcPlayerViewController extends AbstractViewController<WebRtcPlayer> {
@@ -9,6 +9,10 @@ export default class WebRtcPlayerViewController extends AbstractViewController<W
9
9
  setStreamer(streamer: WebRtcStreamer): void;
10
10
  createOffer(offerOptions: RTCOfferOptions): Promise<string>;
11
11
  setAnswer(answerSdp: string): Promise<void>;
12
+ getCrop(): import("@sprucelabs/mercury-types").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint | null | undefined;
13
+ enableCropping(): void;
14
+ disableCropping(): void;
15
+ setCrop(point?: WebRtcCropPoint): void;
12
16
  render(): WebRtcPlayer;
13
17
  }
14
18
  export interface WebRtcPlayerOptions extends WebRtcPlayer {
@@ -42,8 +42,27 @@ class WebRtcPlayerViewController extends AbstractViewController {
42
42
  yield this.model.streamer.setAnswer(answerSdp);
43
43
  });
44
44
  }
45
+ getCrop() {
46
+ return this.model.crop;
47
+ }
48
+ enableCropping() {
49
+ this.model.shouldAllowCropping = true;
50
+ this.triggerRender();
51
+ }
52
+ disableCropping() {
53
+ this.model.shouldAllowCropping = false;
54
+ this.triggerRender();
55
+ }
56
+ setCrop(point) {
57
+ var _a, _b;
58
+ this.model.crop = point;
59
+ void ((_b = (_a = this.model).onCrop) === null || _b === void 0 ? void 0 : _b.call(_a, point));
60
+ this.triggerRender();
61
+ }
45
62
  render() {
46
- return this.model;
63
+ return Object.assign(Object.assign({}, this.model), { onCrop: (point) => {
64
+ this.setCrop(point);
65
+ } });
47
66
  }
48
67
  }
49
68
  WebRtcPlayerViewController.id = 'web-rtc-player-card';
@@ -1,7 +1,7 @@
1
1
  import MockRtcPeerConnection from '../tests/MockRtcPeerConnection';
2
2
  import { WebRtcStreamer } from './WebRtcStreamer';
3
3
  export default class WebRtcConnectionImpl implements WebRtcConnection {
4
- static Class: new () => WebRtcConnection;
4
+ static Class?: new () => WebRtcConnection;
5
5
  static get RTCPeerConnection(): new (config: RTCConfiguration) => RTCPeerConnection | MockRtcPeerConnection;
6
6
  static set RTCPeerConnection(value: new (config: RTCConfiguration) => RTCPeerConnection | MockRtcPeerConnection);
7
7
  private stateChangeListeners;
package/build/index.d.ts CHANGED
@@ -152,6 +152,7 @@ export { default as polarAreaSchema } from './.spruce/schemas/heartwoodViewContr
152
152
  export { default as polarAreaDataItemSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/polarAreaDataItem.schema';
153
153
  export { default as pagerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/pager.schema';
154
154
  export { default as webRtcPlayerSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema';
155
+ export { default as webRtcCropPointSchema } from './.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema';
155
156
  export { default as ViewControllerExporter } from './viewControllers/ViewControllerExporter';
156
157
  export { default as ViewControllerImporter } from './viewControllers/ViewControllerImporter';
157
158
  export { default as ViewControllerFactory } from './viewControllers/ViewControllerFactory';
@@ -175,6 +176,8 @@ export { default as listAssert } from './tests/utilities/listAssert';
175
176
  export { default as autocompleteAssert } from './tests/utilities/autocompleteAssert';
176
177
  export { default as formAssert } from './tests/utilities/formAssert';
177
178
  export { default as webRtcAssert } from './tests/utilities/webRtcAssert';
179
+ export * from './tests/utilities/webRtcAssert';
180
+ export { default as webRtcInteractor } from './tests/utilities/webRtcInteractor';
178
181
  export { default as autocompleteInteractor } from './tests/utilities/autocompleteInteractor';
179
182
  export { normalizeScopeFromVc } from './tests/utilities/vcAssert';
180
183
  export { default as interactor } from './tests/utilities/interactor';
package/build/index.js CHANGED
@@ -19,8 +19,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
20
  exports.WebRtcConnectionImpl = exports.MockRtcPeerConnection = exports.WebRtcStreamerImpl = exports.buildSkillView = exports.buildForm = exports.buildBigForm = exports.AuthenticatorImpl = exports.PolarAreaViewController = exports.SpyViewControllerExporter = exports.lockScreenAssert = exports.MockActiveRecordCard = exports.activeRecordCardAssert = exports.buildActiveRecordList = exports.buildActiveRecordCard = exports.AbstractInputViewController = exports.AutocompleteInputViewController = exports.AbstractCalendarEventViewController = exports.RatingsViewController = exports.ProgressViewController = exports.StatsViewController = exports.FeedViewController = exports.ActiveRecordListViewController = exports.ActiveRecordCardViewController = exports.TalkingSprucebotViewController = exports.ButtonBarViewController = exports.CalendarViewController = exports.SwipeCardViewControllerImpl = exports.SwipeViewControllerImpl = exports.WebRtcPlayerViewController = exports.PagerViewController = exports.ProgressNavigatorViewController = exports.CountdownTimerViewController = exports.FormBuilderCardViewControllerImpl = exports.LoginViewController = exports.LineGraphViewController = exports.BarChartViewController = exports.ToolBeltViewController = exports.FormViewControllerImpl = exports.ListCellViewController = exports.ListRowViewController = exports.ListViewController = exports.NavigationViewController = exports.LockScreenSkillViewController = exports.DialogViewController = exports.ConfirmViewController = exports.CardViewControllerImpl = exports.ButtonGroupViewController = exports.AbstractAppController = exports.AbstractViewController = exports.AbstractSkillViewController = void 0;
21
21
  exports.buttonBarButtonSchema = exports.buttonBarSchema = exports.toolBeltToolSchema = exports.toolBeltSchema = exports.calendarTimeSchema = exports.calendarPersonSchema = exports.calendarSchema = exports.themePropsSchema = exports.themeSchema = exports.cardFooterButtonSchema = exports.criticalErrorSchema = exports.sprucebotTypedMessageSentenceSchema = exports.sprucebotTypedMessageAvatarSchema = exports.selectInputChoiceSchema = exports.calendarEventColorOverrideSchema = exports.portalSchema = exports.listTextInputSchema = exports.listSelectInputSchema = exports.listCellButtonSchema = exports.dropdownButtonSchema = exports.bigFormSectionSchema = exports.textInputSchema = exports.phoneInputSchema = exports.inputSchema = exports.dropdownSchema = exports.sprucebotTypedMessageSchema = exports.talkingSprucebotSchema = exports.sprucebotAvatarSchema = exports.formBuilderImportExportObjectSchema = exports.listCellSchema = exports.listRowSchema = exports.listSchema = exports.layoutSchema = exports.cardSectionSchema = exports.cardHeaderSchema = exports.cardFooterSchema = exports.cardBodySchema = exports.cardSchema = exports.formSectionSchema = exports.formSchema = exports.textSchema = exports.lockScreenSchema = exports.dialogSchema = exports.buttonSchema = exports.lineIconSchema = exports.fancyIconSchema = exports.selectInputSchema = exports.skillViewSchema = exports.bigFormSchema = exports.calendarEventColorsSchema = void 0;
22
- exports.listAssert = exports.buttonAssert = exports.deviceAssert = exports.navigationAssert = exports.toolBeltAssert = exports.toastAssert = exports.vcPluginAssert = exports.vcDurationAssert = exports.pagerAssert = exports.vcAssert = exports.vcAssertUtil = exports.feedAssert = exports.feedInteractor = exports.normalizeFormSectionFieldNamesUtil = exports.ViewControllerError = exports.SpyDevice = exports.StubStorage = exports.ViewControllerFactory = exports.ViewControllerImporter = exports.ViewControllerExporter = exports.webRtcPlayerSchema = exports.pagerSchema = exports.polarAreaDataItemSchema = exports.polarAreaSchema = exports.inputButtonSchema = exports.mapPinSchema = exports.mapSchema = exports.latLngSchema = exports.formBuilderImportExportPageSchema = exports.autocompleteSuggestionSchema = exports.autocompleteInputSchema = exports.feedSchema = exports.calendarShiftSchema = exports.receiptTotalSchema = exports.receiptSectionSchema = exports.receiptLineItemSchema = exports.receiptHeaderSchema = exports.receiptSchema = exports.listDateInputSchema = exports.calendarSelectedDateSchema = exports.calendarEventSchema = exports.ratingsInputSchema = exports.listRatingsInputSchema = exports.ratingsSchema = exports.progressSchema = exports.statsStatSchema = exports.statsSchema = exports.toggleInputSchema = exports.listToggleInputSchema = exports.addressInputSchema = void 0;
23
- exports.navigationRouteSchema = exports.routerDestinationSchema = exports.navigationDropdownButtonSchema = exports.navigationButtonDropdownSchema = exports.chartDataSetSchema = exports.chartDataPointSchema = exports.lineGraphSchema = exports.barChartSchema = exports.progressDetailsSchema = exports.progressNavigatorStepSchema = exports.progressNavigatorSchema = exports.countdownTimerSchema = exports.permissionContractReferenceSchema = exports.navigationButtonSchema = exports.navigationSchema = exports.ToolBeltStateMachine = exports.removeUniversalViewOptions = exports.buildSkillViewLayout = exports.splitCardsIntoLayouts = exports.listUtil = exports.mapInteractor = exports.mapAssert = exports.renderUtil = exports.routerTestPatcher = exports.dialogTestPatcher = exports.confirmTestPatcher = exports.calendarSeeder = exports.interactionUtil = exports.chartAssert = exports.progressNavigatorAssert = exports.countdownTimerInteractor = exports.countdownTimerAssert = exports.calendarInteractor = exports.interactor = exports.normalizeScopeFromVc = exports.autocompleteInteractor = exports.webRtcAssert = exports.formAssert = exports.autocompleteAssert = void 0;
22
+ exports.buttonAssert = exports.deviceAssert = exports.navigationAssert = exports.toolBeltAssert = exports.toastAssert = exports.vcPluginAssert = exports.vcDurationAssert = exports.pagerAssert = exports.vcAssert = exports.vcAssertUtil = exports.feedAssert = exports.feedInteractor = exports.normalizeFormSectionFieldNamesUtil = exports.ViewControllerError = exports.SpyDevice = exports.StubStorage = exports.ViewControllerFactory = exports.ViewControllerImporter = exports.ViewControllerExporter = exports.webRtcCropPointSchema = exports.webRtcPlayerSchema = exports.pagerSchema = exports.polarAreaDataItemSchema = exports.polarAreaSchema = exports.inputButtonSchema = exports.mapPinSchema = exports.mapSchema = exports.latLngSchema = exports.formBuilderImportExportPageSchema = exports.autocompleteSuggestionSchema = exports.autocompleteInputSchema = exports.feedSchema = exports.calendarShiftSchema = exports.receiptTotalSchema = exports.receiptSectionSchema = exports.receiptLineItemSchema = exports.receiptHeaderSchema = exports.receiptSchema = exports.listDateInputSchema = exports.calendarSelectedDateSchema = exports.calendarEventSchema = exports.ratingsInputSchema = exports.listRatingsInputSchema = exports.ratingsSchema = exports.progressSchema = exports.statsStatSchema = exports.statsSchema = exports.toggleInputSchema = exports.listToggleInputSchema = exports.addressInputSchema = void 0;
23
+ exports.navigationRouteSchema = exports.routerDestinationSchema = exports.navigationDropdownButtonSchema = exports.navigationButtonDropdownSchema = exports.chartDataSetSchema = exports.chartDataPointSchema = exports.lineGraphSchema = exports.barChartSchema = exports.progressDetailsSchema = exports.progressNavigatorStepSchema = exports.progressNavigatorSchema = exports.countdownTimerSchema = exports.permissionContractReferenceSchema = exports.navigationButtonSchema = exports.navigationSchema = exports.ToolBeltStateMachine = exports.removeUniversalViewOptions = exports.buildSkillViewLayout = exports.splitCardsIntoLayouts = exports.listUtil = exports.mapInteractor = exports.mapAssert = exports.renderUtil = exports.routerTestPatcher = exports.dialogTestPatcher = exports.confirmTestPatcher = exports.calendarSeeder = exports.interactionUtil = exports.chartAssert = exports.progressNavigatorAssert = exports.countdownTimerInteractor = exports.countdownTimerAssert = exports.calendarInteractor = exports.interactor = exports.normalizeScopeFromVc = exports.autocompleteInteractor = exports.webRtcInteractor = exports.webRtcAssert = exports.formAssert = exports.autocompleteAssert = exports.listAssert = void 0;
24
24
  __exportStar(require("./constants"), exports);
25
25
  __exportStar(require("./types/heartwood.types"), exports);
26
26
  __exportStar(require("./utilities/removeUniversalViewOptions"), exports);
@@ -304,6 +304,8 @@ var pager_schema_1 = require("./.spruce/schemas/heartwoodViewControllers/v2021_0
304
304
  Object.defineProperty(exports, "pagerSchema", { enumerable: true, get: function () { return __importDefault(pager_schema_1).default; } });
305
305
  var webRtcPlayer_schema_1 = require("./.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcPlayer.schema");
306
306
  Object.defineProperty(exports, "webRtcPlayerSchema", { enumerable: true, get: function () { return __importDefault(webRtcPlayer_schema_1).default; } });
307
+ var webRtcCropPoint_schema_1 = require("./.spruce/schemas/heartwoodViewControllers/v2021_02_11/webRtcCropPoint.schema");
308
+ Object.defineProperty(exports, "webRtcCropPointSchema", { enumerable: true, get: function () { return __importDefault(webRtcCropPoint_schema_1).default; } });
307
309
  var ViewControllerExporter_1 = require("./viewControllers/ViewControllerExporter");
308
310
  Object.defineProperty(exports, "ViewControllerExporter", { enumerable: true, get: function () { return __importDefault(ViewControllerExporter_1).default; } });
309
311
  var ViewControllerImporter_1 = require("./viewControllers/ViewControllerImporter");
@@ -350,6 +352,9 @@ var formAssert_1 = require("./tests/utilities/formAssert");
350
352
  Object.defineProperty(exports, "formAssert", { enumerable: true, get: function () { return __importDefault(formAssert_1).default; } });
351
353
  var webRtcAssert_1 = require("./tests/utilities/webRtcAssert");
352
354
  Object.defineProperty(exports, "webRtcAssert", { enumerable: true, get: function () { return __importDefault(webRtcAssert_1).default; } });
355
+ __exportStar(require("./tests/utilities/webRtcAssert"), exports);
356
+ var webRtcInteractor_1 = require("./tests/utilities/webRtcInteractor");
357
+ Object.defineProperty(exports, "webRtcInteractor", { enumerable: true, get: function () { return __importDefault(webRtcInteractor_1).default; } });
353
358
  var autocompleteInteractor_1 = require("./tests/utilities/autocompleteInteractor");
354
359
  Object.defineProperty(exports, "autocompleteInteractor", { enumerable: true, get: function () { return __importDefault(autocompleteInteractor_1).default; } });
355
360
  var vcAssert_2 = require("./tests/utilities/vcAssert");
@@ -19,6 +19,32 @@ declare const _default: {
19
19
  valueType: string;
20
20
  };
21
21
  };
22
+ crop: {
23
+ type: "schema";
24
+ options: {
25
+ schema: {
26
+ id: string;
27
+ fields: {
28
+ xPercent: {
29
+ type: "number";
30
+ isRequired: true;
31
+ };
32
+ yPercent: {
33
+ type: "number";
34
+ isRequired: true;
35
+ };
36
+ widthPercent: {
37
+ type: "number";
38
+ isRequired: true;
39
+ };
40
+ heightPercent: {
41
+ type: "number";
42
+ isRequired: true;
43
+ };
44
+ };
45
+ };
46
+ };
47
+ };
22
48
  connection: {
23
49
  type: "raw";
24
50
  options: {
@@ -22,6 +22,32 @@ exports.default = (0, schema_1.buildSchema)({
22
22
  valueType: 'HeartwoodTypes.WebRtcPlayerCropHandler',
23
23
  },
24
24
  },
25
+ crop: {
26
+ type: 'schema',
27
+ options: {
28
+ schema: (0, schema_1.buildSchema)({
29
+ id: 'webRtcCropPoint',
30
+ fields: {
31
+ xPercent: {
32
+ type: 'number',
33
+ isRequired: true,
34
+ },
35
+ yPercent: {
36
+ type: 'number',
37
+ isRequired: true,
38
+ },
39
+ widthPercent: {
40
+ type: 'number',
41
+ isRequired: true,
42
+ },
43
+ heightPercent: {
44
+ type: 'number',
45
+ isRequired: true,
46
+ },
47
+ },
48
+ }),
49
+ },
50
+ },
25
51
  connection: {
26
52
  type: 'raw',
27
53
  options: {
@@ -1,6 +1,17 @@
1
- import { ViewController, Card } from '../../types/heartwood.types';
1
+ import { ViewController, Card, SimpleViewControllerFactory } from '../../types/heartwood.types';
2
2
  import WebRtcPlayerViewController from '../../viewControllers/webRtcStreaming/WebRtcPlayer.vc';
3
3
  declare const webRtcAssert: {
4
+ beforeEach: (views: SimpleViewControllerFactory) => void;
4
5
  cardRendersPlayer: (vc: ViewController<Card>, id?: string) => WebRtcPlayerViewController;
6
+ actionCreatesOffer: (vc: WebRtcPlayerViewController, action: () => void | Promise<void>, expectedOptions?: RTCOfferOptions) => Promise<void>;
7
+ answerSet: (vc: WebRtcPlayerViewController, answerSdp?: string) => Promise<void>;
5
8
  };
6
9
  export default webRtcAssert;
10
+ export declare class AssertingWebRtcPlayerViewController extends WebRtcPlayerViewController {
11
+ private onCreateOfferHandler?;
12
+ private passedAnswer?;
13
+ onCreateOffer(cb: (offerOptions: RTCOfferOptions) => void): void;
14
+ createOffer(offerOptions: RTCOfferOptions): Promise<string>;
15
+ setAnswer(answerSdp: string): Promise<void>;
16
+ assertAnswerWasSet(answerSdp?: string): void;
17
+ }
@@ -3,11 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AssertingWebRtcPlayerViewController = void 0;
6
7
  const schema_1 = require("@sprucelabs/schema");
7
8
  const test_utils_1 = require("@sprucelabs/test-utils");
8
9
  const render_utility_1 = __importDefault(require("../../utilities/render.utility"));
10
+ const WebRtcPlayer_vc_1 = __importDefault(require("../../viewControllers/webRtcStreaming/WebRtcPlayer.vc"));
9
11
  const assertSupport_1 = require("./assertSupport");
10
12
  const webRtcAssert = {
13
+ beforeEach: (views) => {
14
+ views.setController('web-rtc-player', AssertingWebRtcPlayerViewController);
15
+ },
11
16
  cardRendersPlayer: (vc, id) => {
12
17
  (0, schema_1.assertOptions)({ vc }, ['vc']);
13
18
  const model = render_utility_1.default.render(vc);
@@ -23,5 +28,49 @@ const webRtcAssert = {
23
28
  }
24
29
  return players[0].controller;
25
30
  },
31
+ actionCreatesOffer: async (vc, action, expectedOptions) => {
32
+ (0, schema_1.assertOptions)({ vc, action }, ['vc', 'action']);
33
+ const assertingVc = assertCalledBeforeEach(vc);
34
+ let wasHit = false;
35
+ let passedOptions;
36
+ assertingVc.onCreateOffer((options) => {
37
+ passedOptions = options;
38
+ wasHit = true;
39
+ });
40
+ await action();
41
+ if (expectedOptions) {
42
+ test_utils_1.assert.isEqualDeep(passedOptions, expectedOptions, `The options you passed to createOffer did not matching.`);
43
+ }
44
+ test_utils_1.assert.isTrue(wasHit, `You did not create an offer. Try 'const offer = await this.plaperVc.createOffer()'`);
45
+ },
46
+ answerSet: async (vc, answerSdp) => {
47
+ (0, schema_1.assertOptions)({ vc }, ['vc']);
48
+ const assertingVc = assertCalledBeforeEach(vc);
49
+ assertingVc.assertAnswerWasSet(answerSdp);
50
+ },
26
51
  };
27
52
  exports.default = webRtcAssert;
53
+ class AssertingWebRtcPlayerViewController extends WebRtcPlayer_vc_1.default {
54
+ onCreateOffer(cb) {
55
+ this.onCreateOfferHandler = cb;
56
+ }
57
+ async createOffer(offerOptions) {
58
+ this.onCreateOfferHandler?.(offerOptions);
59
+ return (0, test_utils_1.generateId)();
60
+ }
61
+ async setAnswer(answerSdp) {
62
+ this.passedAnswer = answerSdp;
63
+ }
64
+ assertAnswerWasSet(answerSdp) {
65
+ test_utils_1.assert.isTruthy(this.passedAnswer, `You did not call setAnswer. Try 'await this.playerVc.setAnswer(offer)'`);
66
+ if (answerSdp) {
67
+ test_utils_1.assert.isEqual(this.passedAnswer, answerSdp, `The answer you passed to 'await this.playerVc.setAnswer(...)' did not match expected.`);
68
+ }
69
+ }
70
+ }
71
+ exports.AssertingWebRtcPlayerViewController = AssertingWebRtcPlayerViewController;
72
+ function assertCalledBeforeEach(vc) {
73
+ test_utils_1.assert.isInstanceOf(vc, AssertingWebRtcPlayerViewController, `You have to run webRtcAssert.beforeEach(this.views) in your beforeEach before you create any ViewControllers.`);
74
+ const assertingVc = vc;
75
+ return assertingVc;
76
+ }
@@ -0,0 +1,6 @@
1
+ import { WebRtcCropPoint } from '../../types/heartwood.types';
2
+ import WebRtcPlayerViewController from '../../viewControllers/webRtcStreaming/WebRtcPlayer.vc';
3
+ declare const webRtcInteractor: {
4
+ simulateCrop: (vc: WebRtcPlayerViewController, cropPoint?: WebRtcCropPoint) => Promise<void>;
5
+ };
6
+ export default webRtcInteractor;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const schema_1 = require("@sprucelabs/schema");
7
+ const render_utility_1 = __importDefault(require("../../utilities/render.utility"));
8
+ const webRtcInteractor = {
9
+ simulateCrop: async (vc, cropPoint) => {
10
+ (0, schema_1.assertOptions)({ vc }, ['vc']);
11
+ const model = render_utility_1.default.render(vc);
12
+ await model.onCrop?.(cropPoint);
13
+ },
14
+ };
15
+ exports.default = webRtcInteractor;
@@ -216,7 +216,7 @@ export type Button = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Button;
216
216
  export type ToolBelt = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.ToolBelt;
217
217
  export type Feed = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Feed;
218
218
  export type Layout = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Layout;
219
- export type SimpleViewControllerFactory = Pick<ViewControllerFactory, 'Controller'>;
219
+ export type SimpleViewControllerFactory = Pick<ViewControllerFactory, 'Controller' | 'setController'>;
220
220
  export type CalendarSelectedDate = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.CalendarSelectedDate;
221
221
  export type FormSection<S extends Schema> = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.FormSection<S>;
222
222
  export type Map = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.Map;
@@ -258,13 +258,8 @@ export type TriggerRender = () => void;
258
258
  export type TriggerRenderHandler = () => void;
259
259
  export { WebRtcStreamer } from '../webRtcStreaming/WebRtcStreamer';
260
260
  export * from '../webRtcStreaming/WebRtcConnection';
261
- export interface Point {
262
- x: number;
263
- y: number;
264
- width: number;
265
- height: number;
266
- }
267
- export type WebRtcPlayerCropHandler = (point?: Point) => void;
261
+ export type WebRtcCropPoint = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint;
262
+ export type WebRtcPlayerCropHandler = (point?: WebRtcCropPoint) => void | Promise<void>;
268
263
  export interface ViewController<ViewModel extends Record<string, any>> {
269
264
  render(): ViewModel;
270
265
  setTriggerRenderHandler: (handler: TriggerRenderHandler) => void;
@@ -1,4 +1,4 @@
1
- import { ViewControllerOptions, WebRtcPlayer } from '../../types/heartwood.types';
1
+ import { ViewControllerOptions, WebRtcCropPoint, WebRtcPlayer } from '../../types/heartwood.types';
2
2
  import { WebRtcStreamer } from '../../webRtcStreaming/WebRtcStreamer';
3
3
  import AbstractViewController from '../Abstract.vc';
4
4
  export default class WebRtcPlayerViewController extends AbstractViewController<WebRtcPlayer> {
@@ -9,6 +9,10 @@ export default class WebRtcPlayerViewController extends AbstractViewController<W
9
9
  setStreamer(streamer: WebRtcStreamer): void;
10
10
  createOffer(offerOptions: RTCOfferOptions): Promise<string>;
11
11
  setAnswer(answerSdp: string): Promise<void>;
12
+ getCrop(): import("@sprucelabs/mercury-types").SpruceSchemas.HeartwoodViewControllers.v2021_02_11.WebRtcCropPoint | null | undefined;
13
+ enableCropping(): void;
14
+ disableCropping(): void;
15
+ setCrop(point?: WebRtcCropPoint): void;
12
16
  render(): WebRtcPlayer;
13
17
  }
14
18
  export interface WebRtcPlayerOptions extends WebRtcPlayer {
@@ -38,8 +38,29 @@ class WebRtcPlayerViewController extends Abstract_vc_1.default {
38
38
  }
39
39
  await this.model.streamer.setAnswer(answerSdp);
40
40
  }
41
+ getCrop() {
42
+ return this.model.crop;
43
+ }
44
+ enableCropping() {
45
+ this.model.shouldAllowCropping = true;
46
+ this.triggerRender();
47
+ }
48
+ disableCropping() {
49
+ this.model.shouldAllowCropping = false;
50
+ this.triggerRender();
51
+ }
52
+ setCrop(point) {
53
+ this.model.crop = point;
54
+ void this.model.onCrop?.(point);
55
+ this.triggerRender();
56
+ }
41
57
  render() {
42
- return this.model;
58
+ return {
59
+ ...this.model,
60
+ onCrop: (point) => {
61
+ this.setCrop(point);
62
+ },
63
+ };
43
64
  }
44
65
  }
45
66
  WebRtcPlayerViewController.id = 'web-rtc-player-card';
@@ -1,7 +1,7 @@
1
1
  import MockRtcPeerConnection from '../tests/MockRtcPeerConnection';
2
2
  import { WebRtcStreamer } from './WebRtcStreamer';
3
3
  export default class WebRtcConnectionImpl implements WebRtcConnection {
4
- static Class: new () => WebRtcConnection;
4
+ static Class?: new () => WebRtcConnection;
5
5
  static get RTCPeerConnection(): new (config: RTCConfiguration) => RTCPeerConnection | MockRtcPeerConnection;
6
6
  static set RTCPeerConnection(value: new (config: RTCConfiguration) => RTCPeerConnection | MockRtcPeerConnection);
7
7
  private stateChangeListeners;
package/package.json CHANGED
@@ -13,7 +13,7 @@
13
13
  "sideEffects": false,
14
14
  "license": "MIT",
15
15
  "description": "All the power of Heartwood in one, convenient package.",
16
- "version": "118.1.0",
16
+ "version": "118.2.1",
17
17
  "skill": {
18
18
  "namespace": "HeartwoodViewControllers",
19
19
  "commandOverrides": {