@concord-consortium/lara-interactive-api 1.5.0 → 1.6.0-pre.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.
package/api.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { IInitInteractive, INavigationOptions, IAuthInfo, ISupportedFeatures, IShowModal, ICloseModal, IGetInteractiveListOptions, IGetInteractiveListResponse, ISetLinkedInteractives, IGetLibraryInteractiveListRequest, IJwtResponse, ICustomMessageHandler, ICustomMessagesHandledMap, IGetInteractiveSnapshotOptions, IGetInteractiveSnapshotResponse, IAddLinkedInteractiveStateListenerOptions, IDecoratedContentEvent, ITextDecorationHandler, WriteAttachmentParams, ReadAttachmentParams, GetAttachmentUrlParams, IGetReportItemAnswerHandler, IReportItemAnswer } from "./types";
1
+ import { IInitInteractive, INavigationOptions, IAuthInfo, ISupportedFeatures, IShowModal, ICloseModal, IGetInteractiveListOptions, IGetInteractiveListResponse, ISetLinkedInteractives, IGetLibraryInteractiveListRequest, IJwtResponse, ICustomMessageHandler, ICustomMessagesHandledMap, IGetInteractiveSnapshotOptions, IGetInteractiveSnapshotResponse, IAddLinkedInteractiveStateListenerOptions, IDecoratedContentEvent, ITextDecorationHandler, WriteAttachmentParams, ReadAttachmentParams, GetAttachmentUrlParams, IGetReportItemAnswerHandler, IReportItemAnswer, OnUnloadFunction } from "./types";
2
2
  export declare const getInitInteractiveMessage: <InteractiveState = {}, AuthoredState = {}, GlobalInteractiveState = {}>() => Promise<IInitInteractive<InteractiveState, AuthoredState, GlobalInteractiveState> | null>;
3
3
  export declare const getMode: () => Promise<"runtime" | "authoring" | "report" | "reportItem" | undefined>;
4
4
  export declare const getInteractiveState: <InteractiveState>() => InteractiveState | null;
@@ -74,6 +74,9 @@ export declare const removeGetReportItemAnswerListener: () => void;
74
74
  export declare const setSupportedFeatures: (features: ISupportedFeatures) => void;
75
75
  export declare const setHeight: (height: number | string) => void;
76
76
  export declare const postDecoratedContentEvent: (msg: IDecoratedContentEvent) => void;
77
+ /**
78
+ * Providing empty string or null disables hint.
79
+ */
77
80
  export declare const setHint: (hint: string | null) => void;
78
81
  export declare const setNavigation: (options: INavigationOptions) => void;
79
82
  export declare const getAuthInfo: () => Promise<IAuthInfo>;
@@ -85,6 +88,12 @@ export declare const addAuthoredStateListener: <AuthoredState>(listener: (author
85
88
  export declare const removeAuthoredStateListener: <AuthoredState>(listener: (authoredState: AuthoredState) => void) => void;
86
89
  export declare const addGlobalInteractiveStateListener: <GlobalInteractiveState>(listener: (globalInteractiveState: GlobalInteractiveState) => void) => void;
87
90
  export declare const removeGlobalInteractiveStateListener: <GlobalInteractiveState>(listener: (globalInteractiveState: GlobalInteractiveState) => void) => void;
91
+ /**
92
+ * The listener should be called immediately after it is added with any state of the linked
93
+ * interactive that the host currently knows about. This first call might not happen
94
+ * synchronously it could be slightly delayed. And then the listener should be called again
95
+ * whenever the state of the linked interactive changes.
96
+ */
88
97
  export declare const addLinkedInteractiveStateListener: <LinkedInteractiveState>(listener: (linkedIntState: LinkedInteractiveState | undefined) => void, options: IAddLinkedInteractiveStateListenerOptions) => void;
89
98
  export declare const removeLinkedInteractiveStateListener: <InteractiveState>(listener: (intState: InteractiveState | null) => void) => void;
90
99
  /**
@@ -105,3 +114,4 @@ export declare const writeAttachment: (params: WriteAttachmentParams) => Promise
105
114
  export declare const readAttachment: (params: ReadAttachmentParams) => Promise<Response>;
106
115
  export declare const getAttachmentUrl: (params: GetAttachmentUrlParams) => Promise<string>;
107
116
  export declare const sendReportItemAnswer: (request: Omit<IReportItemAnswer, "requestId">) => void;
117
+ export declare const setOnUnload: (onUnload?: OnUnloadFunction<{}> | undefined) => void;
package/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as iframePhone from "iframe-phone";
2
- import { ClientMessage, ICustomMessageHandler, ICustomMessagesHandledMap, ISupportedFeaturesRequest, ServerMessage, ITextDecorationHandler, IGetReportItemAnswerHandler } from "./types";
2
+ import { ClientMessage, ICustomMessageHandler, ICustomMessagesHandledMap, ISupportedFeaturesRequest, ServerMessage, ITextDecorationHandler, IGetReportItemAnswerHandler, OnUnloadFunction } from "./types";
3
3
  import { ManagedState } from "./managed-state";
4
4
  export declare const getClient: () => Client;
5
5
  export declare class Client {
@@ -8,6 +8,7 @@ export declare class Client {
8
8
  private customMessagesHandled;
9
9
  private listeners;
10
10
  private requestId;
11
+ private onUnload;
11
12
  constructor();
12
13
  getNextRequestId(): number;
13
14
  post(message: ClientMessage, content?: any): void;
@@ -20,5 +21,6 @@ export declare class Client {
20
21
  addGetReportItemAnswerListener(callback: IGetReportItemAnswerHandler): void;
21
22
  removeGetReportItemAnswerListener(): boolean;
22
23
  setSupportedFeatures: (request: ISupportedFeaturesRequest) => void;
24
+ setOnUnload: (onUnload?: OnUnloadFunction<{}> | undefined) => void;
23
25
  private connect;
24
26
  }
package/index-bundle.d.ts CHANGED
@@ -35,6 +35,10 @@ interface IJwtResponse {
35
35
  claims: IJwtClaims;
36
36
  }
37
37
 
38
+ interface IAttachmentInfo {
39
+ contentType?: string;
40
+ }
41
+ declare type AttachmentInfoMap = Record<string, IAttachmentInfo>;
38
42
  interface IInteractiveStateProps<InteractiveState = {}> {
39
43
  interactiveState: InteractiveState | null;
40
44
  hasLinkedInteractive?: boolean;
@@ -51,6 +55,7 @@ interface IInteractiveStateProps<InteractiveState = {}> {
51
55
  pageName?: string;
52
56
  activityName?: string;
53
57
  externalReportUrl?: string;
58
+ attachments?: AttachmentInfoMap;
54
59
  }
55
60
  interface IHostFeatureSupport extends Record<string, unknown> {
56
61
  version: string;
@@ -86,6 +91,7 @@ interface IRuntimeInitInteractive<InteractiveState = {}, AuthoredState = {}, Glo
86
91
  };
87
92
  linkedInteractives: ILinkedInteractive[];
88
93
  themeInfo: IThemeInfo;
94
+ attachments?: AttachmentInfoMap;
89
95
  }
90
96
  interface IThemeInfo {
91
97
  colors: {
@@ -111,10 +117,12 @@ interface IAuthoringInitInteractive<AuthoredState = {}> {
111
117
  interface IReportInitInteractive<InteractiveState = {}, AuthoredState = {}> {
112
118
  version: 1;
113
119
  mode: "report";
120
+ view?: "standalone";
114
121
  hostFeatures: IHostFeatures;
115
122
  authoredState: AuthoredState;
116
123
  interactiveState: InteractiveState;
117
124
  themeInfo: IThemeInfo;
125
+ attachments?: AttachmentInfoMap;
118
126
  }
119
127
  interface IReportItemInitInteractive<InteractiveState = {}, AuthoredState = {}> {
120
128
  version: 1;
@@ -125,6 +133,7 @@ interface IReportItemInitInteractive<InteractiveState = {}, AuthoredState = {}>
125
133
  users: Record<string, {
126
134
  hasAnswer: boolean;
127
135
  }>;
136
+ attachments?: AttachmentInfoMap;
128
137
  }
129
138
  declare type IInitInteractive<InteractiveState = {}, AuthoredState = {}, GlobalInteractiveState = {}> = IRuntimeInitInteractive<InteractiveState, AuthoredState, GlobalInteractiveState> | IAuthoringInitInteractive<AuthoredState> | IReportInitInteractive<InteractiveState, AuthoredState> | IReportItemInitInteractive<InteractiveState, AuthoredState>;
130
139
  declare type InitInteractiveMode = "runtime" | "authoring" | "report" | "reportItem";
@@ -352,16 +361,34 @@ interface ILinkedInteractiveStateResponse<LinkedInteractiveState> {
352
361
  interactiveState: LinkedInteractiveState | undefined;
353
362
  }
354
363
  interface IGetReportItemAnswer<InteractiveState = {}, AuthoredState = {}> extends IBaseRequestResponse {
355
- type: "html";
364
+ version: "2.0.0";
356
365
  platformUserId: string;
357
366
  interactiveState: InteractiveState;
358
367
  authoredState: AuthoredState;
359
368
  }
360
- interface IReportItemAnswer extends IBaseRequestResponse {
369
+ interface IReportItemAnswerItemAttachment {
370
+ type: "attachment";
371
+ name: string;
372
+ label?: string;
373
+ }
374
+ interface IReportItemAnswerItemAnswerText {
375
+ type: "answerText";
376
+ }
377
+ interface IReportItemAnswerItemHtml {
361
378
  type: "html";
362
- platformUserId: string;
363
379
  html: string;
364
380
  }
381
+ interface IReportItemAnswerItemLinks {
382
+ type: "links";
383
+ hideViewInline?: boolean;
384
+ hideViewInNewTab?: boolean;
385
+ }
386
+ declare type IReportItemAnswerItem = IReportItemAnswerItemAttachment | IReportItemAnswerItemAnswerText | IReportItemAnswerItemHtml | IReportItemAnswerItemLinks;
387
+ interface IReportItemAnswer extends IBaseRequestResponse {
388
+ version: "2.0.0";
389
+ platformUserId: string;
390
+ items: IReportItemAnswerItem[];
391
+ }
365
392
  declare type IGetReportItemAnswerHandler = (message: IGetReportItemAnswer) => void;
366
393
  /**
367
394
  * Interface that can be used by interactives to export and consume datasets. For example:
@@ -384,6 +411,10 @@ interface IDataset {
384
411
  interface IInteractiveStateWithDataset {
385
412
  dataset?: IDataset | null;
386
413
  }
414
+ interface IGetInteractiveState {
415
+ unloading?: boolean;
416
+ }
417
+ declare type OnUnloadFunction<InteractiveState = {}> = (options: IGetInteractiveState) => Promise<InteractiveState>;
387
418
 
388
419
  declare type ChoiceId = string;
389
420
  interface IAuthoringMetadataBase {
@@ -525,6 +556,9 @@ declare const removeGetReportItemAnswerListener: () => void;
525
556
  declare const setSupportedFeatures: (features: ISupportedFeatures) => void;
526
557
  declare const setHeight: (height: number | string) => void;
527
558
  declare const postDecoratedContentEvent: (msg: IDecoratedContentEvent) => void;
559
+ /**
560
+ * Providing empty string or null disables hint.
561
+ */
528
562
  declare const setHint: (hint: string | null) => void;
529
563
  declare const setNavigation: (options: INavigationOptions) => void;
530
564
  declare const getAuthInfo: () => Promise<IAuthInfo>;
@@ -536,6 +570,12 @@ declare const addAuthoredStateListener: <AuthoredState>(listener: (authoredState
536
570
  declare const removeAuthoredStateListener: <AuthoredState>(listener: (authoredState: AuthoredState) => void) => void;
537
571
  declare const addGlobalInteractiveStateListener: <GlobalInteractiveState>(listener: (globalInteractiveState: GlobalInteractiveState) => void) => void;
538
572
  declare const removeGlobalInteractiveStateListener: <GlobalInteractiveState>(listener: (globalInteractiveState: GlobalInteractiveState) => void) => void;
573
+ /**
574
+ * The listener should be called immediately after it is added with any state of the linked
575
+ * interactive that the host currently knows about. This first call might not happen
576
+ * synchronously it could be slightly delayed. And then the listener should be called again
577
+ * whenever the state of the linked interactive changes.
578
+ */
539
579
  declare const addLinkedInteractiveStateListener: <LinkedInteractiveState>(listener: (linkedIntState: LinkedInteractiveState | undefined) => void, options: IAddLinkedInteractiveStateListenerOptions) => void;
540
580
  declare const removeLinkedInteractiveStateListener: <InteractiveState>(listener: (intState: InteractiveState | null) => void) => void;
541
581
  /**
@@ -556,6 +596,7 @@ declare const writeAttachment: (params: WriteAttachmentParams) => Promise<Respon
556
596
  declare const readAttachment: (params: ReadAttachmentParams) => Promise<Response>;
557
597
  declare const getAttachmentUrl: (params: GetAttachmentUrlParams) => Promise<string>;
558
598
  declare const sendReportItemAnswer: (request: Omit<IReportItemAnswer, "requestId">) => void;
599
+ declare const setOnUnload: (onUnload?: OnUnloadFunction<{}> | undefined) => void;
559
600
 
560
601
  declare type UpdateFunc<S> = (prevState: S | null) => S;
561
602
  declare const useInteractiveState: <InteractiveState>() => {
@@ -604,6 +645,7 @@ declare class Client {
604
645
  private customMessagesHandled;
605
646
  private listeners;
606
647
  private requestId;
648
+ private onUnload;
607
649
  constructor();
608
650
  getNextRequestId(): number;
609
651
  post(message: ClientMessage, content?: any): void;
@@ -616,7 +658,8 @@ declare class Client {
616
658
  addGetReportItemAnswerListener(callback: IGetReportItemAnswerHandler): void;
617
659
  removeGetReportItemAnswerListener(): boolean;
618
660
  setSupportedFeatures: (request: ISupportedFeaturesRequest) => void;
661
+ setOnUnload: (onUnload?: OnUnloadFunction<{}> | undefined) => void;
619
662
  private connect;
620
663
  }
621
664
 
622
- export { ChoiceId, Client, ClientMessage, DeprecatedRuntimeClientMessage, DeprecatedRuntimeServerMessage, GetAttachmentUrlParams, GlobalIFrameSaverClientMessage, GlobalIFrameSaverServerMessage, IAddLinkedInteractiveStateListenerOptions, IAddLinkedInteractiveStateListenerRequest, IAttachmentUrlRequest, IAttachmentUrlResponse, IAuthInfo, IAuthoringClientMessage, IAuthoringCustomReportField, IAuthoringCustomReportFields, IAuthoringImageQuestionMetadata, IAuthoringInitInteractive, IAuthoringInteractiveMetadata, IAuthoringMetadata, IAuthoringMetadataBase, IAuthoringMultipleChoiceChoiceMetadata, IAuthoringMultipleChoiceMetadata, IAuthoringOpenResponseMetadata, IAuthoringServerMessage, IBaseShowModal, ICloseModal, IContextMember, IContextMembership, ICustomMessage, ICustomMessageHandler, ICustomMessageOptions, ICustomMessagesHandledMap, ICustomReportFieldsAuthoredState, ICustomReportFieldsAuthoredStateField, ICustomReportFieldsInteractiveState, IDataset, IDecoratedContentEvent, IGetAuthInfoRequest, IGetAuthInfoResponse, IGetFirebaseJwtRequest, IGetFirebaseJwtResponse, IGetInteractiveListOptions, IGetInteractiveListRequest, IGetInteractiveListResponse, IGetInteractiveSnapshotOptions, IGetInteractiveSnapshotRequest, IGetInteractiveSnapshotResponse, IGetLibraryInteractiveListOptions, IGetLibraryInteractiveListRequest, IGetLibraryInteractiveListResponse, IGetReportItemAnswer, IGetReportItemAnswerHandler, IHintRequest, IHostFeatureSupport, IHostFeatures, IHostModalSupport, IInitInteractive, IInteractiveListResponseItem, IInteractiveStateProps, IInteractiveStateWithDataset, IJwtClaims, IJwtResponse, ILibraryInteractiveListResponseItem, ILinkedInteractive, ILinkedInteractiveStateResponse, INavigationOptions, IPortalClaims, IRemoveLinkedInteractiveStateListenerRequest, IReportInitInteractive, IReportItemAnswer, IReportItemClientMessage, IReportItemInitInteractive, IReportItemServerMessage, IRuntimeClientMessage, IRuntimeCustomReportValues, IRuntimeImageQuestionMetadata, IRuntimeInitInteractive, IRuntimeInteractiveMetadata, IRuntimeMetadata, IRuntimeMetadataBase, IRuntimeMultipleChoiceMetadata, IRuntimeOpenResponseMetadata, IRuntimeServerMessage, ISetLinkedInteractives, IShowAlert, IShowDialog, IShowLightbox, IShowModal, ISupportedFeatures, ISupportedFeaturesRequest, ITextDecorationHandler, ITextDecorationHandlerInfo, ITextDecorationInfo, IThemeInfo, IWriteAttachmentRequest, IframePhoneServerMessage, InitInteractiveMode, InteractiveItemId, LoggerClientMessage, ModalType, ReadAttachmentParams, ServerMessage, WriteAttachmentParams, addAuthoredStateListener, addCustomMessageListener, addDecorateContentListener, addGetReportItemAnswerListener, addGlobalInteractiveStateListener, addInteractiveStateListener, addLinkedInteractiveStateListener, closeModal, flushStateUpdates, getAttachmentUrl, getAuthInfo, getAuthoredState, getClient, getFirebaseJwt, getGlobalInteractiveState, getInitInteractiveMessage, getInteractiveList, getInteractiveSnapshot, getInteractiveState, getLibraryInteractiveList, getMode, inIframe, log, postDecoratedContentEvent, readAttachment, removeAuthoredStateListener, removeCustomMessageListener, removeDecorateContentListener, removeGetReportItemAnswerListener, removeGlobalInteractiveStateListener, removeInteractiveStateListener, removeLinkedInteractiveStateListener, sendReportItemAnswer, setAuthoredState, setGlobalInteractiveState, setHeight, setHint, setInteractiveState, setInteractiveStateTimeout, setLinkedInteractives, setNavigation, setSupportedFeatures, showModal, useAuthoredState, useAutoSetHeight, useCustomMessages, useDecorateContent, useGlobalInteractiveState, useInitMessage, useInteractiveState, writeAttachment };
665
+ export { AttachmentInfoMap, ChoiceId, Client, ClientMessage, DeprecatedRuntimeClientMessage, DeprecatedRuntimeServerMessage, GetAttachmentUrlParams, GlobalIFrameSaverClientMessage, GlobalIFrameSaverServerMessage, IAddLinkedInteractiveStateListenerOptions, IAddLinkedInteractiveStateListenerRequest, IAttachmentInfo, IAttachmentUrlRequest, IAttachmentUrlResponse, IAuthInfo, IAuthoringClientMessage, IAuthoringCustomReportField, IAuthoringCustomReportFields, IAuthoringImageQuestionMetadata, IAuthoringInitInteractive, IAuthoringInteractiveMetadata, IAuthoringMetadata, IAuthoringMetadataBase, IAuthoringMultipleChoiceChoiceMetadata, IAuthoringMultipleChoiceMetadata, IAuthoringOpenResponseMetadata, IAuthoringServerMessage, IBaseShowModal, ICloseModal, IContextMember, IContextMembership, ICustomMessage, ICustomMessageHandler, ICustomMessageOptions, ICustomMessagesHandledMap, ICustomReportFieldsAuthoredState, ICustomReportFieldsAuthoredStateField, ICustomReportFieldsInteractiveState, IDataset, IDecoratedContentEvent, IGetAuthInfoRequest, IGetAuthInfoResponse, IGetFirebaseJwtRequest, IGetFirebaseJwtResponse, IGetInteractiveListOptions, IGetInteractiveListRequest, IGetInteractiveListResponse, IGetInteractiveSnapshotOptions, IGetInteractiveSnapshotRequest, IGetInteractiveSnapshotResponse, IGetInteractiveState, IGetLibraryInteractiveListOptions, IGetLibraryInteractiveListRequest, IGetLibraryInteractiveListResponse, IGetReportItemAnswer, IGetReportItemAnswerHandler, IHintRequest, IHostFeatureSupport, IHostFeatures, IHostModalSupport, IInitInteractive, IInteractiveListResponseItem, IInteractiveStateProps, IInteractiveStateWithDataset, IJwtClaims, IJwtResponse, ILibraryInteractiveListResponseItem, ILinkedInteractive, ILinkedInteractiveStateResponse, INavigationOptions, IPortalClaims, IRemoveLinkedInteractiveStateListenerRequest, IReportInitInteractive, IReportItemAnswer, IReportItemAnswerItem, IReportItemAnswerItemAnswerText, IReportItemAnswerItemAttachment, IReportItemAnswerItemHtml, IReportItemAnswerItemLinks, IReportItemClientMessage, IReportItemInitInteractive, IReportItemServerMessage, IRuntimeClientMessage, IRuntimeCustomReportValues, IRuntimeImageQuestionMetadata, IRuntimeInitInteractive, IRuntimeInteractiveMetadata, IRuntimeMetadata, IRuntimeMetadataBase, IRuntimeMultipleChoiceMetadata, IRuntimeOpenResponseMetadata, IRuntimeServerMessage, ISetLinkedInteractives, IShowAlert, IShowDialog, IShowLightbox, IShowModal, ISupportedFeatures, ISupportedFeaturesRequest, ITextDecorationHandler, ITextDecorationHandlerInfo, ITextDecorationInfo, IThemeInfo, IWriteAttachmentRequest, IframePhoneServerMessage, InitInteractiveMode, InteractiveItemId, LoggerClientMessage, ModalType, OnUnloadFunction, ReadAttachmentParams, ServerMessage, WriteAttachmentParams, addAuthoredStateListener, addCustomMessageListener, addDecorateContentListener, addGetReportItemAnswerListener, addGlobalInteractiveStateListener, addInteractiveStateListener, addLinkedInteractiveStateListener, closeModal, flushStateUpdates, getAttachmentUrl, getAuthInfo, getAuthoredState, getClient, getFirebaseJwt, getGlobalInteractiveState, getInitInteractiveMessage, getInteractiveList, getInteractiveSnapshot, getInteractiveState, getLibraryInteractiveList, getMode, inIframe, log, postDecoratedContentEvent, readAttachment, removeAuthoredStateListener, removeCustomMessageListener, removeDecorateContentListener, removeGetReportItemAnswerListener, removeGlobalInteractiveStateListener, removeInteractiveStateListener, removeLinkedInteractiveStateListener, sendReportItemAnswer, setAuthoredState, setGlobalInteractiveState, setHeight, setHint, setInteractiveState, setInteractiveStateTimeout, setLinkedInteractives, setNavigation, setOnUnload, setSupportedFeatures, showModal, useAuthoredState, useAutoSetHeight, useCustomMessages, useDecorateContent, useGlobalInteractiveState, useInitMessage, useInteractiveState, writeAttachment };
package/index.js CHANGED
@@ -4099,7 +4099,7 @@ var __rest = (this && this.__rest) || function (s, e) {
4099
4099
  return t;
4100
4100
  };
4101
4101
  Object.defineProperty(exports, "__esModule", { value: true });
4102
- exports.sendReportItemAnswer = exports.getAttachmentUrl = exports.readAttachment = exports.writeAttachment = exports.getLibraryInteractiveList = exports.getInteractiveSnapshot = exports.setLinkedInteractives = exports.getInteractiveList = exports.closeModal = exports.showModal = exports.removeLinkedInteractiveStateListener = exports.addLinkedInteractiveStateListener = exports.removeGlobalInteractiveStateListener = exports.addGlobalInteractiveStateListener = exports.removeAuthoredStateListener = exports.addAuthoredStateListener = exports.removeInteractiveStateListener = exports.addInteractiveStateListener = exports.log = exports.getFirebaseJwt = exports.getAuthInfo = exports.setNavigation = exports.setHint = exports.postDecoratedContentEvent = exports.setHeight = exports.setSupportedFeatures = exports.removeGetReportItemAnswerListener = exports.addGetReportItemAnswerListener = exports.removeDecorateContentListener = exports.addDecorateContentListener = exports.removeCustomMessageListener = exports.addCustomMessageListener = exports.setGlobalInteractiveState = exports.getGlobalInteractiveState = exports.setAuthoredState = exports.getAuthoredState = exports.flushStateUpdates = exports.setInteractiveState = exports.setInteractiveStateTimeout = exports.getInteractiveState = exports.getMode = exports.getInitInteractiveMessage = void 0;
4102
+ exports.setOnUnload = exports.sendReportItemAnswer = exports.getAttachmentUrl = exports.readAttachment = exports.writeAttachment = exports.getLibraryInteractiveList = exports.getInteractiveSnapshot = exports.setLinkedInteractives = exports.getInteractiveList = exports.closeModal = exports.showModal = exports.removeLinkedInteractiveStateListener = exports.addLinkedInteractiveStateListener = exports.removeGlobalInteractiveStateListener = exports.addGlobalInteractiveStateListener = exports.removeAuthoredStateListener = exports.addAuthoredStateListener = exports.removeInteractiveStateListener = exports.addInteractiveStateListener = exports.log = exports.getFirebaseJwt = exports.getAuthInfo = exports.setNavigation = exports.setHint = exports.postDecoratedContentEvent = exports.setHeight = exports.setSupportedFeatures = exports.removeGetReportItemAnswerListener = exports.addGetReportItemAnswerListener = exports.removeDecorateContentListener = exports.addDecorateContentListener = exports.removeCustomMessageListener = exports.addCustomMessageListener = exports.setGlobalInteractiveState = exports.getGlobalInteractiveState = exports.setAuthoredState = exports.getAuthoredState = exports.flushStateUpdates = exports.setInteractiveState = exports.setInteractiveStateTimeout = exports.getInteractiveState = exports.getMode = exports.getInitInteractiveMessage = void 0;
4103
4103
  var client_1 = __webpack_require__(/*! ./client */ "./src/interactive-api-client/client.ts");
4104
4104
  var uuid_1 = __webpack_require__(/*! uuid */ "./node_modules/uuid/dist/esm-browser/index.js");
4105
4105
  var THROW_NOT_IMPLEMENTED_YET = function (method) {
@@ -4265,7 +4265,7 @@ var postDecoratedContentEvent = function (msg) {
4265
4265
  (0, client_1.getClient)().post("decoratedContentEvent", msg);
4266
4266
  };
4267
4267
  exports.postDecoratedContentEvent = postDecoratedContentEvent;
4268
- /*
4268
+ /**
4269
4269
  * Providing empty string or null disables hint.
4270
4270
  */
4271
4271
  var setHint = function (hint) {
@@ -4364,6 +4364,12 @@ var removeGlobalInteractiveStateListener = function (listener) {
4364
4364
  exports.removeGlobalInteractiveStateListener = removeGlobalInteractiveStateListener;
4365
4365
  // Mapping between external listener and internal listener, so it's possible to remove linkedInteractiveState listeners.
4366
4366
  var _linkedInteractiveStateListeners = new Map();
4367
+ /**
4368
+ * The listener should be called immediately after it is added with any state of the linked
4369
+ * interactive that the host currently knows about. This first call might not happen
4370
+ * synchronously it could be slightly delayed. And then the listener should be called again
4371
+ * whenever the state of the linked interactive changes.
4372
+ */
4367
4373
  var addLinkedInteractiveStateListener = function (listener, options) {
4368
4374
  var client = (0, client_1.getClient)();
4369
4375
  var listenerId = (0, uuid_1.v4)();
@@ -4563,6 +4569,10 @@ var sendReportItemAnswer = function (request) {
4563
4569
  (0, client_1.getClient)().post("reportItemAnswer", request);
4564
4570
  };
4565
4571
  exports.sendReportItemAnswer = sendReportItemAnswer;
4572
+ var setOnUnload = function (onUnload) {
4573
+ (0, client_1.getClient)().setOnUnload(onUnload);
4574
+ };
4575
+ exports.setOnUnload = setOnUnload;
4566
4576
 
4567
4577
 
4568
4578
  /***/ }),
@@ -4587,6 +4597,42 @@ var __assign = (this && this.__assign) || function () {
4587
4597
  };
4588
4598
  return __assign.apply(this, arguments);
4589
4599
  };
4600
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4601
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4602
+ return new (P || (P = Promise))(function (resolve, reject) {
4603
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
4604
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
4605
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
4606
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
4607
+ });
4608
+ };
4609
+ var __generator = (this && this.__generator) || function (thisArg, body) {
4610
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
4611
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
4612
+ function verb(n) { return function (v) { return step([n, v]); }; }
4613
+ function step(op) {
4614
+ if (f) throw new TypeError("Generator is already executing.");
4615
+ while (_) try {
4616
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
4617
+ if (y = 0, t) op = [op[0] & 2, t.value];
4618
+ switch (op[0]) {
4619
+ case 0: case 1: t = op; break;
4620
+ case 4: _.label++; return { value: op[1], done: false };
4621
+ case 5: _.label++; y = op[1]; op = [0]; continue;
4622
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
4623
+ default:
4624
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
4625
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
4626
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
4627
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
4628
+ if (t[2]) _.ops.pop();
4629
+ _.trys.pop(); continue;
4630
+ }
4631
+ op = body.call(thisArg, _);
4632
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
4633
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
4634
+ }
4635
+ };
4590
4636
  var __rest = (this && this.__rest) || function (s, e) {
4591
4637
  var t = {};
4592
4638
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -4635,6 +4681,7 @@ var Client = /** @class */ (function () {
4635
4681
  this.managedState = new managed_state_1.ManagedState();
4636
4682
  this.listeners = {};
4637
4683
  this.requestId = 1;
4684
+ this.onUnload = undefined;
4638
4685
  this.setSupportedFeatures = function (request) {
4639
4686
  var newRequest = request;
4640
4687
  if (_this.customMessagesHandled) {
@@ -4644,6 +4691,9 @@ var Client = /** @class */ (function () {
4644
4691
  }
4645
4692
  _this.post("supportedFeatures", newRequest);
4646
4693
  };
4694
+ this.setOnUnload = function (onUnload) {
4695
+ _this.onUnload = onUnload;
4696
+ };
4647
4697
  if (!(0, in_frame_1.inIframe)()) {
4648
4698
  // tslint:disable-next-line:no-console
4649
4699
  console.warn("Interactive API is meant to be used in iframe");
@@ -4784,10 +4834,26 @@ var Client = /** @class */ (function () {
4784
4834
  _this.managedState.globalInteractiveState = parseJSONIfString(newInitMessage.globalInteractiveState);
4785
4835
  }
4786
4836
  });
4787
- this.addListener("getInteractiveState", function () {
4788
- _this.post("interactiveState", _this.managedState.interactiveState);
4789
- _this.managedState.interactiveStateDirty = false;
4790
- });
4837
+ this.addListener("getInteractiveState", function (options) { return __awaiter(_this, void 0, void 0, function () {
4838
+ var finalState;
4839
+ return __generator(this, function (_a) {
4840
+ switch (_a.label) {
4841
+ case 0:
4842
+ if (!((options === null || options === void 0 ? void 0 : options.unloading) && this.onUnload)) return [3 /*break*/, 2];
4843
+ return [4 /*yield*/, this.onUnload(options)];
4844
+ case 1:
4845
+ finalState = _a.sent();
4846
+ if (finalState) {
4847
+ this.managedState.interactiveState = finalState;
4848
+ }
4849
+ _a.label = 2;
4850
+ case 2:
4851
+ this.post("interactiveState", this.managedState.interactiveState);
4852
+ this.managedState.interactiveStateDirty = false;
4853
+ return [2 /*return*/];
4854
+ }
4855
+ });
4856
+ }); });
4791
4857
  this.addListener("loadInteractiveGlobal", function (globalState) {
4792
4858
  _this.managedState.globalInteractiveState = parseJSONIfString(globalState);
4793
4859
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@concord-consortium/lara-interactive-api",
3
- "version": "1.5.0",
3
+ "version": "1.6.0-pre.1",
4
4
  "description": "LARA Interactive API client and types",
5
5
  "main": "./index.js",
6
6
  "types": "./index-bundle.d.ts",