From 402638ca54de1f21031ac14a8b390e8c979cd240 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 7 May 2019 19:46:02 -0700 Subject: [PATCH] Added: Abstract public share embed support --- app/embeds/Abstract.js | 27 +++++++++++++++++ app/embeds/Abstract.test.js | 60 +++++++++++++++++++++++++++++++++++++ app/embeds/index.js | 2 ++ 3 files changed, 89 insertions(+) create mode 100644 app/embeds/Abstract.js create mode 100644 app/embeds/Abstract.test.js diff --git a/app/embeds/Abstract.js b/app/embeds/Abstract.js new file mode 100644 index 000000000..a6403b903 --- /dev/null +++ b/app/embeds/Abstract.js @@ -0,0 +1,27 @@ +// @flow +import * as React from 'react'; +import Frame from './components/Frame'; + +type Props = { + url: string, + matches: string[], +}; + +export default class Abstract extends React.Component { + static ENABLED = [ + new RegExp('https?://share.(?:go)?abstract.com/(.*)$'), + new RegExp('https?://app.(?:go)?abstract.com/(?:share|embed)/(.*)$'), + ]; + + render() { + const { matches } = this.props; + const shareId = matches[1]; + + return ( + + ); + } +} diff --git a/app/embeds/Abstract.test.js b/app/embeds/Abstract.test.js new file mode 100644 index 000000000..7231e09ca --- /dev/null +++ b/app/embeds/Abstract.test.js @@ -0,0 +1,60 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import embeds from '.'; + +const { Abstract } = embeds; + +describe('Abstract', () => { + const match = Abstract.ENABLED[0]; + const match2 = Abstract.ENABLED[1]; + test('to be enabled on share subdomain link', () => { + expect( + 'https://share.goabstract.com/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match + ) + ).toBeTruthy(); + + expect( + 'https://share.abstract.com/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match + ) + ).toBeTruthy(); + }); + + test('to be enabled on share link', () => { + expect( + 'https://app.goabstract.com/share/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match2 + ) + ).toBeTruthy(); + + expect( + 'https://app.abstract.com/share/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match2 + ) + ).toBeTruthy(); + }); + + test('to be enabled on embed link', () => { + expect( + 'https://app.goabstract.com/embed/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match2 + ) + ).toBeTruthy(); + expect( + 'https://app.abstract.com/embed/aaec8bba-f473-4f64-96e7-bff41c70ff8a'.match( + match2 + ) + ).toBeTruthy(); + }); + + test('to not be enabled elsewhere', () => { + expect('https://abstract.com'.match(match)).toBe(null); + expect('https://goabstract.com'.match(match)).toBe(null); + expect('https://app.goabstract.com'.match(match)).toBe(null); + expect('https://abstract.com/features'.match(match)).toBe(null); + expect('https://app.abstract.com/dashboard'.match(match)).toBe(null); + expect('https://abstract.com/pricing'.match(match)).toBe(null); + expect('https://goabstract.com/pricing'.match(match)).toBe(null); + expect('https://www.goabstract.com/pricing'.match(match)).toBe(null); + }); +}); diff --git a/app/embeds/index.js b/app/embeds/index.js index 5bff86bf8..5bc00df67 100644 --- a/app/embeds/index.js +++ b/app/embeds/index.js @@ -1,4 +1,5 @@ // @flow +import Abstract from './Abstract'; import Airtable from './Airtable'; import Codepen from './Codepen'; import Figma from './Figma'; @@ -21,6 +22,7 @@ import Vimeo from './Vimeo'; import YouTube from './YouTube'; export default { + Abstract, Airtable, Codepen, Figma,