This commit is contained in:
bakhirev 2025-05-23 11:00:45 +03:00
parent 7602bcef4d
commit 38a4c872b0
18 changed files with 117 additions and 80 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -95,6 +95,11 @@
&_button { &_button {
color: var(--color-temp-title); color: var(--color-temp-title);
background-color: var(--color-temp-bg);
&:hover {
background-color: var(--color-temp-bg);
}
} }
background-color: var(--color-temp-bg); background-color: var(--color-temp-bg);

View file

@ -13,6 +13,7 @@ const MASTER_BRANCH = {
master: true, master: true,
dev: true, dev: true,
develop: true, develop: true,
release: true,
}; };
let prevDate = new Date(); let prevDate = new Date();
@ -105,6 +106,7 @@ export default function getCommitInfo(logString: string): ICommit | ISystemCommi
commitType = COMMIT_TYPE.PR_GITHUB; commitType = COMMIT_TYPE.PR_GITHUB;
[prId, repository, branch, toBranch] = getGithubPrInfo(message); [prId, repository, branch, toBranch] = getGithubPrInfo(message);
task = getTask(branch); task = getTask(branch);
[type] = getTypeAndScope(branch, task);
} else if (isBitbucketPR) { // "Pull request #3: TASK-123 fix: Add profile" } else if (isBitbucketPR) { // "Pull request #3: TASK-123 fix: Add profile"
commitType = COMMIT_TYPE.PR_BITBUCKET; commitType = COMMIT_TYPE.PR_BITBUCKET;
@ -124,11 +126,15 @@ export default function getCommitInfo(logString: string): ICommit | ISystemCommi
} else if (isGitlabPR) { } else if (isGitlabPR) {
commitType = COMMIT_TYPE.PR_GITLAB; commitType = COMMIT_TYPE.PR_GITLAB;
[branch, toBranch] = getGitlabPrInfo(message); [branch, toBranch] = getGitlabPrInfo(message);
if (toBranch && MASTER_BRANCH[toBranch]) { const branchToParse = toBranch && MASTER_BRANCH[toBranch]
task = getTask(branch); ? (branch || toBranch)
taskNumber = getTaskNumber(branch); : (toBranch || branch);
if (branchToParse) {
task = getTask(branchToParse);
taskNumber = getTaskNumber(branchToParse);
prId = `#${taskNumber}-${Math.random()}`; prId = `#${taskNumber}-${Math.random()}`;
if (!task && taskNumber) task = `#${taskNumber}`; if (!task && taskNumber) task = `#${taskNumber}`;
[type] = getTypeAndScope(branchToParse, task);
} }
} }
taskNumber = getTaskNumber(task); taskNumber = getTaskNumber(task);

View file

@ -15,10 +15,9 @@ export function getGithubPrInfo(text: string) {
} }
/* "Merge branch 'J123456' into 'develop'" */ /* "Merge branch 'J123456' into 'develop'" */
/* "Merge branch 'J123456' into develop" */
export function getGitlabPrInfo(text: string) { export function getGitlabPrInfo(text: string) {
const prefix = text.substring(14, text.length - 1); return text
const index = prefix.indexOf("'"); .replace(/(["'\r\n]+)|(Merge\sbranch\s)/gim, '')
const branch = prefix.substring(0, index); .split(' into ');
const toBranch = prefix.substring(index + 8);
return [branch, toBranch];
} }

View file

@ -18,57 +18,60 @@ const Header = observer((): React.ReactElement | null => {
const { t, i18n } = useTranslation(); const { t, i18n } = useTranslation();
const navigate = useNavigate(); const navigate = useNavigate();
const location = useLocation(); const location = useLocation();
const options = [
{ id: 'ru', title: 'RU' },
{ id: 'en', title: 'EN' },
{ id: 'zh', title: 'ZH' },
{ id: 'es', title: 'ES' },
{ id: 'fr', title: 'FR' },
{ id: 'pt', title: 'PT' },
{ id: 'de', title: 'DE' },
{ id: 'ja', title: 'JA' },
{ id: 'ko', title: 'KO' },
];
return ( return (
<header className={style.header}> <header className={style.header}>
<Title/> <div className={style.header_wrapper}>
{settingsForm.isEdited ? ( <Title/>
<Buttons/> {settingsForm.isEdited ? (
) : ( <Buttons/>
<> ) : (
<Filters/> <>
<Select <Filters/>
className={style.header_lang} <Select
value={localization.language} className={style.header_lang}
options={[ value={localization.language}
{ id: 'ru', title: 'RU' }, options={options}
{ id: 'en', title: 'EN' }, onChange={(item: any, id: string) => {
{ id: 'zh', title: 'ZH' }, localization.language = id;
{ id: 'es', title: 'ES' }, i18n.changeLanguage(id);
{ id: 'fr', title: 'FR' }, if (id === BROWSER_LANGUAGE) {
{ id: 'pt', title: 'PT' }, localStorage.removeItem('language');
{ id: 'de', title: 'DE' }, } else {
{ id: 'ja', title: 'JA' }, localStorage.setItem('language', id);
{ id: 'ko', title: 'KO' }, }
]} }}
onChange={(item: any, id: string) => { />
localization.language = id; <img
i18n.changeLanguage(id); title={t('sidebar.buttons.print')}
if (id === BROWSER_LANGUAGE) { className={style.header_print}
localStorage.removeItem('language'); src="./assets/menu/print.svg"
} else { onClick={() => {
localStorage.setItem('language', id); printStore.open(navigate, location.pathname);
} }}
}} />
/> <img
<img title={t('sidebar.buttons.settings')}
title={t('sidebar.buttons.print')} className={style.header_setting}
className={style.header_print} src="./assets/menu/setting.svg"
src="./assets/menu/print.svg" onClick={() => {
onClick={() => { navigate('/settings');
printStore.open(navigate, location.pathname); }}
}} />
/> </>
<img )}
title={t('sidebar.buttons.settings')} </div>
className={style.header_setting}
src="./assets/menu/setting.svg"
onClick={() => {
navigate('/settings');
}}
/>
</>
)}
</header> </header>
); );
}); });

View file

@ -3,11 +3,18 @@
.header { .header {
grid-area: header; grid-area: header;
display: block; display: block;
padding: 20px 34px 20px 24px;
box-sizing: border-box; box-sizing: border-box;
text-align: right; text-align: left;
background-color: var(--color-white); background-color: var(--color-white);
&_wrapper {
display: block;
width: calc(100vw - 258px);
padding: 20px 47px 20px 24px;
box-sizing: border-box;
text-align: right;
}
&_title { &_title {
float: left; float: left;
font-size: 24px; font-size: 24px;
@ -56,6 +63,12 @@
} }
} }
@media (max-width: 1000px) {
.header_wrapper {
width: calc(100vw - 78px);
}
}
@media (max-width: 700px) { @media (max-width: 700px) {
.header { .header {
&_print, &_print,

View file

@ -14,23 +14,33 @@ function groupByType(prs: any[]) {
}, {}); }, {});
} }
function getTaskDescription(pr: any) { function getTaskDescription(pr: any, taskById: any) {
const message = pr.message.substring(pr.message.lastIndexOf(':') + 2) let message = pr.message.substring(pr.message.lastIndexOf(':') + 2)
.replace(pr.task, '') .replace(pr.task, '')
.trim(); .trim();
const prefix = userSettings?.settings?.linksPrefix?.task || '/'; const prefix = userSettings?.settings?.linksPrefix?.task || '/';
const formattedTask = pr.task?.[0] === '#' const taskId = pr.task?.[0] === '#'
? pr.task.replace('#', '') ? pr.task.replace('#', '')
: pr.task; : pr.task;
const task = taskById.get(taskId);
const formattedTask = task?.task || taskId;
message = message.indexOf('pull request') !== -1
? (task?.comments || '')
: message;
if (!formattedTask && !message) return '';
return `- [${formattedTask}](${prefix}${formattedTask}) ${message}`; return `- [${formattedTask}](${prefix}${formattedTask}) ${message}`;
} }
function getReleaseDescription(prs: any) { function getReleaseDescription(prs: any, taskById: any) {
const types = groupByType(prs); const types = groupByType(prs);
return Object.keys(types) return Object.keys(types)
.sort() .sort()
.map((type: string) => { .map((type: string) => {
const tasks = types[type].map(getTaskDescription).join('\n'); const tasks = types[type]
.map((pr: any) => getTaskDescription(pr, taskById))
.filter((v: string) => v)
.join('\n');
if (!type) return `\n${tasks}`; if (!type) return `\n${tasks}`;
return `\n### ${type}\n${tasks}`; return `\n### ${type}\n${tasks}`;
}).join('\n'); }).join('\n');
@ -40,10 +50,11 @@ function getChangeLogString() {
const rows = dataGripStore.dataGrip.release.statistic; const rows = dataGripStore.dataGrip.release.statistic;
const list = rows.map((release: any) => { const list = rows.map((release: any) => {
const date = getDateForExcel(release.lastCommit.date); const date = getDateForExcel(release.lastCommit.date);
const prs = release.pr const prs = release.prIds
.map((prId: string) => dataGripStore.dataGrip.pr.pr.get(prId)) .map((prId: string) => dataGripStore.dataGrip.pr.pr.get(prId))
.filter((v: any) => v); .filter((v: any) => v);
const description = getReleaseDescription(prs); const taskById = dataGripStore.dataGrip.tasks.statisticByName;
const description = getReleaseDescription(prs, taskById);
return ` return `
## [${release.title}] - ${date} ## [${release.title}] - ${date}
${description}`; ${description}`;

View file

@ -219,7 +219,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: 수량 § page.team.extension.current.count: 수량
§ page.team.extension.removed.count: 삭제된 § page.team.extension.removed.count: 삭제된
§ page.team.extension.files: 파일 § page.team.extension.files: 파일
§ page.team.release.download: 다운로드 § page.team.release.download: CHANGELOG.md
§ page.team.release.title: 릴리스 § page.team.release.title: 릴리스
§ page.team.release.from: 생성 § page.team.release.from: 생성
§ page.team.release.to: 완료 § page.team.release.to: 완료

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date

View file

@ -221,7 +221,7 @@ export default `
§ page.team.extension.current.count: Количество § page.team.extension.current.count: Количество
§ page.team.extension.removed.count: Количество удалённых § page.team.extension.removed.count: Количество удалённых
§ page.team.extension.files: файлов § page.team.extension.files: файлов
§ page.team.release.download: Скачать § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Релиз § page.team.release.title: Релиз
§ page.team.release.from: Дата создания § page.team.release.from: Дата создания
§ page.team.release.to: Дата завершения § page.team.release.to: Дата завершения

View file

@ -212,7 +212,7 @@ export default `
§ page.team.extension.current.count: Количество § page.team.extension.current.count: Количество
§ page.team.extension.removed.count: Количество удалённых § page.team.extension.removed.count: Количество удалённых
§ page.team.extension.files: файлов § page.team.extension.files: файлов
§ page.team.release.download: Скачать § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Релиз § page.team.release.title: Релиз
§ page.team.release.from: Дата создания § page.team.release.from: Дата создания
§ page.team.release.to: Дата завершения § page.team.release.to: Дата завершения

View file

@ -216,7 +216,7 @@ export default `
§ page.team.extension.current.count: Number § page.team.extension.current.count: Number
§ page.team.extension.removed.count: Number of removed § page.team.extension.removed.count: Number of removed
§ page.team.extension.files: files § page.team.extension.files: files
§ page.team.release.download: Download § page.team.release.download: CHANGELOG.md
§ page.team.release.title: Release § page.team.release.title: Release
§ page.team.release.from: Created date § page.team.release.from: Created date
§ page.team.release.to: Delivery date § page.team.release.to: Delivery date