diff --git a/documents/RU.md b/documents/RU.md
index 0bed192..4cd0099 100644
--- a/documents/RU.md
+++ b/documents/RU.md
@@ -2,7 +2,7 @@
# [Assayo](https://assayo.online/?ref=github&lang=ru)
-Визуализация и анализ данных вашего git-репозитория ([демо](https://assayo.online/demo/?ref=github&lang=ru&dump=./test.txt), [install](https://assayo.online/demo/?ref=github)).
+Визуализация и анализ данных вашего git-репозитория ([демо](https://assayo.online/demo/?ref=github&lang=ru&dump=./test.txt), [установка](https://assayo.online/demo/?ref=github)).
diff --git a/documents/src/md/RU.md b/documents/src/md/RU.md
index f9c5874..0f1b08c 100644
--- a/documents/src/md/RU.md
+++ b/documents/src/md/RU.md
@@ -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)).
##### Сотрудник может оценить новое место работы
- темп работы;
diff --git a/public/assets/achievements/moreDaysInProject.svg b/public/assets/achievements/moreDaysInProject.svg
deleted file mode 100644
index d328cc3..0000000
--- a/public/assets/achievements/moreDaysInProject.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/ts/components/CardWithBanner/index.tsx b/src/ts/components/CardWithBanner/index.tsx
deleted file mode 100644
index ef387e0..0000000
--- a/src/ts/components/CardWithBanner/index.tsx
+++ /dev/null
@@ -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 (
-
- );
-}
-
-export default CardWithBanner;
diff --git a/src/ts/components/CardWithIcon/index.module.scss b/src/ts/components/CardWithIcon/index.module.scss
index e319f95..9b2676b 100644
--- a/src/ts/components/CardWithIcon/index.module.scss
+++ b/src/ts/components/CardWithIcon/index.module.scss
@@ -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 {
diff --git a/src/ts/components/CardWithIcon/index.tsx b/src/ts/components/CardWithIcon/index.tsx
index 9b62ee8..877a73e 100644
--- a/src/ts/components/CardWithIcon/index.tsx
+++ b/src/ts/components/CardWithIcon/index.tsx
@@ -57,6 +57,7 @@ CardWithIcon.defaultProps = {
suffix: '',
color: undefined,
icon: undefined,
+ long: false,
};
export default CardWithIcon;
diff --git a/src/ts/components/Recommendations/components/Banner.tsx b/src/ts/components/Recommendations/components/Banner.tsx
deleted file mode 100644
index 3320c3e..0000000
--- a/src/ts/components/Recommendations/components/Banner.tsx
+++ /dev/null
@@ -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 (
-
- );
-}
-
-export default Banner;
diff --git a/src/ts/components/Recommendations/index.tsx b/src/ts/components/Recommendations/index.tsx
index 8e54a24..5ff85f1 100644
--- a/src/ts/components/Recommendations/index.tsx
+++ b/src/ts/components/Recommendations/index.tsx
@@ -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 = ();
+
+ 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' ? (
);
+ cards = addBannerInRandomIndex(cards);
}
const title = localization.get('recommendations.title');
diff --git a/src/ts/components/Recommendations/styles/card.module.scss b/src/ts/components/Recommendations/styles/card.module.scss
index 82c3407..36e8c39 100644
--- a/src/ts/components/Recommendations/styles/card.module.scss
+++ b/src/ts/components/Recommendations/styles/card.module.scss
@@ -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;
}
}
diff --git a/src/ts/helpers/achievement/byAuthor.ts b/src/ts/helpers/achievement/byAuthor.ts
index c14b6ea..f019944 100644
--- a/src/ts/helpers/achievement/byAuthor.ts
+++ b/src/ts/helpers/achievement/byAuthor.ts
@@ -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) => {
diff --git a/src/ts/helpers/achievement/byCompetition.ts b/src/ts/helpers/achievement/byCompetition.ts
index 4d77e8f..4eb738b 100644
--- a/src/ts/helpers/achievement/byCompetition.ts
+++ b/src/ts/helpers/achievement/byCompetition.ts
@@ -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 = {};
- 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');
+ if (!minAchievementCode) return;
+ const last = authors[authors.length - 1][0];
+ this.authors?.[last]?.push(minAchievementCode);
+ }
+}
- const midMessage = this.#getFirstAndLast(total.midMessage);
- // Мастер красноречия - стабильно ,самые длинные подписи коммитов
- achievements[midMessage.first].push('everyMessageLong');
- // Нет времени обьяснять - стабильно, самые короткие подписи коммитов
- achievements[midMessage.last].push('everyMessageShort');
+class AchievementsByCompetition {
+ authors: IHashMap> = {};
- const maxMessage = this.#getFirstAndLast(total.maxMessage);
- // Пиздеть, не мешки ворочить - самая длинная подпись коммита за все время
- achievements[maxMessage.first].push('longestMessage');
+ 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);
+ });
- const tasks = this.#getFirstAndLast(total.tasks);
- // Батя - больше всего закрытых задач
- achievements[tasks.first].push('moreTasks');
- // Зашел и вышел - меньше всего закрытых задач
- achievements[tasks.last].push('lessTasks');
+ // Длина имени
+ byAuthor.add(total.nameLength, 'longestName', 'shortestName');
- const days = this.#getFirstAndLast(total.days);
- // Ценный работник - больше всего рабочих дней
- achievements[days.first].push('moreWorkDays');
- // Дальше без меня - меньше всего рабочих дней
- achievements[days.last].push('lessWorkDays');
+ // Длина сообщения
+ byAuthor.add(total.messageLength, 'longestMessage');
- const lazyDays = this.#getFirstAndLast(total.lazyDays);
- // Мысленно я с вами - больше всего дней без коммитов
- achievements[lazyDays.first].push('moreLazyDays');
- // Папа Карло - меньше всего дней без коммитов
- achievements[lazyDays.last].push('lessLazyDays');
+ // Средняя длина сообщения
+ byAuthor.add(total.midMessageLength, 'everyMessageLong', 'everyMessageShort');
- const allDaysInProject = this.#getFirstAndLast(total.allDaysInProject);
- // Старожил - больше всего дней на проекте
- achievements[allDaysInProject.first].push('moreDaysInProject');
- // А это кто? - меньше всего дней на проекте
- achievements[allDaysInProject.last].push('lessDaysInProject');
+ // Количество закрытых задач
+ byAuthor.add(total.tasks, 'moreTasks', 'lessTasks');
- const firstCommit = this.#getFirstAndLast(total.firstCommit);
- // Адам - первый стабильны сотрудник на проекте
- achievements[firstCommit.last].push('adam');
+ // Количество дней с коммитами
+ byAuthor.add(total.days, 'moreWorkDays', 'lessWorkDays');
- const moreRefactoring = this.#getFirstAndLast(total.moreRefactoring);
- // Главный редактор - сделал больше всех меток «рефакторинг»
- achievements[moreRefactoring.first].push('moreRefactoring');
+ // Количество дней без коммитов
+ byAuthor.add(total.lazyDays, 'moreLazyDays', 'lessLazyDays');
- const tasksInDay = this.#getFirstAndLast(total.tasksInDay);
- // Спиди-гонщик - рекорд по количеству закрытых задач в день
- achievements[tasksInDay.first].push('moreTasksInDay');
+ // Количество дней на проекте
+ byAuthor.add(total.allDaysInProject, 'moreDaysInProject', 'lessDaysInProject');
- const commitsInDay = this.#getFirstAndLast(total.commitsInDay);
- // Zerg Rush - рекорд по количеству коммитов в день
- achievements[commitsInDay.first].push('moreCommits');
+ // Дата первого коммита
+ byAuthor.add(total.firstCommit, 'adam');
- this.authors = achievements;
+ // Количество метки «рефакторинг»
+ 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);
+ });
}
- #getTotalByAuthor(statisticByAuthor: any) {
- const achievements = {};
+ #getMinMaxValue(statisticByAuthor: any, dataGrip: any, callback: Function) {
const total: IHashMap = {};
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;
}
}
diff --git a/src/ts/helpers/achievement/constants/list.ts b/src/ts/helpers/achievement/constants/list.ts
index b217775..2b8f22d 100644
--- a/src/ts/helpers/achievement/constants/list.ts
+++ b/src/ts/helpers/achievement/constants/list.ts
@@ -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 файлов, где правит только этот человек
+
+ // Психологический знак задиака по дате первого коммита
};
diff --git a/src/ts/pages/Debug/index.tsx b/src/ts/pages/Debug/index.tsx
index e57e574..f38ddaf 100644
--- a/src/ts/pages/Debug/index.tsx
+++ b/src/ts/pages/Debug/index.tsx
@@ -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]) => (
+
+ ));
+
return (
<>
+
+
+ {achievements}
+
{recommendations}
diff --git a/src/ts/pages/Person/components/Speed.tsx b/src/ts/pages/Person/components/Speed.tsx
index fcabcb6..e88c178 100644
--- a/src/ts/pages/Person/components/Speed.tsx
+++ b/src/ts/pages/Person/components/Speed.tsx
@@ -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';
diff --git a/src/ts/pages/Person/components/Total.tsx b/src/ts/pages/Person/components/Total.tsx
index 1dca88a..300e65a 100644
--- a/src/ts/pages/Person/components/Total.tsx
+++ b/src/ts/pages/Person/components/Total.tsx
@@ -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 (
diff --git a/src/ts/pages/Person/components/print/Achievements.tsx b/src/ts/pages/Person/components/print/Achievements.tsx
index aaa11dc..29cf482 100644
--- a/src/ts/pages/Person/components/print/Achievements.tsx
+++ b/src/ts/pages/Person/components/print/Achievements.tsx
@@ -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 (
diff --git a/src/ts/pages/Team/components/Top.tsx b/src/ts/pages/Team/components/Top.tsx
index 6134cda..9c687c0 100644
--- a/src/ts/pages/Team/components/Top.tsx
+++ b/src/ts/pages/Team/components/Top.tsx
@@ -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 = [
diff --git a/src/ts/store/DataGrip.ts b/src/ts/store/DataGrip.ts
index af8407c..8d80be8 100644
--- a/src/ts/store/DataGrip.ts
+++ b/src/ts/store/DataGrip.ts
@@ -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;
}
diff --git a/src/ts/store/ThemeSettings.ts b/src/ts/store/ThemeSettings.ts
index 05049e4..0507e97 100644
--- a/src/ts/store/ThemeSettings.ts
+++ b/src/ts/store/ThemeSettings.ts
@@ -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 = {
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;
diff --git a/src/ts/translations/de/achievements.ts b/src/ts/translations/de/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/de/achievements.ts
+++ b/src/ts/translations/de/achievements.ts
@@ -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
diff --git a/src/ts/translations/en/achievements.ts b/src/ts/translations/en/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/en/achievements.ts
+++ b/src/ts/translations/en/achievements.ts
@@ -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
diff --git a/src/ts/translations/es/achievements.ts b/src/ts/translations/es/achievements.ts
index 12a566a..da1e802 100644
--- a/src/ts/translations/es/achievements.ts
+++ b/src/ts/translations/es/achievements.ts
@@ -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: Дальше без меня
diff --git a/src/ts/translations/fr/achievements.ts b/src/ts/translations/fr/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/fr/achievements.ts
+++ b/src/ts/translations/fr/achievements.ts
@@ -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
diff --git a/src/ts/translations/ja/achievements.ts b/src/ts/translations/ja/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/ja/achievements.ts
+++ b/src/ts/translations/ja/achievements.ts
@@ -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
diff --git a/src/ts/translations/pt/achievements.ts b/src/ts/translations/pt/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/pt/achievements.ts
+++ b/src/ts/translations/pt/achievements.ts
@@ -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
diff --git a/src/ts/translations/ru/achievements.ts b/src/ts/translations/ru/achievements.ts
index 12a566a..5e0a03c 100644
--- a/src/ts/translations/ru/achievements.ts
+++ b/src/ts/translations/ru/achievements.ts
@@ -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
`;
diff --git a/src/ts/translations/zh/achievements.ts b/src/ts/translations/zh/achievements.ts
index e1d21b4..1b2c1fc 100644
--- a/src/ts/translations/zh/achievements.ts
+++ b/src/ts/translations/zh/achievements.ts
@@ -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