From 56174f749fe509d7e9cbb573192618784c04cd95 Mon Sep 17 00:00:00 2001 From: Anna Larch Date: Mon, 7 Jul 2025 18:44:48 +0200 Subject: [PATCH 1/3] feat: add Busy status and new preset BRB status Signed-off-by: Anna Larch --- apps/dav/lib/CalDAV/Status/StatusService.php | 2 +- .../lib/Service/PredefinedStatusService.php | 17 +++++++++++++++++ .../src/services/statusOptionsService.js | 3 +++ .../Service/StatusServiceIntegrationTest.php | 8 ++++---- .../Service/PredefinedStatusServiceTest.php | 16 ++++++++++++++-- 5 files changed, 39 insertions(+), 7 deletions(-) diff --git a/apps/dav/lib/CalDAV/Status/StatusService.php b/apps/dav/lib/CalDAV/Status/StatusService.php index de19174de58..9ee0e9bf356 100644 --- a/apps/dav/lib/CalDAV/Status/StatusService.php +++ b/apps/dav/lib/CalDAV/Status/StatusService.php @@ -141,7 +141,7 @@ class StatusService { $this->logger->debug("Found $count applicable event(s), changing user status", ['user' => $userId]); $this->userStatusService->setUserStatus( $userId, - IUserStatus::AWAY, + IUserStatus::BUSY, IUserStatus::MESSAGE_CALENDAR_BUSY, true ); diff --git a/apps/user_status/lib/Service/PredefinedStatusService.php b/apps/user_status/lib/Service/PredefinedStatusService.php index 6606966acd1..599d5b8b52f 100644 --- a/apps/user_status/lib/Service/PredefinedStatusService.php +++ b/apps/user_status/lib/Service/PredefinedStatusService.php @@ -20,6 +20,7 @@ use OCP\UserStatus\IUserStatus; * @package OCA\UserStatus\Service */ class PredefinedStatusService { + private const BE_RIGHT_BACK = 'be-right-back'; private const MEETING = 'meeting'; private const COMMUTING = 'commuting'; private const SICK_LEAVE = 'sick-leave'; @@ -64,6 +65,15 @@ class PredefinedStatusService { 'time' => 1800, ], ], + [ + 'id' => self::BE_RIGHT_BACK, + 'icon' => '⏳', + 'message' => $this->getTranslatedStatusForId(self::BE_RIGHT_BACK), + 'clearAt' => [ + 'type' => 'period', + 'time' => 900, + ], + ], [ 'id' => self::REMOTE_WORK, 'icon' => '🏡', @@ -143,6 +153,9 @@ class PredefinedStatusService { case self::REMOTE_WORK: return '🏡'; + case self::BE_RIGHT_BACK: + return '⏳'; + case self::CALL: return '💬'; @@ -179,6 +192,9 @@ class PredefinedStatusService { case self::CALL: return $this->l10n->t('In a call'); + case self::BE_RIGHT_BACK: + return $this->l10n->t('Be right back'); + default: return null; } @@ -195,6 +211,7 @@ class PredefinedStatusService { self::SICK_LEAVE, self::VACATIONING, self::OUT_OF_OFFICE, + self::BE_RIGHT_BACK, self::REMOTE_WORK, IUserStatus::MESSAGE_CALL, IUserStatus::MESSAGE_AVAILABILITY, diff --git a/apps/user_status/src/services/statusOptionsService.js b/apps/user_status/src/services/statusOptionsService.js index 7280e58ec75..6c23645e5be 100644 --- a/apps/user_status/src/services/statusOptionsService.js +++ b/apps/user_status/src/services/statusOptionsService.js @@ -17,6 +17,9 @@ const getAllStatusOptions = () => { }, { type: 'away', label: t('user_status', 'Away'), + }, { + type: 'busy', + label: t('user_status', 'Busy'), }, { type: 'dnd', label: t('user_status', 'Do not disturb'), diff --git a/apps/user_status/tests/Integration/Service/StatusServiceIntegrationTest.php b/apps/user_status/tests/Integration/Service/StatusServiceIntegrationTest.php index 65b07997e82..8a21052b09f 100644 --- a/apps/user_status/tests/Integration/Service/StatusServiceIntegrationTest.php +++ b/apps/user_status/tests/Integration/Service/StatusServiceIntegrationTest.php @@ -136,7 +136,7 @@ class StatusServiceIntegrationTest extends TestCase { ); $this->service->setUserStatus( 'test123', - IUserStatus::AWAY, + IUserStatus::BUSY, IUserStatus::MESSAGE_CALENDAR_BUSY, true, ); @@ -147,12 +147,12 @@ class StatusServiceIntegrationTest extends TestCase { $this->service->setUserStatus( 'test123', - IUserStatus::AWAY, + IUserStatus::BUSY, IUserStatus::MESSAGE_CALL, true, ); self::assertSame( - IUserStatus::AWAY, + IUserStatus::BUSY, $this->service->findByUserId('test123')->getStatus(), ); @@ -182,7 +182,7 @@ class StatusServiceIntegrationTest extends TestCase { $nostatus = $this->service->setUserStatus( 'test123', - IUserStatus::AWAY, + IUserStatus::BUSY, IUserStatus::MESSAGE_CALENDAR_BUSY, true, ); diff --git a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php index de5d92055f1..78e4a18d9f1 100644 --- a/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php +++ b/apps/user_status/tests/Unit/Service/PredefinedStatusServiceTest.php @@ -26,7 +26,7 @@ class PredefinedStatusServiceTest extends TestCase { } public function testGetDefaultStatuses(): void { - $this->l10n->expects($this->exactly(7)) + $this->l10n->expects($this->exactly(8)) ->method('t') ->willReturnCallback(function ($text, $parameters = []) { return vsprintf($text, $parameters); @@ -52,6 +52,15 @@ class PredefinedStatusServiceTest extends TestCase { 'time' => 1800, ], ], + [ + 'id' => 'be-right-back', + 'icon' => '⏳', + 'message' => 'Be right back', + 'clearAt' => [ + 'type' => 'period', + 'time' => 900, + ], + ], [ 'id' => 'remote-work', 'icon' => '🏡', @@ -106,6 +115,7 @@ class PredefinedStatusServiceTest extends TestCase { ['sick-leave', '🤒'], ['vacationing', '🌴'], ['remote-work', '🏡'], + ['be-right-back', '⏳'], ['call', '💬'], ['unknown-id', null], ]; @@ -127,6 +137,7 @@ class PredefinedStatusServiceTest extends TestCase { ['sick-leave', 'Out sick'], ['vacationing', 'Vacationing'], ['remote-work', 'Working remotely'], + ['be-right-back', 'Be right back'], ['call', 'In a call'], ['unknown-id', null], ]; @@ -145,13 +156,14 @@ class PredefinedStatusServiceTest extends TestCase { ['sick-leave', true], ['vacationing', true], ['remote-work', true], + ['be-right-back', true], ['call', true], ['unknown-id', false], ]; } public function testGetDefaultStatusById(): void { - $this->l10n->expects($this->exactly(7)) + $this->l10n->expects($this->exactly(8)) ->method('t') ->willReturnCallback(function ($text, $parameters = []) { return vsprintf($text, $parameters); From 47923b9d1c0b983d9ef63693636ad5ad2ececcb0 Mon Sep 17 00:00:00 2001 From: Maksim Sukharev Date: Mon, 28 Jul 2025 13:33:20 +0200 Subject: [PATCH 2/3] style(user_status): adjust status modal styles - remove modal name - propagate box-sizing - reduce gap between sections 12px -> 8px - align icons vertically - add hover effect to status labels Signed-off-by: Maksim Sukharev --- .../src/components/ClearAtSelect.vue | 8 ++-- .../src/components/OnlineStatusSelect.vue | 42 +++++++++---------- .../src/components/PredefinedStatus.vue | 15 ++++++- .../src/components/PredefinedStatusesList.vue | 3 +- .../src/components/PreviousStatus.vue | 5 ++- .../src/components/SetStatusModal.vue | 21 ++++++---- 6 files changed, 55 insertions(+), 39 deletions(-) diff --git a/apps/user_status/src/components/ClearAtSelect.vue b/apps/user_status/src/components/ClearAtSelect.vue index c685e77daa8..91b816dc04a 100644 --- a/apps/user_status/src/components/ClearAtSelect.vue +++ b/apps/user_status/src/components/ClearAtSelect.vue @@ -14,6 +14,7 @@ :value="option" :clearable="false" placement="top" + label-outside @option:selected="select" /> @@ -72,12 +73,9 @@ export default { diff --git a/apps/user_status/src/components/PreviousStatus.vue b/apps/user_status/src/components/PreviousStatus.vue index 221498ed2a2..58d6ebd294b 100644 --- a/apps/user_status/src/components/PreviousStatus.vue +++ b/apps/user_status/src/components/PreviousStatus.vue @@ -65,7 +65,8 @@ export default { flex-basis: 100%; border-radius: var(--border-radius); align-items: center; - min-height: 44px; + min-height: var(--default-clickable-area); + padding-inline: var(--default-grid-baseline); &:hover, &:focus { @@ -77,7 +78,7 @@ export default { } &__icon { - flex-basis: 40px; + flex-basis: var(--default-clickable-area); text-align: center; } diff --git a/apps/user_status/src/components/SetStatusModal.vue b/apps/user_status/src/components/SetStatusModal.vue index bafa9b193a5..8624ed19e94 100644 --- a/apps/user_status/src/components/SetStatusModal.vue +++ b/apps/user_status/src/components/SetStatusModal.vue @@ -5,8 +5,8 @@