Skip to content

Set user status #1701

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 17 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified assets/icons/ZulipIcons.ttf
Binary file not shown.
3 changes: 3 additions & 0 deletions assets/icons/chevron_down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions assets/l10n/app_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,66 @@
"@userRoleUnknown": {
"description": "Label for UserRole.unknown"
},
"statusButtonLabelStatusSet": "Status",
"@statusButtonLabelStatusSet": {
"description": "The status button label in self-user profile page when status is set."
},
"statusButtonLabelStatusUnset": "Set status",
"@statusButtonLabelStatusUnset": {
"description": "The status button label in self-user profile page when status is not set."
},
"noStatusText": "No status text",
"@noStatusText": {
"description": "The text part of the status button sub-label in self-user profile page when status text is not set."
},
"setStatusPageTitle": "Set status",
"@setStatusPageTitle": {
"description": "Title for the 'Set status' page."
},
"statusClearButtonLabel": "Clear",
"@statusClearButtonLabel": {
"description": "Label for the button that clears the user status, in 'Set status' page."
},
"statusSaveButtonLabel": "Save",
"@statusSaveButtonLabel": {
"description": "Label for the button that saves the user status, in 'Set status' page."
},
"statusTextHint": "Your status",
"@statusTextHint": {
"description": "Hint text for the status text input field in 'Set status' page."
},
"userStatusBusy": "Busy",
"@userStatusBusy": {
"description": "A suggested user status text, 'Busy'."
},
"userStatusInAMeeting": "In a meeting",
"@userStatusInAMeeting": {
"description": "A suggested user status text, 'In a meeting'."
},
"userStatusCommuting": "Commuting",
"@userStatusCommuting": {
"description": "A suggested user status text, 'Commuting'."
},
"userStatusOutSick": "Out sick",
"@userStatusOutSick": {
"description": "A suggested user status text, 'Out sick'."
},
"userStatusVacationing": "Vacationing",
"@userStatusVacationing": {
"description": "A suggested user status text, 'Vacationing'."
},
"userStatusWorkingRemotely": "Working remotely",
"@userStatusWorkingRemotely": {
"description": "A suggested user status text, 'Working remotely'."
},
"userStatusAtTheOffice": "At the office",
"@userStatusAtTheOffice": {
"description": "A suggested user status text, 'At the office'."
},
"updateStatusErrorTitle": "Error updating user status. Please try again.",
"@updateStatusErrorTitle": {
"description": "Error title when updating user status failed."
},
"searchMessagesPageTitle": "Search",
"@searchMessagesPageTitle": {
"description": "Page title for the 'Search' message view."
Expand Down
4 changes: 4 additions & 0 deletions lib/api/model/model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,10 @@ class UserStatusChange {
return UserStatus(text: text.or(old.text), emoji: emoji.or(old.emoji));
}

UserStatusChange copyWith({Option<String?>? text, Option<StatusEmoji?>? emoji}) {
return UserStatusChange(text: text ?? this.text, emoji: emoji ?? this.emoji);
}

factory UserStatusChange.fromJson(Map<String, dynamic> json) {
return UserStatusChange(
text: _textFromJson(json), emoji: _emojiFromJson(json));
Expand Down
16 changes: 16 additions & 0 deletions lib/api/route/users.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'package:json_annotation/json_annotation.dart';

import '../../basic.dart';
import '../core.dart';
import '../model/model.dart';

Expand Down Expand Up @@ -34,6 +35,21 @@ class GetOwnUserResult {
Map<String, dynamic> toJson() => _$GetOwnUserResultToJson(this);
}

/// https://zulip.com/api/update-status
Future<void> updateStatus(ApiConnection connection, {
Comment on lines +38 to +39
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: add API bindings in a separate commit

required UserStatusChange change,
}) {
return connection.post('updateStatus', (_) {}, 'users/me/status', {
if (change.text case OptionSome(:var value))
'status_text': RawParameter(value ?? ''),
if (change.emoji case OptionSome(:var value)) ...{
'emoji_name': RawParameter(value?.emojiName ?? ''),
'emoji_code': RawParameter(value?.emojiCode ?? ''),
'reaction_type': RawParameter(value?.reactionType.toJson() ?? ''),
}
});
}

/// https://zulip.com/api/update-presence
///
/// Passes true for `slim_presence` to avoid getting an ancient data format
Expand Down
90 changes: 90 additions & 0 deletions lib/generated/l10n/zulip_localizations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1227,6 +1227,96 @@ abstract class ZulipLocalizations {
/// **'Unknown'**
String get userRoleUnknown;

/// The status button label in self-user profile page when status is set.
///
/// In en, this message translates to:
/// **'Status'**
String get statusButtonLabelStatusSet;

/// The status button label in self-user profile page when status is not set.
///
/// In en, this message translates to:
/// **'Set status'**
String get statusButtonLabelStatusUnset;

/// The text part of the status button sub-label in self-user profile page when status text is not set.
///
/// In en, this message translates to:
/// **'No status text'**
String get noStatusText;

/// Title for the 'Set status' page.
///
/// In en, this message translates to:
/// **'Set status'**
String get setStatusPageTitle;

/// Label for the button that clears the user status, in 'Set status' page.
///
/// In en, this message translates to:
/// **'Clear'**
String get statusClearButtonLabel;

/// Label for the button that saves the user status, in 'Set status' page.
///
/// In en, this message translates to:
/// **'Save'**
String get statusSaveButtonLabel;

/// Hint text for the status text input field in 'Set status' page.
///
/// In en, this message translates to:
/// **'Your status'**
String get statusTextHint;

/// A suggested user status text, 'Busy'.
///
/// In en, this message translates to:
/// **'Busy'**
String get userStatusBusy;

/// A suggested user status text, 'In a meeting'.
///
/// In en, this message translates to:
/// **'In a meeting'**
String get userStatusInAMeeting;

/// A suggested user status text, 'Commuting'.
///
/// In en, this message translates to:
/// **'Commuting'**
String get userStatusCommuting;

/// A suggested user status text, 'Out sick'.
///
/// In en, this message translates to:
/// **'Out sick'**
String get userStatusOutSick;

/// A suggested user status text, 'Vacationing'.
///
/// In en, this message translates to:
/// **'Vacationing'**
String get userStatusVacationing;

/// A suggested user status text, 'Working remotely'.
///
/// In en, this message translates to:
/// **'Working remotely'**
String get userStatusWorkingRemotely;

/// A suggested user status text, 'At the office'.
///
/// In en, this message translates to:
/// **'At the office'**
String get userStatusAtTheOffice;

/// Error title when updating user status failed.
///
/// In en, this message translates to:
/// **'Error updating user status. Please try again.'**
String get updateStatusErrorTitle;

/// Page title for the 'Search' message view.
///
/// In en, this message translates to:
Expand Down
46 changes: 46 additions & 0 deletions lib/generated/l10n/zulip_localizations_ar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,52 @@ class ZulipLocalizationsAr extends ZulipLocalizations {
@override
String get userRoleUnknown => 'Unknown';

@override
String get statusButtonLabelStatusSet => 'Status';

@override
String get statusButtonLabelStatusUnset => 'Set status';

@override
String get noStatusText => 'No status text';

@override
String get setStatusPageTitle => 'Set status';

@override
String get statusClearButtonLabel => 'Clear';

@override
String get statusSaveButtonLabel => 'Save';

@override
String get statusTextHint => 'Your status';

@override
String get userStatusBusy => 'Busy';

@override
String get userStatusInAMeeting => 'In a meeting';

@override
String get userStatusCommuting => 'Commuting';

@override
String get userStatusOutSick => 'Out sick';

@override
String get userStatusVacationing => 'Vacationing';

@override
String get userStatusWorkingRemotely => 'Working remotely';

@override
String get userStatusAtTheOffice => 'At the office';

@override
String get updateStatusErrorTitle =>
'Error updating user status. Please try again.';

@override
String get searchMessagesPageTitle => 'Search';

Expand Down
46 changes: 46 additions & 0 deletions lib/generated/l10n/zulip_localizations_de.dart
Original file line number Diff line number Diff line change
Expand Up @@ -685,6 +685,52 @@ class ZulipLocalizationsDe extends ZulipLocalizations {
@override
String get userRoleUnknown => 'Unbekannt';

@override
String get statusButtonLabelStatusSet => 'Status';

@override
String get statusButtonLabelStatusUnset => 'Set status';

@override
String get noStatusText => 'No status text';

@override
String get setStatusPageTitle => 'Set status';

@override
String get statusClearButtonLabel => 'Clear';

@override
String get statusSaveButtonLabel => 'Save';

@override
String get statusTextHint => 'Your status';

@override
String get userStatusBusy => 'Busy';

@override
String get userStatusInAMeeting => 'In a meeting';

@override
String get userStatusCommuting => 'Commuting';

@override
String get userStatusOutSick => 'Out sick';

@override
String get userStatusVacationing => 'Vacationing';

@override
String get userStatusWorkingRemotely => 'Working remotely';

@override
String get userStatusAtTheOffice => 'At the office';

@override
String get updateStatusErrorTitle =>
'Error updating user status. Please try again.';

@override
String get searchMessagesPageTitle => 'Search';

Expand Down
46 changes: 46 additions & 0 deletions lib/generated/l10n/zulip_localizations_en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -664,6 +664,52 @@ class ZulipLocalizationsEn extends ZulipLocalizations {
@override
String get userRoleUnknown => 'Unknown';

@override
String get statusButtonLabelStatusSet => 'Status';

@override
String get statusButtonLabelStatusUnset => 'Set status';

@override
String get noStatusText => 'No status text';

@override
String get setStatusPageTitle => 'Set status';

@override
String get statusClearButtonLabel => 'Clear';

@override
String get statusSaveButtonLabel => 'Save';

@override
String get statusTextHint => 'Your status';

@override
String get userStatusBusy => 'Busy';

@override
String get userStatusInAMeeting => 'In a meeting';

@override
String get userStatusCommuting => 'Commuting';

@override
String get userStatusOutSick => 'Out sick';

@override
String get userStatusVacationing => 'Vacationing';

@override
String get userStatusWorkingRemotely => 'Working remotely';

@override
String get userStatusAtTheOffice => 'At the office';

@override
String get updateStatusErrorTitle =>
'Error updating user status. Please try again.';

@override
String get searchMessagesPageTitle => 'Search';

Expand Down
Loading