From 06e16eef123818d2ef831cc0864fd19fa91db97d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matheus=20Bregu=C3=AAz?= Date: Wed, 14 Jul 2021 15:57:12 -0300 Subject: [PATCH] feat: Add Google DataStudio embed (#2293) Co-authored-by: Tom Moor --- app/embeds/GoogleDataStudio.js | 39 ++++++++++++++++++++++++++++ app/embeds/GoogleDataStudio.test.js | 19 ++++++++++++++ app/embeds/index.js | 8 ++++++ public/images/google-datastudio.png | Bin 0 -> 3718 bytes 4 files changed, 66 insertions(+) create mode 100644 app/embeds/GoogleDataStudio.js create mode 100644 app/embeds/GoogleDataStudio.test.js create mode 100644 public/images/google-datastudio.png diff --git a/app/embeds/GoogleDataStudio.js b/app/embeds/GoogleDataStudio.js new file mode 100644 index 00000000..24c00b6b --- /dev/null +++ b/app/embeds/GoogleDataStudio.js @@ -0,0 +1,39 @@ +// @flow +import * as React from "react"; +import Image from "components/Image"; +import Frame from "./components/Frame"; + +const URL_REGEX = new RegExp( + "^https?://datastudio.google.com/(embed|u/0)/reporting/(.*)/page/(.*)(/edit)?$" +); + +type Props = {| + attrs: {| + href: string, + matches: string[], + |}, +|}; + +export default class GoogleDataStudio extends React.Component { + static ENABLED = [URL_REGEX]; + + render() { + return ( + + } + canonicalUrl={this.props.attrs.href} + title="Google Data Studio" + border + /> + ); + } +} diff --git a/app/embeds/GoogleDataStudio.test.js b/app/embeds/GoogleDataStudio.test.js new file mode 100644 index 00000000..29a52cc6 --- /dev/null +++ b/app/embeds/GoogleDataStudio.test.js @@ -0,0 +1,19 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import GoogleDataStudio from "./GoogleDataStudio"; + +describe("GoogleDataStudio", () => { + const match = GoogleDataStudio.ENABLED[0]; + test("to be enabled on share link", () => { + expect( + "https://datastudio.google.com/embed/reporting/aab01789-f3a2-4ff3-9cba-c4c94c4a92e8/page/7zFD".match( + match + ) + ).toBeTruthy(); + }); + + test("to not be enabled elsewhere", () => { + expect("https://datastudio.google.com/u/0/".match(match)).toBe(null); + expect("https://datastudio.google.com".match(match)).toBe(null); + expect("https://www.google.com".match(match)).toBe(null); + }); +}); diff --git a/app/embeds/index.js b/app/embeds/index.js index ecb7fdd6..7e359806 100644 --- a/app/embeds/index.js +++ b/app/embeds/index.js @@ -11,6 +11,7 @@ import Descript from "./Descript"; import Figma from "./Figma"; import Framer from "./Framer"; import Gist from "./Gist"; +import GoogleDataStudio from "./GoogleDataStudio"; import GoogleDocs from "./GoogleDocs"; import GoogleDrawings from "./GoogleDrawings"; import GoogleDrive from "./GoogleDrive"; @@ -148,6 +149,13 @@ export default [ component: GoogleSlides, matcher: matcher(GoogleSlides), }, + { + title: "Google Data Studio", + keywords: "business intelligence", + icon: () => , + component: GoogleDataStudio, + matcher: matcher(GoogleDataStudio), + }, { title: "InVision", keywords: "design prototype", diff --git a/public/images/google-datastudio.png b/public/images/google-datastudio.png new file mode 100644 index 0000000000000000000000000000000000000000..739a1fcb31fc80fd109b650887e4ed5cf13521ce GIT binary patch literal 3718 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