From 04f03b7f3bf10a104c23689ab9717176b8a9d6ad Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 9 Aug 2018 18:36:21 +0200 Subject: [PATCH 1/3] Put ref and root className to first div --- .../stream/components/Comment/Comment.css | 3 + .../stream/components/Comment/Comment.tsx | 2 +- .../__snapshots__/Comment.spec.tsx.snap | 1 + .../__snapshots__/TopBar.spec.tsx.snap | 12 +- .../test/__snapshots__/loadMore.spec.tsx.snap | 125 +++++++++++------ .../__snapshots__/permalinkView.spec.tsx.snap | 62 ++++++--- .../permalinkViewAssetNotFound.spec.tsx.snap | 6 +- ...permalinkViewCommentNotFound.spec.tsx.snap | 49 ++++--- .../__snapshots__/renderReplies.spec.tsx.snap | 80 +++++++---- .../__snapshots__/renderStream.spec.tsx.snap | 56 +++++--- .../showAllReplies.spec.tsx.snap | 127 ++++++++++++------ src/core/client/ui/components/Flex/Flex.css | 5 + src/core/client/ui/components/Flex/Flex.tsx | 8 +- .../Flex/__snapshots__/Flex.spec.tsx.snap | 30 +++-- 14 files changed, 376 insertions(+), 190 deletions(-) diff --git a/src/core/client/stream/components/Comment/Comment.css b/src/core/client/stream/components/Comment/Comment.css index c4bf8c532..5c0f67095 100644 --- a/src/core/client/stream/components/Comment/Comment.css +++ b/src/core/client/stream/components/Comment/Comment.css @@ -1,3 +1,6 @@ +.root { + width: 100%; +} .footer { margin-top: var(--spacing-unit); } diff --git a/src/core/client/stream/components/Comment/Comment.tsx b/src/core/client/stream/components/Comment/Comment.tsx index 932cd7155..b47c8ac02 100644 --- a/src/core/client/stream/components/Comment/Comment.tsx +++ b/src/core/client/stream/components/Comment/Comment.tsx @@ -20,7 +20,7 @@ export interface CommentProps { const Comment: StatelessComponent = props => { return ( -
+
{props.author && props.author.username && {props.author.username}} diff --git a/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap index c86fc9284..d9a3e46f0 100644 --- a/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap +++ b/src/core/client/stream/components/Comment/__snapshots__/Comment.spec.tsx.snap @@ -2,6 +2,7 @@ exports[`renders username and body 1`] = `
diff --git a/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap b/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap index 6c5348d0b..2e6694137 100644 --- a/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap +++ b/src/core/client/stream/components/Comment/__snapshots__/TopBar.spec.tsx.snap @@ -1,9 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders correctly on big screens 1`] = ` -
+
Hello World @@ -13,9 +15,11 @@ exports[`renders correctly on big screens 1`] = ` `; exports[`renders correctly on small screens 1`] = ` -
+
Hello World diff --git a/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap b/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap index 16b8d5fb6..fc1763910 100644 --- a/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap +++ b/src/core/client/stream/test/__snapshots__/loadMore.spec.tsx.snap @@ -1,17 +1,23 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`loads more comments 1`] = ` -
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
Show all Comments -
+
-
+
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
= props => { itemGutter, wrap, forwardRef, + children, ...rest } = props; @@ -75,12 +76,13 @@ const Flex: StatelessComponent = props => { classObject[(classes as any)[`direction${pascalCase(direction)}`]] = true; } - const classNames: string = cn(classes.root, className, classObject); + const rootClassNames: string = cn(classes.root, className); + const flexClassNames: string = cn(classes.flex, classObject); // The first div is required to support nested `Flex` components with itemGutters. return ( -
-
+
+
{children}
); }; diff --git a/src/core/client/ui/components/Flex/__snapshots__/Flex.spec.tsx.snap b/src/core/client/ui/components/Flex/__snapshots__/Flex.spec.tsx.snap index b1f72d74b..d96f60ebd 100644 --- a/src/core/client/ui/components/Flex/__snapshots__/Flex.spec.tsx.snap +++ b/src/core/client/ui/components/Flex/__snapshots__/Flex.spec.tsx.snap @@ -1,9 +1,11 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders correctly 1`] = ` -
+
Hello World @@ -13,9 +15,11 @@ exports[`renders correctly 1`] = ` `; exports[`renders with halfe item gutter 1`] = ` -
+
Hello World @@ -25,9 +29,11 @@ exports[`renders with halfe item gutter 1`] = ` `; exports[`renders with item gutter 1`] = ` -
+
Hello World @@ -37,9 +43,11 @@ exports[`renders with item gutter 1`] = ` `; exports[`renders with wrap 1`] = ` -
+
Hello World @@ -49,9 +57,11 @@ exports[`renders with wrap 1`] = ` `; exports[`renders with wrap reverse 1`] = ` -
+
Hello World From 3f64a0d1a64a14085a92fcd6385242c51e07e926 Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 9 Aug 2018 18:40:58 +0200 Subject: [PATCH 2/3] Support double itemGutters --- src/core/client/ui/components/Flex/Flex.css | 41 +++++++++++++++++++++ src/core/client/ui/components/Flex/Flex.mdx | 26 +++++++++++++ src/core/client/ui/components/Flex/Flex.tsx | 3 +- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/core/client/ui/components/Flex/Flex.css b/src/core/client/ui/components/Flex/Flex.css index 1b1c562a1..2e6914c7f 100644 --- a/src/core/client/ui/components/Flex/Flex.css +++ b/src/core/client/ui/components/Flex/Flex.css @@ -31,6 +31,30 @@ } } +.doubleItemGutter { + & > * { + margin: 0 calc(2 * var(--spacing-unit)) 0 0 !important; + } + &.directionRowReverse { + & > * { + margin: 0 0 0 calc(2 * var(--spacing-unit)) !important; + } + } + &.directionColumn { + & > * { + margin: 0 0 calc(2 * var(--spacing-unit)) 0 !important; + } + } + &.directionColumnReverese { + & > * { + margin: calc(2 * var(--spacing-unit)) 0 0 0 !important; + } + } + & > *:last-child { + margin: 0 !important; + } +} + .itemGutter { & > * { margin: 0 var(--spacing-unit) 0 0 !important; @@ -98,6 +122,23 @@ margin-left: calc(0.5 * var(--spacing-unit)) !important; } } + + &:not(.directionColumn).doubleItemGutter { + &:not(:empty) { + margin-top: calc(-2 * var(--spacing-unit)) !important; + } + & > * { + margin-top: calc(2 * var(--spacing-unit)) !important; + } + } + &.directionColumn.doubleItemGutter { + &:not(:empty) { + margin-left: calc(-2 * var(--spacing-unit)) !important; + } + &.doubleItemGutter > * { + margin-left: calc(2 * var(--spacing-unit)) !important; + } + } } .justifyFlexStart { diff --git a/src/core/client/ui/components/Flex/Flex.mdx b/src/core/client/ui/components/Flex/Flex.mdx index 84eeb8240..7ca59bb54 100644 --- a/src/core/client/ui/components/Flex/Flex.mdx +++ b/src/core/client/ui/components/Flex/Flex.mdx @@ -33,3 +33,29 @@ import Button from '../Button' + +## Item Gutter + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/core/client/ui/components/Flex/Flex.tsx b/src/core/client/ui/components/Flex/Flex.tsx index 9e69921c6..bf66f9084 100644 --- a/src/core/client/ui/components/Flex/Flex.tsx +++ b/src/core/client/ui/components/Flex/Flex.tsx @@ -25,7 +25,7 @@ interface InnerProps { | "space-evenly"; alignItems?: "flex-start" | "flex-end" | "center" | "baseline" | "stretch"; direction?: "row" | "column" | "row-reverse" | "column-reverse"; - itemGutter?: boolean | "half"; + itemGutter?: boolean | "half" | "double"; className?: string; wrap?: boolean | "reverse"; @@ -56,6 +56,7 @@ const Flex: StatelessComponent = props => { const classObject: Record = { [classes.itemGutter]: itemGutter === true, [classes.halfItemGutter]: itemGutter === "half", + [classes.doubleItemGutter]: itemGutter === "double", [classes.wrap]: wrap === true, [classes.wrapReverse]: wrap === "reverse", }; From 92a266363a0bc4ad47b9a8c6a214a127ae47590e Mon Sep 17 00:00:00 2001 From: Chi Vinh Le Date: Thu, 9 Aug 2018 19:40:45 +0200 Subject: [PATCH 3/3] Make UserBoxUnauthenticated responsive --- package-lock.json | 14 +++++----- package.json | 2 +- src/core/client/embed/index.html | 2 +- .../framework/lib/bootstrap/TalkContext.tsx | 5 ++++ .../stream/components/Comment/TopBar.tsx | 2 +- .../stream/components/Comment/Username.tsx | 2 +- .../PermalinkButton/PermalinkButton.tsx | 2 +- .../components/UserBoxUnauthenticated.tsx | 25 +++++++++-------- .../UserBoxUnauthenticated.spec.tsx.snap | 26 ++++++++++-------- src/core/client/stream/index.tsx | 4 ++- .../test/__snapshots__/loadMore.spec.tsx.snap | 20 -------------- .../__snapshots__/permalinkView.spec.tsx.snap | 10 ------- ...permalinkViewCommentNotFound.spec.tsx.snap | 10 ------- .../__snapshots__/renderReplies.spec.tsx.snap | 10 ------- .../__snapshots__/renderStream.spec.tsx.snap | 10 ------- .../showAllReplies.spec.tsx.snap | 20 -------------- .../ui/components/MatchMedia/MatchMedia.mdx | 14 +++++----- .../components/MatchMedia/MatchMedia.spec.tsx | 16 ++++++++--- .../ui/components/MatchMedia/MatchMedia.tsx | 27 +++++++++++++++---- .../__snapshots__/MatchMedia.spec.tsx.snap | 16 +++++++++-- 20 files changed, 105 insertions(+), 132 deletions(-) diff --git a/package-lock.json b/package-lock.json index 100de84ee..e2c77a532 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15001,9 +15001,9 @@ "dev": true }, "matchmediaquery": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.2.1.tgz", - "integrity": "sha1-IjxwBXk94D5HzpKxMoWnLEStos8=", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.0.tgz", + "integrity": "sha512-u0dlv+VENJ+3YepvwSPBieuvnA6DWfaYa/ctwysAR13y4XLJNyt7bEVKzNj/Nvjo+50d88Pj+xL9xaSo6JmX/w==", "dev": true, "requires": { "css-mediaquery": "^0.1.2" @@ -19584,13 +19584,13 @@ } }, "react-responsive": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-4.1.0.tgz", - "integrity": "sha512-ZuDraf0qsJlyiTwzeva+foHx83IP6SIhru9o7BvMwQ4ZHjRIL5WjdgVNNrKSRbmeWO9rEJoMpabei/5lJn8KaA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-5.0.0.tgz", + "integrity": "sha512-oEimZ0FTCC3/pjGDEBHOz06nWbBNDIbMGOdRYp6K9SBUmrqgNAX77hTiqvmRQeLyI97zz4F4kiaFRxFspDxE+w==", "dev": true, "requires": { "hyphenate-style-name": "^1.0.0", - "matchmediaquery": "^0.2.1", + "matchmediaquery": "^0.3.0", "prop-types": "^15.6.1" } }, diff --git a/package.json b/package.json index d546b9c17..afde65a13 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "react-final-form": "^3.6.4", "react-popper": "^1.0.0-beta.6", "react-relay": "github:coralproject/patched#react-relay", - "react-responsive": "^4.1.0", + "react-responsive": "^5.0.0", "react-test-renderer": "^16.4.1", "react-timeago": "^4.1.9", "react-with-state-props": "^2.0.4", diff --git a/src/core/client/embed/index.html b/src/core/client/embed/index.html index 10106ff8c..b579dab8f 100644 --- a/src/core/client/embed/index.html +++ b/src/core/client/embed/index.html @@ -16,7 +16,7 @@

Talk 5.0 – Embed Stream

-
+
diff --git a/src/core/client/framework/lib/bootstrap/TalkContext.tsx b/src/core/client/framework/lib/bootstrap/TalkContext.tsx index 90ed10530..75ddc974c 100644 --- a/src/core/client/framework/lib/bootstrap/TalkContext.tsx +++ b/src/core/client/framework/lib/bootstrap/TalkContext.tsx @@ -2,6 +2,7 @@ import { LocalizationProvider } from "fluent-react/compat"; import { MessageContext } from "fluent/compat"; import { Child as PymChild } from "pym.js"; import React, { StatelessComponent } from "react"; +import { MediaQueryMatchers } from "react-responsive"; import { Formatter } from "react-timeago"; import { Environment } from "relay-runtime"; @@ -18,6 +19,9 @@ export interface TalkContext { /** formatter for timeago. */ timeagoFormatter?: Formatter; + /** media query values for testing purposes */ + mediaQueryValues?: MediaQueryMatchers; + /** * A way to listen for clicks that are e.g. outside of the * current frame for `ClickOutside` @@ -48,6 +52,7 @@ export const TalkContextProvider: StatelessComponent<{ value={{ timeagoFormatter: value.timeagoFormatter, registerClickFarAway: value.registerClickFarAway, + mediaQueryValues: value.mediaQueryValues, }} > {children} diff --git a/src/core/client/stream/components/Comment/TopBar.tsx b/src/core/client/stream/components/Comment/TopBar.tsx index 2dfe6419d..a82dd0a28 100644 --- a/src/core/client/stream/components/Comment/TopBar.tsx +++ b/src/core/client/stream/components/Comment/TopBar.tsx @@ -14,7 +14,7 @@ export interface TopBarProps { const TopBar: StatelessComponent = props => { const rootClassName = cn(styles.root, props.className); return ( - + {matches => ( = props => { return ( - + {matches => ( { active={visible} size="small" > - + share diff --git a/src/core/client/stream/components/UserBoxUnauthenticated.tsx b/src/core/client/stream/components/UserBoxUnauthenticated.tsx index 37a22ee0f..9d838a510 100644 --- a/src/core/client/stream/components/UserBoxUnauthenticated.tsx +++ b/src/core/client/stream/components/UserBoxUnauthenticated.tsx @@ -3,6 +3,7 @@ import React, { StatelessComponent } from "react"; import { Button, Flex, Typography } from "talk-ui/components"; +import MatchMedia from "talk-ui/components/MatchMedia"; import * as styles from "./UserBoxUnauthenticated.css"; export interface UserBoxUnauthenticatedProps { @@ -15,18 +16,20 @@ const UserBoxUnauthenticated: StatelessComponent< > = props => { return ( - - - Join the conversation + + + + Join the conversation + + + + | - - - | - +
`; + +exports[`renders less than and great than correctly 1`] = ` + +
+ Hello World +
+
+`;