mirror of
https://github.com/bakhirev/assayo.git
synced 2024-11-16 08:11:40 +00:00
update
This commit is contained in:
parent
fefc1e65b5
commit
0c795fe9d0
|
@ -223,7 +223,7 @@ By default, the image will run at ```http://127.0.0.1:80/```. If it doesn't work
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
<!doctype html><html><head><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=no,maximum-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="cleartype" content="on"><meta name="HandheldFriendly" content="True"><meta name="format-detection" content="telephone=no"><meta name="format-detection" content="address=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="theme-color" content="white"/><script type="text/javascript">var report=[]</script><script src='./log.txt'></script><script src='./log-1.txt'></script><script src='./log-2.txt'></script><script src='./log-3.txt'></script><script src='./log-4.txt'></script><script src='./log-5.txt'></script><script src='./log-6.txt'></script><script src='../log.txt'></script><script src='../log-1.txt'></script><script src='../log-2.txt'></script><script src='../log-3.txt'></script><script src='../log-4.txt'></script><script src='../log-5.txt'></script><script src='../log-6.txt'></script><script src='../../log.txt'></script><script src='../../log-1.txt'></script><script src='../../log-2.txt'></script><script src='../../log-3.txt'></script><script src='../../log-4.txt'></script><script src='../../log-5.txt'></script><script src='../../log-6.txt'></script><script src='/log.txt'></script><script src='/log-1.txt'></script><script src='/log-2.txt'></script><script src='/log-3.txt'></script><script src='/log-4.txt'></script><script src='/log-5.txt'></script><script src='/log-6.txt'></script><link rel="icon" href="./favicon.svg"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Git Statistics</title><meta name="description" content="Simple and fast report on git commit history."><meta name="keywords" content="git, statistics, audit, history, log, monitoring, employee control"><meta name="author" content="Bakhirev Aleksei"><meta name="copyright" content="(c) Bakhirev Aleksei"><meta http-equiv="Reply-to" content="alexey-bakhirev@yandex.ru"><meta name="application-name" content="Git statistics"><meta name="msapplication-tooltip" content="Simple and fast report on Git commit history."><meta property="og:title" content="Git Statistics"><meta property="og:description" content="Simple and fast report on Git commit history."><meta property="og:image" content="https://assayo.online/assets/seo/custom_icon_256.png"><meta property="og:site_name" content="Assayo"><meta property="og:url" content="https://assayo.online/"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Git Statistics"><meta name="twitter:description" content="Simple and fast report on Git commit history."><meta name="twitter:creator" content="Bakhirev Aleksei"><meta name="twitter:image:src" content="https://assayo.online/assets/seo/custom_icon_256.png"><meta name="twitter:domain" content="assayo.online"><meta name="twitter:site" content="assayo.online"><meta itemprop="name" content="Git Statistics"><meta itemprop="description" content="Simple and fast report on Git commit history."><meta itemprop="image" content="https://assayo.online/assets/seo/custom_icon_256.png"><script defer="defer" src="./static/index.js"></script><link href="./static/index.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
<!doctype html><html><head><meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,user-scalable=no,maximum-scale=1"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Cache-Control" content="no-cache"><meta http-equiv="cleartype" content="on"><meta name="HandheldFriendly" content="True"><meta name="format-detection" content="telephone=no"><meta name="format-detection" content="address=no"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="theme-color" content="white"/><meta name="defaultLanguage" content="ru"><meta name="availableLanguages" content="en, es, fr, ja, pt, de, zh, ru"><link rel="canonical" href="https://assayo.online/demo/"><script type="text/javascript">var report=[]</script><script src='./log.txt'></script><script src='./log-1.txt'></script><script src='./log-2.txt'></script><script src='./log-3.txt'></script><script src='./log-4.txt'></script><script src='./log-5.txt'></script><script src='./log-6.txt'></script><script src='../log.txt'></script><script src='../log-1.txt'></script><script src='../log-2.txt'></script><script src='../log-3.txt'></script><script src='../log-4.txt'></script><script src='../log-5.txt'></script><script src='../log-6.txt'></script><script src='../../log.txt'></script><script src='../../log-1.txt'></script><script src='../../log-2.txt'></script><script src='../../log-3.txt'></script><script src='../../log-4.txt'></script><script src='../../log-5.txt'></script><script src='../../log-6.txt'></script><script src='/log.txt'></script><script src='/log-1.txt'></script><script src='/log-2.txt'></script><script src='/log-3.txt'></script><script src='/log-4.txt'></script><script src='/log-5.txt'></script><script src='/log-6.txt'></script><link rel="icon" href="./favicon.svg"/><link rel="apple-touch-icon" href="./logo192.png"/><link rel="manifest" href="./manifest.json"/><title>Git Statistics</title><meta name="description" content="Simple and fast report on git commit history."><meta name="keywords" content="git, statistics, audit, history, log, monitoring, employee control"><meta name="author" content="Bakhirev Aleksei"><meta name="copyright" content="(c) Bakhirev Aleksei"><meta http-equiv="Reply-to" content="alexey-bakhirev@yandex.ru"><meta name="application-name" content="Git statistics"><meta name="msapplication-tooltip" content="Simple and fast report on Git commit history."><meta property="og:title" content="Git Statistics"><meta property="og:description" content="Simple and fast report on Git commit history."><meta property="og:image" content="https://assayo.online/assets/seo/custom_icon_256.png"><meta property="og:site_name" content="Assayo"><meta property="og:url" content="https://assayo.online/"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Git Statistics"><meta name="twitter:description" content="Simple and fast report on Git commit history."><meta name="twitter:creator" content="Bakhirev Aleksei"><meta name="twitter:image:src" content="https://assayo.online/assets/seo/custom_icon_256.png"><meta name="twitter:domain" content="assayo.online"><meta name="twitter:site" content="assayo.online"><meta itemprop="name" content="Git Statistics"><meta itemprop="description" content="Simple and fast report on Git commit history."><meta itemprop="image" content="https://assayo.online/assets/seo/custom_icon_256.png"><script defer="defer" src="./static/index.js"></script><link href="./static/index.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -200,7 +200,7 @@ Standardmäßig wird das abbild an der folgenden adresse ausgeführt ```http://1
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -202,7 +202,7 @@ By default, the image will run at ```http://127.0.0.1:80/```. If it doesn't work
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -203,7 +203,7 @@ Por defecto, la imagen se ejecutará en la siguiente dirección ```http://127.0.
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -200,7 +200,7 @@ Par défaut, l'image s'exécute à ```http://127.0.0.1:80/```. Si cela ne foncti
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -201,7 +201,7 @@ you_url - gitのログのコンテナーのURLアドレス;
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -201,7 +201,7 @@ Por padrão, a imagem será iniciada no endereço ```http://127.0.0.1:80/```. Se
|
||||||
#### 📐 Architecture
|
#### 📐 Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -201,7 +201,7 @@ you_url - URL адресс вашего контейнера с логами
|
||||||
#### 📐 Архитектура
|
#### 📐 Архитектура
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(вы тут)** отображение отчётов. Для работы ему нужен log файл с данными.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(вы тут)** отображение отчётов. Для работы ему нужен log файл с данными.
|
||||||
<a name="link-28"></a>
|
<a name="link-28"></a>
|
||||||
|
|
|
@ -198,7 +198,7 @@ you_url - git日志的容器的URL地址;
|
||||||
#### 🛠️ Architecture
|
#### 🛠️ Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
<a name="link-27"></a>
|
<a name="link-27"></a>
|
||||||
|
|
|
@ -304,7 +304,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -337,4 +337,4 @@
|
||||||
"web site [https://assayo.online/](https://assayo.online/?ref=github&lang=de)"
|
"web site [https://assayo.online/](https://assayo.online/?ref=github&lang=de)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -308,7 +308,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -351,4 +351,4 @@
|
||||||
"website [https://assayo.online/](https://assayo.online/?ref=github&lang=en)"
|
"website [https://assayo.online/](https://assayo.online/?ref=github&lang=en)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -311,7 +311,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -351,4 +351,4 @@
|
||||||
"sitio web [https://assayo.online/](https://assayo.online/?ref=github&lang=es)"
|
"sitio web [https://assayo.online/](https://assayo.online/?ref=github&lang=es)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -302,7 +302,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -342,4 +342,4 @@
|
||||||
"site [https://assayo.online/](https://assayo.online/?ref=github&lang=fr)"
|
"site [https://assayo.online/](https://assayo.online/?ref=github&lang=fr)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -307,7 +307,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -340,4 +340,4 @@
|
||||||
"ウェブサイト [https://assayo.online/](https://assayo.online/?ref=github&lang=ja)"
|
"ウェブサイト [https://assayo.online/](https://assayo.online/?ref=github&lang=ja)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -307,7 +307,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -340,4 +340,4 @@
|
||||||
"site [https://assayo.online/](https://assayo.online/?ref=github&lang=pt)"
|
"site [https://assayo.online/](https://assayo.online/?ref=github&lang=pt)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -305,7 +305,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов."
|
||||||
|
@ -345,4 +345,4 @@
|
||||||
"сайт [https://assayo.online/](https://assayo.online/?ref=github&lang=ru)"
|
"сайт [https://assayo.online/](https://assayo.online/?ref=github&lang=ru)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -304,7 +304,7 @@
|
||||||
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
"img": "<img src=\"https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg\" width=\"70%\" />"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
"p": "1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
"p": "2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report."
|
||||||
|
@ -337,4 +337,4 @@
|
||||||
"网站 [https://assayo.online/](https://assayo.online/?ref=github&lang=zh)"
|
"网站 [https://assayo.online/](https://assayo.online/?ref=github&lang=zh)"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -166,7 +166,7 @@ Standardmäßig wird das abbild an der folgenden adresse ausgeführt ```http://1
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,7 @@ By default, the image will run at ```http://127.0.0.1:80/```. If it doesn't work
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -170,7 +170,7 @@ Por defecto, la imagen se ejecutará en la siguiente dirección ```http://127.0.
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -165,7 +165,7 @@ Par défaut, l'image s'exécute à ```http://127.0.0.1:80/```. Si cela ne foncti
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ you_url - gitのログのコンテナーのURLアドレス;
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -168,7 +168,7 @@ Por padrão, a imagem será iniciada no endereço ```http://127.0.0.1:80/```. Se
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ you_url - URL адресс вашего контейнера с логами
|
||||||
#### Архитектура
|
#### Архитектура
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) отображение списка отчётов. Каждый отчёт имеет название, описание и список репозиториев.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) сборка, склейка, обработка логов из репозиториев для отчётов.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(вы тут)** отображение отчётов. Для работы ему нужен log файл с данными.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(вы тут)** отображение отчётов. Для работы ему нужен log файл с данными.
|
||||||
|
|
||||||
|
|
|
@ -169,7 +169,7 @@ you_url - git日志的容器的URL地址;
|
||||||
#### Architecture
|
#### Architecture
|
||||||
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
<img src="https://raw.githubusercontent.com/bakhirev/assayo-crawler/12af4410fc93384cafb108a4429e43f9a874dbaa/schema.svg" width="70%" />
|
||||||
|
|
||||||
1. [Reports showcase UI](###) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
1. [Reports showcase UI](https://github.com/bakhirev/assayo-showcase) displays a list of available reports. Each report consists of a title, description, and a list of repositories.
|
||||||
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
2. [Crawler service](https://github.com/bakhirev/assayo-crawler) collects repository logs for the report.
|
||||||
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
3. [Log visualization UI](https://github.com/bakhirev/assayo) **(you here)** displays report. Needs a log file for work.
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,10 @@
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
<meta name="apple-mobile-web-app-status-bar-style" content="default">
|
||||||
<meta name="theme-color" content="white"/>
|
<meta name="theme-color" content="white"/>
|
||||||
|
|
||||||
|
<meta name="defaultLanguage" content="ru">
|
||||||
|
<meta name="availableLanguages" content="en, es, fr, ja, pt, de, zh, ru">
|
||||||
|
<link rel="canonical" href="https://assayo.online/demo/">
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var report = [];
|
var report = [];
|
||||||
</script>
|
</script>
|
||||||
|
@ -28,11 +32,13 @@
|
||||||
|
|
||||||
<meta name="application-name" content="Git statistics">
|
<meta name="application-name" content="Git statistics">
|
||||||
<meta name="msapplication-tooltip" content="Simple and fast report on Git commit history.">
|
<meta name="msapplication-tooltip" content="Simple and fast report on Git commit history.">
|
||||||
|
|
||||||
<meta property="og:title" content="Git Statistics">
|
<meta property="og:title" content="Git Statistics">
|
||||||
<meta property="og:description" content="Simple and fast report on Git commit history.">
|
<meta property="og:description" content="Simple and fast report on Git commit history.">
|
||||||
<meta property="og:image" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
<meta property="og:image" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
||||||
<meta property="og:site_name" content="Assayo">
|
<meta property="og:site_name" content="Assayo">
|
||||||
<meta property="og:url" content="https://assayo.online/">
|
<meta property="og:url" content="https://assayo.online/">
|
||||||
|
|
||||||
<meta name="twitter:card" content="summary">
|
<meta name="twitter:card" content="summary">
|
||||||
<meta name="twitter:title" content="Git Statistics">
|
<meta name="twitter:title" content="Git Statistics">
|
||||||
<meta name="twitter:description" content="Simple and fast report on Git commit history.">
|
<meta name="twitter:description" content="Simple and fast report on Git commit history.">
|
||||||
|
@ -40,6 +46,7 @@
|
||||||
<meta name="twitter:image:src" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
<meta name="twitter:image:src" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
||||||
<meta name="twitter:domain" content="assayo.online">
|
<meta name="twitter:domain" content="assayo.online">
|
||||||
<meta name="twitter:site" content="assayo.online">
|
<meta name="twitter:site" content="assayo.online">
|
||||||
|
|
||||||
<meta itemprop="name" content="Git Statistics">
|
<meta itemprop="name" content="Git Statistics">
|
||||||
<meta itemprop="description" content="Simple and fast report on Git commit history.">
|
<meta itemprop="description" content="Simple and fast report on Git commit history.">
|
||||||
<meta itemprop="image" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
<meta itemprop="image" content="https://assayo.online/assets/seo/custom_icon_256.png">
|
||||||
|
|
|
@ -21,7 +21,7 @@ function LineChart({
|
||||||
details,
|
details,
|
||||||
className,
|
className,
|
||||||
}: ILineChartProps): React.ReactElement | null {
|
}: ILineChartProps): React.ReactElement | null {
|
||||||
if (value === 0) return null;
|
if (!value || value === 0) return null;
|
||||||
|
|
||||||
const width = Math.round((value ?? 100) * (100 / options.max));
|
const width = Math.round((value ?? 100) * (100 / options.max));
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ function LineChart({
|
||||||
}
|
}
|
||||||
|
|
||||||
LineChart.defaultProps = {
|
LineChart.defaultProps = {
|
||||||
value: 100,
|
value: 0,
|
||||||
details: undefined,
|
details: undefined,
|
||||||
className: '',
|
className: '',
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React from 'react';
|
import React, { useEffect } from 'react';
|
||||||
|
|
||||||
import Logo from 'ts/pages/PageWrapper/components/sidebar/Logo';
|
import Logo from 'ts/pages/PageWrapper/components/sidebar/Logo';
|
||||||
|
|
||||||
|
@ -7,6 +7,14 @@ import progress from './progress.module.scss';
|
||||||
|
|
||||||
function SplashScreen(): React.ReactElement | null {
|
function SplashScreen(): React.ReactElement | null {
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const overflow = document.body.style.overflow;
|
||||||
|
document.body.style.overflow = 'hidden';
|
||||||
|
setTimeout(() => {
|
||||||
|
document.body.style.overflow = overflow;
|
||||||
|
}, 5400);
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={style.splash_screen}>
|
<div className={style.splash_screen}>
|
||||||
<div className={style.splash_screen_container}>
|
<div className={style.splash_screen_container}>
|
||||||
|
|
|
@ -1,15 +1,21 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { IColumn } from '../interfaces/Column';
|
import IHashMap from 'ts/interfaces/HashMap';
|
||||||
|
|
||||||
|
import { ColumnTypesEnum, IColumn, IRowsConfig } from '../interfaces/Column';
|
||||||
import DefaultCell from './cells/CellDefault';
|
import DefaultCell from './cells/CellDefault';
|
||||||
|
import DetailsCell from './cells/CellDetails';
|
||||||
|
|
||||||
import style from '../styles/index.module.scss';
|
import style from '../styles/index.module.scss';
|
||||||
|
import { getRowId } from '../helpers/getRowsConfig';
|
||||||
|
|
||||||
interface IBodyProps {
|
interface IBodyProps {
|
||||||
rows: any[];
|
rows: any[];
|
||||||
columns: IColumn[];
|
columns: IColumn[];
|
||||||
disabledRow?: (row: any) => boolean;
|
disabledRow?: (row: any) => boolean;
|
||||||
className?: string;
|
className?: string;
|
||||||
|
rowsConfig?: IHashMap<IRowsConfig>;
|
||||||
|
updateRowsConfig?: (config: IRowsConfig) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
function Body({
|
function Body({
|
||||||
|
@ -17,44 +23,70 @@ function Body({
|
||||||
disabledRow,
|
disabledRow,
|
||||||
columns,
|
columns,
|
||||||
className,
|
className,
|
||||||
|
rowsConfig,
|
||||||
|
updateRowsConfig,
|
||||||
}: IBodyProps) {
|
}: IBodyProps) {
|
||||||
const formattedRows = rows?.map((row: any, index: number) => {
|
const formattedRows: any = [];
|
||||||
|
const getSubRow = columns
|
||||||
|
.find((column: IColumn) => column.template === ColumnTypesEnum.DETAILS)
|
||||||
|
?.formatter;
|
||||||
|
|
||||||
|
rows?.forEach((row: any, rowIndex: number) => {
|
||||||
|
const rowConfig = (rowsConfig || {})[getRowId(row, rowIndex)];
|
||||||
const cells = columns.map((column: IColumn, columnIndex: number) => {
|
const cells = columns.map((column: IColumn, columnIndex: number) => {
|
||||||
const value = column.properties
|
const key = `${column.title}_${columnIndex}`;
|
||||||
? row[column.properties]
|
|
||||||
: row;
|
|
||||||
|
|
||||||
const formattedValue = column.formatter
|
if (column.template === ColumnTypesEnum.DETAILS) {
|
||||||
? column.formatter(value)
|
return (
|
||||||
: value;
|
<DetailsCell
|
||||||
|
key={key}
|
||||||
const content: any = typeof column.template === 'function'
|
column={column}
|
||||||
? column.template(formattedValue, row)
|
row={row}
|
||||||
: `${column.prefixes ?? ''}${formattedValue ?? ''}${column.suffixes ?? ''}`;
|
rowConfig={rowConfig}
|
||||||
|
updateRowsConfig={updateRowsConfig}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DefaultCell
|
<DefaultCell
|
||||||
key={`${column.title}_${columnIndex}`}
|
key={key}
|
||||||
column={column}
|
column={column}
|
||||||
row={row}
|
row={row}
|
||||||
>
|
/>
|
||||||
{content}
|
|
||||||
</DefaultCell>
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
const rowClassName = disabledRow && disabledRow(row)
|
const rowClassName = [
|
||||||
? style.disabled
|
style.table_row,
|
||||||
: '';
|
className,
|
||||||
|
];
|
||||||
|
|
||||||
return (
|
if (disabledRow && disabledRow(row)) {
|
||||||
|
rowClassName.push(style.table_row_hide);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rowConfig?.details) {
|
||||||
|
rowClassName.push(style.table_row_selected);
|
||||||
|
}
|
||||||
|
|
||||||
|
formattedRows.push(
|
||||||
<div
|
<div
|
||||||
key={index}
|
key={rowIndex}
|
||||||
className={`${style.table_row} ${rowClassName} ${className}`}
|
className={rowClassName.join('')}
|
||||||
>
|
>
|
||||||
{cells}
|
{cells}
|
||||||
</div>
|
</div>);
|
||||||
);
|
|
||||||
|
if (!rowConfig?.details || !getSubRow) return;
|
||||||
|
|
||||||
|
formattedRows.push(
|
||||||
|
<div
|
||||||
|
key={`${rowIndex}-detail`}
|
||||||
|
className={`${style.table_sub_row} ${className}`}
|
||||||
|
>
|
||||||
|
{getSubRow(row) || null}
|
||||||
|
</div>);
|
||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -48,7 +48,7 @@ Column.defaultProps = {
|
||||||
title: '',
|
title: '',
|
||||||
prefixes: [''],
|
prefixes: [''],
|
||||||
suffixes: [''],
|
suffixes: [''],
|
||||||
formatter: (value: any) => value,
|
formatter: undefined,
|
||||||
className: '',
|
className: '',
|
||||||
isDisabled: false,
|
isDisabled: false,
|
||||||
isFixed: false,
|
isFixed: false,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { ReactNode } from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
import { IColumn } from '../../interfaces/Column';
|
import { IColumn } from '../../interfaces/Column';
|
||||||
import style from '../../styles/index.module.scss';
|
import style from '../../styles/index.module.scss';
|
||||||
|
@ -7,14 +7,12 @@ interface IDefaultCellProps {
|
||||||
column: IColumn,
|
column: IColumn,
|
||||||
row: any,
|
row: any,
|
||||||
className?: string,
|
className?: string,
|
||||||
children?: ReactNode | string | number | boolean | null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function DefaultCell({
|
function DefaultCell({
|
||||||
column,
|
column,
|
||||||
row,
|
row,
|
||||||
className,
|
className,
|
||||||
children,
|
|
||||||
}: IDefaultCellProps): JSX.Element {
|
}: IDefaultCellProps): JSX.Element {
|
||||||
const columnClassName = typeof column.className === 'function'
|
const columnClassName = typeof column.className === 'function'
|
||||||
? column.className('body', row)
|
? column.className('body', row)
|
||||||
|
@ -24,8 +22,20 @@ function DefaultCell({
|
||||||
? (() => { if (column.onClick) column.onClick(row); })
|
? (() => { if (column.onClick) column.onClick(row); })
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
const cellTitle = typeof children === 'string' && children.length > 20
|
const value = column.properties
|
||||||
? children
|
? row[column.properties]
|
||||||
|
: row;
|
||||||
|
|
||||||
|
const formattedValue = column.formatter
|
||||||
|
? column.formatter(value)
|
||||||
|
: value;
|
||||||
|
|
||||||
|
const content: any = typeof column.template === 'function'
|
||||||
|
? column.template(formattedValue, row)
|
||||||
|
: `${column.prefixes ?? ''}${formattedValue ?? ''}${column.suffixes ?? ''}`;
|
||||||
|
|
||||||
|
const cellTitle = typeof content === 'string' && content.length > 20
|
||||||
|
? content
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -39,7 +49,7 @@ function DefaultCell({
|
||||||
}} // @ts-ignore
|
}} // @ts-ignore
|
||||||
onClick={onClick}
|
onClick={onClick}
|
||||||
>
|
>
|
||||||
{children}
|
{content}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
68
src/ts/components/Table/components/cells/CellDetails.tsx
Normal file
68
src/ts/components/Table/components/cells/CellDetails.tsx
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { IColumn, IRowsConfig } from '../../interfaces/Column';
|
||||||
|
import style from '../../styles/index.module.scss';
|
||||||
|
|
||||||
|
interface IDefaultCellProps {
|
||||||
|
column: IColumn,
|
||||||
|
row: any,
|
||||||
|
className?: string,
|
||||||
|
rowConfig?: IRowsConfig;
|
||||||
|
updateRowsConfig?: (config: IRowsConfig) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
function DetailsCell({
|
||||||
|
column,
|
||||||
|
row,
|
||||||
|
className,
|
||||||
|
rowConfig,
|
||||||
|
updateRowsConfig,
|
||||||
|
}: IDefaultCellProps): JSX.Element {
|
||||||
|
const config = rowConfig || { id: 1 };
|
||||||
|
|
||||||
|
const columnClassName = typeof column.className === 'function'
|
||||||
|
? column.className('body', row)
|
||||||
|
: column.className;
|
||||||
|
|
||||||
|
const iconClassName = config?.details
|
||||||
|
? style.table_cell_icon_open
|
||||||
|
: style.table_cell_icon_close;
|
||||||
|
|
||||||
|
const hasIcon = ((column.properties && row[column.properties])
|
||||||
|
|| !column.properties
|
||||||
|
|| !column.properties?.length)
|
||||||
|
&& column.formatter;
|
||||||
|
|
||||||
|
const onClick = () => {
|
||||||
|
if (!hasIcon || !updateRowsConfig) return;
|
||||||
|
updateRowsConfig({
|
||||||
|
...config,
|
||||||
|
details: !config?.details,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
key={column.title} // @ts-ignore
|
||||||
|
className={`${style.table_cell} ${className || ''} ${columnClassName || ''}`}
|
||||||
|
style={{
|
||||||
|
width: column.width,
|
||||||
|
cursor: 'pointer',
|
||||||
|
}} // @ts-ignore
|
||||||
|
onClick={onClick}
|
||||||
|
>
|
||||||
|
{hasIcon && (
|
||||||
|
<img
|
||||||
|
className={iconClassName}
|
||||||
|
src="./assets/menu/arrow_right.svg"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
DetailsCell.defaultPeops = {
|
||||||
|
className: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DetailsCell;
|
31
src/ts/components/Table/helpers/getRowsConfig.ts
Normal file
31
src/ts/components/Table/helpers/getRowsConfig.ts
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
import IHashMap from 'ts/interfaces/HashMap';
|
||||||
|
|
||||||
|
import { IRowsConfig } from '../interfaces/Column';
|
||||||
|
|
||||||
|
export function getRowId(row: any, index: number) {
|
||||||
|
return row?.id || row?.uuid || `${row?.title}-${index}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNewConfig(id: any): IRowsConfig {
|
||||||
|
return {
|
||||||
|
id: id,
|
||||||
|
details: false,
|
||||||
|
disabled: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRowsConfig(
|
||||||
|
rows: any[] = [],
|
||||||
|
oldConfigs: IHashMap<IRowsConfig> = {},
|
||||||
|
): IHashMap<IRowsConfig> {
|
||||||
|
const configs = {};
|
||||||
|
|
||||||
|
rows.map((row: any, index: number) => {
|
||||||
|
const id = getRowId(row, index);
|
||||||
|
configs[id] = oldConfigs[id] || getNewConfig(id);
|
||||||
|
});
|
||||||
|
|
||||||
|
return configs;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default getRowsConfig;
|
|
@ -1,13 +1,15 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
|
|
||||||
import ISort from 'ts/interfaces/Sort';
|
import ISort from 'ts/interfaces/Sort';
|
||||||
|
import IHashMap from 'ts/interfaces/HashMap';
|
||||||
|
|
||||||
import { IColumn } from './interfaces/Column';
|
import { IColumn, IRowsConfig } from './interfaces/Column';
|
||||||
import Header from './components/Header';
|
import Header from './components/Header';
|
||||||
import Body from './components/Body';
|
import Body from './components/Body';
|
||||||
import getAdaptiveColumnWidth from './helpers/getAdaptiveColumnWidth';
|
import getAdaptiveColumnWidth from './helpers/getAdaptiveColumnWidth';
|
||||||
import getColumnConfigs from './helpers/getColumnConfigs';
|
import getColumnConfigs from './helpers/getColumnConfigs';
|
||||||
import getDefaultProps from './helpers/getDefaultProps';
|
import getDefaultProps from './helpers/getDefaultProps';
|
||||||
|
import getRowsConfig from './helpers/getRowsConfig';
|
||||||
|
|
||||||
import style from './styles/index.module.scss';
|
import style from './styles/index.module.scss';
|
||||||
|
|
||||||
|
@ -27,6 +29,7 @@ function Table({
|
||||||
children,
|
children,
|
||||||
}: ITableProps): React.ReactElement | null {
|
}: ITableProps): React.ReactElement | null {
|
||||||
const [offsetWidth, setOffsetWidth] = useState<number>(0);
|
const [offsetWidth, setOffsetWidth] = useState<number>(0);
|
||||||
|
const [rowsConfig, setRowsConfig] = useState<IHashMap<IRowsConfig>>({});
|
||||||
|
|
||||||
if (!rows || !rows.length) return null;
|
if (!rows || !rows.length) return null;
|
||||||
|
|
||||||
|
@ -37,9 +40,20 @@ function Table({
|
||||||
setOffsetWidth(currentWidth);
|
setOffsetWidth(currentWidth);
|
||||||
}, [currentWidth]);
|
}, [currentWidth]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const newRowsConfig = getRowsConfig(rows, rowsConfig);
|
||||||
|
setRowsConfig(newRowsConfig);
|
||||||
|
}, [rows]);
|
||||||
|
|
||||||
const defaultColumns = getDefaultProps(children) as IColumn[];
|
const defaultColumns = getDefaultProps(children) as IColumn[];
|
||||||
const adaptiveWidth = getAdaptiveColumnWidth(defaultColumns, offsetWidth);
|
const adaptiveWidth = getAdaptiveColumnWidth(defaultColumns, offsetWidth);
|
||||||
const columns = getColumnConfigs(defaultColumns, adaptiveWidth, sort);
|
const columns = getColumnConfigs(defaultColumns, adaptiveWidth, sort);
|
||||||
|
const updateRowsConfig = (config: IRowsConfig) => {
|
||||||
|
setRowsConfig({
|
||||||
|
...rowsConfig,
|
||||||
|
[config.id]: config,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -57,6 +71,8 @@ function Table({
|
||||||
rows={rows}
|
rows={rows}
|
||||||
columns={columns}
|
columns={columns}
|
||||||
disabledRow={disabledRow}
|
disabledRow={disabledRow}
|
||||||
|
rowsConfig={rowsConfig}
|
||||||
|
updateRowsConfig={updateRowsConfig}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,51 +1,61 @@
|
||||||
export type ColumnType = 'STRING' | 'NUMBER' | 'SHORT_NUMBER';
|
export type ColumnType = 'STRING' | 'NUMBER' | 'SHORT_NUMBER' | 'DETAILS';
|
||||||
|
|
||||||
/** Тип столбца определяет тип содержимого всех ячеек столбца */
|
/** Тип столбца определяет тип содержимого всех ячеек столбца */
|
||||||
export enum ColumnTypesEnum {
|
export enum ColumnTypesEnum {
|
||||||
STRING = 'STRING',
|
STRING = 'STRING',
|
||||||
NUMBER = 'NUMBER',
|
NUMBER = 'NUMBER',
|
||||||
SHORT_NUMBER = 'SHORT_NUMBER',
|
SHORT_NUMBER = 'SHORT_NUMBER',
|
||||||
|
DETAILS = 'DETAILS',
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IColumn {
|
export interface IColumn {
|
||||||
/** Тип столбца */
|
/** Тип столбца */
|
||||||
template?: ColumnTypesEnum | Function,
|
template?: ColumnTypesEnum | Function;
|
||||||
/** Уникальный ключ столбца */
|
/** Уникальный ключ столбца */
|
||||||
properties?: string,
|
properties?: string;
|
||||||
/** Заголовок столбца */
|
/** Заголовок столбца */
|
||||||
title?: string,
|
title?: string;
|
||||||
/** Префиксы для заголовка столбца */
|
/** Префиксы для заголовка столбца */
|
||||||
prefixes?: string,
|
prefixes?: string;
|
||||||
/** Суффиксы для заголовка столбца (%, $ и т.д.) */
|
/** Суффиксы для заголовка столбца (%; $ и т.д.) */
|
||||||
suffixes?: string,
|
suffixes?: string;
|
||||||
/** Функция для форматирования данных в столбце */
|
/** Функция для форматирования данных в столбце */
|
||||||
formatter?: Function,
|
formatter?: Function;
|
||||||
|
|
||||||
/** Направление сортировки */
|
/** Направление сортировки */
|
||||||
sortDirection?: number,
|
sortDirection?: number;
|
||||||
|
|
||||||
/** Фиксированный столбец */
|
/** Фиксированный столбец */
|
||||||
isFixed?: boolean,
|
isFixed?: boolean;
|
||||||
/** Сортировка столбца */
|
/** Сортировка столбца */
|
||||||
isSortable?: boolean | string,
|
isSortable?: boolean | string;
|
||||||
/** Изменение ширины столбца */
|
/** Изменение ширины столбца */
|
||||||
isResizable?: boolean,
|
isResizable?: boolean;
|
||||||
/** Drag-and-Drop столбца */
|
/** Drag-and-Drop столбца */
|
||||||
isDraggable?: boolean,
|
isDraggable?: boolean;
|
||||||
/** Видимость столбца */
|
/** Видимость столбца */
|
||||||
isShow?: boolean,
|
isShow?: boolean;
|
||||||
/** Клас для колонки */
|
/** Клас для колонки */
|
||||||
className?: string | Function
|
className?: string | Function
|
||||||
/** Стилья для колонки */
|
/** Стилья для колонки */
|
||||||
style?: Function,
|
style?: Function;
|
||||||
/** Минимальная ширина столбца если он адаптивен */
|
/** Минимальная ширина столбца если он адаптивен */
|
||||||
minWidth?: number,
|
minWidth?: number;
|
||||||
/** Ширина столбца заданная в верстке */
|
/** Ширина столбца заданная в верстке */
|
||||||
defaultWidth?: number,
|
defaultWidth?: number;
|
||||||
/** Ширина столбца установленная пользователем */
|
/** Ширина столбца установленная пользователем */
|
||||||
userWidth?: number,
|
userWidth?: number;
|
||||||
/** Ширина столбца итоговая */
|
/** Ширина столбца итоговая */
|
||||||
width?: number,
|
width?: number;
|
||||||
/** Клик на ячейку */
|
/** Клик на ячейку */
|
||||||
onClick?: Function,
|
onClick?: Function;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IRowsConfig {
|
||||||
|
/** ID строки */
|
||||||
|
id: string | number;
|
||||||
|
/** Строка раскрыта */
|
||||||
|
details?: boolean;
|
||||||
|
/** Строка не активна */
|
||||||
|
disabled?: boolean;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,72 +10,103 @@
|
||||||
break-inside: auto;
|
break-inside: auto;
|
||||||
--table-cell-height: 48px;
|
--table-cell-height: 48px;
|
||||||
--table-bar-width: 350px;
|
--table-bar-width: 350px;
|
||||||
}
|
|
||||||
|
|
||||||
.table_tree {
|
&_tree {
|
||||||
--table-cell-height: 22px;
|
--table-cell-height: 22px;
|
||||||
--table-bar-width: 200px;
|
--table-bar-width: 200px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table_row {
|
&_row {
|
||||||
position: relative;
|
position: relative;
|
||||||
font-weight: 100;
|
font-weight: 100;
|
||||||
display: block;
|
display: block;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
border-bottom: 1px solid #EEEEEE;
|
border-bottom: 1px solid #EEEEEE;
|
||||||
break-inside: auto;
|
break-inside: auto;
|
||||||
}
|
|
||||||
|
|
||||||
.table_row:last-child {
|
&:last-child {
|
||||||
border-bottom: none;
|
border-bottom: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table_row_hide {
|
&_hide {
|
||||||
opacity: 0.2;
|
opacity: 0.2;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table_cell,
|
&_selected {
|
||||||
.table_header_cell {
|
background-color: #FFFAF0;
|
||||||
font-size: var(--font-xs);
|
}
|
||||||
z-index: 0;
|
}
|
||||||
|
|
||||||
display: inline-block;
|
&_sub_row {
|
||||||
height: var(--table-cell-height);
|
position: relative;
|
||||||
line-height: var(--table-cell-height);
|
font-weight: 100;
|
||||||
|
display: block;
|
||||||
|
padding-top: 24px;
|
||||||
|
padding-left: 12px;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-bottom: 1px solid #EEEEEE;
|
||||||
|
break-inside: auto;
|
||||||
|
}
|
||||||
|
|
||||||
box-sizing: border-box;
|
&_cell,
|
||||||
white-space: nowrap;
|
&_header_cell {
|
||||||
overflow: hidden;
|
font-size: var(--font-xs);
|
||||||
text-overflow: ellipsis;
|
z-index: 0;
|
||||||
vertical-align: top;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table_cell {
|
display: inline-block;
|
||||||
padding: 0 4px;
|
height: var(--table-cell-height);
|
||||||
}
|
line-height: var(--table-cell-height);
|
||||||
|
|
||||||
.table_header_cell {
|
box-sizing: border-box;
|
||||||
font-weight: bold;
|
white-space: nowrap;
|
||||||
height: var(--table-cell-height);
|
overflow: hidden;
|
||||||
padding: 0 4px;
|
text-overflow: ellipsis;
|
||||||
line-height: var(--table-cell-height);
|
vertical-align: top;
|
||||||
background-color: #FFFFFF;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.table_cell:first-child,
|
&_cell {
|
||||||
.table_header_cell:first-child {
|
padding: 0 4px;
|
||||||
position: sticky;
|
}
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
z-index: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.table_cell:first-child {
|
&_header_cell {
|
||||||
background-color: rgba(255, 255, 255, 0.9);
|
font-weight: bold;
|
||||||
}
|
height: var(--table-cell-height);
|
||||||
|
padding: 0 4px;
|
||||||
|
line-height: var(--table-cell-height);
|
||||||
|
background-color: #FFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
.table_cell_number {
|
&_cell:first-child,
|
||||||
text-align: right;
|
&_header_cell:first-child {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_cell:first-child {
|
||||||
|
background-color: rgba(255, 255, 255, 0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
&_cell_number {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_cell_icon {
|
||||||
|
&_open,
|
||||||
|
&_close {
|
||||||
|
display: inline-block;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
margin-top: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&_open {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.disabled {
|
.disabled {
|
||||||
|
@ -91,7 +122,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
.table_cell:first-child {
|
.table_cell:first-child {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,8 @@ export default class DataGripByPR {
|
||||||
} else {
|
} else {
|
||||||
this.#updateCommitByTaskNumber(commit);
|
this.#updateCommitByTaskNumber(commit);
|
||||||
}
|
}
|
||||||
} else if (commit.commitType !== COMMIT_TYPE.AUTO_MERGE && !this.pr[commit.prId]) {
|
} else if (!this.pr[commit.prId]
|
||||||
|
&& [COMMIT_TYPE.PR_BITBUCKET, COMMIT_TYPE.PR_GITHUB].includes(commit.commitType)) {
|
||||||
this.#addCommitByPR(commit);
|
this.#addCommitByPR(commit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -160,4 +161,4 @@ export default class DataGripByPR {
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,11 +15,14 @@ export default class DataGripByRelease {
|
||||||
|
|
||||||
statistic: any[] = [];
|
statistic: any[] = [];
|
||||||
|
|
||||||
|
lastPrList: any[] = [];
|
||||||
|
|
||||||
statisticByName: IHashMap<any> = [];
|
statisticByName: IHashMap<any> = [];
|
||||||
|
|
||||||
clear() {
|
clear() {
|
||||||
this.release = {};
|
this.release = {};
|
||||||
this.statistic = [];
|
this.statistic = [];
|
||||||
|
this.lastPrList = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
addCommit(commit: ISystemCommit) {
|
addCommit(commit: ISystemCommit) {
|
||||||
|
@ -29,6 +32,8 @@ export default class DataGripByRelease {
|
||||||
} else {
|
} else {
|
||||||
this.#addRelease(commit);
|
this.#addRelease(commit);
|
||||||
}
|
}
|
||||||
|
} else if (commit.commitType === COMMIT_TYPE.PR_GITHUB || commit.commitType === COMMIT_TYPE.PR_BITBUCKET) {
|
||||||
|
this.lastPrList.push(commit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,12 +63,18 @@ export default class DataGripByRelease {
|
||||||
to: null,
|
to: null,
|
||||||
delayInDays: 0,
|
delayInDays: 0,
|
||||||
waitingInDays: 0,
|
waitingInDays: 0,
|
||||||
|
pr: this.lastPrList,
|
||||||
|
prLength: this.lastPrList.length,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.lastPrList = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTotalInfo() {
|
updateTotalInfo() {
|
||||||
let prev: any = null;
|
let prev: any = null;
|
||||||
|
|
||||||
|
this.lastPrList = [];
|
||||||
|
|
||||||
this.statistic = Object.entries(this.release)
|
this.statistic = Object.entries(this.release)
|
||||||
.sort((a: any, b: any) => a[1].firstCommit.milliseconds - b[1].firstCommit.milliseconds)
|
.sort((a: any, b: any) => a[1].firstCommit.milliseconds - b[1].firstCommit.milliseconds)
|
||||||
.map((a: any) => {
|
.map((a: any) => {
|
||||||
|
|
|
@ -39,17 +39,17 @@ export default function getUserInfo(logString: string): ICommit | ISystemCommit
|
||||||
|
|
||||||
const isSystemPR = message.indexOf('Pull request #') === 0;
|
const isSystemPR = message.indexOf('Pull request #') === 0;
|
||||||
const isSystemMerge = message.indexOf('Merge pull request #') === 0;
|
const isSystemMerge = message.indexOf('Merge pull request #') === 0;
|
||||||
const isMerge = message.indexOf('Merge branch ') === 0
|
const isMerge = message.indexOf('Merge commit ') === 0
|
||||||
|| message.indexOf('Merge commit ') === 0;
|
|| message.indexOf('Merge branch ') === 0
|
||||||
const isAutoMerge = message.indexOf('Automatic merge from') === 0
|
|
||||||
|| message.indexOf('Merge remote-tracking branch') === 0;
|
|| message.indexOf('Merge remote-tracking branch') === 0;
|
||||||
|
const isAutoMerge = message.indexOf('Automatic merge from') === 0;
|
||||||
const isSystemCommit = isSystemPR
|
const isSystemCommit = isSystemPR
|
||||||
|| isSystemMerge
|
|| isSystemMerge
|
||||||
|| isMerge
|
|| isMerge
|
||||||
|| isAutoMerge;
|
|| isAutoMerge;
|
||||||
|
|
||||||
if (isSystemCommit) {
|
if (isSystemCommit) {
|
||||||
let commitType = COMMIT_TYPE.AUTO_MERGE;
|
let commitType = COMMIT_TYPE.MERGE;
|
||||||
let prId, repository, branch, toBranch, task, taskNumber;
|
let prId, repository, branch, toBranch, task, taskNumber;
|
||||||
if (isSystemMerge) {
|
if (isSystemMerge) {
|
||||||
commitType = COMMIT_TYPE.PR_GITHUB;
|
commitType = COMMIT_TYPE.PR_GITHUB;
|
||||||
|
@ -63,6 +63,7 @@ export default function getUserInfo(logString: string): ICommit | ISystemCommit
|
||||||
prId = messageParts.shift();
|
prId = messageParts.shift();
|
||||||
task = getTask(messageParts.join(':'));
|
task = getTask(messageParts.join(':'));
|
||||||
} else if (isAutoMerge) {
|
} else if (isAutoMerge) {
|
||||||
|
commitType = COMMIT_TYPE.AUTO_MERGE;
|
||||||
[, branch, toBranch ] = message
|
[, branch, toBranch ] = message
|
||||||
.replace(/(Automatic\smerge\sfrom\s)|(\s->\s)/gim, ',')
|
.replace(/(Automatic\smerge\sfrom\s)|(\s->\s)/gim, ',')
|
||||||
.replace(/(Merge\sremote-tracking\sbranch\s')|('\sinto\s)/gim, ',')
|
.replace(/(Merge\sremote-tracking\sbranch\s')|('\sinto\s)/gim, ',')
|
||||||
|
|
|
@ -27,6 +27,7 @@ export interface ILog {
|
||||||
export const COMMIT_TYPE = {
|
export const COMMIT_TYPE = {
|
||||||
PR_BITBUCKET: 'PR_BITBUCKET',
|
PR_BITBUCKET: 'PR_BITBUCKET',
|
||||||
PR_GITHUB: 'PR_GITHUB',
|
PR_GITHUB: 'PR_GITHUB',
|
||||||
|
MERGE: 'MERGE',
|
||||||
AUTO_MERGE: 'AUTO_MERGE',
|
AUTO_MERGE: 'AUTO_MERGE',
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
export default interface IHashMap<T> {
|
export default interface IHashMap<T> {
|
||||||
[key: string]: T;
|
[key: string | number]: T;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Routes, Route } from 'react-router-dom';
|
import { Route, Routes } from 'react-router-dom';
|
||||||
import { observer } from 'mobx-react-lite';
|
import { observer } from 'mobx-react-lite';
|
||||||
|
|
||||||
import dataGripStore from 'ts/store/DataGrip';
|
import dataGripStore, { DataParseStatusEnum } from 'ts/store/DataGrip';
|
||||||
import DropZone from 'ts/components/DropZone';
|
import DropZone from 'ts/components/DropZone';
|
||||||
import SplashScreen from 'ts/components/SplashScreen';
|
import SplashScreen from 'ts/components/SplashScreen';
|
||||||
import Confirm from 'ts/components/ModalWindow/Confirm';
|
import Confirm from 'ts/components/ModalWindow/Confirm';
|
||||||
|
@ -78,7 +78,7 @@ function ViewWithCharts({ showSplashScreen }: IViewWithChartsProps) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function ViewWithText() {
|
function ViewWithWelcome() {
|
||||||
return (
|
return (
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route
|
<Route
|
||||||
|
@ -91,19 +91,25 @@ function ViewWithText() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Success = observer((): React.ReactElement => {
|
const Success = observer(() => {
|
||||||
const [showSplashScreen, setShowSplashScreen] = useState<boolean>(true);
|
const [showSplashScreen, setShowSplashScreen] = useState<boolean>(true);
|
||||||
const showChart = dataGripStore.showApplication;
|
const status = dataGripStore.status;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
dataGripStore.setCommits(window?.report || []);
|
dataGripStore.setCommits(window?.report || []);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
if (status === DataParseStatusEnum.PROCESSING) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{showChart && <ViewWithCharts showSplashScreen={showSplashScreen} />}
|
{status === DataParseStatusEnum.DONE && (
|
||||||
{!showChart && <ViewWithText />}
|
<ViewWithCharts showSplashScreen={showSplashScreen} />
|
||||||
|
)}
|
||||||
|
{status === DataParseStatusEnum.WAITING && (
|
||||||
|
<ViewWithWelcome />
|
||||||
|
)}
|
||||||
<DropZone
|
<DropZone
|
||||||
onChange={(type: string, data: any[]) => {
|
onChange={(type: string, data: any[]) => {
|
||||||
setShowSplashScreen(false);
|
setShowSplashScreen(false);
|
||||||
|
|
|
@ -18,6 +18,8 @@ import LineChart from 'ts/components/LineChart';
|
||||||
import { getMax } from 'ts/pages/Common/helpers/getMax';
|
import { getMax } from 'ts/pages/Common/helpers/getMax';
|
||||||
import { getDate } from 'ts/helpers/formatter';
|
import { getDate } from 'ts/helpers/formatter';
|
||||||
|
|
||||||
|
import AllPR from './PR/All';
|
||||||
|
|
||||||
interface IReleaseViewProps {
|
interface IReleaseViewProps {
|
||||||
response?: IPagination<any>;
|
response?: IPagination<any>;
|
||||||
updateSort?: Function;
|
updateSort?: Function;
|
||||||
|
@ -42,6 +44,22 @@ function ReleaseView({ response, updateSort, rowsForExcel, mode }: IReleaseViewP
|
||||||
type={mode === 'print' ? 'cards' : undefined}
|
type={mode === 'print' ? 'cards' : undefined}
|
||||||
columnCount={mode === 'print' ? 3 : undefined}
|
columnCount={mode === 'print' ? 3 : undefined}
|
||||||
>
|
>
|
||||||
|
<Column
|
||||||
|
isFixed
|
||||||
|
template={ColumnTypesEnum.DETAILS}
|
||||||
|
width={40}
|
||||||
|
formatter={(row: any) => {
|
||||||
|
const content = row.pr.map((commit: any) => (
|
||||||
|
dataGripStore?.dataGrip?.pr?.pr?.[commit.prId]
|
||||||
|
));
|
||||||
|
console.log(dataGripStore?.dataGrip?.pr?.pr?.['2810']);
|
||||||
|
return (
|
||||||
|
<AllPR // @ts-ignore
|
||||||
|
response={{ content }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Column
|
<Column
|
||||||
isFixed
|
isFixed
|
||||||
template={ColumnTypesEnum.STRING}
|
template={ColumnTypesEnum.STRING}
|
||||||
|
@ -63,6 +81,10 @@ function ReleaseView({ response, updateSort, rowsForExcel, mode }: IReleaseViewP
|
||||||
properties="to"
|
properties="to"
|
||||||
formatter={getDate}
|
formatter={getDate}
|
||||||
/>
|
/>
|
||||||
|
<Column
|
||||||
|
template={ColumnTypesEnum.SHORT_NUMBER}
|
||||||
|
properties="prLength"
|
||||||
|
/>
|
||||||
<Column
|
<Column
|
||||||
template={ColumnTypesEnum.SHORT_NUMBER}
|
template={ColumnTypesEnum.SHORT_NUMBER}
|
||||||
properties="delayInDays"
|
properties="delayInDays"
|
||||||
|
|
|
@ -12,10 +12,16 @@ import { applicationHasCustom } from 'ts/helpers/RPC';
|
||||||
|
|
||||||
import settingsStore from './Settings';
|
import settingsStore from './Settings';
|
||||||
|
|
||||||
|
export enum DataParseStatusEnum {
|
||||||
|
WAITING = 'waiting',
|
||||||
|
PROCESSING = 'processing',
|
||||||
|
DONE = 'done',
|
||||||
|
}
|
||||||
|
|
||||||
interface IDataGripStore {
|
interface IDataGripStore {
|
||||||
commits: ICommit[];
|
commits: ICommit[];
|
||||||
dataGrip: any;
|
dataGrip: any;
|
||||||
showApplication: boolean;
|
status: DataParseStatusEnum;
|
||||||
setCommits: (log?: string[]) => void;
|
setCommits: (log?: string[]) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,13 +38,13 @@ class DataGripStore implements IDataGripStore {
|
||||||
|
|
||||||
dataGrip: any = null;
|
dataGrip: any = null;
|
||||||
|
|
||||||
showApplication: boolean = false;
|
status: DataParseStatusEnum = DataParseStatusEnum.PROCESSING;
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
makeObservable(this, {
|
makeObservable(this, {
|
||||||
commits: observable,
|
commits: observable,
|
||||||
dataGrip: observable,
|
dataGrip: observable,
|
||||||
showApplication: observable,
|
status: observable,
|
||||||
setCommits: action,
|
setCommits: action,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -65,8 +71,11 @@ class DataGripStore implements IDataGripStore {
|
||||||
this.removedFileList = removed.fileList;
|
this.removedFileList = removed.fileList;
|
||||||
this.removedFileTree = getFileTreeWithStatistic(removed.fileTree);
|
this.removedFileTree = getFileTreeWithStatistic(removed.fileTree);
|
||||||
|
|
||||||
this.showApplication = !!this.commits.length;// && !!dataGrip.author.list.length;
|
this.status = this.commits.length
|
||||||
if (this.showApplication) {
|
? DataParseStatusEnum.DONE
|
||||||
|
: DataParseStatusEnum.WAITING;
|
||||||
|
|
||||||
|
if (this.status === DataParseStatusEnum.DONE) {
|
||||||
setDefaultValues(dataGrip.firstLastCommit.minData, dataGrip.firstLastCommit.maxData);
|
setDefaultValues(dataGrip.firstLastCommit.minData, dataGrip.firstLastCommit.maxData);
|
||||||
settingsStore.updateByCommits(
|
settingsStore.updateByCommits(
|
||||||
this.commits,
|
this.commits,
|
||||||
|
|
Loading…
Reference in a new issue