Skip to content
Snippets Groups Projects
Commit 1352feca authored by Jorik Schellekens's avatar Jorik Schellekens
Browse files

design nitpicks

parent 0a868536
No related branches found
No related tags found
No related merge requests found
...@@ -36,8 +36,12 @@ const App: React.FC = () => { ...@@ -36,8 +36,12 @@ const App: React.FC = () => {
</> </>
); );
// Some hacky uri decoding
location.href = decodeURIComponent(location.href);
const [hash, setHash] = useState(location.hash); const [hash, setHash] = useState(location.hash);
console.log(hash);
useEffect(() => (window.onhashchange = () => setHash(location.hash)), []); useEffect(() => (window.onhashchange = () => setHash(location.hash)), []);
if (hash) { if (hash) {
......
...@@ -14,11 +14,15 @@ See the License for the specific language governing permissions and ...@@ -14,11 +14,15 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
@import "../color-scheme"; @import '../color-scheme';
.avatar { .avatar {
border-radius: 100%; border-radius: 100%;
border: 1px solid $borders; border: 1px solid $borders;
height: 50px; height: 60px;
width: 50px; width: 60px;
}
.avatarNoCrop {
border-radius: 0;
} }
...@@ -45,12 +45,14 @@ limitations under the License. ...@@ -45,12 +45,14 @@ limitations under the License.
} }
p { p {
margin-right: 20px; margin-right: 8px;
text-align: left; text-align: left;
} }
.button { .button {
width: 50%; height: 40px;
width: 130px;
margin-top: 16px;
} }
} }
......
...@@ -41,7 +41,8 @@ function validateURL(values: FormValues): Partial<FormValues> { ...@@ -41,7 +41,8 @@ function validateURL(values: FormValues): Partial<FormValues> {
try { try {
string().url().parse(values.HSUrl); string().url().parse(values.HSUrl);
} catch { } catch {
errors.HSUrl = 'This must be a valid url'; errors.HSUrl =
'This must be a valid homeserver URL, starting with https://';
} }
return errors; return errors;
} }
...@@ -74,7 +75,7 @@ const HomeserverOptions: React.FC<IProps> = ({ link }: IProps) => { ...@@ -74,7 +75,7 @@ const HomeserverOptions: React.FC<IProps> = ({ link }: IProps) => {
muted={!values.HSUrl} muted={!values.HSUrl}
type="text" type="text"
name="HSUrl" name="HSUrl"
placeholder="https://example.com" placeholder="Preferred homeserver URL"
/> />
{values.HSUrl && !errors.HSUrl ? ( {values.HSUrl && !errors.HSUrl ? (
<Button secondary type="submit"> <Button secondary type="submit">
...@@ -92,12 +93,9 @@ const HomeserverOptions: React.FC<IProps> = ({ link }: IProps) => { ...@@ -92,12 +93,9 @@ const HomeserverOptions: React.FC<IProps> = ({ link }: IProps) => {
<div> <div>
<h3>About {link.identifier}</h3> <h3>About {link.identifier}</h3>
<p> <p>
Select a homeserver to learn more about{' '} A homeserver will show you metadata about the link, like
{link.identifier}. <br /> a description. Homeservers will be able to relate your
The homeserver will provide metadata about the link such IP to things you've opened invites for in matrix.to.
as an avatar or description. Homeservers will be able to
relate your IP to resources you've opened invites for in
matrix.to.
</p> </p>
</div> </div>
<img <img
......
...@@ -29,13 +29,13 @@ interface IProps extends React.InputHTMLAttributes<HTMLElement> { ...@@ -29,13 +29,13 @@ interface IProps extends React.InputHTMLAttributes<HTMLElement> {
const Input: React.FC<IProps> = ({ className, muted, ...props }) => { const Input: React.FC<IProps> = ({ className, muted, ...props }) => {
const [field, meta] = useField(props); const [field, meta] = useField(props);
const error = const errorBool = meta.touched && meta.value !== '' && meta.error;
meta.touched && meta.error ? ( const error = errorBool ? (
<div className="inputError">{meta.error}</div> <div className="inputError">{meta.error}</div>
) : null; ) : null;
const classNames = classnames('input', className, { const classNames = classnames('input', className, {
error: meta.error, error: errorBool,
inputMuted: !!muted, inputMuted: !!muted,
}); });
......
...@@ -14,16 +14,22 @@ See the License for the specific language governing permissions and ...@@ -14,16 +14,22 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
@import '../color-scheme';
.inviteTile { .inviteTile {
display: grid; display: grid;
row-gap: 24px; row-gap: 24px;
.inviteTileClientSelection { .inviteTileClientSelection {
margin: 0 5%; margin: 0 auto;
display: grid; display: grid;
justify-content: space-between; justify-content: space-between;
row-gap: 20px; row-gap: 20px;
h2 + p {
color: $foreground;
}
} }
hr { hr {
......
...@@ -87,8 +87,8 @@ const InviteTile: React.FC<IProps> = ({ children, client, link }: IProps) => { ...@@ -87,8 +87,8 @@ const InviteTile: React.FC<IProps> = ({ children, client, link }: IProps) => {
advanced = ( advanced = (
<> <>
<hr /> <hr />
<h3>Almost done!</h3> <h2>Almost done!</h2>
<p>Pick a client to open {link.identifier}</p> <p>Great, pick a client below to confirm and continue</p>
<ClientSelection link={link} /> <ClientSelection link={link} />
</> </>
); );
......
...@@ -16,16 +16,15 @@ limitations under the License. ...@@ -16,16 +16,15 @@ limitations under the License.
.roomPreview { .roomPreview {
> .avatar { > .avatar {
margin-top: 20px; margin-bottom: 8px;
margin-bottom: 16px;
} }
> h1 { > h1 {
font-size: 20px; font-size: 24px;
margin-bottom: 4px; margin-bottom: 4px;
} }
} }
.roomTopic { .roomTopic {
padding-top: 32px; padding-top: 8px;
} }
...@@ -31,11 +31,15 @@ const RoomPreview: React.FC<IProps> = ({ room }: IProps) => { ...@@ -31,11 +31,15 @@ const RoomPreview: React.FC<IProps> = ({ room }: IProps) => {
: room.aliases : room.aliases
? room.aliases[0] ? room.aliases[0]
: room.room_id; : room.room_id;
const members =
room.num_joined_members > 0 ? (
<p>{room.num_joined_members.toLocaleString()} members</p>
) : null;
return ( return (
<div className="roomPreview"> <div className="roomPreview">
<RoomAvatar room={room} /> <RoomAvatar room={room} />
<h1>{room.name ? room.name : roomAlias}</h1> <h1>{room.name ? room.name : roomAlias}</h1>
<p>{room.num_joined_members.toLocaleString()} members</p> {members}
<p>{roomAlias}</p> <p>{roomAlias}</p>
</div> </div>
); );
......
...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and ...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
@import "../color-scheme"; @import '../color-scheme';
.textButton { .textButton {
background: none; background: none;
...@@ -24,4 +24,8 @@ limitations under the License. ...@@ -24,4 +24,8 @@ limitations under the License.
font-weight: normal; font-weight: normal;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
&:hover {
cursor: pointer;
}
} }
...@@ -37,4 +37,8 @@ limitations under the License. ...@@ -37,4 +37,8 @@ limitations under the License.
} }
} }
} }
&:hover {
cursor: pointer;
}
} }
...@@ -20,12 +20,11 @@ limitations under the License. ...@@ -20,12 +20,11 @@ limitations under the License.
width: 100%; width: 100%;
> .avatar { > .avatar {
margin-top: 20px; margin-bottom: 8px;
margin-bottom: 16px;
} }
h1 { h1 {
font-size: 20px; font-size: 24px;
margin-bottom: 4px; margin-bottom: 4px;
} }
......
...@@ -53,7 +53,11 @@ export const InviterPreview: React.FC<InviterPreviewProps> = ({ ...@@ -53,7 +53,11 @@ export const InviterPreview: React.FC<InviterPreviewProps> = ({
const avatar = user ? ( const avatar = user ? (
<UserAvatar user={user} userId={userId} /> <UserAvatar user={user} userId={userId} />
) : ( ) : (
<Avatar label={`Placeholder icon for ${userId}`} avatarUrl={icon} /> <Avatar
className="avatarNoCrop"
label={`Placeholder icon for ${userId}`}
avatarUrl={icon}
/>
); );
const className = classNames('miniUserPreview', { const className = classNames('miniUserPreview', {
centeredMiniUserPreview: !user, centeredMiniUserPreview: !user,
......
...@@ -22,6 +22,8 @@ import InvitingClientTile from '../components/InvitingClientTile'; ...@@ -22,6 +22,8 @@ import InvitingClientTile from '../components/InvitingClientTile';
import { parseHash } from '../parser/parser'; import { parseHash } from '../parser/parser';
import { LinkKind } from '../parser/types'; import { LinkKind } from '../parser/types';
/* eslint-disable no-restricted-globals */
interface IProps { interface IProps {
link: string; link: string;
} }
...@@ -36,8 +38,14 @@ const LinkRouter: React.FC<IProps> = ({ link }: IProps) => { ...@@ -36,8 +38,14 @@ const LinkRouter: React.FC<IProps> = ({ link }: IProps) => {
case LinkKind.ParseFailed: case LinkKind.ParseFailed:
feedback = ( feedback = (
<Tile> <Tile>
<h1>Invalid matrix.to link</h1> <p>
<p>{link}</p> That URL doesn't seem right. Links should be in the
format:
</p>
<br />
<p>
{location.host}/#/{'<'}matrix-resourceidentifier{'>'}
</p>
</Tile> </Tile>
); );
break; break;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment