You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
695 B
32 lines
695 B
// This hook allows a component to signal that it's done rendering in a way that |
|
// can be used by e.g. our embed code to determine correct iframe height |
|
|
|
let renderSignalReceived = false; |
|
|
|
type Callback = () => void; |
|
|
|
let onInitialRender: Callback; |
|
|
|
export const afterInitialRender = (callback: Callback) => { |
|
if (renderSignalReceived) { |
|
callback(); |
|
} else { |
|
onInitialRender = callback; |
|
} |
|
}; |
|
|
|
export const useRenderSignal = () => { |
|
return () => { |
|
if (renderSignalReceived) { |
|
return; |
|
} |
|
|
|
renderSignalReceived = true; |
|
|
|
if (typeof onInitialRender !== 'undefined') { |
|
window.requestAnimationFrame(() => { |
|
onInitialRender(); |
|
}); |
|
} |
|
}; |
|
};
|
|
|