feat: Display last updates in About modal

This commit is contained in:
Maksim Eltyshev
2025-12-17 15:49:33 +01:00
parent 27fd10ba3f
commit 4f5f5ddad4
50 changed files with 220 additions and 48 deletions

View File

@@ -42,6 +42,7 @@
"error",
{
"ignore": [
"\\?url$",
"\\.svg\\?react$"
]
}

View File

@@ -0,0 +1,84 @@
## [2.4.0] - 2025-03-22
### Added
* Lorem ipsum dolor sit amet consectetur adipiscing elit.
* Sed do eiusmod tempor incididunt ut labore et dolore magna.
* Ut enim ad minim veniam quis nostrud exercitation ullamco.
### Changed
* Duis aute irure dolor in reprehenderit in voluptate velit esse.
* Excepteur sint occaecat cupidatat non proident sunt in culpa.
### Fixed
* Nulla pariatur consectetur adipiscing elit sed do eiusmod.
* Tempor incididunt ut labore et dolore magna aliqua enim.
---
## [2.3.2] - 2025-02-18
### Fixed
* Minim veniam quis nostrud exercitation ullamco laboris nisi.
* Aliquip ex ea commodo consequat duis aute irure dolor.
---
## [2.3.0] - 2025-01-29
### Added
* Reprehenderit in voluptate velit esse cillum dolore eu fugiat.
* Excepteur sint occaecat cupidatat non proident culpa qui officia.
### Changed
* Deserunt mollit anim id est laborum sed ut perspiciatis.
### Deprecated
* Unde omnis iste natus error sit voluptatem accusantium doloremque.
---
## [2.2.0] - 2024-12-14
### Added
* Totam rem aperiam eaque ipsa quae ab illo inventore veritatis.
* Quasi architecto beatae vitae dicta sunt explicabo nemo.
### Changed
* Enim ipsam voluptatem quia voluptas sit aspernatur aut odit.
* Consequuntur magni dolores eos qui ratione voluptatem sequi.
### Fixed
* Neque porro quisquam est qui dolorem ipsum quia dolor.
---
## [2.1.0] - 2024-10-05
### Added
* Adipisci velit sed quia non numquam eius modi tempora incidunt.
* Ut labore et dolore magnam aliquam quaerat voluptatem neque.
---
## [2.0.0] - 2024-08-20
### Added
* Porro quisquam est qui dolorem ipsum quia dolor sit amet.
* Consectetur adipisci velit sed quia non numquam eius modi.
* Tempora incidunt ut labore et dolore magnam aliquam quaerat.
### Removed
* Voluptatem neque porro quisquam est qui dolorem ipsum quia.

View File

@@ -13,7 +13,9 @@ import { useClosableModal } from '../../../hooks';
import TermsPane from './TermsPane';
import AboutPane from './AboutPane';
const InformationModal = React.memo(() => {
import styles from './AboutModal.module.scss';
const AboutModal = React.memo(() => {
const dispatch = useDispatch();
const [t] = useTranslation();
@@ -39,7 +41,14 @@ const InformationModal = React.memo(() => {
];
return (
<ClosableModal open closeIcon size="small" centered={false} onClose={handleClose}>
<ClosableModal
open
closeIcon
size="small"
centered={false}
className={styles.wrapper}
onClose={handleClose}
>
<ClosableModal.Content>
<Tab
menu={{
@@ -53,4 +62,4 @@ const InformationModal = React.memo(() => {
);
});
export default InformationModal;
export default AboutModal;

View File

@@ -0,0 +1,14 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
:global(#app) {
.wrapper {
margin: 2rem auto;
@media (width < 926px) {
margin: 1rem auto;
}
}
}

View File

@@ -0,0 +1,60 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import React, { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Divider, Header, Image, Loader, Tab } from 'semantic-ui-react';
import version from '../../../version';
import Markdown from '../Markdown';
import aboutLogo from '../../../assets/images/about-logo.png';
import whatsNewUrl from '../../../assets/docs/whats-new.md?url';
import styles from './AboutPane.module.scss';
const AboutPane = React.memo(() => {
const [t] = useTranslation();
const [whatsNew, setWhatsNew] = useState(null);
useEffect(() => {
async function fetchWhatsNew() {
let response;
try {
response = await fetch(whatsNewUrl);
} catch {
return;
}
const text = await response.text();
setWhatsNew(text);
}
fetchWhatsNew();
}, []);
return (
<Tab.Pane attached={false} className={styles.wrapper}>
<a href="https://github.com/plankanban/planka" target="_blank" rel="noreferrer">
<Image centered src={aboutLogo} size="large" />
</a>
<div className={styles.version}>{version}</div>
<Divider horizontal>
<Header as="h4">
{t('common.whatsNew', {
context: 'title',
})}
</Header>
</Divider>
{whatsNew ? (
<Markdown>{whatsNew}</Markdown>
) : (
<Loader active inverted inline="centered" size="small" />
)}
</Tab.Pane>
);
});
export default AboutPane;

View File

@@ -6,6 +6,7 @@
:global(#app) {
.version {
font-weight: bold;
margin-bottom: 40px;
text-align: center;
}

View File

@@ -3,6 +3,6 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import InformationModal from './InformationModal';
import AboutModal from './AboutModal';
export default InformationModal;
export default AboutModal;

View File

@@ -16,7 +16,7 @@ import Toaster from '../Toaster';
import Fixed from '../Fixed';
import Static from '../Static';
import AdministrationModal from '../AdministrationModal';
import InformationModal from '../InformationModal';
import AboutModal from '../AboutModal';
import UserSettingsModal from '../../users/UserSettingsModal';
import ProjectBackground from '../../projects/ProjectBackground';
import AddProjectModal from '../../projects/AddProjectModal';
@@ -63,8 +63,8 @@ const Core = React.memo(() => {
modalNode = <AdministrationModal />;
break;
case ModalTypes.INFORMATION:
modalNode = <InformationModal />;
case ModalTypes.ABOUT:
modalNode = <AboutModal />;
break;
case ModalTypes.USER_SETTINGS:

View File

@@ -1,24 +0,0 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import React from 'react';
import { Image, Tab } from 'semantic-ui-react';
import version from '../../../version';
import aboutLogo from '../../../assets/images/about-logo.png';
import styles from './AboutPane.module.scss';
const AboutPane = React.memo(() => (
<Tab.Pane attached={false} className={styles.wrapper}>
<a href="https://github.com/plankanban/planka" target="_blank" rel="noreferrer">
<Image centered src={aboutLogo} size="large" />
</a>
<div className={styles.version}>{version}</div>
</Tab.Pane>
));
export default AboutPane;

View File

@@ -40,8 +40,8 @@ const UserActionsStep = React.memo(({ onClose }) => {
onClose();
}, [onClose, dispatch]);
const handleInformationClick = useCallback(() => {
dispatch(entryActions.openInformationModal());
const handleAboutClick = useCallback(() => {
dispatch(entryActions.openAboutModal());
onClose();
}, [onClose, dispatch]);
@@ -98,7 +98,7 @@ const UserActionsStep = React.memo(({ onClose }) => {
)}
</>
)}
<Menu.Item className={styles.menuItem} onClick={handleInformationClick}>
<Menu.Item className={styles.menuItem} onClick={handleAboutClick}>
<Icon name="info circle" className={styles.menuItemIcon} />
{t('common.aboutApp', {
context: 'title',

View File

@@ -4,7 +4,7 @@
*/
const ADMINISTRATION = 'ADMINISTRATION';
const INFORMATION = 'INFORMATION';
const ABOUT = 'ABOUT';
const USER_SETTINGS = 'USER_SETTINGS';
const ADD_PROJECT = 'ADD_PROJECT';
const PROJECT_SETTINGS = 'PROJECT_SETTINGS';
@@ -13,7 +13,7 @@ const BOARD_ACTIVITIES = 'BOARD_ACTIVITIES';
export default {
ADMINISTRATION,
INFORMATION,
ABOUT,
USER_SETTINGS,
ADD_PROJECT,
PROJECT_SETTINGS,

View File

@@ -13,10 +13,10 @@ const openAdministrationModal = () => ({
},
});
const openInformationModal = () => ({
const openAboutModal = () => ({
type: EntryActionTypes.MODAL_OPEN,
payload: {
type: ModalTypes.INFORMATION,
type: ModalTypes.ABOUT,
},
});
@@ -68,7 +68,7 @@ const closeModal = () => ({
export default {
openAdministrationModal,
openInformationModal,
openAboutModal,
openUserSettingsModal,
openAddProjectModal,
openProjectSettingsModal,

View File

@@ -357,6 +357,7 @@ export default {
viewers: 'المشاهدون',
visualTaskManagementWithLists: 'إدارة المهام البصرية بالقوائم.',
webhooks: 'الويب هوكس',
whatsNew_title: 'ما الجديد',
withoutBaseGroup: 'بدون مجموعة أساسية',
writeComment: 'اكتب تعليقاً...',
},

View File

@@ -372,6 +372,7 @@ export default {
viewers: 'Зрители',
visualTaskManagementWithLists: 'Визуално управление на задачи със списъци.',
webhooks: 'Webhooks',
whatsNew_title: 'Какво еново',
withoutBaseGroup: 'Без основна група',
writeComment: 'Напишете коментар...',
},

View File

@@ -374,6 +374,7 @@ export default {
viewers: 'Observadors',
visualTaskManagementWithLists: 'Gestió visual de tasques amb llistes.',
webhooks: 'Webhooks',
whatsNew_title: 'Què hi ha de nou',
withoutBaseGroup: 'Sense grup base',
writeComment: 'Escriu un comentari...',
},

View File

@@ -362,6 +362,7 @@ export default {
viewers: 'Diváci',
visualTaskManagementWithLists: 'Vizuální správa úkolů pomocí seznamů.',
webhooks: 'Webhooky',
whatsNew_title: 'Co je nového',
withoutBaseGroup: 'Bez základní skupiny',
writeComment: 'Napsat komentář...',
},

View File

@@ -368,6 +368,7 @@ export default {
viewers: 'Læsere',
visualTaskManagementWithLists: 'Visuel opgavestyring med lister.',
webhooks: 'Webhooks',
whatsNew_title: 'Hvad er nyt',
withoutBaseGroup: 'Uden standardgruppe',
writeComment: 'Skriv en kommentar...',
},

View File

@@ -384,6 +384,7 @@ export default {
viewers: 'Betrachter',
visualTaskManagementWithLists: 'Visuelle Aufgabenverwaltung mit Listen.',
webhooks: 'Webhooks',
whatsNew_title: 'Was ist neu',
withoutBaseGroup: 'Ohne Basisgruppe',
writeComment: 'Kommentar verfassen...',
},

View File

@@ -388,6 +388,7 @@ export default {
viewers: 'Θεατές',
visualTaskManagementWithLists: 'Οπτική διαχείριση εργασιών με λίστες.',
webhooks: 'Webhooks',
whatsNew_title: 'Τι νέο υπάρχει',
withoutBaseGroup: 'Χωρίς βασική ομάδα',
writeComment: 'Γράψτε ένα σχόλιο...',
},

View File

@@ -364,6 +364,7 @@ export default {
viewers: 'Viewers',
visualTaskManagementWithLists: 'Visual task management with lists.',
webhooks: 'Webhooks',
whatsNew_title: "What's New",
withoutBaseGroup: 'Without base group',
writeComment: 'Write a comment...',
},

View File

@@ -359,6 +359,7 @@ export default {
viewers: 'Viewers',
visualTaskManagementWithLists: 'Visual task management with lists.',
webhooks: 'Webhooks',
whatsNew_title: "What's New",
withoutBaseGroup: 'Without base group',
writeComment: 'Write a comment...',
},

View File

@@ -374,6 +374,7 @@ export default {
viewers: 'Observadores',
visualTaskManagementWithLists: 'Gestión visual de tareas con listas.',
webhooks: 'Webhooks',
whatsNew_title: 'Novedades',
withoutBaseGroup: 'Sin grupo base',
writeComment: 'Escribe un comentario...',
},

View File

@@ -366,6 +366,7 @@ export default {
viewers: 'Vaatajad',
visualTaskManagementWithLists: 'Visual tööülesande haldamine nimekirjade abil.',
webhooks: 'Webhookid',
whatsNew_title: 'Mis on uut',
withoutBaseGroup: 'Ilma põhiklassita',
writeComment: 'Kirjuta kommentaar...',
},

View File

@@ -368,6 +368,7 @@ export default {
viewers: 'بینندگان',
visualTaskManagementWithLists: 'مدیریت بصری وظایف با لیست‌ها.',
webhooks: 'وب‌هوک‌ها',
whatsNew_title: 'چه چیز جدیدی',
withoutBaseGroup: 'بدون گروه پایه',
writeComment: 'نظر بنویسید...',
},

View File

@@ -367,6 +367,7 @@ export default {
viewers: 'Katselijat',
visualTaskManagementWithLists: 'Visuaalinen tehtävien hallinta listoilla.',
webhooks: 'Webhookit',
whatsNew_title: 'Mitä uutta',
withoutBaseGroup: 'Ilman perusryhmää',
writeComment: 'Kirjoita kommentti...',
},

View File

@@ -373,6 +373,7 @@ export default {
viewers: 'Spectateurs',
visualTaskManagementWithLists: 'Management visuel des tâches avec des listes.',
webhooks: 'Webhooks',
whatsNew_title: 'Quoi de neuf',
withoutBaseGroup: 'Sans groupe de base',
writeComment: 'Écrire un commentaire...',
},

View File

@@ -366,6 +366,7 @@ export default {
viewers: 'Megtekintők',
visualTaskManagementWithLists: 'Vizuális feladatkezelés listákkal.',
webhooks: 'Webhook-ok',
whatsNew_title: 'Újdonságok',
withoutBaseGroup: 'Alapcsoport nélkül',
writeComment: 'Írjon egy megjegyzést...',
},

View File

@@ -367,6 +367,7 @@ export default {
viewers: 'Penglihat',
visualTaskManagementWithLists: 'Manajemen tugas visual dengan daftar.',
webhooks: 'Webhook',
whatsNew_title: 'Apa yang baru',
withoutBaseGroup: 'Tanpa grup dasar',
writeComment: 'Tuliskan komentar...',
},

View File

@@ -370,6 +370,7 @@ export default {
viewers: 'Visualizzatori',
visualTaskManagementWithLists: 'Gestione visiva dei task con liste.',
webhooks: 'Webhooks',
whatsNew_title: 'Novità',
withoutBaseGroup: 'Senza gruppo base',
writeComment: 'Scrivi un commento...',
},

View File

@@ -364,6 +364,7 @@ export default {
viewers: 'ビューア',
visualTaskManagementWithLists: 'リストによる視覚的タスク管理。',
webhooks: 'Webhook',
whatsNew_title: '新機能',
withoutBaseGroup: 'ベースグループなし',
writeComment: 'コメントを書く…',
},

View File

@@ -361,6 +361,7 @@ export default {
viewers: '뷰어들',
visualTaskManagementWithLists: '목록을 통한 시각적 작업 관리.',
webhooks: '웹훅',
whatsNew_title: '새로운 소식',
withoutBaseGroup: '기본 그룹 없음',
writeComment: '댓글 작성...',
},

View File

@@ -370,6 +370,7 @@ export default {
viewers: 'Kijkers',
visualTaskManagementWithLists: 'Visueel takenbeheer met lijsten.',
webhooks: 'Webhooks',
whatsNew_title: 'Wat is er nieuw',
withoutBaseGroup: 'Zonder basisgroep',
writeComment: 'Schrijf een opmerking...',
},

View File

@@ -367,6 +367,7 @@ export default {
viewers: 'Wyświetlający',
visualTaskManagementWithLists: 'Wizualne zarządzanie zadaniami z listami.',
webhooks: 'Webhooks',
whatsNew_title: 'Co nowego',
withoutBaseGroup: 'Bez grupy bazowej',
writeComment: 'Napisz komentarz...',
},

View File

@@ -370,6 +370,7 @@ export default {
viewers: 'Visualizadores',
visualTaskManagementWithLists: 'Gerenciamento visual de tarefas com listas.',
webhooks: 'Webhooks',
whatsNew_title: 'Novidades',
withoutBaseGroup: 'Sem grupo básico',
writeComment: 'Escreva um comentário...',
},

View File

@@ -373,6 +373,7 @@ export default {
viewers: 'Visualizadores',
visualTaskManagementWithLists: 'Gestão visual de tarefas com listas.',
webhooks: 'Webhooks',
whatsNew_title: 'Novidades',
withoutBaseGroup: 'Sem grupo base',
writeComment: 'Escreva um comentário...',
},

View File

@@ -367,6 +367,7 @@ export default {
viewers: 'Vizualizatori',
visualTaskManagementWithLists: 'Gestionarea vizuală a sarcinilor cu liste.',
webhooks: 'Webhooks',
whatsNew_title: 'Ce este nou',
withoutBaseGroup: 'Fără grup de bază',
writeComment: 'Scrie un comentariu...',
},

View File

@@ -369,6 +369,7 @@ export default {
viewers: 'Читатели',
visualTaskManagementWithLists: 'Визуальное управление задачами с помощью списков.',
webhooks: 'Веб-хуки',
whatsNew_title: 'Что нового',
withoutBaseGroup: 'Без основной группы',
writeComment: 'Напишите комментарий...',
},

View File

@@ -360,6 +360,7 @@ export default {
viewers: 'Prehliadače',
visualTaskManagementWithLists: 'Vizuálne riadenie úloh so zoznamami.',
webhooks: 'Webhooks',
whatsNew_title: 'Čo je nové',
withoutBaseGroup: 'Bez základnej skupiny',
writeComment: 'Napísať komentár...',
},

View File

@@ -363,6 +363,7 @@ export default {
viewers: 'Прегледачи',
visualTaskManagementWithLists: 'Визуелно управљање задацима са списковима.',
webhooks: 'Webhooks',
whatsNew_title: 'Шта је ново',
withoutBaseGroup: 'Без основне групе',
writeComment: 'Напиши коментар...',
},

View File

@@ -365,6 +365,7 @@ export default {
viewers: 'Pregledači',
visualTaskManagementWithLists: 'Vizuelno upravljanje zadacima sa spiskovima.',
webhooks: 'Webhooks',
whatsNew_title: 'Šta je novo',
withoutBaseGroup: 'Bez osnovne grupe',
writeComment: 'Napiši komentar...',
},

View File

@@ -374,6 +374,7 @@ export default {
viewers: 'Visare',
visualTaskManagementWithLists: 'Visuell uppgiftshantering med listor.',
webhooks: 'Webhooks',
whatsNew_title: 'Vad är nytt',
withoutBaseGroup: 'Utan basgrupp',
writeComment: 'Skriv en kommentar...',
},

View File

@@ -370,6 +370,7 @@ export default {
viewers: 'Görüntüleyiciler',
visualTaskManagementWithLists: 'Listelerle görsel görev yönetimi.',
webhooks: "Webhook'lar",
whatsNew_title: 'Yenilikler',
withoutBaseGroup: 'Temel grup olmadan',
writeComment: 'Yorum yazın...',
},

View File

@@ -365,6 +365,7 @@ export default {
viewers: 'Переглядачі',
visualTaskManagementWithLists: 'Візуальне управління завданнями за допомогою списків.',
webhooks: 'Вебхуки',
whatsNew_title: 'Що нового',
withoutBaseGroup: 'Без базової групи',
writeComment: 'Написати коментар...',
},

View File

@@ -363,6 +363,7 @@ export default {
viewers: "Ko'ruvchilar",
visualTaskManagementWithLists: "Ro'yxatlar bilan vizual vazifa boshqaruvi.",
webhooks: 'Webhooks',
whatsNew_title: 'Nima yangi',
withoutBaseGroup: 'Asosiy guruhsiz',
writeComment: 'Izoh yozish...',
},

View File

@@ -340,6 +340,7 @@ export default {
viewers: '查看者',
visualTaskManagementWithLists: '使用列表进行可视化任务管理。',
webhooks: 'Webhooks',
whatsNew_title: '新功能',
withoutBaseGroup: '无基础组',
writeComment: '编写评论...',
},

View File

@@ -340,6 +340,7 @@ export default {
viewers: '檢視者',
visualTaskManagementWithLists: '使用列表進行視覺化任務管理。',
webhooks: 'Webhook',
whatsNew_title: '最新消息',
withoutBaseGroup: '無基礎群組',
writeComment: '編寫評論...',
},

View File

@@ -5,7 +5,7 @@
module.exports.up = async (knex) => {
await knex.raw(`
CREATE EXTENSION pg_trgm;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE SEQUENCE next_id_seq;
CREATE FUNCTION next_id(OUT id BIGINT) AS $$

View File

@@ -432,7 +432,6 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.726.0.tgz",
"integrity": "sha512-5JzTX9jwev7+y2Jkzjz0pd1wobB5JQfPOQF3N2DrJ5Pao0/k6uRYwE4NqB0p0HlGrMTDm7xNq7OSPPIPG575Jw==",
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
@@ -486,7 +485,6 @@
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.726.1.tgz",
"integrity": "sha512-qh9Q9Vu1hrM/wMBOBIaskwnE4GTFaZu26Q6WHwyWNfj7J8a40vBxpW16c2vYXHLBtwRKM1be8uRLkmDwghpiNw==",
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
@@ -2761,7 +2759,6 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -4527,7 +4524,6 @@
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
@@ -4614,7 +4610,6 @@
"integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -4678,7 +4673,6 @@
"integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@rtsao/scc": "^1.1.0",
"array-includes": "^3.1.9",
@@ -8492,7 +8486,6 @@
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"prettier": "bin/prettier.cjs"
},