import { useEntitySetContext } from "components/EntitySetProvider"; import { generateKeyBetween } from "fractional-indexing"; import { useCallback, useEffect, useState } from "react"; import { useEntity, useReplicache } from "src/replicache"; import { useUIState } from "src/useUIState"; import { BlockProps } from "./Block"; import { v7 } from "uuid"; import { useSmoker } from "components/Toast"; import { Separator } from "components/Layout"; import { Input } from "components/Input"; import { isUrl } from "src/utils/isURL"; import { elementId } from "src/utils/elementId"; import { deleteBlock } from "./DeleteBlock"; import { focusBlock } from "src/utils/focusBlock"; import { useDrag } from "src/hooks/useDrag"; import { BlockEmbedSmall } from "components/Icons/BlockEmbedSmall"; import { CheckTiny } from "components/Icons/CheckTiny"; export const EmbedBlock = (props: BlockProps & { preview?: boolean }) => { let { permissions } = useEntitySetContext(); let { rep } = useReplicache(); let url = useEntity(props.entityID, "embed/url"); let isCanvasBlock = props.pageType === "canvas"; let isSelected = useUIState((s) => s.selectedBlocks.find((b) => b.value === props.entityID), ); let height = useEntity(props.entityID, "embed/height")?.data.value || 360; let heightOnDragEnd = useCallback( (dragPosition: { x: number; y: number }) => { rep?.mutate.assertFact({ entity: props.entityID, attribute: "embed/height", data: { type: "number", value: height + dragPosition.y, }, }); }, [props, rep, height], ); let heightHandle = useDrag({ onDragEnd: heightOnDragEnd }); useEffect(() => { if (props.preview) return; let input = document.getElementById(elementId.block(props.entityID).input); if (isSelected) { input?.focus(); } else input?.blur(); }, [isSelected, props.entityID, props.preview]); if (!url) { if (!permissions.write) return null; return ( ); } if (props.preview) return null; return (