From 6828718cf01b383802ac8deaafc6e20c969a6495 Mon Sep 17 00:00:00 2001 From: Jack Woodgate <67034721+lampy255@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:45:21 +1200 Subject: [PATCH] feat: Add Google Maps Embed (#5667) (#5673) Co-authored-by: Tom Moor --- public/images/google-maps.png | Bin 0 -> 8570 bytes shared/editor/embeds/GoogleMaps.test.ts | 18 ++++++++++++++++++ shared/editor/embeds/GoogleMaps.tsx | 16 ++++++++++++++++ shared/editor/embeds/index.tsx | 8 ++++++++ 4 files changed, 42 insertions(+) create mode 100644 public/images/google-maps.png create mode 100644 shared/editor/embeds/GoogleMaps.test.ts create mode 100644 shared/editor/embeds/GoogleMaps.tsx diff --git a/public/images/google-maps.png b/public/images/google-maps.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b6a1863139b08e2a1967cf8f93367732128c18 GIT binary patch literal 8570 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 Dqyxxg literal 0 HcmV?d00001 diff --git a/shared/editor/embeds/GoogleMaps.test.ts b/shared/editor/embeds/GoogleMaps.test.ts new file mode 100644 index 000000000..20bf3372e --- /dev/null +++ b/shared/editor/embeds/GoogleMaps.test.ts @@ -0,0 +1,18 @@ +import GoogleMaps from "./GoogleMaps"; + +describe("GoogleMaps", () => { + const match = GoogleMaps.ENABLED[0]; + + test("to be enabled", () => { + expect( + "https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d50977.036904273686!2d174.74383592605594!3d-37.00825027293197!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x6d0d4fe87ef3d5bb%3A0xf00ef62249b7130!2sAuckland%20Airport!5e0!3m2!1sen!2snz!4v1691573100204!5m2!1sen!2snz".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://www.google.com/maps/embed".match(match)).toBe(null); + expect("https://goo.gl/maps/".match(match)).toBe(null); + }); +}); diff --git a/shared/editor/embeds/GoogleMaps.tsx b/shared/editor/embeds/GoogleMaps.tsx new file mode 100644 index 000000000..9039f6e0a --- /dev/null +++ b/shared/editor/embeds/GoogleMaps.tsx @@ -0,0 +1,16 @@ +import * as React from "react"; +import Frame from "../components/Frame"; +import { EmbedProps as Props } from "."; + +function GoogleMaps(props: Props) { + const { matches } = props.attrs; + const source = matches[0]; + + return ; +} + +GoogleMaps.ENABLED = [ + new RegExp("^https?://www\\.google\\.com/maps/embed\\?(.*)$"), +]; + +export default GoogleMaps; diff --git a/shared/editor/embeds/index.tsx b/shared/editor/embeds/index.tsx index a8b1437c4..f7c1ed1f1 100644 --- a/shared/editor/embeds/index.tsx +++ b/shared/editor/embeds/index.tsx @@ -27,6 +27,7 @@ import GoogleDrawings from "./GoogleDrawings"; import GoogleDrive from "./GoogleDrive"; import GoogleForms from "./GoogleForms"; import GoogleLookerStudio from "./GoogleLookerStudio"; +import GoogleMaps from "./GoogleMaps"; import GoogleSheets from "./GoogleSheets"; import GoogleSlides from "./GoogleSlides"; import Grist from "./Grist"; @@ -219,6 +220,13 @@ const embeds: EmbedDescriptor[] = [ icon: Diagrams.net, component: Diagrams, }), + new EmbedDescriptor({ + title: "Google Maps", + keywords: "maps", + icon: Google Maps, + component: GoogleMaps, + visible: true, + }), new EmbedDescriptor({ title: "Google Drawings", keywords: "drawings",