From 5e6ba13423fef7620fdbe168efa63c2dc3bff01b Mon Sep 17 00:00:00 2001 From: netpro2k <netpro2k@gmail.com> Date: Fri, 2 Nov 2018 15:51:38 -0700 Subject: [PATCH] Cleanup suggestions from PR --- src/react-components/photo-message.js | 44 ++++++++++++++++++++++++ src/react-components/presence-log.js | 48 ++------------------------- src/scene-entry-manager.js | 1 - src/utils/phoenix-utils.js | 5 +++ src/utils/share.js | 3 ++ 5 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 src/react-components/photo-message.js diff --git a/src/react-components/photo-message.js b/src/react-components/photo-message.js new file mode 100644 index 000000000..ac4cfbceb --- /dev/null +++ b/src/react-components/photo-message.js @@ -0,0 +1,44 @@ +import React from "react"; +import PropTypes from "prop-types"; + +import styles from "../assets/stylesheets/presence-log.scss"; +import classNames from "classnames"; + +import { share } from "../utils/share"; +import { getLandingPageForPhoto } from "../utils/phoenix-utils"; + +export default function PhotoMessage({ name, body: { src: url }, className, maySpawn, hubId }) { + const landingPageUrl = getLandingPageForPhoto(url); + const onShareClicked = share.bind(null, { + url: landingPageUrl, + title: `Taken in #hubs, join me at https://hub.link/${hubId}` + }); + return ( + <div className={className}> + {maySpawn && <button className={classNames(styles.iconButton, styles.share)} onClick={onShareClicked} />} + <div className={styles.mediaBody}> + <span> + <b>{name}</b> + </span> + <span> + {"took a "} + <b> + <a href={landingPageUrl} target="_blank" rel="noopener noreferrer"> + photo + </a> + </b>. + </span> + </div> + <a href={landingPageUrl} target="_blank" rel="noopener noreferrer"> + <img src={url} /> + </a> + </div> + ); +} +PhotoMessage.propTypes = { + name: PropTypes.string, + maySpawn: PropTypes.bool, + body: PropTypes.object, + className: PropTypes.string, + hubId: PropTypes.string +}; diff --git a/src/react-components/presence-log.js b/src/react-components/presence-log.js index 88f411b8f..4426ac46e 100644 --- a/src/react-components/presence-log.js +++ b/src/react-components/presence-log.js @@ -3,51 +3,9 @@ import PropTypes from "prop-types"; import styles from "../assets/stylesheets/presence-log.scss"; import classNames from "classnames"; import { FormattedMessage } from "react-intl"; -import ChatMessage from "./chat-message"; -import { share } from "../utils/share"; - -function SpawnPhotoMessage({ name, body: { src: url }, className, maySpawn, hubId }) { - let landingPageUrl = new URL(url); - const [hostname, port] = process.env.RETICULUM_SERVER.split(":"); - console.log(hostname, port, landingPageUrl.port); - landingPageUrl.hostname = hostname; - if (port) landingPageUrl.port = port; - landingPageUrl.pathname = landingPageUrl.pathname.replace(".png", ".html"); - landingPageUrl = landingPageUrl.toString(); - const onShareClicked = share.bind(null, { - url: landingPageUrl, - title: `Taken in #hubs, join me at https://hub.link/${hubId}` - }); - return ( - <div className={className}> - {maySpawn && <button className={classNames(styles.iconButton, styles.share)} onClick={onShareClicked} />} - <div className={styles.mediaBody}> - <span> - <b>{name}</b> - </span> - <span> - {"took a "} - <b> - <a href={landingPageUrl} target="_blank" rel="noopener noreferrer"> - photo - </a> - </b>. - </span> - </div> - <a href={landingPageUrl} target="_blank" rel="noopener noreferrer"> - <img src={url} /> - </a> - </div> - ); -} -SpawnPhotoMessage.propTypes = { - name: PropTypes.string, - maySpawn: PropTypes.bool, - body: PropTypes.object, - className: PropTypes.string, - hubId: PropTypes.string -}; +import ChatMessage from "./chat-message"; +import PhotoMessage from "./photo-message"; export default class PresenceLog extends Component { static propTypes = { @@ -100,7 +58,7 @@ export default class PresenceLog extends Component { ); case "spawn": { return ( - <SpawnPhotoMessage + <PhotoMessage key={e.key} name={e.name} className={classNames(entryClasses, styles.media)} diff --git a/src/scene-entry-manager.js b/src/scene-entry-manager.js index ed8679104..461f42107 100644 --- a/src/scene-entry-manager.js +++ b/src/scene-entry-manager.js @@ -259,7 +259,6 @@ export default class SceneEntryManager { }); this.scene.addEventListener("photo_taken", e => { - console.log(e); this.hubChannel.sendMessage({ src: e.detail }, "spawn"); }); }; diff --git a/src/utils/phoenix-utils.js b/src/utils/phoenix-utils.js index 19619599a..5d5307db8 100644 --- a/src/utils/phoenix-utils.js +++ b/src/utils/phoenix-utils.js @@ -43,3 +43,8 @@ export function getReticulumFetchUrl(path) { return path; } } + +export function getLandingPageForPhoto(photoUrl) { + const parsedUrl = new URL(photoUrl); + return getReticulumFetchUrl(parsedUrl.pathname.replace(".png", ".html") + parsedUrl.search); +} diff --git a/src/utils/share.js b/src/utils/share.js index 80cf4ed02..e563431ff 100644 --- a/src/utils/share.js +++ b/src/utils/share.js @@ -1,3 +1,6 @@ +/** + * Wraps navigator.share with a fallback to twitter for unsupported browsers + */ export function share(opts) { if (navigator.share) { return navigator.share(opts); -- GitLab