diff --git a/docs/API.md b/docs/API.md index c3d40d265d..ed67000632 100644 --- a/docs/API.md +++ b/docs/API.md @@ -1128,6 +1128,7 @@ Deck stores user and app configuration values globally and per board. The GET en | --- | --- | | calendar | Determines if the calendar/tasks integration through the CalDAV backend is enabled for the user (boolean) | | cardDetailsInModal | Determines if the bigger view is used (boolean) | +| hideNoDueOnOverview | Determines if the No Due Date column should be displayed | | cardIdBadge | Determines if the ID badges are displayed on cards (boolean) | | groupLimit | Determines if creating new boards is limited to certain groups of the instance. The resulting output is an array of group objects with the id and the displayname (Admin only)| @@ -1173,6 +1174,7 @@ Deck stores user and app configuration values globally and per board. The GET en | notify-due | `off`, `assigned` or `all` | | calendar | Boolean | | cardDetailsInModal | Boolean | +| hideNoDueOnOverview | Boolean | | cardIdBadge | Boolean | #### Example request diff --git a/lib/Service/ConfigService.php b/lib/Service/ConfigService.php index b4afb8fc45..e870a290b0 100644 --- a/lib/Service/ConfigService.php +++ b/lib/Service/ConfigService.php @@ -52,7 +52,8 @@ public function getAll(): array { $data = [ 'calendar' => $this->isCalendarEnabled(), 'cardDetailsInModal' => $this->isCardDetailsInModal(), - 'cardIdBadge' => $this->isCardIdBadgeEnabled() + 'cardIdBadge' => $this->isCardIdBadgeEnabled(), + 'hideNoDueOnOverview' => $this->isHideNoDueOnOverviewEnabled() ]; if ($this->groupManager->isAdmin($userId)) { $data['groupLimit'] = $this->get('groupLimit'); @@ -85,6 +86,11 @@ public function get(string $key) { return false; } return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'cardDetailsInModal', true); + case 'hideNoDueOnOverview': + if ($this->getUserId() === null) { + return false; + } + return (bool)$this->config->getUserValue($this->getUserId(), Application::APP_ID, 'hideNoDueOnOverview', true); case 'cardIdBadge': if ($this->getUserId() === null) { return false; @@ -123,6 +129,20 @@ public function isCardDetailsInModal(?int $boardId = null): bool { return (bool)$this->config->getUserValue($userId, Application::APP_ID, 'board:' . $boardId . ':cardDetailsInModal', $defaultState); } + public function isHideNoDueOnOverviewEnabled(?int $boardId = null): bool { + $userId = $this->getUserId(); + if ($userId === null) { + return false; + } + + $defaultState = (bool)$this->config->getUserValue($userId, Application::APP_ID, 'hideNoDueOnOverview', false); + if ($boardId === null) { + return $defaultState; + } + + return (bool)$this->config->getUserValue($userId, Application::APP_ID, 'board:' . $boardId . ':hideNoDueOnOverview', $defaultState); + } + public function isCardIdBadgeEnabled(): bool { $userId = $this->getUserId(); if ($userId === null) { @@ -177,6 +197,10 @@ public function set($key, $value) { $this->config->setUserValue($userId, Application::APP_ID, 'cardDetailsInModal', (string)$value); $result = $value; break; + case 'hideNoDueOnOverview': + $this->config->setUserValue($userId, Application::APP_ID, 'hideNoDueOnOverview', (string)$value); + $result = $value; + break; case 'cardIdBadge': $this->config->setUserValue($userId, Application::APP_ID, 'cardIdBadge', (string)$value); $result = $value; diff --git a/src/App.vue b/src/App.vue index 881f75ced9..aba4793edd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -98,6 +98,14 @@ export default { this.$store.dispatch('setConfig', { cardDetailsInModal: newValue }) }, }, + hideNoDueOnOverview: { + get() { + return this.$store.getters.config('hideNoDueOnOverview') + }, + set(newValue) { + this.$store.dispatch('setConfig', { hideNoDueOnOverview: newValue }) + }, + }, }, created() { const initialState = loadState('deck', 'initialBoards', null) diff --git a/src/components/DeckAppSettings.vue b/src/components/DeckAppSettings.vue index 3935dbff5d..674c23146a 100644 --- a/src/components/DeckAppSettings.vue +++ b/src/components/DeckAppSettings.vue @@ -14,6 +14,12 @@ :label="t('deck', 'Use bigger card view')" /> + + + + + @@ -119,6 +125,14 @@ export default { this.$store.dispatch('setConfig', { cardDetailsInModal: newValue }) }, }, + hideNoDueOnOverview: { + get() { + return this.$store.getters.config('hideNoDueOnOverview') + }, + set(newValue) { + this.$store.dispatch('setConfig', { hideNoDueOnOverview: newValue }) + }, + }, cardIdBadge: { get() { return this.$store.getters.config('cardIdBadge') diff --git a/src/components/overview/Overview.vue b/src/components/overview/Overview.vue index b86e35b13d..311fb10db1 100644 --- a/src/components/overview/Overview.vue +++ b/src/components/overview/Overview.vue @@ -74,11 +74,6 @@ const COLUMN_PROPS_LIST = [ title: 'Later', filter: 'later', }, - { - title: 'No due', - filter: 'nodue', - sort: false, - }, ] export default { @@ -95,9 +90,17 @@ export default { }, }, data() { + const dynamicList = [...COLUMN_PROPS_LIST]; + if(hideNoDueOnOverview) { + dynamicList.push({ + title: 'No due', + filter: 'nodue', + sort: false, + }); + } return { loading: true, - columnPropsList: COLUMN_PROPS_LIST, + columnPropsList: dynamicList, } }, computed: { @@ -112,6 +115,14 @@ export default { return '' } }, + hideNoDueOnOverview: { + get() { + return this.$store.getters.config('hideNoDueOnOverview') + }, + set(newValue) { + this.$store.dispatch('setConfig', { hideNoDueOnOverview: newValue }) + }, + }, ...mapGetters(['assignedCardsDashboard']), }, watch: {