This commit is contained in:
bakhirev 2024-10-25 00:40:58 +03:00
parent 57008ac20e
commit 9d68b0b02b
6 changed files with 36 additions and 10 deletions
build/static
src/ts/components/TimeZoneMap

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,24 +1,31 @@
import React from 'react';
import { getPositionForTimeZone, getColorForTimeZone } from '../helpers';
import {
getPositionForTimeZone,
getColorForTimeZone,
getSizeForTimeZone,
} from '../helpers';
import style from '../styles/index.module.scss';
interface PointProps {
timezone: string;
authors: string[]
authors: string[];
maxValue: number;
}
function Point({
timezone,
authors,
maxValue,
}: PointProps): React.ReactElement | null {
const position = getPositionForTimeZone(timezone);
const color = getColorForTimeZone(authors);
const size = getSizeForTimeZone(authors.length, maxValue);
return (
<div
title={authors.join(', ')}
className={`${style.time_zone_map_point} ${position} ${color}`}
className={`${style.time_zone_map_point} ${position} ${color} ${size}`}
>
{authors.length}
</div>

View file

@ -68,3 +68,9 @@ export function getColorForTimeZone(authors: string[]) {
? style.time_zone_map_point_dismissed
: '';
}
export function getSizeForTimeZone(value: number, max: number) {
if (value < (max * 0.3) || max <= 10) return style.time_zone_map_point_s;
if (value < (max * 0.7) || max <= 100) return style.time_zone_map_point_m;
return style.time_zone_map_point_l;
}

View file

@ -1,8 +1,10 @@
import React from 'react';
import { IPagination } from 'ts/interfaces/Pagination';
import { getGroupsByTimeZone } from './helpers';
import Point from './components/Point';
import style from './styles/index.module.scss';
import { getMaxByLength } from 'ts/pages/Common/helpers/getMax';
interface TimeZoneMapProps {
authors: any[]
@ -12,11 +14,14 @@ function TimeZoneMap({
authors = [],
}: TimeZoneMapProps): React.ReactElement | null {
const groups = getGroupsByTimeZone(authors);
const points = Object.entries(groups).map((item: any) => (
const content = Object.entries(groups);
const max = getMaxByLength({ content } as IPagination<any>, '1');
const points = content.map((item: any) => (
<Point
key={item[0]}
timezone={item[0]}
authors={item[1]}
maxValue={max}
/>
));

View file

@ -41,7 +41,7 @@
box-shadow: 0 0 5px var(--color-white), 0 0 5px var(--color-white), 0 0 15px var(--color-white);
color: var(--color-white);
border-radius: var(--border-radius-l);
border-radius: 32px;
background-color: var(--color-black);
}
}
@ -84,4 +84,12 @@
&_hide { display: none }
&_active { background-color: var(--color-first) }
&_dismissed { background-color: var(--color-second) }
&_s { --temp-size: var(--space-xl); padding-top: 0.5px; }
&_m { --temp-size: var(--space-xxl); margin: -3px; }
&_l { --temp-size: 32px; margin: -8px; }
width: var(--temp-size);
height: var(--temp-size);
line-height: var(--temp-size);
}