aboutsummaryrefslogtreecommitdiff
path: root/apps/web/app/(canvas)/lib/createEmbeds.ts
diff options
context:
space:
mode:
Diffstat (limited to 'apps/web/app/(canvas)/lib/createEmbeds.ts')
-rw-r--r--apps/web/app/(canvas)/lib/createEmbeds.ts52
1 files changed, 46 insertions, 6 deletions
diff --git a/apps/web/app/(canvas)/lib/createEmbeds.ts b/apps/web/app/(canvas)/lib/createEmbeds.ts
index 322e697e..0db3c71b 100644
--- a/apps/web/app/(canvas)/lib/createEmbeds.ts
+++ b/apps/web/app/(canvas)/lib/createEmbeds.ts
@@ -2,8 +2,8 @@ import { AssetRecordType, Editor, TLAsset, TLAssetId, TLBookmarkShape, TLExterna
export default async function createEmbedsFromUrl({url, point, sources, editor}: {
url: string
- point: VecLike | undefined
- sources: TLExternalContentSource[] | undefined
+ point?: VecLike | undefined
+ sources?: TLExternalContentSource[] | undefined
editor: Editor
}){
@@ -50,10 +50,18 @@ export default async function createEmbedsFromUrl({url, point, sources, editor}:
type: "url",
url,
});
- const fetchWebsite = await (await fetch(`https://unfurl-bookmark.pruthvirajthinks.workers.dev/?url=${url}`)).json()
- if (fetchWebsite.title) bookmarkAsset.props.title = fetchWebsite.title;
- if (fetchWebsite.image) bookmarkAsset.props.image = fetchWebsite.image;
- if (fetchWebsite.description) bookmarkAsset.props.description = fetchWebsite.description;
+ const fetchWebsite: {
+ title?: string;
+ image?: string;
+ description?: string;
+ } = await (await fetch(`/api/unfirlsite?website=${url}`, {
+ method: "POST"
+ })).json()
+ if (bookmarkAsset){
+ if (fetchWebsite.title) bookmarkAsset.props.title = fetchWebsite.title;
+ if (fetchWebsite.image) bookmarkAsset.props.image = fetchWebsite.image;
+ if (fetchWebsite.description) bookmarkAsset.props.description = fetchWebsite.description;
+ }
if (!bookmarkAsset) throw Error("Could not create an asset");
asset = bookmarkAsset;
} catch (e) {
@@ -79,6 +87,38 @@ export default async function createEmbedsFromUrl({url, point, sources, editor}:
});
}
+function isURL(str: string) {
+ try {
+ new URL(str);
+ return true;
+ } catch {
+ return false;
+ }
+}
+
+
+export function handleExternalDroppedContent({text, editor}: {text:string, editor: Editor}){
+ const position = editor.inputs.shiftKey
+ ? editor.inputs.currentPagePoint
+ : editor.getViewportPageBounds().center;
+
+ if (isURL(text)){
+ createEmbedsFromUrl({editor, url: text})
+ } else{
+ editor.createShape({
+ type: "text",
+ x: position.x - 75,
+ y: position.y - 75,
+ props: {
+ text: text,
+ size: "s",
+ textAlign: "start",
+ },
+ });
+
+ }
+}
+
function centerSelectionAroundPoint(editor: Editor, position: VecLike) {
// Re-position shapes so that the center of the group is at the provided point
const viewportPageBounds = editor.getViewportPageBounds()