This commit is contained in:
Бахирев 2024-05-16 16:39:01 +03:00
parent 1963e76e3c
commit c1a893779d
27 changed files with 226 additions and 203 deletions

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
Визуализация и анализ данных вашего git-репозитория ([демо](https://assayo.online/demo/?dump=./test.txt), [install](https://assayo.online/demo/?ref=github)).
Визуализация и анализ данных вашего git-репозитория ([демо](https://assayo.online/demo/?dump=./test.txt), [установка](https://assayo.online/demo/?ref=github)).
##### Сотрудник может оценить новое место работы
- темп работы;

View file

@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128.83 128.83"><defs><style>.cls-1{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.93px;}</style></defs><path class="cls-1" d="M53.48,82.2c4.55-.83,9.56-2.3,10.81-3.6"/><path class="cls-1" d="M53.48,82.2c-1.62,7.46,8.51,7.81,10.81,4.67"/><path class="cls-1" d="M64.29,78.59c1.25,1.3,6.26,2.77,10.81,3.6"/><path class="cls-1" d="M64.29,86.87c2.3,3.14,12.43,2.79,10.81-4.67"/><g><g><path class="cls-1" d="M64.41,109.89c-26.76,0-28.81-18.57-28.93-41.24"/><path class="cls-1" d="M64.41,18.94c-26.76,0-28.81,11.58-28.93,25.72"/><path class="cls-1" d="M64.41,69.19c-7.99,0-13.18,.64-17.42,5.67"/><path class="cls-1" d="M35.48,44.66c-3.74,0-6.77,5.37-6.77,11.99s3.03,11.99,6.77,11.99"/><path class="cls-1" d="M39.76,26.74c.16-.1,2.27,4.62,4.51,6.67"/><path class="cls-1" d="M40.68,44.66s0-6.99,3.58-11.25"/><path class="cls-1" d="M40.68,63.52c0,6.82,6.31,11.34,6.31,11.34"/><line class="cls-1" x1="40.68" y1="44.66" x2="40.68" y2="63.52"/></g><g><path class="cls-1" d="M64.29,109.89c26.76,0,28.81-18.57,28.93-41.24"/><path class="cls-1" d="M93.35,44.66c3.74,0,6.77,5.37,6.77,11.99,0,6.62-3.03,11.99-6.77,11.99"/><path class="cls-1" d="M64.41,18.94c26.76,0,28.81,11.58,28.93,25.72"/><path class="cls-1" d="M64.41,69.19c7.99,0,13.18,.64,17.42,5.67"/><path class="cls-1" d="M89.07,26.74c-.16-.1-2.27,4.62-4.51,6.67"/><path class="cls-1" d="M88.14,44.66s0-6.99-3.58-11.25"/><path class="cls-1" d="M88.14,63.52c0,6.82-6.31,11.34-6.31,11.34"/><line class="cls-1" x1="88.14" y1="44.66" x2="88.14" y2="63.52"/></g></g><g><path class="cls-1" d="M45.18,50.66c6.64-2.47,14.92,.94,14.92,.94"/><path class="cls-1" d="M83.65,50.66c-6.64-2.47-14.92,.94-14.92,.94"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,33 +0,0 @@
import React from 'react';
import { Link } from 'react-router-dom';
import themeSettings from 'ts/store/ThemeSettings';
import style from 'ts/components/CardWithIcon/index.module.scss';
interface ICardWithBannerProps {
long?: boolean;
}
function CardWithBanner({
long = false,
}: ICardWithBannerProps): React.ReactElement | null {
const config = themeSettings.getBanner();
if (!config) return null;
const { link, banner } = config;
const className = long
? style.card_with_icon_long
: style.card_with_icon;
return (
<Link
to={link || ''}
target="_blank"
className={className}
style={{ backgroundImage: `url(${banner})` }}
/>
);
}
export default CardWithBanner;

View file

@ -62,6 +62,12 @@
line-height: 16px;
color: var(--color-grey);
}
&_banner {
font-size: 32px;
padding: 0;
line-height: 270px;
}
}
.card_with_icon_long {
@ -92,7 +98,7 @@
@media (max-width: 650px) {
.card_with_icon,
.card_with_icon_long {
min-height: auto;
min-height: 190px;
padding: 32px 0;
&_value {

View file

@ -57,6 +57,7 @@ CardWithIcon.defaultProps = {
suffix: '',
color: undefined,
icon: undefined,
long: false,
};
export default CardWithIcon;

View file

@ -1,24 +0,0 @@
import React from 'react';
import { Link } from 'react-router-dom';
import themeSettings from 'ts/store/ThemeSettings';
import style from '../styles/card.module.scss';
function Banner() {
const config = themeSettings.getBanner();
if (!config) return null;
const { link, banner } = config;
return (
<Link
to={link || ''}
target="_blank"
className={`${style.recommendations_card} ${style.recommendations_card_banner}`}
style={{ backgroundImage: `url(${banner})` }}
/>
);
}
export default Banner;

View file

@ -2,13 +2,23 @@ import React from 'react';
import Title from 'ts/components/Title';
import localization from 'ts/helpers/Localization';
import Banner from 'ts/components/Banner';
import Card from './components/Card';
import Banner from './components/Banner';
import CardForPrint from './components/CardForPrint';
import recommendationStore from './store/index';
import styleCard from './styles/card.module.scss';
import style from './styles/index.module.scss';
function addBannerInRandomIndex(list: any[]) {
const className = `${styleCard.recommendations_card} ${styleCard.recommendations_card_banner}`;
const item = (<Banner className={className} />);
const index = Math.floor(Math.random() * list.length);
const last = list.splice(index);
return [...list, item, ...last];
}
interface IRecommendationsProps {
recommendations: any[];
mode?: string;
@ -18,7 +28,7 @@ function Recommendations({
recommendations,
mode,
}: IRecommendationsProps) {
const cards = (recommendations || [])
let cards = (recommendations || [])
.filter(item => item)
.map((recommendation) => (mode === 'print' ? (
<CardForPrint
@ -37,7 +47,7 @@ function Recommendations({
if (!cards.length) return null;
if (mode !== 'print') {
cards.push(<Banner />);
cards = addBannerInRandomIndex(cards);
}
const title = localization.get('recommendations.title');

View file

@ -106,12 +106,11 @@
border-left-color: var(--color-temp-border);
&_banner {
font-size: var(--font-m);
padding: 0;
line-height: 100px;
border-left-width: 1px;
border-left-color: var(--color-border);
background-repeat: no-repeat;
background-size: 180% auto;
background-position: center center;
}
}

View file

@ -1,12 +1,6 @@
import dataGrip from 'ts/helpers/DataGrip';
import ALL_ACHIEVEMENTS from './constants/list';
import byCompetition from './byCompetition';
export default function getAchievementByAuthor(author: string) {
const statistic = dataGrip.author.statisticByName[author];
if (!statistic) return;
const list = byCompetition.get(author);
export default function getAchievementByAuthor(list: string[], statistic: any) {
const commitByHours = statistic.commitsByHour;
if (statistic.commits > 20) {
@ -40,18 +34,18 @@ export default function getAchievementByAuthor(author: string) {
if (statistic.daysForTask > 2) list.push('more2DaysForTask');
// Добро пожаловать - не уволили в течении трех месяцев с начала работы
if (statistic.allDaysInProject > 90) list.push('more90DaysInProject');
// Годовасик - отработал 365 дней на проекте
if (statistic.allDaysInProject >= 365) list.push('more365DaysInProject');
// Чёрт - отработал 666 дней на проекте
if (statistic.allDaysInProject > 666) list.push('more666DaysInProject');
if (statistic.allDaysInProject >= 666) list.push('more666DaysInProject');
// Азино - отработал 777 дней на проекте
if (statistic.allDaysInProject > 777) list.push('more777DaysInProject');
// Тесак - отработал 1488 дней на проекте
if (statistic.allDaysInProject > 1488) list.push('more1488DaysInProject');
if (statistic.allDaysInProject >= 777) list.push('more777DaysInProject');
}
// Ни единого разрыва - 0 дней без коммитов
if (statistic.lazyDays === 0) list.push('zeroLazyDays');
// Стрельба холостыми - коммиты есть, а закрытых задач нет
if (statistic.commits > 0 && statistic.tasks === 0) list.push('workNotWork');
// сказал как отрезал - в среднем 1 коммит на таск
// Точно в цель - в среднем 1 коммит на таск
if (statistic.tasks / statistic.commits) list.push('oneCommitOneTask');
return list.reduce((acc: any, type: string) => {

View file

@ -1,98 +1,98 @@
import IHashMap from 'ts/interfaces/HashMap';
import dataGrip from 'ts/helpers/DataGrip';
class AchievementsByCompetition {
import getAchievementByAuthor from './byAuthor';
class AchievementsByAuthor {
authors: IHashMap<string[]> = {};
get(name: string) {
return this.authors[name]
? [...this.authors[name]]
: [];
addAuthor(name: string) {
this.authors[name] = [];
}
updateByDataGrip(statisticByAuthor: any) {
// У меня работает - больше всего коммитов с текстом fix
// 500я на проде - больше всего коммитов с префиксом hotfix
// Хуяк, хуяк и в продакшен - больше всего коммитов с префиксом add или feat
// Выпускающий редактор - больше всего коммитов с текстом refactor
// - больше всего коммитов в час
const {
total,
achievements,
} = this.#getTotalByAuthor(statisticByAuthor);
add(authors: Array<[string, number]>, maxAchievementCode: string, minAchievementCode?: string) {
const first = authors[0][0];
this.authors?.[first]?.push(maxAchievementCode);
const nameLength = this.#getFirstAndLast(total.nameLength);
// Азим Азиз Иль Ам Кадир Имран II - самое длинное имя
achievements[nameLength.first].push('longestName');
// Корнишон - самое короткое имя
achievements[nameLength.last].push('shortestName');
const midMessage = this.#getFirstAndLast(total.midMessage);
// Мастер красноречия - стабильно ,самые длинные подписи коммитов
achievements[midMessage.first].push('everyMessageLong');
// Нет времени обьяснять - стабильно, самые короткие подписи коммитов
achievements[midMessage.last].push('everyMessageShort');
const maxMessage = this.#getFirstAndLast(total.maxMessage);
// Пиздеть, не мешки ворочить - самая длинная подпись коммита за все время
achievements[maxMessage.first].push('longestMessage');
const tasks = this.#getFirstAndLast(total.tasks);
// Батя - больше всего закрытых задач
achievements[tasks.first].push('moreTasks');
// Зашел и вышел - меньше всего закрытых задач
achievements[tasks.last].push('lessTasks');
const days = this.#getFirstAndLast(total.days);
// Ценный работник - больше всего рабочих дней
achievements[days.first].push('moreWorkDays');
// Дальше без меня - меньше всего рабочих дней
achievements[days.last].push('lessWorkDays');
const lazyDays = this.#getFirstAndLast(total.lazyDays);
// Мысленно я с вами - больше всего дней без коммитов
achievements[lazyDays.first].push('moreLazyDays');
// Папа Карло - меньше всего дней без коммитов
achievements[lazyDays.last].push('lessLazyDays');
const allDaysInProject = this.#getFirstAndLast(total.allDaysInProject);
// Старожил - больше всего дней на проекте
achievements[allDaysInProject.first].push('moreDaysInProject');
// А это кто? - меньше всего дней на проекте
achievements[allDaysInProject.last].push('lessDaysInProject');
const firstCommit = this.#getFirstAndLast(total.firstCommit);
// Адам - первый стабильны сотрудник на проекте
achievements[firstCommit.last].push('adam');
const moreRefactoring = this.#getFirstAndLast(total.moreRefactoring);
// Главный редактор - сделал больше всех меток «рефакторинг»
achievements[moreRefactoring.first].push('moreRefactoring');
const tasksInDay = this.#getFirstAndLast(total.tasksInDay);
// Спиди-гонщик - рекорд по количеству закрытых задач в день
achievements[tasksInDay.first].push('moreTasksInDay');
const commitsInDay = this.#getFirstAndLast(total.commitsInDay);
// Zerg Rush - рекорд по количеству коммитов в день
achievements[commitsInDay.first].push('moreCommits');
this.authors = achievements;
if (!minAchievementCode) return;
const last = authors[authors.length - 1][0];
this.authors?.[last]?.push(minAchievementCode);
}
}
#getTotalByAuthor(statisticByAuthor: any) {
const achievements = {};
class AchievementsByCompetition {
authors: IHashMap<Array<string[]>> = {};
updateByDataGrip(dataGrip: any) {
const statisticByAuthor = dataGrip.author.statistic;
const byAuthor: any = new AchievementsByAuthor();
const total = this.#getMinMaxValue(statisticByAuthor, dataGrip, (statistic: any) => {
byAuthor.addAuthor(statistic.author);
});
// Длина имени
byAuthor.add(total.nameLength, 'longestName', 'shortestName');
// Длина сообщения
byAuthor.add(total.messageLength, 'longestMessage');
// Средняя длина сообщения
byAuthor.add(total.midMessageLength, 'everyMessageLong', 'everyMessageShort');
// Количество закрытых задач
byAuthor.add(total.tasks, 'moreTasks', 'lessTasks');
// Количество дней с коммитами
byAuthor.add(total.days, 'moreWorkDays', 'lessWorkDays');
// Количество дней без коммитов
byAuthor.add(total.lazyDays, 'moreLazyDays', 'lessLazyDays');
// Количество дней на проекте
byAuthor.add(total.allDaysInProject, 'moreDaysInProject', 'lessDaysInProject');
// Дата первого коммита
byAuthor.add(total.firstCommit, 'adam');
// Количество метки «рефакторинг»
byAuthor.add(total.moreRefactoring, 'moreRefactoring');
// Количество закрытых задач в день
byAuthor.add(total.tasksInDay, 'moreTasksInDay');
// Количество коммитов в день
byAuthor.add(total.commitsInDay, 'moreCommits');
// Первый и последний коммит
const lastAuthor = dataGrip.firstLastCommit.maxData.author;
const firstAuthor = dataGrip.firstLastCommit.minData.author;
if (firstAuthor === lastAuthor) {
byAuthor.authors[firstAuthor].push('firstLastCommit');
} else {
byAuthor.authors[firstAuthor].push('firstCommit');
byAuthor.authors[lastAuthor].push('lastCommit');
}
console.dir(byAuthor);
statisticByAuthor.forEach((statistic: any) => {
const achievements = byAuthor.authors[statistic.author];
this.authors[statistic.author] = getAchievementByAuthor(achievements, statistic);
});
}
#getMinMaxValue(statisticByAuthor: any, dataGrip: any, callback: Function) {
const total: IHashMap<any> = {};
statisticByAuthor.forEach((statistic: any) => {
achievements[statistic.author] = [];
callback(statistic);
const addData = (property: string, count: number) => {
if (!total[property]) total[property] = [];
total[property].push([statistic.author, count]);
};
addData('nameLength', statistic.author.length);
addData('maxMessage', statistic.messageLength[statistic.messageLength.length - 1]);
addData('midMessage', statistic.middleMessageLength);
addData('messageLength', statistic.messageLength[statistic.messageLength.length - 1]);
addData('midMessageLength', statistic.middleMessageLength);
addData('tasks', statistic.tasks.length);
addData('days', statistic.days);
addData('moreRefactoring', statistic.types.refactor);
@ -111,17 +111,7 @@ class AchievementsByCompetition {
total[achievement].sort((a: any, b: any) => b[1] - a[1]);
});
return { total, achievements };
}
#getFirstAndLast(list: any[]) {
const first = list.shift();
const last = list.pop() || first;
return {
first: first[0],
last: last[0],
};
return total;
}
}

View file

@ -25,15 +25,15 @@ export default {
lessScopes: ACHIEVEMENT_TYPE.BAD, // Щегол
moreDaysForTask: ACHIEVEMENT_TYPE.BAD, // Улитка на склоне
more2DaysForTask: ACHIEVEMENT_TYPE.BAD, // Cо слоу
moreDaysInProject: ACHIEVEMENT_TYPE.GOOD, // Старожил
moreDaysInProject: ACHIEVEMENT_TYPE.GOOD, // Часть команды, часть коробля
lessDaysInProject: ACHIEVEMENT_TYPE.NORMAL, // А это кто?
more90DaysInProject: ACHIEVEMENT_TYPE.GOOD, // Добро пожаловать
lessDaysForTask: ACHIEVEMENT_TYPE.GOOD, // Скорострел
adam: ACHIEVEMENT_TYPE.NORMAL, // Адам
more666DaysInProject: ACHIEVEMENT_TYPE.GOOD, // Чёрт
more777DaysInProject: ACHIEVEMENT_TYPE.GOOD, // Азино 3 топора
moreRefactoring: ACHIEVEMENT_TYPE.GOOD, // Выпускающий редактор
// нет картинки
longestMessage: ACHIEVEMENT_TYPE.NORMAL, // А разговоров то было...
moreTasksInDay: ACHIEVEMENT_TYPE.GOOD, // Спиди-гонщик
@ -41,14 +41,46 @@ export default {
noCommitOnDay: ACHIEVEMENT_TYPE.NORMAL, // Технический перерыв
hasCommitEveryTime: ACHIEVEMENT_TYPE.BAD, // Умер на работе
commitsAfter1800: ACHIEVEMENT_TYPE.GOOD, // Делу время
more1488DaysInProject: ACHIEVEMENT_TYPE.GOOD, // им. Максима Марцинкевича
more365DaysInProject: ACHIEVEMENT_TYPE.GOOD, // Нужно чуть чуть потерпеть, отработал год и не уволился
firstCommit: ACHIEVEMENT_TYPE.NORMAL, // Кто первый, того и тапки. первый коммит на проекте
lastCommit: ACHIEVEMENT_TYPE.NORMAL, // Я закончил. последний коммит на проекте
firstLastCommit: ACHIEVEMENT_TYPE.NORMAL, // От начала и до конца. первый и последний коммит на проекте
// нет кода
// moreFix: ACHIEVEMENT_TYPE.GOOD, // Bug hunter
lessWorkDays: ACHIEVEMENT_TYPE.BAD, // Дальше без меня
moreCreateCode: ACHIEVEMENT_TYPE.NORMAL, // Созидатель
moreRemoveCode: ACHIEVEMENT_TYPE.NORMAL, // Разрушитель
moreChangeCode: ACHIEVEMENT_TYPE.NORMAL, // Реформатор // есть картинка
moreStyle: ACHIEVEMENT_TYPE.GOOD, // Полиция моды
lessWorkDays: ACHIEVEMENT_TYPE.BAD, // Дальше без меня
moreOnHoliday: ACHIEVEMENT_TYPE.BAD, // Нет жизни
moreCreateCode: ACHIEVEMENT_TYPE.NORMAL, // Созидатель -- переименовать?
moreRemoveCode: ACHIEVEMENT_TYPE.NORMAL, // Разрушитель
moreChangeCode: ACHIEVEMENT_TYPE.NORMAL, // Реформатор
morePRMerge: ACHIEVEMENT_TYPE.GOOD, // Таможня даёт добро,
workOnWeekends: ACHIEVEMENT_TYPE.BAD, // Работа не walk. хоть раз работал на выходных
longWaitPR: ACHIEVEMENT_TYPE.BAD, // Обещать не значит жениться, ожидание PR больше месяца
moreLongWaitPR: ACHIEVEMENT_TYPE.BAD, // Давным давно, в далёкой галактике
more3YearsInProject: ACHIEVEMENT_TYPE.GOOD, // Старожил. больше 3х лет на проекте
oneExtension: ACHIEVEMENT_TYPE.NORMAL, // Один в поле воин. Только он работает с файлами определенного расширения
fileRush: ACHIEVEMENT_TYPE.NORMAL, // Зерг Раш. Создал больше всех файлов в проекте
moreLintHint: ACHIEVEMENT_TYPE.GOOD, // Грамар-наци. Больше всех внес в .eslintrc .stylelintrc.json
moreReadMe: ACHIEVEMENT_TYPE.GOOD, // Летописец. Больше остальных внес в .MD
moreDevOps: ACHIEVEMENT_TYPE.GOOD, // DevOps. Больше остальных внес в DevOps
moreTests: ACHIEVEMENT_TYPE.GOOD, // Тестировщик. Больше остальных внес в тестирование
allRelease: ACHIEVEMENT_TYPE.NORMAL, // Фулл хаус. есть релиз, собранный только из его задач
longFilePath: ACHIEVEMENT_TYPE.NORMAL, // Закрома родины. первый создал файл с самым глубоким вложением
longFileName: ACHIEVEMENT_TYPE.NORMAL, // Размер имеет значение. создал файл с самым длинным именем
removeCreateFile: ACHIEVEMENT_TYPE.NORMAL, // Откопал стюардессу. востановил удаленный файл
renameFile: ACHIEVEMENT_TYPE.NORMAL, // Астана Нур-Султан Астана. переименовывал туда-сюда файл
longTask: ACHIEVEMENT_TYPE.BAD, // Вроде изян. работал над задачей больше трех месяцев
// Галя, у нас отмена - откатил назад
// У меня работает - больше всего коммитов с текстом fix
// 500я на проде - больше всего коммитов с префиксом hotfix
// moreFix: ACHIEVEMENT_TYPE.GOOD, // Bug hunter
// godFather: ACHIEVEMENT_TYPE.NORMAL, // Крёстный отец. Первый создал файлы небольшой группы.
// Боярин - есть папка на 20 файлов, где правит только этот человек
// Феодал - есть папка на 50 файлов, где правит только этот человек
// Психологический знак задиака по дате первого коммита
};

View file

@ -2,6 +2,10 @@ import React from 'react';
import localization from 'ts/helpers/Localization';
import CardForPrint from 'ts/components/Recommendations/components/CardForPrint';
import ACHIEVEMENT_LIST from 'ts/helpers/achievement/constants/list';
import Achievement from 'ts/components/Achievement/components/Item';
import Title from 'ts/components/Title';
function getFlatRecommendations(translations: any, list: any[] = []) {
if (!translations) return list;
@ -30,9 +34,22 @@ function DebugPage() {
/>
));
console.dir(recommendations);
const achievements = Object
.entries(ACHIEVEMENT_LIST)
.sort((a, b) => a[1] - b[1])
.map(([code]: [string, number]) => (
<Achievement
key={code}
code={code}
/>
));
return (
<>
<Title title="page.person.achievement.title"/>
<div style={{ columnCount: 3, marginBottom: '24px' }}>
{achievements}
</div>
<section>
{recommendations}
</section>

View file

@ -4,7 +4,7 @@ import { observer } from 'mobx-react-lite';
import { getShortNumber } from 'ts/helpers/formatter';
import CardWithIcon from 'ts/components/CardWithIcon';
import CardWithBanner from 'ts/components/CardWithBanner';
import CardWithBanner from 'ts/components/CardWithIcon/Banner';
import NothingFound from 'ts/components/NothingFound';
import IsStaff from 'ts/components/NothingFound/components/IsStaff';
import PageWrapper from 'ts/components/Page/wrapper';

View file

@ -2,11 +2,11 @@ import React from 'react';
import { observer } from 'mobx-react-lite';
import { useTranslation } from 'react-i18next';
import getAchievementByAuthor from 'ts/helpers/achievement/byAuthor';
import achievementByAuthor from 'ts/helpers/achievement/byCompetition';
import ACHIEVEMENT_TYPE from 'ts/helpers/achievement/constants/type';
import CardWithBanner from 'ts/components/CardWithBanner';
import CardWithIcon from 'ts/components/CardWithIcon';
import CardWithBanner from 'ts/components/CardWithIcon/Banner';
import Achievements from 'ts/components/Achievement';
import Description from 'ts/components/Description';
import PageWrapper from 'ts/components/Page/wrapper';
@ -39,8 +39,8 @@ const Total = observer(({ user }: IPersonCommonProps): React.ReactElement => {
const statistic = user;
const commitsWithGet = dataGripStore.dataGrip.get.getsByAuthor[user.author];
const taskNumber = statistic.tasks.length;
const achievements = getAchievementByAuthor(statistic.author);
console.dir(achievements);
const achievements = achievementByAuthor.authors[statistic.author];
return (
<PageWrapper>
<PageColumn>

View file

@ -2,7 +2,7 @@ import React from 'react';
import { observer } from 'mobx-react-lite';
import { useTranslation } from 'react-i18next';
import getAchievementByAuthor from 'ts/helpers/achievement/byAuthor';
import achievementByAuthor from 'ts/helpers/achievement/byCompetition';
import ACHIEVEMENT_TYPE from 'ts/helpers/achievement/constants/type';
import Achievements from 'ts/components/Achievement';
@ -36,7 +36,7 @@ const Total = observer(({
const { t } = useTranslation();
const statistic = user;
const commitsWithGet = dataGripStore.dataGrip.get.getsByAuthor[statistic.author];
const achievements = getAchievementByAuthor(statistic.author);
const achievements = achievementByAuthor.authors[statistic.author];
return (
<PageWrapper>

View file

@ -11,8 +11,6 @@ import Races from 'ts/components/Races';
import Tv100And1 from 'ts/components/Tv100And1';
// import ACHIEVEMENT_TYPE from 'ts/helpers/achievement/constants/type';
import getAchievementByAuthor from 'ts/helpers/achievement/byAuthor';
import Description from 'ts/components/Description';
import DataView from 'ts/components/DataView';
import Column from 'ts/components/Table/components/Column';
@ -50,8 +48,6 @@ const Top = observer((): React.ReactElement => {
const chartMessageLength = getOptions({ max: maxMessageLength[0].value, suffix: 'сиволов' });
const authors = dataGripStore.dataGrip.author.statistic.map((statistic: any) => {
const achievements = getAchievementByAuthor(statistic.author);
console.dir(achievements);
const from = getDate(statistic.firstCommit.date);
const to = getDate(statistic.lastCommit.date);
const achievementsList = [

View file

@ -85,7 +85,7 @@ class DataGripStore implements IDataGripStore {
dataGrip.updateByInitialization();
dataGrip.updateByFiles(fileList, removed.fileList);
achievements.updateByDataGrip(dataGrip.author.statistic);
achievements.updateByDataGrip(dataGrip);
}
this.dataGrip = null;
@ -101,7 +101,7 @@ class DataGripStore implements IDataGripStore {
console.log('need update data TODO');
dataGrip.updateByFilters();
if (!dataGrip.author.list.length) return;
achievements.updateByDataGrip(dataGrip.author.statistic);
achievements.updateByDataGrip(dataGrip);
this.dataGrip = null;
this.dataGrip = dataGrip;
}

View file

@ -1,12 +1,15 @@
import { makeObservable, observable, action } from 'mobx';
const LOGO = {
import IBanner from 'ts/interfaces/Banner';
import IHashMap from 'ts/interfaces/HashMap';
const LOGO: IBanner = {
isDefault: true,
icon: './assets/logo.svg',
isOpenInNewTab: false,
};
const EXTERNAL_LOGO = {
const EXTERNAL_LOGO: IHashMap<IBanner> = {
vk_frontend_du2: {
icon: './social/vk/frontend_du2.png',
banner: './social/vk/frontend_du2.jpg',
@ -20,8 +23,11 @@ const EXTERNAL_LOGO = {
},
vk_awesomejs: {
icon: './social/vk/awesomejs.png',
banner: './social/vk/awesomejs.jpg',
// banner: './social/vk/awesomejs.jpg',
link: 'https://vk.com/awesomejs',
bannerText: 'Сбер Банк',
color: '#000',
backgroundColor: '#C2ECC1',
},
vk_frontend_dev: {
icon: './social/vk/frontend_dev.png',
@ -49,15 +55,18 @@ class ThemeSettings {
this.urlParameters = urlParameters || {};
}
getLogo() {
let config = EXTERNAL_LOGO[this.urlParameters?.ref || ''];
getLogo(): IBanner {
const ref = this.urlParameters?.ref || '';
let config = EXTERNAL_LOGO[ref];
if (!config) return LOGO;
config.ref = ref;
config.isOpenInNewTab = true;
return config;
}
getBanner() {
getBanner(): IBanner | null {
let config = EXTERNAL_LOGO[this.urlParameters?.ref || ''];
if (!config) return null;

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: есть коммит на час каждого дня (включая выходные)
§ achievements.commitsAfter1800.title: Делу время
§ achievements.commitsAfter1800.description: нет ни одного коммита после 18:00
§ achievements.more1488DaysInProject.title: им. Максима Марцинкевича
§ achievements.more1488DaysInProject.description: отработал 1488 дней на проекте
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: больше всего закрытых багов
§ achievements.lessWorkDays.title: Дальше без меня

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out

View file

@ -45,8 +45,10 @@ export default `
§ achievements.moreDaysForTask.description: работа по задачам идёт медленнее чем у остальных
§ achievements.more2DaysForTask.title: Cо слоу
§ achievements.more2DaysForTask.description: больше двух дней на задачу
§ achievements.moreDaysInProject.title: Старожил
§ achievements.moreDaysInProject.title: Часть команды, часть коробля
§ achievements.moreDaysInProject.description: больше всего дней на проекте
§ achievements.more3YearsInProject.title: Старожил
§ achievements.more3YearsInProject.description: больше трех лет на проекте
§ achievements.lessDaysInProject.title: А это кто?
§ achievements.lessDaysInProject.description: меньше всего дней на проекте
§ achievements.more90DaysInProject.title: Добро пожаловать
@ -55,6 +57,8 @@ export default `
§ achievements.lessDaysForTask.description: одна задача занимает меньше дня
§ achievements.adam.title: Адам
§ achievements.adam.description: первый стабильный сотрудник на проекте
§ achievements.more365DaysInProject.title: Годовасик
§ achievements.more365DaysInProject.description: отработал год на проекте
§ achievements.more666DaysInProject.title: Чёрт
§ achievements.more666DaysInProject.description: отработал 666 дней на проекте
§ achievements.more777DaysInProject.title: Азино 3 топора
@ -73,8 +77,6 @@ export default `
§ achievements.hasCommitEveryTime.description: есть коммит на час каждого дня (включая выходные)
§ achievements.commitsAfter1800.title: Делу время
§ achievements.commitsAfter1800.description: нет ни одного коммита после 18:00
§ achievements.more1488DaysInProject.title: им. Максима Марцинкевича
§ achievements.more1488DaysInProject.description: отработал 1488 дней на проекте
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: больше всего закрытых багов
§ achievements.lessWorkDays.title: Дальше без меня
@ -89,4 +91,43 @@ export default `
§ achievements.moreStyle.description: склонен больше остальных изменять CSS
§ achievements.moreOnHoliday.title: Нет жизни
§ achievements.moreOnHoliday.description: относительно много коммитов в нерабочее время
§ achievements.morePRMerge.title: Таможня даёт добро
§ achievements.morePRMerge.description: чаще остальных нажимает кнопку «Влить» для PR
§ achievements.longWaitPR.title: Обещать не значит жениться
§ achievements.longWaitPR.description: создал PR, который больше месяца провисел на ревью
§ achievements.moreLongWaitPR.title: Давным давно, в далёкой галактике
§ achievements.moreLongWaitPR.description: создал PR, который максимально долго провисел на ревью
§ achievements.oneExtension.title: Один в поле воин
§ achievements.oneExtension.description: только он работает с файлами определенного расширения
§ achievements.fileRush.title: Зерг Раш
§ achievements.fileRush.description: создал больше всех файлов в проекте
§ achievements.moreLintHint.title: Грамар-наци
§ achievements.moreLintHint.description: больше всех создал или изменил в правилах авто-проверки кода
§ achievements.moreReadMe.title: Летописец
§ achievements.moreReadMe.description: больше всех создал или изменил файлов MD
§ achievements.moreDevOps.title: DevOps
§ achievements.moreDevOps.description: больше всех создал или изменил файлов для CI/CD
§ achievements.moreTests.title: Тестировщик
§ achievements.moreTests.description: больше всех создал или изменил файлов для тестирования
§ achievements.allRelease.title: Фулл хаус
§ achievements.allRelease.description: есть релиз, собранный только из его задач
§ achievements.firstCommit.title: Кто первый, того и тапки
§ achievements.firstCommit.description: первый коммит на проекте
§ achievements.lastCommit.title: Я закончил
§ achievements.lastCommit.description: последний коммит на проекте
§ achievements.firstLastCommit.title: От начала и до конца
§ achievements.firstLastCommit.description: первый и последний коммит на проекте
§ achievements.longFilePath.title: Закрома родины
§ achievements.longFilePath.description: первый создал файл с самым глубоким вложением
§ achievements.longFileName.title: Размер имеет значение
§ achievements.longFileName.description: создал файл с самым длинным именемм
§ achievements.workOnWeekends.title: Работа не walk
§ achievements.workOnWeekends.description: хоть раз работал на выходных
§ achievements.removeCreateFile.title: Откопал стюардессу
§ achievements.removeCreateFile.description: востановил удаленный файл
§ achievements.renameFile.title: Астана Нур-Султан Астана
§ achievements.renameFile.description: переименовывал туда-сюда файл
§ achievements.longTask.title: Вроде изян
§ achievements.longTask.description: работал над задачей больше трех месяцев
§ achievements.111.description: test
`;

View file

@ -73,8 +73,6 @@ export default `
§ achievements.hasCommitEveryTime.description: a commit for every hour of each day (including weekends)
§ achievements.commitsAfter1800.title: Business Time
§ achievements.commitsAfter1800.description: no commits after 6:00 PM
§ achievements.more1488DaysInProject.title: Named after Maxim Martsinkevich
§ achievements.more1488DaysInProject.description: worked 1488 days on the project
§ achievements.moreFix.title: Bug hunter
§ achievements.moreFix.description: most closed bugs
§ achievements.lessWorkDays.title: Count me out