Skip to content

Commit

Permalink
review: addressed review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
wyattjoh committed Sep 2, 2020
1 parent f11835b commit 9ec30b9
Show file tree
Hide file tree
Showing 13 changed files with 184 additions and 202 deletions.
2 changes: 1 addition & 1 deletion src/core/client/embed/PymControl.ts
Expand Up @@ -15,7 +15,7 @@ export const defaultPymControlFactory: PymControlFactory = (config) =>
new PymControl(config);

export default class PymControl {
public pym: pym.Parent;
private pym: pym.Parent;
private cleanups: CleanupCallback[];

constructor(config: PymControlConfig) {
Expand Down
5 changes: 2 additions & 3 deletions src/core/client/embed/StreamEmbed.ts
Expand Up @@ -12,6 +12,7 @@ import {
withConfig,
withEventEmitter,
withIOSSafariWidthWorkaround,
withKeypressEvent,
withLiveCommentCount,
withPymStorage,
withSetCommentID,
Expand All @@ -22,7 +23,6 @@ import PymControl, {
defaultPymControlFactory,
PymControlFactory,
} from "./PymControl";
import hookUpWindowEvents from "./WindowEvents";

export interface StreamEmbedConfig {
storyID?: string;
Expand Down Expand Up @@ -150,6 +150,7 @@ export class StreamEmbed {
withPymStorage(localStorage, "localStorage"),
withPymStorage(sessionStorage, "sessionStorage"),
withConfig(externalConfig),
withKeypressEvent,
];

const query = stringifyQuery({
Expand All @@ -168,8 +169,6 @@ export class StreamEmbed {
decorators: streamDecorators,
url,
});

hookUpWindowEvents(this.pymControl);
}
}

Expand Down
17 changes: 0 additions & 17 deletions src/core/client/embed/WindowEvents.ts

This file was deleted.

9 changes: 5 additions & 4 deletions src/core/client/embed/decorators/index.ts
@@ -1,9 +1,10 @@
export { Decorator, CleanupCallback } from "./types";
export { default as withAutoHeight } from "./withAutoHeight";
export { default as withClickEvent } from "./withClickEvent";
export { default as withSetCommentID } from "./withSetCommentID";
export { default as withEventEmitter } from "./withEventEmitter";
export { default as withPymStorage } from "./withPymStorage";
export { default as withConfig } from "./withConfig";
export { default as withLiveCommentCount } from "./withLiveCommentCount";
export { default as withEventEmitter } from "./withEventEmitter";
export { default as withIOSSafariWidthWorkaround } from "./withIOSSafariWidthWorkaround";
export { default as withKeypressEvent } from "./withKeypressEvent";
export { default as withLiveCommentCount } from "./withLiveCommentCount";
export { default as withPymStorage } from "./withPymStorage";
export { default as withSetCommentID } from "./withSetCommentID";
22 changes: 22 additions & 0 deletions src/core/client/embed/decorators/withKeypressEvent.ts
@@ -0,0 +1,22 @@
import { Decorator } from "./types";

const withKeypressEvent: Decorator = (pym) => {
const handleKeypress = (e: KeyboardEvent) => {
const payload = {
key: e.key,
shiftKey: e.shiftKey,
};

pym.sendMessage("keypress", JSON.stringify(payload));
};

document.addEventListener("keypress", handleKeypress);

// Return cleanup callback.
return () => {
// Remove the event listeners.
document.removeEventListener("keypress", handleKeypress);
};
};

export default withKeypressEvent;
25 changes: 13 additions & 12 deletions src/core/client/framework/helpers/index.ts
@@ -1,17 +1,18 @@
export { default as getViewer } from "./getViewer";
export { default as getViewerSourceID } from "./getViewerSourceID";
export { default as getURLWithCommentID } from "./getURLWithCommentID";
export { default as urls } from "./urls";
export { default as createContextHOC } from "./createContextHOC";
export { default as redirectOAuth2 } from "./redirectOAuth2";
export { default as getParamsFromHashAndClearIt } from "./getParamsFromHashAndClearIt";
export { default as getParamsFromHash } from "./getParamsFromHash";
export { default as clearHash } from "./clearHash";
export { default as roleIsAtLeast } from "./roleIsAtLeast";
export { default as resolveStoryURL } from "./resolveStoryURL";
export { default as createContextHOC } from "./createContextHOC";
export { default as detectCountScript } from "./detectCountScript";
export { default as potentiallyInjectAxe } from "./potentiallyInjectAxe";
export { default as getModerationLink, QUEUE_NAME } from "./getModerationLink";
export { default as getParamsFromHash } from "./getParamsFromHash";
export { default as getParamsFromHashAndClearIt } from "./getParamsFromHashAndClearIt";
export { default as getURLWithCommentID } from "./getURLWithCommentID";
export { default as getViewer } from "./getViewer";
export { default as getViewerSourceID } from "./getViewerSourceID";
export { default as injectConditionalPolyfills } from "./injectConditionalPolyfills";
export { default as onPymMessage } from "./onPymMessage";
export { default as polyfillCSSVars } from "./polyfillCSSVars";
export { default as polyfillIntlLocale } from "./polyfillIntlLocale";
export { default as getModerationLink, QUEUE_NAME } from "./getModerationLink";
export { default as potentiallyInjectAxe } from "./potentiallyInjectAxe";
export { default as redirectOAuth2 } from "./redirectOAuth2";
export { default as resolveStoryURL } from "./resolveStoryURL";
export { default as roleIsAtLeast } from "./roleIsAtLeast";
export { default as urls } from "./urls";
20 changes: 20 additions & 0 deletions src/core/client/framework/helpers/onPymMessage.ts
@@ -0,0 +1,20 @@
import { Child, MessageCallback } from "pym.js";

function onPymMessage(
child: Child,
messageType: string,
callback: MessageCallback
) {
child.onMessage(messageType, callback);
return () => {
const index = child.messageHandlers[messageType].indexOf(callback);
if (index > -1) {
child.messageHandlers[messageType].splice(index, 1);
if (child.messageHandlers[messageType].length === 0) {
delete child.messageHandlers[messageType];
}
}
};
}

export default onPymMessage;
10 changes: 2 additions & 8 deletions src/core/client/framework/lib/bootstrap/createManaged.tsx
Expand Up @@ -8,6 +8,7 @@ import { Environment, RecordSource, Store } from "relay-runtime";
import { v1 as uuid } from "uuid";

import { LanguageCode } from "coral-common/helpers/i18n";
import { onPymMessage } from "coral-framework/helpers";
import polyfillIntlLocale from "coral-framework/helpers/polyfillIntlLocale";
import { getBrowserInfo } from "coral-framework/lib/browserInfo";
import { ErrorReporter } from "coral-framework/lib/errors";
Expand Down Expand Up @@ -303,14 +304,7 @@ export default async function createManaged({
let registerClickFarAway: ClickFarAwayRegister | undefined;
if (pym) {
registerClickFarAway = (cb) => {
pym.onMessage("click", cb);
// Return unlisten callback.
return () => {
const index = pym.messageHandlers.click.indexOf(cb);
if (index > -1) {
pym.messageHandlers.click.splice(index, 1);
}
};
return onPymMessage(pym, "click", cb);
};
}

Expand Down

0 comments on commit 9ec30b9

Please sign in to comment.