cal.pub0.org/packages/embeds/embed-react/src/Cal.tsx

46 lines
1.1 KiB
TypeScript
Raw Normal View History

2022-05-18 04:11:06 +00:00
/* eslint-disable prefer-const */
2022-03-31 08:45:47 +00:00
import { useEffect, useRef } from "react";
import useEmbed from "./useEmbed";
type CalProps = {
calOrigin?: string;
2022-03-31 08:45:47 +00:00
calLink: string;
config?: any;
embedJsUrl?: string;
} & React.HTMLAttributes<HTMLDivElement>;
const Cal = function Cal(props: CalProps) {
const { calLink, calOrigin, config, embedJsUrl, ...restProps } = props;
if (!calLink) {
throw new Error("calLink is required");
}
const initializedRef = useRef(false);
2022-03-31 08:45:47 +00:00
const Cal = useEmbed(embedJsUrl);
const ref = useRef<HTMLDivElement>(null);
useEffect(() => {
if (!Cal || initializedRef.current) {
2022-03-31 08:45:47 +00:00
return;
}
initializedRef.current = true;
const element = ref.current;
let initConfig = {};
if (calOrigin) {
(initConfig as any).origin = calOrigin;
}
Cal("init", initConfig);
2022-03-31 08:45:47 +00:00
Cal("inline", {
elementOrSelector: element,
2022-03-31 08:45:47 +00:00
calLink,
config,
});
}, [Cal, calLink, config, calOrigin]);
2022-03-31 08:45:47 +00:00
if (!Cal) {
return <div {...restProps}>Loading {calLink} </div>;
2022-03-31 08:45:47 +00:00
}
return <div ref={ref} {...restProps}></div>;
};
export default Cal;