ref: Little refactoring

This commit is contained in:
Maksim Eltyshev
2025-08-30 17:09:17 +02:00
parent 60a94f33fc
commit 4c5c7799f2
42 changed files with 89 additions and 19 deletions

View File

@@ -16,7 +16,7 @@ import { usePopupInClosableContext } from '../../../hooks';
import { isListArchiveOrTrash } from '../../../utils/record-helpers'; import { isListArchiveOrTrash } from '../../../utils/record-helpers';
import { AttachmentTypes, BoardMembershipRoles } from '../../../constants/Enums'; import { AttachmentTypes, BoardMembershipRoles } from '../../../constants/Enums';
import EditStep from './EditStep'; import EditStep from './EditStep';
import Favicon from './Favicon'; import Favicon from '../../common/Favicon';
import TimeAgo from '../../common/TimeAgo'; import TimeAgo from '../../common/TimeAgo';
import styles from './ItemContent.module.scss'; import styles from './ItemContent.module.scss';
@@ -131,7 +131,11 @@ const ItemContent = React.forwardRef(({ id, onOpen }, ref) => {
<span className={styles.options}> <span className={styles.options}>
<button type="button" className={styles.option} onClick={handleDownloadClick}> <button type="button" className={styles.option} onClick={handleDownloadClick}>
<Icon name="download" size="small" className={styles.optionIcon} /> <Icon name="download" size="small" className={styles.optionIcon} />
<span className={styles.optionText}>Download</span> <span className={styles.optionText}>
{t('action.download', {
context: 'title',
})}
</span>
</button> </button>
{attachment.data.image && canEdit && ( {attachment.data.image && canEdit && (
<button type="button" className={styles.option} onClick={handleToggleCoverClick}> <button type="button" className={styles.option} onClick={handleToggleCoverClick}>

View File

@@ -0,0 +1,8 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
import Favicon from './Favicon';
export default Favicon;

View File

@@ -73,14 +73,14 @@ const Header = React.memo(() => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const handleToggleEditModeClick = useCallback(() => {
dispatch(entryActions.toggleEditMode(!isEditModeEnabled));
}, [isEditModeEnabled, dispatch]);
const handleToggleFavoritesClick = useCallback(() => { const handleToggleFavoritesClick = useCallback(() => {
dispatch(entryActions.toggleFavorites(!isFavoritesEnabled)); dispatch(entryActions.toggleFavorites(!isFavoritesEnabled));
}, [isFavoritesEnabled, dispatch]); }, [isFavoritesEnabled, dispatch]);
const handleToggleEditModeClick = useCallback(() => {
dispatch(entryActions.toggleEditMode(!isEditModeEnabled));
}, [isEditModeEnabled, dispatch]);
const handleProjectSettingsClick = useCallback(() => { const handleProjectSettingsClick = useCallback(() => {
if (!canEditProject) { if (!canEditProject) {
return; return;

View File

@@ -377,6 +377,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: 'تكرار البطاقة', duplicateCard_title: 'تكرار البطاقة',
edit: 'تعديل', edit: 'تعديل',
editColor_title: null, editColor_title: null,

View File

@@ -382,6 +382,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: 'Дублирана карта', duplicateCard_title: 'Дублирана карта',
edit: 'Редактиране', edit: 'Редактиране',
editColor_title: null, editColor_title: null,

View File

@@ -392,6 +392,7 @@ export default {
deleteUser_title: 'Smazat uživatele', deleteUser_title: 'Smazat uživatele',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Vše přečteno', dismissAll: 'Vše přečteno',
download: null,
duplicateCard_title: 'Duplikovat kartu', duplicateCard_title: 'Duplikovat kartu',
edit: 'Upravit', edit: 'Upravit',
editColor_title: 'Upravit barvu', editColor_title: 'Upravit barvu',

View File

@@ -402,6 +402,7 @@ export default {
deleteUser_title: 'Slet bruger', deleteUser_title: 'Slet bruger',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Afvis alle', dismissAll: 'Afvis alle',
download: null,
duplicateCard_title: 'Duplikér kort', duplicateCard_title: 'Duplikér kort',
edit: 'Rediger', edit: 'Rediger',
editColor_title: 'Rediger farve', editColor_title: 'Rediger farve',

View File

@@ -407,6 +407,7 @@ export default {
deleteUser_title: 'Benutzer löschen', deleteUser_title: 'Benutzer löschen',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Alle verwerfen', dismissAll: 'Alle verwerfen',
download: null,
duplicateCard_title: 'Karte duplizieren', duplicateCard_title: 'Karte duplizieren',
edit: 'Bearbeiten', edit: 'Bearbeiten',
editColor_title: 'Farbe bearbeiten', editColor_title: 'Farbe bearbeiten',

View File

@@ -418,6 +418,7 @@ export default {
deleteUser_title: 'Διαγραφή χρήστη', deleteUser_title: 'Διαγραφή χρήστη',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Απόρριψη όλων', dismissAll: 'Απόρριψη όλων',
download: null,
duplicateCard_title: 'Διπλασιασμός κάρτας', duplicateCard_title: 'Διπλασιασμός κάρτας',
edit: 'Επεξεργασία', edit: 'Επεξεργασία',
editColor_title: 'Επεξεργασία χρώματος', editColor_title: 'Επεξεργασία χρώματος',

View File

@@ -401,6 +401,7 @@ export default {
deleteUser_title: 'Delete User', deleteUser_title: 'Delete User',
deleteWebhook: 'Delete webhook', deleteWebhook: 'Delete webhook',
dismissAll: 'Dismiss all', dismissAll: 'Dismiss all',
download: 'Download',
duplicateCard_title: 'Duplicate Card', duplicateCard_title: 'Duplicate Card',
edit: 'Edit', edit: 'Edit',
editColor_title: 'Edit Color', editColor_title: 'Edit Color',

View File

@@ -396,6 +396,7 @@ export default {
deleteUser_title: 'Delete User', deleteUser_title: 'Delete User',
deleteWebhook: 'Delete webhook', deleteWebhook: 'Delete webhook',
dismissAll: 'Dismiss all', dismissAll: 'Dismiss all',
download: 'Download',
duplicateCard_title: 'Duplicate Card', duplicateCard_title: 'Duplicate Card',
edit: 'Edit', edit: 'Edit',
editColor_title: 'Edit Color', editColor_title: 'Edit Color',

View File

@@ -401,6 +401,7 @@ export default {
deleteUser_title: 'Borrar Usuario', deleteUser_title: 'Borrar Usuario',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Descartar todo', dismissAll: 'Descartar todo',
download: null,
duplicateCard_title: 'Duplicar tarjeta', duplicateCard_title: 'Duplicar tarjeta',
edit: 'Editar', edit: 'Editar',
editColor_title: 'Editar color', editColor_title: 'Editar color',

View File

@@ -400,6 +400,7 @@ export default {
deleteUser_title: 'Kustuta kasutaja', deleteUser_title: 'Kustuta kasutaja',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Eemalda kõik', dismissAll: 'Eemalda kõik',
download: null,
duplicateCard_title: 'Duplikaardi loomine', duplicateCard_title: 'Duplikaardi loomine',
edit: 'Muuda', edit: 'Muuda',
editColor_title: 'Muuda värvi', editColor_title: 'Muuda värvi',

View File

@@ -379,6 +379,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: 'تکرار کارت', duplicateCard_title: 'تکرار کارت',
edit: 'ویرایش', edit: 'ویرایش',
editColor_title: null, editColor_title: null,

View File

@@ -400,6 +400,7 @@ export default {
deleteUser_title: 'Poista käyttäjä', deleteUser_title: 'Poista käyttäjä',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Sulje kaikki', dismissAll: 'Sulje kaikki',
download: null,
duplicateCard_title: 'Monista kortti', duplicateCard_title: 'Monista kortti',
edit: 'Muokkaa', edit: 'Muokkaa',
editColor_title: 'Muokkaa väriä', editColor_title: 'Muokkaa väriä',

View File

@@ -404,6 +404,7 @@ export default {
deleteUser_title: 'Supprimer lutilisateur', deleteUser_title: 'Supprimer lutilisateur',
deleteWebhook: 'Supprimer le webhook', deleteWebhook: 'Supprimer le webhook',
dismissAll: 'Tout rejeter', dismissAll: 'Tout rejeter',
download: null,
duplicateCard_title: 'Dupliquer la carte', duplicateCard_title: 'Dupliquer la carte',
edit: 'Modifier', edit: 'Modifier',
editColor_title: 'Modifier la couleur', editColor_title: 'Modifier la couleur',

View File

@@ -401,6 +401,7 @@ export default {
deleteUser_title: 'Felhasználó törlése', deleteUser_title: 'Felhasználó törlése',
deleteWebhook: 'Webhook törlése', deleteWebhook: 'Webhook törlése',
dismissAll: 'Összes elvetése', dismissAll: 'Összes elvetése',
download: null,
duplicateCard_title: 'Kártya másolása', duplicateCard_title: 'Kártya másolása',
edit: 'Szerkesztés', edit: 'Szerkesztés',
editColor_title: null, editColor_title: null,

View File

@@ -381,6 +381,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Ubah', edit: 'Ubah',
editColor_title: null, editColor_title: null,

View File

@@ -402,6 +402,7 @@ export default {
deleteUser_title: 'Elimina utente', deleteUser_title: 'Elimina utente',
deleteWebhook: 'Elimina webhook', deleteWebhook: 'Elimina webhook',
dismissAll: 'Ignora tutto', dismissAll: 'Ignora tutto',
download: null,
duplicateCard_title: 'Duplica scheda', duplicateCard_title: 'Duplica scheda',
edit: 'Modifica', edit: 'Modifica',
editColor_title: 'Modifica colore', editColor_title: 'Modifica colore',

View File

@@ -381,6 +381,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: '編集', edit: '編集',
editColor_title: null, editColor_title: null,

View File

@@ -380,6 +380,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: '모두 해제', dismissAll: '모두 해제',
download: null,
duplicateCard_title: '카드 복제', duplicateCard_title: '카드 복제',
edit: '편집', edit: '편집',
editColor_title: '색상 편집', editColor_title: '색상 편집',

View File

@@ -382,6 +382,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Bewerken', edit: 'Bewerken',
editColor_title: null, editColor_title: null,

View File

@@ -392,6 +392,7 @@ export default {
deleteUser_title: 'Usuń Użytkownika', deleteUser_title: 'Usuń Użytkownika',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Odrzuć wszystkie', dismissAll: 'Odrzuć wszystkie',
download: null,
duplicateCard_title: 'Duplikuj Kartę', duplicateCard_title: 'Duplikuj Kartę',
edit: 'Edytuj', edit: 'Edytuj',
editColor_title: 'Edytuj Kolor', editColor_title: 'Edytuj Kolor',

View File

@@ -404,6 +404,7 @@ export default {
deleteUser_title: 'Excluir Usuário', deleteUser_title: 'Excluir Usuário',
deleteWebhook: 'Excluir webhook', deleteWebhook: 'Excluir webhook',
dismissAll: 'Dispensar todos', dismissAll: 'Dispensar todos',
download: null,
duplicateCard_title: 'Duplicar Cartão', duplicateCard_title: 'Duplicar Cartão',
edit: 'Editar', edit: 'Editar',
editColor_title: 'Editar Cor', editColor_title: 'Editar Cor',

View File

@@ -383,6 +383,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Editar', edit: 'Editar',
editColor_title: null, editColor_title: null,

View File

@@ -382,6 +382,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Editați', edit: 'Editați',
editColor_title: null, editColor_title: null,

View File

@@ -396,6 +396,7 @@ export default {
deleteUser_title: 'Удалить пользователя', deleteUser_title: 'Удалить пользователя',
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Отклонить все', dismissAll: 'Отклонить все',
download: null,
duplicateCard_title: 'Дублировать карточку', duplicateCard_title: 'Дублировать карточку',
edit: 'Изменить', edit: 'Изменить',
editColor_title: 'Изменить цвет', editColor_title: 'Изменить цвет',

View File

@@ -381,6 +381,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Upraviť', edit: 'Upraviť',
editColor_title: null, editColor_title: null,

View File

@@ -381,6 +381,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: 'Клонирај картицу', duplicateCard_title: 'Клонирај картицу',
edit: 'Измени', edit: 'Измени',
editColor_title: null, editColor_title: null,

View File

@@ -378,6 +378,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: 'Kloniraj karticu', duplicateCard_title: 'Kloniraj karticu',
edit: 'Izmeni', edit: 'Izmeni',
editColor_title: null, editColor_title: null,

View File

@@ -380,6 +380,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: 'Avvisa alla', dismissAll: 'Avvisa alla',
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Redigera', edit: 'Redigera',
editColor_title: null, editColor_title: null,

View File

@@ -378,6 +378,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Düzenle', edit: 'Düzenle',
editColor_title: null, editColor_title: null,

View File

@@ -398,6 +398,7 @@ export default {
deleteUser_title: 'Видалити Користувача', deleteUser_title: 'Видалити Користувача',
deleteWebhook: 'Видалити вебхук', deleteWebhook: 'Видалити вебхук',
dismissAll: 'Скасувати всі', dismissAll: 'Скасувати всі',
download: null,
duplicateCard_title: 'Дублювати Картку', duplicateCard_title: 'Дублювати Картку',
edit: 'Редагувати', edit: 'Редагувати',
editColor_title: 'Редагувати колір', editColor_title: 'Редагувати колір',

View File

@@ -377,6 +377,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: 'Tahrirlash', edit: 'Tahrirlash',
editColor_title: null, editColor_title: null,

View File

@@ -379,6 +379,7 @@ export default {
deleteUser_title: '删除用户', deleteUser_title: '删除用户',
deleteWebhook: '删除Webhook', deleteWebhook: '删除Webhook',
dismissAll: '全部忽略', dismissAll: '全部忽略',
download: null,
duplicateCard_title: '复制卡片', duplicateCard_title: '复制卡片',
edit: '编辑', edit: '编辑',
editColor_title: '编辑颜色', editColor_title: '编辑颜色',

View File

@@ -374,6 +374,7 @@ export default {
deleteUser_title: null, deleteUser_title: null,
deleteWebhook: null, deleteWebhook: null,
dismissAll: null, dismissAll: null,
download: null,
duplicateCard_title: null, duplicateCard_title: null,
edit: '編輯', edit: '編輯',
editColor_title: null, editColor_title: null,

View File

@@ -6,6 +6,7 @@
import { attr, fk } from 'redux-orm'; import { attr, fk } from 'redux-orm';
import BaseModel from './BaseModel'; import BaseModel from './BaseModel';
import getFilenameAndExtension from '../utils/get-filename-and-extension';
import ActionTypes from '../constants/ActionTypes'; import ActionTypes from '../constants/ActionTypes';
import { AttachmentTypes } from '../constants/Enums'; import { AttachmentTypes } from '../constants/Enums';
@@ -14,10 +15,7 @@ const prepareAttachment = (attachment) => {
return attachment; return attachment;
} }
const filename = attachment.data.url.split('/').pop().toLowerCase(); const { filename, extension } = getFilenameAndExtension(attachment.data.url);
let extension = filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1);
extension = extension ? extension.toLowerCase() : null;
return { return {
...attachment, ...attachment,

View File

@@ -0,0 +1,16 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
export default (url) => {
const filename = url.split('/').pop().toLowerCase();
let extension = filename.slice((Math.max(0, filename.lastIndexOf('.')) || Infinity) + 1);
extension = extension ? extension.toLowerCase() : null;
return {
filename,
extension,
};
};

View File

@@ -3,9 +3,9 @@
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md * Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/ */
const LIMIT = 50; const buildSearchParts = require('../../../../utils/build-query-parts');
const SEARCH_PARTS_REGEX = /[ ,;]+/; const LIMIT = 50;
const defaultFind = (criteria, { sort = 'id', limit } = {}) => const defaultFind = (criteria, { sort = 'id', limit } = {}) =>
Card.find(criteria).sort(sort).limit(limit); Card.find(criteria).sort(sort).limit(limit);
@@ -53,13 +53,7 @@ const getIdsByEndlessListId = async (
queryValues.push(search.substring(1)); queryValues.push(search.substring(1));
query += ` AND (card.name ~* $${queryValues.length} OR card.description ~* $${queryValues.length})`; query += ` AND (card.name ~* $${queryValues.length} OR card.description ~* $${queryValues.length})`;
} else { } else {
const searchParts = search.split(SEARCH_PARTS_REGEX).flatMap((searchPart) => { const searchParts = buildSearchParts(search);
if (!searchPart) {
return [];
}
return searchPart.toLowerCase();
});
if (searchParts.length > 0) { if (searchParts.length > 0) {
let ilikeValues = searchParts.map((searchPart) => { let ilikeValues = searchParts.map((searchPart) => {

View File

@@ -0,0 +1,17 @@
/*!
* Copyright (c) 2024 PLANKA Software GmbH
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
*/
const QUERY_PARTS_REGEX = /[ ,;]+/;
const buildQueryParts = (query) =>
query.split(QUERY_PARTS_REGEX).flatMap((queryPart) => {
if (!queryPart) {
return [];
}
return queryPart.toLowerCase();
});
module.exports = buildQueryParts;