🩹(frontend) fix missing notification when state is clear
Notify iframe's parent while integrating Visio when state is cleared. Requested by Eleonore.
This commit is contained in:
committed by
aleb_the_flash
parent
66f307b7e8
commit
6324be9fd3
@@ -66,6 +66,7 @@ export const CreateMeetingButton = () => {
|
|||||||
setRoom(undefined)
|
setRoom(undefined)
|
||||||
setCallbackId(undefined)
|
setCallbackId(undefined)
|
||||||
setIsPending(false)
|
setIsPending(false)
|
||||||
|
popupManager.clearState()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPending) {
|
if (isPending) {
|
||||||
|
|||||||
@@ -24,6 +24,21 @@ export class PopupManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
private messageParent(type: ClientMessageType, data: any) {
|
||||||
|
window?.parent.postMessage(
|
||||||
|
{
|
||||||
|
type: type,
|
||||||
|
data: data,
|
||||||
|
},
|
||||||
|
'*'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
public clearState() {
|
||||||
|
this.messageParent(ClientMessageType.STATE_CLEAR, {})
|
||||||
|
}
|
||||||
|
|
||||||
public setupMessageListener(
|
public setupMessageListener(
|
||||||
onCallbackId: (id: string) => void,
|
onCallbackId: (id: string) => void,
|
||||||
onRoomData: (data: CallbackCreationRoomData) => void
|
onRoomData: (data: CallbackCreationRoomData) => void
|
||||||
@@ -39,18 +54,12 @@ export class PopupManager {
|
|||||||
case PopupMessageType.ROOM_DATA:
|
case PopupMessageType.ROOM_DATA:
|
||||||
if (!data?.room) return
|
if (!data?.room) return
|
||||||
onRoomData(data.room)
|
onRoomData(data.room)
|
||||||
window?.parent.postMessage(
|
this.messageParent(ClientMessageType.ROOM_CREATED, {
|
||||||
{
|
room: {
|
||||||
type: ClientMessageType.ROOM_CREATED,
|
url: getRouteUrl('room', data.room.slug),
|
||||||
data: {
|
...data.room,
|
||||||
room: {
|
|
||||||
url: getRouteUrl('room', data.room.slug),
|
|
||||||
...data.room,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
'*'
|
})
|
||||||
)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export type CallbackCreationRoomData = {
|
|||||||
|
|
||||||
export enum ClientMessageType {
|
export enum ClientMessageType {
|
||||||
ROOM_CREATED = 'ROOM_CREATED',
|
ROOM_CREATED = 'ROOM_CREATED',
|
||||||
|
STATE_CLEAR = 'STATE_CLEAR',
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PopupMessageData {
|
export interface PopupMessageData {
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ function App() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="group">
|
<div className="group">
|
||||||
<label>Visioconference</label>
|
<label>Visioconference</label>
|
||||||
<VisioCreateButton onRoomCreated={(data) => setRoomUrl(data.url)} />
|
<VisioCreateButton
|
||||||
|
onRoomCreated={(data) => setRoomUrl(data.url)}
|
||||||
|
onClear={() => setRoomUrl("")}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="group">
|
<div className="group">
|
||||||
<label>Description</label>
|
<label>Description</label>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ export type ConfigType = typeof DEFAULT_CONFIG
|
|||||||
|
|
||||||
export enum ClientMessageType {
|
export enum ClientMessageType {
|
||||||
ROOM_CREATED = 'ROOM_CREATED',
|
ROOM_CREATED = 'ROOM_CREATED',
|
||||||
|
STATE_CLEAR = 'STATE_CLEAR',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RoomData = {
|
export type RoomData = {
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import { DEFAULT_CONFIG } from '@/Config'
|
|||||||
|
|
||||||
export const VisioCreateButton = ({
|
export const VisioCreateButton = ({
|
||||||
onRoomCreated,
|
onRoomCreated,
|
||||||
|
onClear,
|
||||||
readOnly = false,
|
readOnly = false,
|
||||||
slug,
|
slug,
|
||||||
}: {
|
}: {
|
||||||
onRoomCreated: (roomData: RoomData) => void
|
onRoomCreated: (roomData: RoomData) => void
|
||||||
|
onClear: () => void
|
||||||
readOnly?: boolean
|
readOnly?: boolean
|
||||||
slug?: string
|
slug?: string
|
||||||
}) => {
|
}) => {
|
||||||
@@ -20,13 +22,15 @@ export const VisioCreateButton = ({
|
|||||||
const { type, data } = event.data
|
const { type, data } = event.data
|
||||||
if (type == ClientMessageType.ROOM_CREATED && data?.room) {
|
if (type == ClientMessageType.ROOM_CREATED && data?.room) {
|
||||||
onRoomCreated(data.room)
|
onRoomCreated(data.room)
|
||||||
|
} else if (type == ClientMessageType.STATE_CLEAR) {
|
||||||
|
onClear()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
window.addEventListener('message', onMessage)
|
window.addEventListener('message', onMessage)
|
||||||
return () => {
|
return () => {
|
||||||
window.removeEventListener('message', onMessage)
|
window.removeEventListener('message', onMessage)
|
||||||
}
|
}
|
||||||
}, [onRoomCreated])
|
}, [onRoomCreated, onClear])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
// eslint-disable-next-line jsx-a11y/iframe-has-title
|
// eslint-disable-next-line jsx-a11y/iframe-has-title
|
||||||
|
|||||||
Reference in New Issue
Block a user