@servicetitan/web-components 31.3.1 → 31.4.0
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/dist/event-bus.js +1 -0
- package/dist/event-bus.js.map +1 -1
- package/dist/register-headless.d.ts +6 -4
- package/dist/register-headless.d.ts.map +1 -1
- package/dist/register-headless.js.map +1 -1
- package/package.json +11 -11
- package/src/__tests__/event-bus.test.ts +1 -0
- package/src/event-bus.ts +1 -0
- package/src/register-headless.ts +11 -5
package/dist/event-bus.js
CHANGED
package/dist/event-bus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event-bus.ts"],"sourcesContent":["import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';\nimport mitt from 'mitt';\n\nimport { JSON, Serializable } from './types';\n\nexport const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');\n\nexport function typedEventBusToken<EventTypes extends Serializable<EventTypes>>() {\n return symbolToken<EventBus<EventTypes>>('EVENT_BUS_TOKEN');\n}\n\nexport type EventHandler<EventTypes, Event, T = never> = (\n data: [T] extends [never]\n ? Event extends SymbolToken<infer DataType>\n ? Serializable<DataType>\n : Event extends keyof EventTypes\n ? EventTypes[Event]\n : T\n : Serializable<T>\n) => void;\n\ntype JobPayload = JSON | void;\n\nexport type EventType = string | number | symbol;\nexport type SymbolTokenEventType<T, U extends EventType = EventType> =\n U extends SymbolToken<any> ? SymbolToken<T> : U;\n\nexport type JobEventHandler<Event> = (defer: {\n /**\n * Successfully complete a job.\n * @param result The value to return from the successfully completed job.\n */\n resolve(\n ...result: Event extends SymbolToken<infer ResultType>\n ? undefined extends ResultType\n ? [Serializable<ResultType>?]\n : [Serializable<ResultType>]\n : [JobPayload]\n ): void;\n /**\n * Fail a job.\n * @param reason The error to return from the failed job.\n */\n reject(reason?: string | Error): void;\n}) => void;\n\nexport class EventBus<EventTypes extends Serializable<EventTypes> = never> {\n job = {\n /**\n * Register a job event handler. Jobs event handlers return a result or an error.\n * @param event The job event to handle.\n * @param handler The handler to call when the event occurs. This handler is passed a `resolve` callback to return a successful result, and a `reject` callback to return an error.\n */\n on: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n },\n\n /**\n * Deregister a job event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.emitter.off(event, handler);\n },\n\n /**\n * Send a job event.\n * @param event The event to send.\n * @returns a Promise that resolves or rejects depending on whether the job completes successfully.\n */\n emit: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event) => {\n this.validateEvent(event);\n return new Promise<\n Event extends SymbolToken<infer ResultType> ? Serializable<ResultType> : JobPayload\n >((resolve, reject) => {\n this.emitter.emit(event, {\n resolve,\n reject: (reason?: string | Error) => {\n if (typeof reason === 'string' || reason instanceof Error) {\n reject(reason);\n } else {\n reject();\n }\n },\n });\n });\n },\n };\n\n private emitter = mitt<any>();\n\n /**\n * Register an event handler.\n * @param event The event to handle.\n * @param handler The handler to call when the event occurs.\n */\n on = <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n };\n\n /**\n * Deregister an event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off = <\n T extends Serializable<T> = never,\n Event extends SymbolToken<T> | keyof EventTypes = any,\n >(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.emitter.off(event, handler);\n };\n\n /**\n * Send an event.\n * @param event The event to send.\n * @param data The data to pass to the event's handler.\n */\n emit = <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n ...data: Event extends SymbolToken<any>\n ? undefined extends T\n ? [T?]\n : [T]\n : [EventTypes] extends [never]\n ? [T?]\n : Event extends keyof EventTypes\n ? undefined extends EventTypes[Event]\n ? [EventTypes[Event]?]\n : [EventTypes[Event]] extends [never]\n ? []\n : [EventTypes[Event]]\n : never\n ) => {\n this.validateEvent(event);\n this.emitter.emit(event, data[0]);\n };\n\n private validateEvent(event: any) {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const name = this.getName(event);\n if (name === undefined || /^[^:]+:.+/.test(name) || allowListedEvents.has(name)) {\n return;\n }\n\n throw new Error('event must have format {module}:{name}');\n }\n\n private getName(event: any) {\n if (typeof event === 'string') {\n return event;\n }\n if (typeof event === 'symbol') {\n return Symbol.keyFor(event) ?? '';\n }\n return undefined;\n }\n}\n\nconst allowListedEvents = new Set([\n ':widgets:message',\n '[EH] Module Link Clicked',\n '[EH] Module Loaded',\n '[internal] reset',\n 'blink',\n 'CLOSE_COMPONENT',\n 'CLOSE_JOB_EDIT_FLYOUT',\n 'close-troubleshooter',\n 'company-profile-request-save',\n 'company-profile-saved-error',\n 'company-profile-saved',\n 'dismiss-discrepancy-event',\n 'dismiss-discrepancy-map-event',\n 'dispatch-JobEditFlyout-fetchData',\n 'dispatch-pro-query-toggle-data',\n 'dispatch-pro-recieve-toggle-data',\n 'dispatch-pro-set-job-enabled',\n 'dispatchpro-fetchStatus',\n 'dispatchpro-open-issuereporter',\n 'DRAWER_CREATED_CUSTOMER',\n 'employees-emails-processed',\n 'employees-request-save',\n 'employees-saved-error',\n 'employees-saved',\n 'ium-ep-cancel-changes',\n 'ium-ep-form-can-be-submitted-change',\n 'ium-ep-save-changes',\n 'loaded',\n 'MESSAGE_TECHNICIAN',\n 'my-custom-event',\n 'NEW_EVENT',\n 'ON_WIDGET_INIT',\n 'OPEN_ASSIST_SCREEN',\n 'OPEN_CREATE_CUSTOMER_DRAWER',\n 'OPEN_DC_SIDE_PANEL_COMPONENT',\n 'OPEN_JOB_EDIT_FLYOUT',\n 'OPEN_RESCHEDULE_FLYOUT',\n 'open-troubleshooter',\n 'resolve-discrepancy-map-event',\n 'restore-discrepancy-event',\n 'setLabel',\n 'SHOW_POP_UP_MESSAGE',\n 'TEAMS_SELECTED',\n 'tech-is-dispatch-pro-change',\n 'technicians-emails-processed',\n 'technicians-request-save',\n 'technicians-saved-error',\n 'technicians-saved',\n 'timesheet-activity-saved',\n 'TOGGLE_DC_SIDE_PANEL_COMPONENT',\n 'updateUserEmail',\n 'VIEW_NON_JOB_EVENT',\n 'visibility',\n]);\n"],"names":["symbolToken","mitt","EVENT_BUS_TOKEN","typedEventBusToken","EventBus","validateEvent","event","process","env","NODE_ENV","name","getName","undefined","test","allowListedEvents","has","Error","Symbol","keyFor","job","on","handler","emitter","off","emit","Promise","resolve","reject","reason","data","Set"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,WAAW,QAAqB,0BAA0B;AACnE,OAAOC,UAAU,OAAO;AAIxB,OAAO,MAAMC,kBAAkBF,YAAsB,mBAAmB;AAExE,OAAO,SAASG;IACZ,OAAOH,YAAkC;AAC7C;AAqCA,OAAO,MAAMI;IA0GDC,cAAcC,KAAU,EAAE;QAC9B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;YACvC;QACJ;QAEA,MAAMC,OAAO,IAAI,CAACC,OAAO,CAACL;QAC1B,IAAII,SAASE,aAAa,YAAYC,IAAI,CAACH,SAASI,kBAAkBC,GAAG,CAACL,OAAO;YAC7E;QACJ;QAEA,MAAM,IAAIM,MAAM;IACpB;IAEQL,QAAQL,KAAU,EAAE;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC3B,OAAOA;QACX;QACA,IAAI,OAAOA,UAAU,UAAU;gBACpBW;YAAP,OAAOA,CAAAA,iBAAAA,OAAOC,MAAM,CAACZ,oBAAdW,4BAAAA,iBAAwB;QACnC;QACA,OAAOL;IACX;;QA9HAO,uBAAAA,OAAM;YACF;;;;SAIC,GACDC,IAAI,CACAd,OACAe;gBAEA,IAAI,CAAChB,aAAa,CAACC;gBACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;YAC3B;YAEA;;;;SAIC,GACDE,KAAK,CACDjB,OACAe;gBAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;YAC5B;YAEA;;;;SAIC,GACDG,MAAM,CAAoDlB;gBACtD,IAAI,CAACD,aAAa,CAACC;gBACnB,OAAO,IAAImB,QAET,CAACC,SAASC;oBACR,IAAI,CAACL,OAAO,CAACE,IAAI,CAAClB,OAAO;wBACrBoB;wBACAC,QAAQ,CAACC;4BACL,IAAI,OAAOA,WAAW,YAAYA,kBAAkBZ,OAAO;gCACvDW,OAAOC;4BACX,OAAO;gCACHD;4BACJ;wBACJ;oBACJ;gBACJ;YACJ;QACJ;QAEA,uBAAQL,WAAUrB;QAElB;;;;KAIC,GACDmB,uBAAAA,MAAK,CACDd,OACAe;YAEA,IAAI,CAAChB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;QAC3B;QAEA;;;;KAIC,GACDE,uBAAAA,OAAM,CAIFjB,OACAe;YAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;QAC5B;QAEA;;;;KAIC,GACDG,uBAAAA,QAAO,CACHlB,OACA,GAAGuB;YAcH,IAAI,CAACxB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACE,IAAI,CAAClB,OAAOuB,IAAI,CAAC,EAAE;QACpC;;AAwBJ;AAEA,MAAMf,oBAAoB,IAAIgB,IAAI;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH"}
|
|
1
|
+
{"version":3,"sources":["../src/event-bus.ts"],"sourcesContent":["import { symbolToken, SymbolToken } from '@servicetitan/react-ioc';\nimport mitt from 'mitt';\n\nimport { JSON, Serializable } from './types';\n\nexport const EVENT_BUS_TOKEN = symbolToken<EventBus>('EVENT_BUS_TOKEN');\n\nexport function typedEventBusToken<EventTypes extends Serializable<EventTypes>>() {\n return symbolToken<EventBus<EventTypes>>('EVENT_BUS_TOKEN');\n}\n\nexport type EventHandler<EventTypes, Event, T = never> = (\n data: [T] extends [never]\n ? Event extends SymbolToken<infer DataType>\n ? Serializable<DataType>\n : Event extends keyof EventTypes\n ? EventTypes[Event]\n : T\n : Serializable<T>\n) => void;\n\ntype JobPayload = JSON | void;\n\nexport type EventType = string | number | symbol;\nexport type SymbolTokenEventType<T, U extends EventType = EventType> =\n U extends SymbolToken<any> ? SymbolToken<T> : U;\n\nexport type JobEventHandler<Event> = (defer: {\n /**\n * Successfully complete a job.\n * @param result The value to return from the successfully completed job.\n */\n resolve(\n ...result: Event extends SymbolToken<infer ResultType>\n ? undefined extends ResultType\n ? [Serializable<ResultType>?]\n : [Serializable<ResultType>]\n : [JobPayload]\n ): void;\n /**\n * Fail a job.\n * @param reason The error to return from the failed job.\n */\n reject(reason?: string | Error): void;\n}) => void;\n\nexport class EventBus<EventTypes extends Serializable<EventTypes> = never> {\n job = {\n /**\n * Register a job event handler. Jobs event handlers return a result or an error.\n * @param event The job event to handle.\n * @param handler The handler to call when the event occurs. This handler is passed a `resolve` callback to return a successful result, and a `reject` callback to return an error.\n */\n on: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n },\n\n /**\n * Deregister a job event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off: <Event extends SymbolToken<any> | keyof EventTypes>(\n event: Event,\n handler: JobEventHandler<Event>\n ) => {\n this.emitter.off(event, handler);\n },\n\n /**\n * Send a job event.\n * @param event The event to send.\n * @returns a Promise that resolves or rejects depending on whether the job completes successfully.\n */\n emit: <Event extends SymbolToken<any> | keyof EventTypes>(event: Event) => {\n this.validateEvent(event);\n return new Promise<\n Event extends SymbolToken<infer ResultType> ? Serializable<ResultType> : JobPayload\n >((resolve, reject) => {\n this.emitter.emit(event, {\n resolve,\n reject: (reason?: string | Error) => {\n if (typeof reason === 'string' || reason instanceof Error) {\n reject(reason);\n } else {\n reject();\n }\n },\n });\n });\n },\n };\n\n private emitter = mitt<any>();\n\n /**\n * Register an event handler.\n * @param event The event to handle.\n * @param handler The handler to call when the event occurs.\n */\n on = <T extends Serializable<T> = never, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.validateEvent(event);\n this.emitter.on(event, handler);\n };\n\n /**\n * Deregister an event handler.\n * @param event The previously registered event.\n * @param handler The previously registered handler.\n */\n off = <\n T extends Serializable<T> = never,\n Event extends SymbolToken<T> | keyof EventTypes = any,\n >(\n event: SymbolTokenEventType<T, Event>,\n handler: EventHandler<EventTypes, Event, T>\n ) => {\n this.emitter.off(event, handler);\n };\n\n /**\n * Send an event.\n * @param event The event to send.\n * @param data The data to pass to the event's handler.\n */\n emit = <T extends Serializable<T>, Event extends SymbolToken<T> | keyof EventTypes = any>(\n event: SymbolTokenEventType<T, Event>,\n ...data: Event extends SymbolToken<any>\n ? undefined extends T\n ? [T?]\n : [T]\n : [EventTypes] extends [never]\n ? [T?]\n : Event extends keyof EventTypes\n ? undefined extends EventTypes[Event]\n ? [EventTypes[Event]?]\n : [EventTypes[Event]] extends [never]\n ? []\n : [EventTypes[Event]]\n : never\n ) => {\n this.validateEvent(event);\n this.emitter.emit(event, data[0]);\n };\n\n private validateEvent(event: any) {\n if (process.env.NODE_ENV === 'production') {\n return;\n }\n\n const name = this.getName(event);\n if (name === undefined || /^[^:]+:.+/.test(name) || allowListedEvents.has(name)) {\n return;\n }\n\n throw new Error('event must have format {module}:{name}');\n }\n\n private getName(event: any) {\n if (typeof event === 'string') {\n return event;\n }\n if (typeof event === 'symbol') {\n return Symbol.keyFor(event) ?? '';\n }\n return undefined;\n }\n}\n\nconst allowListedEvents = new Set([\n ':widgets:message',\n '[EH] Module Link Clicked',\n '[EH] Module Loaded',\n '[internal] reset',\n 'blink',\n 'CLOSE_COMPONENT',\n 'CLOSE_JOB_EDIT_FLYOUT',\n 'close-troubleshooter',\n 'company-profile-request-save',\n 'company-profile-saved-error',\n 'company-profile-saved',\n 'dismiss-discrepancy-event',\n 'dismiss-discrepancy-map-event',\n 'dispatch-JobEditFlyout-fetchData',\n 'dispatch-pro-query-toggle-data',\n 'dispatch-pro-recieve-toggle-data',\n 'dispatch-pro-set-job-enabled',\n 'dispatchpro-fetchStatus',\n 'dispatchpro-open-issuereporter',\n 'DRAWER_CREATED_CUSTOMER',\n 'employees-emails-processed',\n 'employees-request-save',\n 'employees-saved-error',\n 'employees-saved',\n 'ium-ep-cancel-changes',\n 'ium-ep-form-can-be-submitted-change',\n 'ium-ep-save-changes',\n 'loaded',\n 'MESSAGE_TECHNICIAN',\n 'my-custom-event',\n 'NEW_EVENT',\n 'NonJobEventSelectedEvent',\n 'ON_WIDGET_INIT',\n 'OPEN_ASSIST_SCREEN',\n 'OPEN_CREATE_CUSTOMER_DRAWER',\n 'OPEN_DC_SIDE_PANEL_COMPONENT',\n 'OPEN_JOB_EDIT_FLYOUT',\n 'OPEN_RESCHEDULE_FLYOUT',\n 'open-troubleshooter',\n 'resolve-discrepancy-map-event',\n 'restore-discrepancy-event',\n 'setLabel',\n 'SHOW_POP_UP_MESSAGE',\n 'TEAMS_SELECTED',\n 'tech-is-dispatch-pro-change',\n 'technicians-emails-processed',\n 'technicians-request-save',\n 'technicians-saved-error',\n 'technicians-saved',\n 'timesheet-activity-saved',\n 'TOGGLE_DC_SIDE_PANEL_COMPONENT',\n 'updateUserEmail',\n 'VIEW_NON_JOB_EVENT',\n 'visibility',\n]);\n"],"names":["symbolToken","mitt","EVENT_BUS_TOKEN","typedEventBusToken","EventBus","validateEvent","event","process","env","NODE_ENV","name","getName","undefined","test","allowListedEvents","has","Error","Symbol","keyFor","job","on","handler","emitter","off","emit","Promise","resolve","reject","reason","data","Set"],"mappings":";;;;;;;;;;;;;AAAA,SAASA,WAAW,QAAqB,0BAA0B;AACnE,OAAOC,UAAU,OAAO;AAIxB,OAAO,MAAMC,kBAAkBF,YAAsB,mBAAmB;AAExE,OAAO,SAASG;IACZ,OAAOH,YAAkC;AAC7C;AAqCA,OAAO,MAAMI;IA0GDC,cAAcC,KAAU,EAAE;QAC9B,IAAIC,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;YACvC;QACJ;QAEA,MAAMC,OAAO,IAAI,CAACC,OAAO,CAACL;QAC1B,IAAII,SAASE,aAAa,YAAYC,IAAI,CAACH,SAASI,kBAAkBC,GAAG,CAACL,OAAO;YAC7E;QACJ;QAEA,MAAM,IAAIM,MAAM;IACpB;IAEQL,QAAQL,KAAU,EAAE;QACxB,IAAI,OAAOA,UAAU,UAAU;YAC3B,OAAOA;QACX;QACA,IAAI,OAAOA,UAAU,UAAU;gBACpBW;YAAP,OAAOA,CAAAA,iBAAAA,OAAOC,MAAM,CAACZ,oBAAdW,4BAAAA,iBAAwB;QACnC;QACA,OAAOL;IACX;;QA9HAO,uBAAAA,OAAM;YACF;;;;SAIC,GACDC,IAAI,CACAd,OACAe;gBAEA,IAAI,CAAChB,aAAa,CAACC;gBACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;YAC3B;YAEA;;;;SAIC,GACDE,KAAK,CACDjB,OACAe;gBAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;YAC5B;YAEA;;;;SAIC,GACDG,MAAM,CAAoDlB;gBACtD,IAAI,CAACD,aAAa,CAACC;gBACnB,OAAO,IAAImB,QAET,CAACC,SAASC;oBACR,IAAI,CAACL,OAAO,CAACE,IAAI,CAAClB,OAAO;wBACrBoB;wBACAC,QAAQ,CAACC;4BACL,IAAI,OAAOA,WAAW,YAAYA,kBAAkBZ,OAAO;gCACvDW,OAAOC;4BACX,OAAO;gCACHD;4BACJ;wBACJ;oBACJ;gBACJ;YACJ;QACJ;QAEA,uBAAQL,WAAUrB;QAElB;;;;KAIC,GACDmB,uBAAAA,MAAK,CACDd,OACAe;YAEA,IAAI,CAAChB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACF,EAAE,CAACd,OAAOe;QAC3B;QAEA;;;;KAIC,GACDE,uBAAAA,OAAM,CAIFjB,OACAe;YAEA,IAAI,CAACC,OAAO,CAACC,GAAG,CAACjB,OAAOe;QAC5B;QAEA;;;;KAIC,GACDG,uBAAAA,QAAO,CACHlB,OACA,GAAGuB;YAcH,IAAI,CAACxB,aAAa,CAACC;YACnB,IAAI,CAACgB,OAAO,CAACE,IAAI,CAAClB,OAAOuB,IAAI,CAAC,EAAE;QACpC;;AAwBJ;AAEA,MAAMf,oBAAoB,IAAIgB,IAAI;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACH"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Entries } from './common';
|
|
2
|
+
import type { EventBus } from './event-bus';
|
|
2
3
|
import { Serializable } from './types';
|
|
3
|
-
type HeadlessCallbackArgs<
|
|
4
|
-
|
|
4
|
+
type HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<Entries, 'ldService' | 'logService'> & {
|
|
5
|
+
eventBus?: TEventBus;
|
|
6
|
+
mfeData?: Serializable<TMfeData>;
|
|
5
7
|
};
|
|
6
|
-
export type HeadlessCallback<
|
|
7
|
-
export declare function registerHeadless(connectedCallback?: HeadlessCallback
|
|
8
|
+
export type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (params: HeadlessCallbackArgs<TMfeData, TEventBus>) => void;
|
|
9
|
+
export declare function registerHeadless(connectedCallback?: HeadlessCallback, disconnectedCallback?: HeadlessCallback): void;
|
|
8
10
|
export {};
|
|
9
11
|
//# sourceMappingURL=register-headless.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"register-headless.d.ts","sourceRoot":"","sources":["../src/register-headless.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAiB,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,KAAK,oBAAoB,CAAC,QAAQ,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,IAAI,CAC7E,OAAO,EACP,WAAW,GAAG,YAAY,CAC7B,GAAG;IACA,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,gBAAgB,CAAC,QAAQ,GAAG,GAAG,EAAE,SAAS,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAClF,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,KAChD,IAAI,CAAC;AAEV,wBAAgB,gBAAgB,CAC5B,iBAAiB,CAAC,EAAE,gBAAgB,EACpC,oBAAoB,CAAC,EAAE,gBAAgB,QAmE1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport type { Log } from '@servicetitan/log-service';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<
|
|
1
|
+
{"version":3,"sources":["../src/register-headless.ts"],"sourcesContent":["import type { LDService } from '@servicetitan/launchdarkly-service';\nimport type { Entries, IWebComponent } from './common';\nimport type { EventBus } from './event-bus';\nimport type { Log } from '@servicetitan/log-service';\nimport { Serializable } from './types';\n\ntype HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<\n Entries,\n 'ldService' | 'logService'\n> & {\n eventBus?: TEventBus;\n mfeData?: Serializable<TMfeData>;\n};\nexport type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (\n params: HeadlessCallbackArgs<TMfeData, TEventBus>\n) => void;\n\nexport function registerHeadless(\n connectedCallback?: HeadlessCallback,\n disconnectedCallback?: HeadlessCallback\n) {\n class Headless extends HTMLElement implements IWebComponent {\n private ldService?: LDService;\n private logService?: Log;\n private eventBus?: EventBus;\n private readonly readyPromise: Promise<void>;\n private resolveReadyPromise!: () => void;\n\n constructor() {\n super();\n this.readyPromise = new Promise(resolve => {\n this.resolveReadyPromise = resolve;\n });\n }\n\n provide = (entries: Entries) => {\n this.ldService = entries.ldService;\n this.logService = entries.logService;\n this.eventBus = entries.eventBus;\n this.resolveReadyPromise();\n };\n\n async connectedCallback() {\n await this.readyPromise;\n connectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n async disconnectedCallback() {\n await this.readyPromise;\n disconnectedCallback?.({\n ...this.services,\n mfeData: this.mfeData,\n });\n }\n\n connectedMoveCallback() {\n /*\n * Defining connectedMoveCallback prevents connectedCallback or disconnectedCallback\n * from running when the element is moved in the DOM\n * https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#custom_element_lifecycle_callbacks\n */\n }\n\n private get services() {\n return {\n ldService: this.ldService,\n logService: this.logService,\n eventBus: this.eventBus,\n };\n }\n\n private get mfeData() {\n return JSON.parse(this.dataset.mfeData ?? '{}');\n }\n }\n\n if (!WEB_COMPONENT_NAME) {\n // eslint-disable-next-line no-console\n console.error('\"WEB_COMPONENT_NAME\" is not defined!');\n return;\n }\n\n window.customElements.define(`headless-${WEB_COMPONENT_NAME}`, Headless);\n}\n"],"names":["registerHeadless","connectedCallback","disconnectedCallback","Headless","HTMLElement","readyPromise","services","mfeData","connectedMoveCallback","ldService","logService","eventBus","JSON","parse","dataset","constructor","resolveReadyPromise","provide","entries","Promise","resolve","WEB_COMPONENT_NAME","console","error","window","customElements","define"],"mappings":";;;;;;;;;;;;;AAiBA,OAAO,SAASA,iBACZC,iBAAoC,EACpCC,oBAAuC;IAEvC,MAAMC,iBAAiBC;QAqBnB,MAAMH,oBAAoB;YACtB,MAAM,IAAI,CAACI,YAAY;YACvBJ,8BAAAA,wCAAAA,kBAAoB;gBAChB,GAAG,IAAI,CAACK,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEA,MAAML,uBAAuB;YACzB,MAAM,IAAI,CAACG,YAAY;YACvBH,iCAAAA,2CAAAA,qBAAuB;gBACnB,GAAG,IAAI,CAACI,QAAQ;gBAChBC,SAAS,IAAI,CAACA,OAAO;YACzB;QACJ;QAEAC,wBAAwB;QACpB;;;;aAIC,GACL;QAEA,IAAYF,WAAW;YACnB,OAAO;gBACHG,WAAW,IAAI,CAACA,SAAS;gBACzBC,YAAY,IAAI,CAACA,UAAU;gBAC3BC,UAAU,IAAI,CAACA,QAAQ;YAC3B;QACJ;QAEA,IAAYJ,UAAU;gBACA;YAAlB,OAAOK,KAAKC,KAAK,CAAC,CAAA,wBAAA,IAAI,CAACC,OAAO,CAACP,OAAO,cAApB,mCAAA,wBAAwB;QAC9C;QAhDAQ,aAAc;YACV,KAAK,IAPT,uBAAQN,aAAR,KAAA,IACA,uBAAQC,cAAR,KAAA,IACA,uBAAQC,YAAR,KAAA,IACA,uBAAiBN,gBAAjB,KAAA,IACA,uBAAQW,uBAAR,KAAA,IASAC,uBAAAA,WAAU,CAACC;gBACP,IAAI,CAACT,SAAS,GAAGS,QAAQT,SAAS;gBAClC,IAAI,CAACC,UAAU,GAAGQ,QAAQR,UAAU;gBACpC,IAAI,CAACC,QAAQ,GAAGO,QAAQP,QAAQ;gBAChC,IAAI,CAACK,mBAAmB;YAC5B;YAVI,IAAI,CAACX,YAAY,GAAG,IAAIc,QAAQC,CAAAA;gBAC5B,IAAI,CAACJ,mBAAmB,GAAGI;YAC/B;QACJ;IA4CJ;IAEA,IAAI,CAACC,oBAAoB;QACrB,sCAAsC;QACtCC,QAAQC,KAAK,CAAC;QACd;IACJ;IAEAC,OAAOC,cAAc,CAACC,MAAM,CAAC,CAAC,SAAS,EAAEL,oBAAoB,EAAElB;AACnE"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@servicetitan/web-components",
|
|
3
|
-
"version": "31.
|
|
3
|
+
"version": "31.4.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"src"
|
|
16
16
|
],
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@servicetitan/error-boundary": "31.
|
|
18
|
+
"@servicetitan/error-boundary": "31.4.0",
|
|
19
19
|
"lodash.get": "~4.4.2",
|
|
20
20
|
"mitt": "~3.0.1",
|
|
21
21
|
"semver": "~7.7.2"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@servicetitan/anvil2": "^1.
|
|
24
|
+
"@servicetitan/anvil2": "^1.40.3",
|
|
25
25
|
"@servicetitan/design-system": "~14.5.3",
|
|
26
|
-
"@servicetitan/launchdarkly-service": "31.
|
|
27
|
-
"@servicetitan/log-service": "31.
|
|
28
|
-
"@servicetitan/react-ioc": "31.
|
|
26
|
+
"@servicetitan/launchdarkly-service": "31.4.0",
|
|
27
|
+
"@servicetitan/log-service": "31.4.0",
|
|
28
|
+
"@servicetitan/react-ioc": "31.4.0",
|
|
29
29
|
"@testing-library/dom": "^10.4.0",
|
|
30
30
|
"@testing-library/jest-dom": "^6.6.3",
|
|
31
31
|
"@testing-library/react": "^16.3.0",
|
|
@@ -41,11 +41,11 @@
|
|
|
41
41
|
"shadow-dom-testing-library": "^1.12.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@servicetitan/anvil2": ">=1.
|
|
44
|
+
"@servicetitan/anvil2": ">=1.40.3",
|
|
45
45
|
"@servicetitan/design-system": ">=14.5.3",
|
|
46
|
-
"@servicetitan/launchdarkly-service": "31.
|
|
47
|
-
"@servicetitan/log-service": "31.
|
|
48
|
-
"@servicetitan/react-ioc": "31.
|
|
46
|
+
"@servicetitan/launchdarkly-service": "31.4.0",
|
|
47
|
+
"@servicetitan/log-service": "31.4.0",
|
|
48
|
+
"@servicetitan/react-ioc": "31.4.0",
|
|
49
49
|
"history": "~4.10.1",
|
|
50
50
|
"react": ">=17.0.2",
|
|
51
51
|
"react-dom": ">=17.0.2"
|
|
@@ -67,5 +67,5 @@
|
|
|
67
67
|
"cli": {
|
|
68
68
|
"webpack": false
|
|
69
69
|
},
|
|
70
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "21360511d426098c7231809ca33b13ecd11f16dd"
|
|
71
71
|
}
|
package/src/event-bus.ts
CHANGED
package/src/register-headless.ts
CHANGED
|
@@ -4,14 +4,20 @@ import type { EventBus } from './event-bus';
|
|
|
4
4
|
import type { Log } from '@servicetitan/log-service';
|
|
5
5
|
import { Serializable } from './types';
|
|
6
6
|
|
|
7
|
-
type HeadlessCallbackArgs<
|
|
8
|
-
|
|
7
|
+
type HeadlessCallbackArgs<TMfeData, TEventBus extends EventBus = EventBus> = Pick<
|
|
8
|
+
Entries,
|
|
9
|
+
'ldService' | 'logService'
|
|
10
|
+
> & {
|
|
11
|
+
eventBus?: TEventBus;
|
|
12
|
+
mfeData?: Serializable<TMfeData>;
|
|
9
13
|
};
|
|
10
|
-
export type HeadlessCallback<
|
|
14
|
+
export type HeadlessCallback<TMfeData = any, TEventBus extends EventBus = EventBus> = (
|
|
15
|
+
params: HeadlessCallbackArgs<TMfeData, TEventBus>
|
|
16
|
+
) => void;
|
|
11
17
|
|
|
12
18
|
export function registerHeadless(
|
|
13
|
-
connectedCallback?: HeadlessCallback
|
|
14
|
-
disconnectedCallback?: HeadlessCallback
|
|
19
|
+
connectedCallback?: HeadlessCallback,
|
|
20
|
+
disconnectedCallback?: HeadlessCallback
|
|
15
21
|
) {
|
|
16
22
|
class Headless extends HTMLElement implements IWebComponent {
|
|
17
23
|
private ldService?: LDService;
|