* feat: add embed prerendering support and enhance event handling - Introduced `useIsEmbedPrerendering` hook to determine if the embed is in prerender mode. - Updated `useAvailabilityEvents` to prevent firing events during prerendering. - Added `bookerLoadedEvent` and `availabilityRefreshed` types to `EventDataMap`. - Implemented `useFirebookerLoadedEvent` to manage firing the booker loaded event conditionally. - Refactored event firing logic in `useSchedule` and `BookerWebWrapper` components to utilize new hooks. * feat: add embed prerendering support and enhance event handling - Introduced `useIsEmbedPrerendering` hook to determine if the embed is in prerender mode. - Updated `useAvailabilityEvents` to prevent firing events during prerendering. - Added `bookerLoadedEvent` and `availabilityRefreshed` types to `EventDataMap`. - Implemented `useFirebookerLoadedEvent` to manage firing the booker loaded event conditionally. - Refactored event firing logic in `useSchedule` and `BookerWebWrapper` components to utilize new hooks. * feat: enhance embed event handling and introduce link reopening detection - Added `useEmbedReopened` hook to track when the embed is reopened. - Updated `BookerWebWrapper` to reset event firing state upon embed reopening. - Refactored event firing logic to use `bookerViewed` instead of `bookerLoadedEvent`. - Introduced scheduling for event firing in `useSchedule` to ensure correct order of events during prerendering. * feat: add lifecycle diagrams for inline and modal embeds - Introduced `inline-embed-lifecycle.mermaid` and `modal-embed-lifecycle.mermaid` files to visualize the lifecycle events and states of inline and modal embeds. - Updated `LIFECYCLE.md` to reference the new diagrams and provide a clearer explanation of the embed lifecycle processes. - Added `modal-prerendering-flow.mermaid` to illustrate the prerendering flow for modal embeds. - Enhanced the routing playground with new features and improved event handling for availability and booking events. * refactor: update event handling for booker lifecycle events - Replaced `availabilityLoaded` event with `bookerReady` to better reflect the state when the booker view is fully loaded and ready for interaction. - Updated related documentation and diagrams to reflect changes in event triggers and descriptions. - Adjusted internal state management to track `viewId` instead of `reopenCount` for distinguishing between initial views and reopens. - Added tests for new event handling logic to ensure correct firing of `bookerViewed`, `bookerReopened`, and `bookerReady` events. * refactor: enhance embed event handling and state management - Updated event handling for booker lifecycle events, replacing `resetViewVariables` with `resetPageData` to manage page-specific state. - Introduced new utility functions for managing event firing states and reload initiation. - Refactored `fireBookerViewedEvent` and `fireBookerReadyEvent` to utilize the new state management functions. - Added comprehensive tests for the updated event handling logic and state resets to ensure correct functionality across various scenarios. * refactor: update embed iframe configuration and utility functions - Reduced `slotsStaleTimeMs` from 30 seconds to 10 seconds and `iframeForceReloadThresholdMs` from 100 seconds to 30 seconds for improved responsiveness. - Refactored utility functions to use `isBrowser` for client-side checks instead of `isClientSide`. - Removed unused `isPrerendering` function and updated related documentation for clarity. - Enhanced event handling by exporting `useBookerEmbedEvents` from the appropriate module for better accessibility. * refactor: update embed iframe configuration and utility functions - Reduced `slotsStaleTimeMs` from 30 seconds to 10 seconds and `iframeForceReloadThresholdMs` from 100 seconds to 30 seconds for improved responsiveness. - Refactored utility functions to use `isBrowser` for client-side checks instead of `isClientSide`. - Removed unused `isPrerendering` function and updated related documentation for clarity. - Enhanced event handling by exporting `useBookerEmbedEvents` from the appropriate module for better accessibility. * fix cubic feedback
41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
flowchart TB
|
|
subgraph Parent["Parent Page (embed.ts)"]
|
|
direction TB
|
|
CalAPI["Cal API<br/>(Cal.inline, Cal.modal, Cal.ui)"]
|
|
ActionMgr["ActionManager<br/>(Event Listener)"]
|
|
DoInIframe["doInIframe()<br/>(Command Sender)"]
|
|
Queue["iframeDoQueue[]<br/>(Command Buffer)"]
|
|
|
|
CalAPI --> DoInIframe
|
|
DoInIframe -->|"if !iframeReady"| Queue
|
|
Queue -->|"flush on ready"| DoInIframe
|
|
end
|
|
|
|
subgraph Transport["postMessage Transport"]
|
|
direction TB
|
|
ToIframe["parent.postMessage()<br/>{originator: 'CAL', method, arg}"]
|
|
ToParent["iframe.postMessage()<br/>{originator: 'CAL', type, data}"]
|
|
end
|
|
|
|
subgraph Iframe["Iframe (embed-iframe.ts)"]
|
|
direction TB
|
|
MsgListener["window.addEventListener('message')"]
|
|
Interface["interfaceWithParent<br/>{ui, parentKnowsIframeReady, connect}"]
|
|
SDKAction["sdkActionManager<br/>(Event Emitter)"]
|
|
EmbedStore["embedStore<br/>(State)"]
|
|
|
|
MsgListener --> Interface
|
|
Interface --> EmbedStore
|
|
SDKAction -->|"fire()"| ToParent
|
|
end
|
|
|
|
DoInIframe -->|"Commands"| ToIframe
|
|
ToIframe --> MsgListener
|
|
|
|
ToParent --> ActionMgr
|
|
|
|
style Parent fill:#e1f5fe,stroke:#01579b
|
|
style Iframe fill:#fff3e0,stroke:#e65100
|
|
style Transport fill:#f3e5f5,stroke:#7b1fa2
|
|
|