Skip to content

Commit

Permalink
feat(app): track sidebar open/close (#289)
Browse files Browse the repository at this point in the history
  • Loading branch information
Kohei Asai authored Mar 28, 2021
1 parent 2dc4587 commit 8abbd9e
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 4 deletions.
28 changes: 28 additions & 0 deletions components/floating-sidebar-button.spec.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,34 @@ describe("<FloatingSidebarButton>", () => {
expect(getByTestId("floating-sidebar")).not.toBeVisible();
});

it("calls props.onButtonClick() whenever the button is clicked", () => {
const onButtonClick = jest.fn();
const { getByTestId } = render(
<TestApp>
<FloatingSidebarButton
content={<div data-testid="content" />}
onButtonClick={onButtonClick}
data-testid="floating-sidebar-button"
/>
</TestApp>
);

act(() => {
fireEvent.click(getByTestId("floating-sidebar-button"));
});
act(() => {
fireEvent.click(getByTestId("floating-sidebar-button"));
});
act(() => {
fireEvent.click(getByTestId("floating-sidebar-button"));
});

expect(onButtonClick).toHaveBeenCalledTimes(3);
expect(onButtonClick).toHaveBeenNthCalledWith(1, expect.anything(), true);
expect(onButtonClick).toHaveBeenNthCalledWith(2, expect.anything(), false);
expect(onButtonClick).toHaveBeenNthCalledWith(3, expect.anything(), true);
});

describe("props.closeOnHashChange = true", () => {
it("hides the floating sidebar when a route change caused", () => {
let testAppElement!: TestAppElement;
Expand Down
7 changes: 6 additions & 1 deletion components/floating-sidebar-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,15 @@ import { Button, ButtonSize, ButtonVariant } from "./button";
export interface FloatingSidebarButtonProps extends React.Attributes {
closeOnRouteChange?: boolean;
content: React.ReactNode;
onButtonClick?: (e: React.MouseEvent, isMenuOpen: boolean) => void;
className?: string;
style?: React.CSSProperties;
}

export const FloatingSidebarButton: React.VFC<FloatingSidebarButtonProps> = ({
closeOnRouteChange = true,
content,
onButtonClick = () => {},
className,
...props
}) => {
Expand Down Expand Up @@ -50,7 +52,10 @@ export const FloatingSidebarButton: React.VFC<FloatingSidebarButtonProps> = ({
variant={ButtonVariant.inverted}
size={ButtonSize.xl}
icon={isMenuOpen ? <XIcon /> : <ListIcon />}
onClick={() => setMenuOpen((isMenuOpen) => !isMenuOpen)}
onClick={(e) => {
onButtonClick(e, !isMenuOpen);
setMenuOpen(!isMenuOpen);
}}
className={cx(
css`
position: fixed;
Expand Down
8 changes: 7 additions & 1 deletion components/page-layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ import { css, cx } from "@linaria/core";
import * as React from "react";
import { FormattedMessage } from "react-intl";
import { ParrotAnchor } from "./anchor";
import { FloatingSidebarButton } from "./floating-sidebar-button";
import {
FloatingSidebarButton,
FloatingSidebarButtonProps,
} from "./floating-sidebar-button";

export interface TwoColumnPageLayoutProps extends React.Attributes {
className?: string;
Expand Down Expand Up @@ -88,11 +91,13 @@ export const TwoColumnPageLayoutMain: React.FC<TwoColumnPageLayoutMainProps> = (
};

export interface TwoColumnPageLayoutAsideProps extends React.Attributes {
onFloatingSidebarButtonClick?: FloatingSidebarButtonProps["onButtonClick"];
className?: string;
style?: React.CSSProperties;
}

export const TwoColumnPageLayoutAside: React.FC<TwoColumnPageLayoutAsideProps> = ({
onFloatingSidebarButtonClick,
className,
children,
...props
Expand Down Expand Up @@ -126,6 +131,7 @@ export const TwoColumnPageLayoutAside: React.FC<TwoColumnPageLayoutAsideProps> =
</aside>

<FloatingSidebarButton
onButtonClick={onFloatingSidebarButtonClick}
content={children}
className={css`
display: none;
Expand Down
11 changes: 10 additions & 1 deletion pages/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
TwoColumnPageLayoutFooter,
TwoColumnPageLayoutMain,
} from "../components/page-layout";
import { useService } from "../components/service";
import { WEBSITE_NAME } from "../constants/app";
import { CACHE_HEADER_VALUE } from "../constants/cache";
import { AVAILABLE_LOCALES } from "../constants/locale";
Expand All @@ -31,6 +32,7 @@ interface ServerSideProps extends CommonServerSideProps {
}

const Page: NextPage<ServerSideProps> = (props) => {
const { userMonitoring } = useService();
const intl = useIntl();
const origin = useOrigin();
const {
Expand Down Expand Up @@ -83,7 +85,14 @@ const Page: NextPage<ServerSideProps> = (props) => {
/>
</TwoColumnPageLayoutMain>

<TwoColumnPageLayoutAside>
<TwoColumnPageLayoutAside
onFloatingSidebarButtonClick={(_, isMenuOpen) =>
userMonitoring.trackUiEvent(
isMenuOpen ? "open_aside" : "close_aside",
1
)
}
>
<AsideNavigation posts={posts} tableOfContents={tableOfContents} />
</TwoColumnPageLayoutAside>

Expand Down
11 changes: 10 additions & 1 deletion pages/posts/[slug].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
TwoColumnPageLayoutFooter,
TwoColumnPageLayoutMain,
} from "../../components/page-layout";
import { useService } from "../../components/service";
import { WEBSITE_NAME } from "../../constants/app";
import { CACHE_HEADER_VALUE } from "../../constants/cache";
import { AVAILABLE_LOCALES } from "../../constants/locale";
Expand All @@ -30,6 +31,7 @@ interface ServerSideProps extends CommonServerSideProps {
}

const Page: NextPage<ServerSideProps> = (props) => {
const { userMonitoring } = useService();
const origin = useOrigin();
const intl = useIntl();
const {
Expand Down Expand Up @@ -119,7 +121,14 @@ const Page: NextPage<ServerSideProps> = (props) => {
/>
</TwoColumnPageLayoutMain>

<TwoColumnPageLayoutAside>
<TwoColumnPageLayoutAside
onFloatingSidebarButtonClick={(_, isMenuOpen) =>
userMonitoring.trackUiEvent(
isMenuOpen ? "open_aside" : "close_aside",
1
)
}
>
<AsideNavigation posts={posts} tableOfContents={tableOfContents} />
</TwoColumnPageLayoutAside>

Expand Down

1 comment on commit 8abbd9e

@vercel
Copy link

@vercel vercel bot commented on 8abbd9e Mar 28, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.