mirror of
https://github.com/plankanban/planka.git
synced 2025-12-20 17:25:39 +03:00
feat: Add board setting to expand task lists by default
Closes #683, closes #1333
This commit is contained in:
@@ -43,6 +43,14 @@ const Others = React.memo(() => {
|
||||
className={styles.radio}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
<Radio
|
||||
toggle
|
||||
name="expandTaskListsByDefault"
|
||||
checked={board.expandTaskListsByDefault}
|
||||
label={t('common.expandTaskListsByDefault')}
|
||||
className={styles.radio}
|
||||
onChange={handleChange}
|
||||
/>
|
||||
</Segment>
|
||||
);
|
||||
});
|
||||
|
||||
@@ -22,7 +22,11 @@ const TaskList = React.memo(({ id }) => {
|
||||
const taskLists = useSelector((state) => selectTaskListById(state, id));
|
||||
const tasks = useSelector((state) => selectTasksByTaskListId(state, id));
|
||||
|
||||
const [isOpened, toggleOpened] = useToggle();
|
||||
const defaultIsOpened = useSelector(
|
||||
(state) => selectors.selectCurrentBoard(state).expandTaskListsByDefault,
|
||||
);
|
||||
|
||||
const [isOpened, toggleOpened] = useToggle(defaultIsOpened);
|
||||
|
||||
const filteredTasks = useMemo(
|
||||
() => (taskLists.hideCompletedTasks ? tasks.filter((task) => !task.isCompleted) : tasks),
|
||||
|
||||
@@ -171,6 +171,7 @@ export default {
|
||||
enterTaskDescription: 'أدخل وصف المهمة...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'تصفية حسب الملصقات',
|
||||
filterByMembers_title: 'تصفية حسب الأعضاء',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -175,6 +175,7 @@ export default {
|
||||
enterTaskDescription: 'Въведете описание на задачата...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Филтриране по етикети',
|
||||
filterByMembers_title: 'Филтриране по членове',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -185,6 +185,7 @@ export default {
|
||||
enterTaskDescription: 'Vlož popis úkolu...',
|
||||
events: 'Události',
|
||||
excludedEvents: 'Vyloučené události',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrovat podle štítku',
|
||||
filterByMembers_title: 'Filtrovat podle člena',
|
||||
forPersonalProjects: 'Pro osobní projekty.',
|
||||
|
||||
@@ -190,6 +190,7 @@ export default {
|
||||
enterTaskDescription: 'Angiv opgavens beskrivelse...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrer labels',
|
||||
filterByMembers_title: 'Filtrer medlemmer',
|
||||
forPersonalProjects: 'For personlige projekter.',
|
||||
|
||||
@@ -199,6 +199,7 @@ export default {
|
||||
enterTaskDescription: 'Aufgabenbeschreibung eingeben...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Nach Label filtern',
|
||||
filterByMembers_title: 'Nach Mitgliedern filtern',
|
||||
forPersonalProjects: 'Für persönliche Projekte.',
|
||||
|
||||
@@ -200,6 +200,7 @@ export default {
|
||||
enterTaskDescription: 'Εισάγετε περιγραφή εργασίας...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Φιλτράρισμα κατά ετικέτες',
|
||||
filterByMembers_title: 'Φιλτράρισμα κατά μέλη',
|
||||
forPersonalProjects: 'Για προσωπικά έργα.',
|
||||
|
||||
@@ -189,6 +189,7 @@ export default {
|
||||
enterTaskDescription: 'Enter task description...',
|
||||
events: 'Events',
|
||||
excludedEvents: 'Excluded events',
|
||||
expandTaskListsByDefault: 'Expand task lists by default',
|
||||
filterByLabels_title: 'Filter By Labels',
|
||||
filterByMembers_title: 'Filter By Members',
|
||||
forPersonalProjects: 'For personal projects.',
|
||||
|
||||
@@ -184,6 +184,7 @@ export default {
|
||||
enterTaskDescription: 'Enter task description...',
|
||||
events: 'Events',
|
||||
excludedEvents: 'Excluded events',
|
||||
expandTaskListsByDefault: 'Expand task lists by default',
|
||||
filterByLabels_title: 'Filter By Labels',
|
||||
filterByMembers_title: 'Filter By Members',
|
||||
forPersonalProjects: 'For personal projects.',
|
||||
|
||||
@@ -190,6 +190,7 @@ export default {
|
||||
enterTaskDescription: 'Escribe la descripción de la tarea...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrar por Etiquetas',
|
||||
filterByMembers_title: 'Filtrar por Miembros',
|
||||
forPersonalProjects: 'Para proyectos personales',
|
||||
|
||||
@@ -189,6 +189,7 @@ export default {
|
||||
enterTaskDescription: 'Sisestage ülesande kirjeldus...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtreeri siltide järgi',
|
||||
filterByMembers_title: 'Filtreeri liikmete järgi',
|
||||
forPersonalProjects: 'Inimlikuks projektideks.',
|
||||
|
||||
@@ -172,6 +172,7 @@ export default {
|
||||
enterTaskDescription: 'توضیحات وظیفه را وارد کنید...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'فیلتر بر اساس برچسبها',
|
||||
filterByMembers_title: 'فیلتر بر اساس اعضا',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -185,6 +185,7 @@ export default {
|
||||
enterTaskDescription: 'Syötä tehtävän kuvaus...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Suodata tunnisteiden mukaan',
|
||||
filterByMembers_title: 'Suodata jäsenten mukaan',
|
||||
forPersonalProjects: 'Henkilökohtaisiin projekteihin.',
|
||||
|
||||
@@ -193,6 +193,7 @@ export default {
|
||||
enterTaskDescription: 'Saisir la description de la tâche...',
|
||||
events: 'Événements',
|
||||
excludedEvents: 'Événements exclus',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrer par étiquettes',
|
||||
filterByMembers_title: 'Filtrer par membres',
|
||||
forPersonalProjects: 'Pour les projets personnels',
|
||||
|
||||
@@ -182,6 +182,7 @@ export default {
|
||||
enterTaskDescription: 'Adja meg a feladat leírását...',
|
||||
events: 'Események',
|
||||
excludedEvents: 'Kizárt események',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Szűrés címkék alapján',
|
||||
filterByMembers_title: 'Szűrés tagok alapján',
|
||||
forPersonalProjects: 'Személyes projektekhez.',
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'Masukkan deskripsi tugas...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Saring berdasarkan Label',
|
||||
filterByMembers_title: 'Saring berdasarkan Anggota',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -191,6 +191,7 @@ export default {
|
||||
enterTaskDescription: 'Inserire descrizione della task...',
|
||||
events: 'Eventi',
|
||||
excludedEvents: 'Eventi esclusi',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtra per etichetta',
|
||||
filterByMembers_title: 'Filtra per membro',
|
||||
forPersonalProjects: 'Per progetti personali',
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'タスクの説明を入力…',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'ラベルで絞り込む',
|
||||
filterByMembers_title: 'メンバーで絞り込む',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -172,6 +172,7 @@ export default {
|
||||
enterTaskDescription: '작업 설명 입력...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: '라벨별 필터링',
|
||||
filterByMembers_title: '멤버별 필터링',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'Taakbeschrijving invoeren...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filteren op labels',
|
||||
filterByMembers_title: 'Filteren op leden',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -181,6 +181,7 @@ export default {
|
||||
enterTaskDescription: 'Podaj opis zadania...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtruj Po Oznaczeniach',
|
||||
filterByMembers_title: 'Filtruj Po Członkach',
|
||||
forPersonalProjects: 'Dla projektów osobistych.',
|
||||
|
||||
@@ -191,6 +191,7 @@ export default {
|
||||
enterTaskDescription: 'Digite a descrição da tarefa...',
|
||||
events: 'Eventos',
|
||||
excludedEvents: 'Eventos Excluídos',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrar por Rótulos',
|
||||
filterByMembers_title: 'Filtrar por Membros',
|
||||
forPersonalProjects: 'Para projetos pessoais.',
|
||||
|
||||
@@ -175,6 +175,7 @@ export default {
|
||||
enterTaskDescription: 'Introduza a descrição da tarefa...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrar por Etiquetas',
|
||||
filterByMembers_title: 'Filtrar por Membros',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'Introduceți descrierea sarcinii...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrați după etichete',
|
||||
filterByMembers_title: 'Filtrați după membri',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -188,6 +188,7 @@ export default {
|
||||
enterTaskDescription: 'Введите описание задачи...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Фильтр по меткам',
|
||||
filterByMembers_title: 'Фильтр по участникам',
|
||||
forPersonalProjects: 'Для личных проектов',
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'Vlož popis úlohy...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtruj podľa štítku',
|
||||
filterByMembers_title: 'Filtruj podľa člena',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -174,6 +174,7 @@ export default {
|
||||
enterTaskDescription: 'Унеси опис задатка...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Филтрирај према ознакама',
|
||||
filterByMembers_title: 'Филтрирај према члановима',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -171,6 +171,7 @@ export default {
|
||||
enterTaskDescription: 'Unesi opis zadatka...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtriraj prema oznakama',
|
||||
filterByMembers_title: 'Filtriraj prema članovima',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -173,6 +173,7 @@ export default {
|
||||
enterTaskDescription: 'Ange uppgiftsbeskrivning...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Filtrera efter etiketter',
|
||||
filterByMembers_title: 'Filtrera efter medlemmar',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -171,6 +171,7 @@ export default {
|
||||
enterTaskDescription: 'Görev açıklamasını girin...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Etikete Göre Filtrele',
|
||||
filterByMembers_title: 'Üyelere göre filtrele',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -186,6 +186,7 @@ export default {
|
||||
enterTaskDescription: 'Введіть опис завдання...',
|
||||
events: 'Події',
|
||||
excludedEvents: 'Виключені події',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: 'Фільтрувати за Мітками',
|
||||
filterByMembers_title: 'Фільтрувати за Учасниками',
|
||||
forPersonalProjects: 'Для особистих проектів.',
|
||||
|
||||
@@ -170,6 +170,7 @@ export default {
|
||||
enterTaskDescription: 'Topshiriq sarlavhasini kiriting...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: "Yorliq bo'yicha filter",
|
||||
filterByMembers_title: "A'zolar bo'yicha filter",
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -171,6 +171,7 @@ export default {
|
||||
enterTaskDescription: '输入任务描述...',
|
||||
events: '事件',
|
||||
excludedEvents: '排除事件',
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: '通过标签筛选',
|
||||
filterByMembers_title: '通过成员筛选',
|
||||
forPersonalProjects: '用于个人项目',
|
||||
|
||||
@@ -168,6 +168,7 @@ export default {
|
||||
enterTaskDescription: '輸入任務描述...',
|
||||
events: null,
|
||||
excludedEvents: null,
|
||||
expandTaskListsByDefault: null,
|
||||
filterByLabels_title: '通過標籤篩選',
|
||||
filterByMembers_title: '通過成員篩選',
|
||||
forPersonalProjects: null,
|
||||
|
||||
@@ -31,6 +31,7 @@ export default class extends BaseModel {
|
||||
defaultCardType: attr(),
|
||||
limitCardTypesToDefaultOne: attr(),
|
||||
alwaysDisplayCardCreator: attr(),
|
||||
expandTaskListsByDefault: attr(),
|
||||
context: attr(),
|
||||
view: attr(),
|
||||
search: attr(),
|
||||
|
||||
@@ -33,15 +33,16 @@ module.exports = {
|
||||
defaultCardType: {
|
||||
type: 'string',
|
||||
isIn: Object.values(Card.Types),
|
||||
allowNull: true,
|
||||
},
|
||||
limitCardTypesToDefaultOne: {
|
||||
type: 'boolean',
|
||||
allowNull: true,
|
||||
},
|
||||
alwaysDisplayCardCreator: {
|
||||
type: 'boolean',
|
||||
},
|
||||
expandTaskListsByDefault: {
|
||||
type: 'boolean',
|
||||
},
|
||||
isSubscribed: {
|
||||
type: 'boolean',
|
||||
},
|
||||
@@ -79,6 +80,7 @@ module.exports = {
|
||||
'defaultCardType',
|
||||
'limitCardTypesToDefaultOne',
|
||||
'alwaysDisplayCardCreator',
|
||||
'expandTaskListsByDefault',
|
||||
);
|
||||
}
|
||||
if (isBoardMember) {
|
||||
@@ -96,6 +98,7 @@ module.exports = {
|
||||
'defaultCardType',
|
||||
'limitCardTypesToDefaultOne',
|
||||
'alwaysDisplayCardCreator',
|
||||
'expandTaskListsByDefault',
|
||||
'isSubscribed',
|
||||
]);
|
||||
|
||||
|
||||
@@ -61,6 +61,11 @@ module.exports = {
|
||||
defaultsTo: false,
|
||||
columnName: 'always_display_card_creator',
|
||||
},
|
||||
expandTaskListsByDefault: {
|
||||
type: 'boolean',
|
||||
defaultsTo: false,
|
||||
columnName: 'expand_task_lists_by_default',
|
||||
},
|
||||
|
||||
// ╔═╗╔╦╗╔╗ ╔═╗╔╦╗╔═╗
|
||||
// ║╣ ║║║╠╩╗║╣ ║║╚═╗
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
exports.up = async (knex) => {
|
||||
await knex.schema.alterTable('board', (table) => {
|
||||
/* Columns */
|
||||
|
||||
table.boolean('expand_task_lists_by_default').notNullable().defaultTo(false);
|
||||
});
|
||||
|
||||
return knex.schema.alterTable('board', (table) => {
|
||||
table.boolean('expand_task_lists_by_default').notNullable().alter();
|
||||
});
|
||||
};
|
||||
|
||||
exports.down = (knex) =>
|
||||
knex.schema.table('board', (table) => {
|
||||
table.dropColumn('expand_task_lists_by_default');
|
||||
});
|
||||
Reference in New Issue
Block a user