CSS updates.

This commit is contained in:
Mike Cao 2023-10-02 23:51:26 -07:00
parent 9bb89c7e8b
commit e4c5f42189
22 changed files with 227 additions and 395 deletions

View file

@ -1,7 +1,7 @@
'use client';
import { useEffect, useCallback, useState } from 'react';
import { createPortal } from 'react-dom';
import { Button, Row, Column } from 'react-basics';
import { Button } from 'react-basics';
import { setItem } from 'next-basics';
import useStore, { checkVersion } from 'store/version';
import { REPO_URL, VERSION_CHECK } from 'lib/constants';
@ -47,17 +47,17 @@ export function UpdateNotice({ user, config }) {
}
return createPortal(
<Row className={styles.notice}>
<Column variant="two" className={styles.message}>
<div className={styles.notice}>
<div className={styles.message}>
{formatMessage(messages.newVersionAvailable, { version: `v${latest}` })}
</Column>
<Column className={styles.buttons}>
</div>
<div className={styles.buttons}>
<Button variant="primary" onClick={handleViewClick}>
{formatMessage(labels.viewDetails)}
</Button>
<Button onClick={handleDismissClick}>{formatMessage(labels.dismiss)}</Button>
</Column>
</Row>,
</div>
</div>,
document.body,
);
}

View file

@ -1,7 +1,7 @@
import useDateRange from 'components/hooks/useDateRange';
import { isAfter } from 'date-fns';
import { incrementDateRange } from 'lib/date';
import { Button, Flexbox, Icon, Icons } from 'react-basics';
import { Button, Icon, Icons } from 'react-basics';
import DateFilter from './DateFilter';
import styles from './WebsiteDateFilter.module.css';
@ -22,9 +22,9 @@ export function WebsiteDateFilter({ websiteId }) {
};
return (
<Flexbox justifyContent="center" gap={10}>
<div className={styles.container}>
{value !== 'all' && selectedUnit && (
<Flexbox justifyContent="center" className={styles.buttons}>
<div className={styles.buttons}>
<Button onClick={() => handleIncrement(1)}>
<Icon rotate={90}>
<Icons.ChevronDown />
@ -35,7 +35,7 @@ export function WebsiteDateFilter({ websiteId }) {
<Icons.ChevronDown />
</Icon>
</Button>
</Flexbox>
</div>
)}
<DateFilter
className={styles.dropdown}
@ -46,7 +46,7 @@ export function WebsiteDateFilter({ websiteId }) {
onChange={handleChange}
showAllTime={true}
/>
</Flexbox>
</div>
);
}

View file

@ -1,7 +1,17 @@
.container {
display: flex;
align-items: center;
gap: 10px;
}
.dropdown {
min-width: 200px;
}
.buttons {
display: flex;
}
.buttons button:first-child {
border-top-right-radius: 0;
border-bottom-right-radius: 0;

View file

@ -1,13 +1,18 @@
import { Row, Column } from 'react-basics';
import classNames from 'classnames';
import styles from './Grid.module.css';
import { mapChildren } from 'react-basics';
export function Grid({ className, ...otherProps }) {
return <div {...otherProps} className={classNames(styles.grid, className)} />;
}
export function GridRow(props) {
const { className, ...otherProps } = props;
return <Row {...otherProps} className={classNames(styles.row, className)} />;
}
export function GridColumn(props) {
const { className, ...otherProps } = props;
return <Column {...otherProps} className={classNames(styles.col, className)} />;
const { columns = 'two', className, children, ...otherProps } = props;
return (
<div {...otherProps} className={classNames(styles.row, className)}>
{mapChildren(children, child => {
return <div className={classNames(styles.col, { [styles[columns]]: true })}>{child}</div>;
})}
</div>
);
}

View file

@ -1,27 +1,52 @@
.col {
display: flex;
flex-direction: column;
padding: 20px;
.grid {
display: grid;
}
.row {
display: grid;
grid-template-columns: repeat(6, 1fr);
border-top: 1px solid var(--base300);
min-height: 430px;
}
.row > .col {
.col {
padding: 20px;
min-height: 430px;
border-inline-start: 1px solid var(--base300);
}
.row > .col:first-child {
.col:first-child {
border-inline-start: 0;
padding-inline-start: 0;
}
.row > .col:last-child {
.col:last-child {
padding-inline-end: 0;
}
.col.two {
grid-column: span 3;
}
.col.three {
grid-column: span 2;
}
.col.two-one:first-child {
grid-column: span 4;
}
.col.two-one:last-child {
grid-column: span 2;
}
.col.one-two:first-child {
grid-column: span 2;
}
.col.one-two:last-child {
grid-column: span 4;
}
@media only screen and (max-width: 992px) {
.row {
border: 0;
@ -33,4 +58,11 @@
border-inline-end: 0;
padding: 20px 0;
}
.col.two,
.col.three,
.col.one-two,
.col.two-one {
grid-column: span 6 !important;
}
}

View file

@ -4,7 +4,6 @@
flex-direction: column;
background: var(--base50);
position: relative;
height: 100%;
max-width: 1320px;
margin: 0 auto;
padding: 0 20px;

View file

@ -145,7 +145,7 @@ export function BarChart({
}, [datasets, unit, theme, animationDuration, locale]);
return (
<>
<div className={styles.container}>
<div className={classNames(styles.chart, className)}>
{loading && <Loading position="page" icon="dots" />}
<canvas ref={canvas} />
@ -156,7 +156,7 @@ export function BarChart({
<div className={styles.tooltip}>{tooltip}</div>
</HoverTooltip>
)}
</>
</div>
);
}

View file

@ -1,3 +1,7 @@
.container {
display: grid;
}
.chart {
position: relative;
height: 400px;

View file

@ -1,8 +1,8 @@
import { useState } from 'react';
import { Loading, cloneChildren } from 'react-basics';
import ErrorMessage from 'components/common/ErrorMessage';
import styles from './MetricsBar.module.css';
import { formatLongNumber, formatNumber } from 'lib/format';
import styles from './MetricsBar.module.css';
export function MetricsBar({ children, isLoading, isFetched, error }) {
const [format, setFormat] = useState(true);
@ -19,9 +19,12 @@ export function MetricsBar({ children, isLoading, isFetched, error }) {
<div className={styles.bar} onClick={handleSetFormat}>
{isLoading && !isFetched && <Loading icon="dots" />}
{error && <ErrorMessage />}
{cloneChildren(children, child => {
return { format: child.props.format || formatFunc };
})}
{!isLoading &&
!error &&
isFetched &&
cloneChildren(children, child => {
return { format: child.props.format || formatFunc };
})}
</div>
);
}

View file

@ -1,18 +1,11 @@
.bar {
display: flex;
flex-direction: row;
cursor: pointer;
min-height: 110px;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(140px, max-content));
gap: 20px;
flex-wrap: wrap;
}
.card {
justify-self: flex-start;
}
@media only screen and (max-width: 992px) {
.card {
flex-basis: calc(50% - 20px);
@media screen and (max-width: 768px) {
.bar {
grid-template-columns: 1fr 1fr;
}
}