Merge pull request #1918 from mattermost/release-1.10
Merge Release 1.10 into master
This commit is contained in:
commit
6c2307a769
29 changed files with 453 additions and 332 deletions
|
|
@ -113,7 +113,7 @@ android {
|
|||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 23
|
||||
versionCode 125
|
||||
versionCode 126
|
||||
versionName "1.10.0"
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ import {
|
|||
import {intlShape} from 'react-intl';
|
||||
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
|
||||
|
||||
import FlagIcon from 'app/components/flag_icon';
|
||||
import PostBody from 'app/components/post_body';
|
||||
import PostHeader from 'app/components/post_header';
|
||||
import PostProfilePicture from 'app/components/post_profile_picture';
|
||||
|
|
@ -419,9 +420,26 @@ export default class Post extends PureComponent {
|
|||
|
||||
let postHeader;
|
||||
let userProfile;
|
||||
let consecutiveStyle;
|
||||
|
||||
if (mergeMessage) {
|
||||
userProfile = <View style={style.consecutivePostContainer}/>;
|
||||
consecutiveStyle = {paddingBottom: 5};
|
||||
|
||||
if (isFlagged) {
|
||||
userProfile = (
|
||||
<View style={style.consecutivePostContainer}>
|
||||
<View style={style.consecutivePostWithFlag}>
|
||||
<FlagIcon
|
||||
height={11}
|
||||
width={11}
|
||||
color={theme.linkColor}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
);
|
||||
} else {
|
||||
userProfile = <View style={style.consecutivePostContainer}/>;
|
||||
}
|
||||
} else {
|
||||
userProfile = (
|
||||
<TouchableHighlight
|
||||
|
|
@ -456,7 +474,7 @@ export default class Post extends PureComponent {
|
|||
}
|
||||
|
||||
return (
|
||||
<View style={[style.container, this.props.style, highlighted, selected]}>
|
||||
<View style={[style.container, this.props.style, consecutiveStyle, highlighted, selected]}>
|
||||
{userProfile}
|
||||
<View style={style.messageContainerWithReplyBar}>
|
||||
{!commentedOnPost && this.renderReplyBar()}
|
||||
|
|
@ -522,6 +540,13 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
|||
marginLeft: 46,
|
||||
marginTop: 10,
|
||||
},
|
||||
consecutivePostWithFlag: {
|
||||
width: 11,
|
||||
height: 11,
|
||||
position: 'absolute',
|
||||
top: -6,
|
||||
left: -11,
|
||||
},
|
||||
profilePictureContainer: {
|
||||
marginBottom: 10,
|
||||
marginRight: 10,
|
||||
|
|
|
|||
|
|
@ -213,7 +213,7 @@ export default class ChannelSidebar extends Component {
|
|||
} else {
|
||||
result = await joinChannel(currentUserId, currentTeamId, channel.id);
|
||||
|
||||
if (result.error) {
|
||||
if (result.error || !result.data || !result.data.channel) {
|
||||
const joinFailedMessage = {
|
||||
id: 'mobile.join_channel.error',
|
||||
defaultMessage: "We couldn't join the channel {displayName}. Please check your connection and try again.",
|
||||
|
|
@ -226,7 +226,7 @@ export default class ChannelSidebar extends Component {
|
|||
return;
|
||||
}
|
||||
|
||||
this.selectChannel(result.data, currentChannelId);
|
||||
this.selectChannel(result.data.channel, currentChannelId);
|
||||
};
|
||||
|
||||
onPageSelected = (index) => {
|
||||
|
|
|
|||
|
|
@ -26,18 +26,25 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
};
|
||||
|
||||
handleClose = () => {
|
||||
this.setState({showEmailNotificationsModal: false});
|
||||
this.setState({
|
||||
newInterval: this.state.interval,
|
||||
showEmailNotificationsModal: false,
|
||||
});
|
||||
}
|
||||
|
||||
handleSaveEmailNotification = () => {
|
||||
this.setState({showEmailNotificationsModal: false});
|
||||
this.saveEmailNotifyProps();
|
||||
this.handleClose();
|
||||
};
|
||||
|
||||
showEmailModal = () => {
|
||||
this.setState({showEmailNotificationsModal: true});
|
||||
};
|
||||
|
||||
handleChange = (value) => {
|
||||
this.setState({newInterval: value});
|
||||
}
|
||||
|
||||
renderEmailSection() {
|
||||
const {
|
||||
sendEmailNotifications,
|
||||
|
|
@ -99,7 +106,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
sendEmailNotifications,
|
||||
siteName,
|
||||
} = this.props;
|
||||
const {interval} = this.state;
|
||||
const {newInterval} = this.state;
|
||||
|
||||
let helpText;
|
||||
if (sendEmailNotifications) {
|
||||
|
|
@ -119,7 +126,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
defaultMessage: 'Immediately',
|
||||
}),
|
||||
value: Preferences.INTERVAL_IMMEDIATE.toString(),
|
||||
checked: interval === Preferences.INTERVAL_IMMEDIATE.toString(),
|
||||
checked: newInterval === Preferences.INTERVAL_IMMEDIATE.toString(),
|
||||
}];
|
||||
|
||||
if (enableEmailBatching) {
|
||||
|
|
@ -129,14 +136,14 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
defaultMessage: 'Every 15 minutes',
|
||||
}),
|
||||
value: Preferences.INTERVAL_FIFTEEN_MINUTES.toString(),
|
||||
checked: interval === Preferences.INTERVAL_FIFTEEN_MINUTES.toString(),
|
||||
checked: newInterval === Preferences.INTERVAL_FIFTEEN_MINUTES.toString(),
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'user.settings.notifications.email.everyHour',
|
||||
defaultMessage: 'Every hour',
|
||||
}),
|
||||
value: Preferences.INTERVAL_HOUR.toString(),
|
||||
checked: interval === Preferences.INTERVAL_HOUR.toString(),
|
||||
checked: newInterval === Preferences.INTERVAL_HOUR.toString(),
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -146,7 +153,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
defaultMessage: 'Never',
|
||||
}),
|
||||
value: Preferences.INTERVAL_NEVER.toString(),
|
||||
checked: interval === Preferences.INTERVAL_NEVER.toString(),
|
||||
checked: newInterval === Preferences.INTERVAL_NEVER.toString(),
|
||||
});
|
||||
|
||||
return (
|
||||
|
|
@ -176,7 +183,7 @@ class NotificationSettingsEmailAndroid extends NotificationSettingsEmailBase {
|
|||
{sendEmailNotifications &&
|
||||
<RadioButtonGroup
|
||||
name='emailSettings'
|
||||
onSelect={this.setEmailNotifications}
|
||||
onSelect={this.handleChange}
|
||||
options={emailOptions}
|
||||
/>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,9 +71,10 @@ describe('NotificationSettingsMobileAndroid', () => {
|
|||
<NotificationSettingsMobileAndroid {...baseProps}/>
|
||||
);
|
||||
|
||||
wrapper.setState({showEmailNotificationsModal: true});
|
||||
wrapper.setState({showEmailNotificationsModal: true, interval: '30', newInterval: '3600'});
|
||||
wrapper.instance().handleClose();
|
||||
expect(wrapper.state('showEmailNotificationsModal')).toEqual(false);
|
||||
expect(wrapper.state('newInterval')).toEqual('30');
|
||||
});
|
||||
|
||||
test('should saveEmailNotifyProps and handleClose on handleSaveEmailNotification', () => {
|
||||
|
|
@ -83,11 +84,9 @@ describe('NotificationSettingsMobileAndroid', () => {
|
|||
|
||||
const instance = wrapper.instance();
|
||||
instance.saveEmailNotifyProps = jest.fn();
|
||||
instance.handleClose = jest.fn();
|
||||
|
||||
instance.handleSaveEmailNotification();
|
||||
expect(instance.saveEmailNotifyProps).toHaveBeenCalledTimes(1);
|
||||
expect(instance.handleClose).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
test('should match state on showEmailModal', () => {
|
||||
|
|
@ -99,4 +98,14 @@ describe('NotificationSettingsMobileAndroid', () => {
|
|||
wrapper.instance().showEmailModal();
|
||||
expect(wrapper.state('showEmailNotificationsModal')).toEqual(true);
|
||||
});
|
||||
|
||||
test('should match state on handleChange', () => {
|
||||
const wrapper = shallowWithIntl(
|
||||
<NotificationSettingsMobileAndroid {...baseProps}/>
|
||||
);
|
||||
|
||||
wrapper.setState({newInterval: '3600'});
|
||||
wrapper.instance().handleChange('30');
|
||||
expect(wrapper.state('newInterval')).toEqual('30');
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ describe('NotificationSettingsEmailIos', () => {
|
|||
<NotificationSettingsEmailIos {...props}/>
|
||||
);
|
||||
|
||||
wrapper.setState({email: 'true', interval: '3600'});
|
||||
wrapper.setState({email: 'true', newInterval: '3600'});
|
||||
wrapper.instance().saveEmailNotifyProps();
|
||||
expect(props.actions.savePreferences).toHaveBeenCalledTimes(1);
|
||||
expect(props.actions.savePreferences).toBeCalledWith(
|
||||
|
|
|
|||
|
|
@ -33,12 +33,11 @@ export default class NotificationSettingsEmailBase extends PureComponent {
|
|||
sendEmailNotifications,
|
||||
} = props;
|
||||
|
||||
const interval = this.computeEmailInterval(sendEmailNotifications, enableEmailBatching, emailInterval);
|
||||
|
||||
this.state = {
|
||||
interval: getEmailInterval(
|
||||
sendEmailNotifications,
|
||||
enableEmailBatching,
|
||||
parseInt(emailInterval, 10),
|
||||
).toString(),
|
||||
interval,
|
||||
newInterval: interval,
|
||||
showEmailNotificationsModal: false,
|
||||
};
|
||||
|
||||
|
|
@ -50,17 +49,21 @@ export default class NotificationSettingsEmailBase extends PureComponent {
|
|||
setNavigatorStyles(this.props.navigator, nextProps.theme);
|
||||
}
|
||||
|
||||
const {
|
||||
sendEmailNotifications,
|
||||
enableEmailBatching,
|
||||
emailInterval,
|
||||
} = nextProps;
|
||||
|
||||
if (
|
||||
this.props.sendEmailNotifications !== nextProps.sendEmailNotifications ||
|
||||
this.props.enableEmailBatching !== nextProps.enableEmailBatching ||
|
||||
this.props.emailInterval !== nextProps.emailInterval
|
||||
this.props.sendEmailNotifications !== sendEmailNotifications ||
|
||||
this.props.enableEmailBatching !== enableEmailBatching ||
|
||||
this.props.emailInterval !== emailInterval
|
||||
) {
|
||||
const interval = this.computeEmailInterval(sendEmailNotifications, enableEmailBatching, emailInterval);
|
||||
this.setState({
|
||||
interval: getEmailInterval(
|
||||
nextProps.sendEmailNotifications,
|
||||
nextProps.enableEmailBatching,
|
||||
parseInt(nextProps.emailInterval, 10),
|
||||
).toString(),
|
||||
interval,
|
||||
newInterval: interval,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -75,25 +78,34 @@ export default class NotificationSettingsEmailBase extends PureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
setEmailNotifications = (interval) => {
|
||||
setEmailNotifications = (value) => {
|
||||
const {sendEmailNotifications} = this.props;
|
||||
|
||||
let email = 'false';
|
||||
if (sendEmailNotifications && interval !== Preferences.INTERVAL_NEVER.toString()) {
|
||||
if (sendEmailNotifications && value !== Preferences.INTERVAL_NEVER.toString()) {
|
||||
email = 'true';
|
||||
}
|
||||
|
||||
this.setState({
|
||||
email,
|
||||
interval,
|
||||
interval: value,
|
||||
newInterval: value,
|
||||
});
|
||||
};
|
||||
|
||||
saveEmailNotifyProps = () => {
|
||||
const {currentUserId} = this.props;
|
||||
const {email, interval} = this.state;
|
||||
const {email, newInterval} = this.state;
|
||||
const emailNotify = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: 'email', value: email};
|
||||
const emailInterval = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: Preferences.EMAIL_INTERVAL, value: interval};
|
||||
const emailInterval = {category: Preferences.CATEGORY_NOTIFICATIONS, user_id: currentUserId, name: Preferences.EMAIL_INTERVAL, value: newInterval};
|
||||
this.props.actions.savePreferences(currentUserId, [emailNotify, emailInterval]);
|
||||
};
|
||||
|
||||
computeEmailInterval = (sendEmailNotifications, enableEmailBatching, emailInterval) => {
|
||||
return getEmailInterval(
|
||||
sendEmailNotifications,
|
||||
enableEmailBatching,
|
||||
parseInt(emailInterval, 10),
|
||||
).toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ export default class NotificationSettingsMentionsBase extends PureComponent {
|
|||
const newState = {
|
||||
...notifyProps,
|
||||
comments,
|
||||
newReplyValue: comments,
|
||||
usernameMention: usernameMentionIndex > -1,
|
||||
mention_keys: mentionKeys.join(','),
|
||||
showKeywordsModal: false,
|
||||
|
|
@ -64,7 +65,6 @@ export default class NotificationSettingsMentionsBase extends PureComponent {
|
|||
};
|
||||
|
||||
this.keywords = newState.mention_keys;
|
||||
this.replyValue = comments;
|
||||
|
||||
return newState;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -27,8 +27,10 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
};
|
||||
|
||||
cancelReplyNotification = () => {
|
||||
this.setState({showReplyModal: false});
|
||||
this.replyValue = this.state.comments;
|
||||
this.setState({
|
||||
newReplyValue: this.state.comments,
|
||||
showReplyModal: false,
|
||||
});
|
||||
};
|
||||
|
||||
onKeywordsChangeText = (value) => {
|
||||
|
|
@ -36,7 +38,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
};
|
||||
|
||||
onReplyChanged = (value) => {
|
||||
this.replyValue = value;
|
||||
this.setState({newReplyValue: value});
|
||||
};
|
||||
|
||||
renderKeywordsModal(style) {
|
||||
|
|
@ -61,7 +63,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
</View>
|
||||
<TextInputWithLocalizedPlaceholder
|
||||
autoFocus={true}
|
||||
defaultValue={this.keywords}
|
||||
value={this.keywords}
|
||||
blurOnSubmit={false}
|
||||
onChangeText={this.onKeywordsChangeText}
|
||||
multiline={false}
|
||||
|
|
@ -113,6 +115,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
|
||||
renderReplyModal(style) {
|
||||
const {intl} = this.props;
|
||||
const {newReplyValue} = this.state;
|
||||
|
||||
const options = [{
|
||||
label: intl.formatMessage({
|
||||
|
|
@ -120,21 +123,21 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
defaultMessage: 'Threads that I start or participate in',
|
||||
}),
|
||||
value: 'any',
|
||||
checked: this.state.comments === 'any',
|
||||
checked: newReplyValue === 'any',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'mobile.account_notifications.threads_start',
|
||||
defaultMessage: 'Threads that I start',
|
||||
}),
|
||||
value: 'root',
|
||||
checked: this.state.comments === 'root',
|
||||
checked: newReplyValue === 'root',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'mobile.account_notifications.threads_mentions',
|
||||
defaultMessage: 'Mentions in threads',
|
||||
}),
|
||||
value: 'never',
|
||||
checked: this.state.comments === 'never',
|
||||
checked: newReplyValue === 'never',
|
||||
}];
|
||||
|
||||
return (
|
||||
|
|
@ -243,7 +246,7 @@ class NotificationSettingsMentionsAndroid extends NotificationSettingsMentionsBa
|
|||
|
||||
saveReplyNotification = () => {
|
||||
this.setState({showReplyModal: false});
|
||||
this.setReplyNotifications(this.replyValue);
|
||||
this.setReplyNotifications(this.state.newReplyValue);
|
||||
};
|
||||
|
||||
showKeywordsModal = () => {
|
||||
|
|
|
|||
|
|
@ -23,30 +23,37 @@ import NotificationSettingsMobileBase from './notification_settings_mobile_base'
|
|||
|
||||
class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
||||
cancelMobilePushModal = () => {
|
||||
this.setState({showMobilePushModal: false});
|
||||
this.push = this.state.push;
|
||||
this.setState({
|
||||
newPush: this.state.push,
|
||||
showMobilePushModal: false,
|
||||
});
|
||||
};
|
||||
|
||||
cancelMobilePushStatusModal = () => {
|
||||
this.setState({showMobilePushStatusModal: false});
|
||||
this.pushStatus = this.state.push_status;
|
||||
this.setState({
|
||||
newPushStatus: this.state.push_status,
|
||||
showMobilePushStatusModal: false,
|
||||
});
|
||||
};
|
||||
|
||||
cancelMobileSoundsModal = () => {
|
||||
this.setState({showMobileSoundsModal: false});
|
||||
this.sound = this.state.selectedUri;
|
||||
this.setState({
|
||||
newSound: this.state.selectedUri,
|
||||
showMobileSoundsModal: false,
|
||||
});
|
||||
};
|
||||
|
||||
onMobilePushChanged = (value) => {
|
||||
this.push = value;
|
||||
this.setState({newPush: value});
|
||||
};
|
||||
|
||||
onMobilePushStatusChanged = (value) => {
|
||||
this.pushStatus = value;
|
||||
this.setState({newPushStatus: value});
|
||||
};
|
||||
|
||||
onMobileSoundChanged = (value) => {
|
||||
this.sound = value;
|
||||
this.setState({newSound: value});
|
||||
|
||||
if (value && value !== 'none') {
|
||||
NotificationPreferences.play(value);
|
||||
}
|
||||
|
|
@ -83,6 +90,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
renderMobilePushModal(style) {
|
||||
const {config, intl} = this.props;
|
||||
const pushNotificationsEnabled = config.SendPushNotifications === 'true';
|
||||
const {newPush} = this.state;
|
||||
|
||||
const options = [{
|
||||
label: intl.formatMessage({
|
||||
|
|
@ -90,21 +98,21 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
defaultMessage: 'For all activity',
|
||||
}),
|
||||
value: 'all',
|
||||
checked: this.state.push === 'all',
|
||||
checked: newPush === 'all',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'user.settings.notifications.onlyMentions',
|
||||
defaultMessage: 'Only for mentions and direct messages',
|
||||
}),
|
||||
value: 'mention',
|
||||
checked: this.state.push === 'mention',
|
||||
checked: newPush === 'mention',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'user.settings.notifications.never',
|
||||
defaultMessage: 'Never',
|
||||
}),
|
||||
value: 'none',
|
||||
checked: this.state.push === 'none',
|
||||
checked: newPush === 'none',
|
||||
}];
|
||||
|
||||
return (
|
||||
|
|
@ -177,6 +185,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
|
||||
renderMobilePushStatusModal(style) {
|
||||
const {intl} = this.props;
|
||||
const {newPushStatus} = this.state;
|
||||
|
||||
const options = [{
|
||||
label: intl.formatMessage({
|
||||
|
|
@ -184,21 +193,21 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
defaultMessage: 'Online, away or offline',
|
||||
}),
|
||||
value: 'online',
|
||||
checked: this.state.push_status === 'online',
|
||||
checked: newPushStatus === 'online',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'user.settings.push_notification.away',
|
||||
defaultMessage: 'Away or offline',
|
||||
}),
|
||||
value: 'away',
|
||||
checked: this.state.push_status === 'away',
|
||||
checked: newPushStatus === 'away',
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'user.settings.push_notification.offline',
|
||||
defaultMessage: 'Offline',
|
||||
}),
|
||||
value: 'offline',
|
||||
checked: this.state.push_status === 'offline',
|
||||
checked: newPushStatus === 'offline',
|
||||
}];
|
||||
|
||||
return (
|
||||
|
|
@ -257,7 +266,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
}
|
||||
|
||||
renderMobileSoundsModal(style) {
|
||||
const {defaultSound, selectedUri} = this.state;
|
||||
const {defaultSound, newSound} = this.state;
|
||||
const {intl, notificationPreferences} = this.props;
|
||||
const {defaultUri, sounds} = notificationPreferences;
|
||||
const soundsArray = [{
|
||||
|
|
@ -266,14 +275,14 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
defaultMessage: 'Default ({sound})',
|
||||
}, {sound: defaultSound}),
|
||||
value: defaultUri,
|
||||
checked: selectedUri === null,
|
||||
checked: newSound === null,
|
||||
}, {
|
||||
label: intl.formatMessage({
|
||||
id: 'mobile.notification_settings_mobile.no_sound',
|
||||
defaultMessage: 'None',
|
||||
}),
|
||||
value: 'none',
|
||||
checked: selectedUri === 'none',
|
||||
checked: newSound === 'none',
|
||||
}];
|
||||
|
||||
if (sounds && sounds.length) {
|
||||
|
|
@ -281,7 +290,7 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
return {
|
||||
label: s.name,
|
||||
value: s.uri,
|
||||
checked: s.uri === selectedUri,
|
||||
checked: s.uri === newSound,
|
||||
};
|
||||
});
|
||||
soundsArray.push(...filteredSounds);
|
||||
|
|
@ -559,31 +568,31 @@ class NotificationSettingsMobileAndroid extends NotificationSettingsMobileBase {
|
|||
|
||||
saveMobilePushModal = () => {
|
||||
this.setState({showMobilePushModal: false});
|
||||
this.setMobilePush(this.push);
|
||||
this.setMobilePush(this.state.newPush);
|
||||
};
|
||||
|
||||
saveMobilePushStatusModal = () => {
|
||||
this.setState({showMobilePushStatusModal: false});
|
||||
this.setMobilePushStatus(this.pushStatus);
|
||||
this.setMobilePushStatus(this.state.newPushStatus);
|
||||
};
|
||||
|
||||
saveMobileSoundsModal = () => {
|
||||
const {defaultSound} = this.state;
|
||||
const {defaultSound, newSound} = this.state;
|
||||
const {intl, notificationPreferences} = this.props;
|
||||
const {defaultUri, sounds} = notificationPreferences;
|
||||
|
||||
let sound;
|
||||
let selectedUri = null;
|
||||
if (this.sound === defaultUri) {
|
||||
if (newSound === defaultUri) {
|
||||
sound = defaultSound;
|
||||
} else if (this.sound === 'none') {
|
||||
selectedUri = this.sound;
|
||||
} else if (newSound === 'none') {
|
||||
selectedUri = 'none';
|
||||
sound = intl.formatMessage({
|
||||
id: 'mobile.notification_settings_mobile.no_sound',
|
||||
defaultMessage: 'None',
|
||||
});
|
||||
} else {
|
||||
selectedUri = this.sound;
|
||||
selectedUri = newSound;
|
||||
const selected = sounds.find((s) => s.uri === selectedUri);
|
||||
sound = selected ? selected.name : 'none';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,16 +25,18 @@ export default class NotificationSettingsMobileBase extends PureComponent {
|
|||
|
||||
const {currentUser} = props;
|
||||
const notifyProps = getNotificationProps(currentUser);
|
||||
const notifyPreferences = this.getNotificationPreferences(props);
|
||||
|
||||
this.state = {
|
||||
...notifyProps,
|
||||
...this.getNotificationPreferences(props),
|
||||
...notifyPreferences,
|
||||
newPush: notifyProps.push,
|
||||
newPushStatus: notifyProps.push_status,
|
||||
newSound: notifyPreferences.sound,
|
||||
showMobilePushModal: false,
|
||||
showMobilePushStatusModal: false,
|
||||
showMobileSoundsModal: false,
|
||||
};
|
||||
this.push = this.state.push;
|
||||
this.pushStatus = this.state.push_status;
|
||||
props.navigator.setOnNavigatorEvent(this.onNavigatorEvent);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Neues Bild wählen",
|
||||
"admin.team.dirDesc": "Wenn wahr, werden Teams, welche im Team-Verzeichnis angezeigt werden sollen, auf der Hauptseite dargestellt anstatt ein neues Team zu erstellen.",
|
||||
"admin.team.dirTitle": "Team Verzeichnis aktivieren: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Aktiviere E-Mail-Benachrichtigungen: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "Wenn wahr, müssen Benutzer bestätigen, wenn sie @channel und @all in Kanälen mit mehr als fünf Mitgliedern verwenden. Wenn falsch, ist keine Bestätigung erforderlich.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Zeige den @channel- und @all-Bestätigungsdialog: ",
|
||||
"admin.team.maxChannelsDescription": "Maximale Anzahl an Kanälen pro Team, inklusive aktiven und archivierten Kanälen.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Verwerfen",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Ankündigung",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Als gelesen markieren",
|
||||
"mobile.channel_drawer.search": "Springe zu...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Sind Sie sicher, dass Sie den {term} {name} archivieren möchten?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Choose New Image",
|
||||
"admin.team.dirDesc": "When true, teams that are configured to show in team directory will show on main page inplace of creating a new team.",
|
||||
"admin.team.dirTitle": "Enable Team Directory: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Enable Email Invitations: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Show @channel and @all confirmation dialog: ",
|
||||
"admin.team.maxChannelsDescription": "Maximum total number of channels per team, including both active and archived channels.",
|
||||
|
|
@ -2309,8 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Dismiss",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Mark As Read",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Are you sure you want to archive the {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Selecciona una Imagen Nueva",
|
||||
"admin.team.dirDesc": "Cuando es verdadero, Los equipos que esten configurados para mostrarse en el directorio de equipos se mostrarán en vez de crear un nuevo equipo.",
|
||||
"admin.team.dirTitle": "Habilitar Directorio de Equipos: ",
|
||||
"admin.team.emailInvitationsDescription": "Cuando es verdadero un usuario puede invitar a otros utilizando el correo electrónico del sistema.",
|
||||
"admin.team.emailInvitationsTitle": "Habilitar Invitaciones por Correo Electrónico: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "Cuando es verdadero, los usuarios deberán confirmar que quieren enviar el mensaje cuando mencionan a @channel y/o @all en los canales con más de cinco miembros. Si es falso, no se requiere confirmación.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Mostrar dialogo de confirmación para @channel y @all: ",
|
||||
"admin.team.maxChannelsDescription": "Máximo número total de canales por equipo, incluyendo canales activos y archivados.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Descartar",
|
||||
"mobile.announcement_banner.ok": "Aceptar",
|
||||
"mobile.announcement_banner.title": "Anuncio",
|
||||
"mobile.authentication_error.message": "Mattermost a encontrado un error. Por favor vuelve a autenticar tu usuario para iniciar una nueva sesión.",
|
||||
"mobile.authentication_error.title": "Error de Autenticación",
|
||||
"mobile.channel.markAsRead": "Marcar como leído",
|
||||
"mobile.channel_drawer.search": "Saltar a...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "¿Seguro quieres archivar el {term} {name}?",
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Scegli Nuova Immmagine",
|
||||
"admin.team.dirDesc": "Se vero, i gruppi che sono configurati per essere visualizzati nella cartella gruppi saranno visualizzati nella pagina principale al posto della voce \"crea nuovo gruppo\".",
|
||||
"admin.team.dirTitle": "Abilita Cartella Gruppi: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Abilita notifiche email: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "Se vero, gli utenti dovranno dare una conferma quando pubblicano @channel e @all nel canali con più di cinque membri. Se falso, non è richiesta nessuna conferma.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Visualizza il messaggio di conferma per @channel e @all: ",
|
||||
"admin.team.maxChannelsDescription": "Numero massimo di canali totali per gruppo, inclusi i canali attivi e archiviati.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Chiudi",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Annuncio",
|
||||
"mobile.authentication_error.message": "Mattermost ha incontrato un errore. Autenticarsi nuovamente per avviare una nuova sessione.",
|
||||
"mobile.authentication_error.title": "Errore di autenticazione",
|
||||
"mobile.channel.markAsRead": "Segna Come Letto",
|
||||
"mobile.channel_drawer.search": "Vai a...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Sei sicuro di voler archiviare {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "新しい画像を選択する",
|
||||
"admin.team.dirDesc": "有効な場合、チーム一覧に表示されるチームが、新しいチーム作成の代わりに、メインページに表示されます。",
|
||||
"admin.team.dirTitle": "チーム一覧を有効にする: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "通知電子メールを有効にする: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "有効な場合、5人以上のメンバーがいるチャンネル内で@channelや@allなどの投稿を行う際、確認画面が表示されるようになります。無効な場合、確認は要求されません。",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "@channnelと@all確認ダイアログを表示する: ",
|
||||
"admin.team.maxChannelsDescription": "チーム毎のチャンネル数の最大値です。アクティブなチャンネルとアーカイブ済みのチャンネルの両方がカウントされます。",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "破棄",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "アナウンス",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "既読にする",
|
||||
"mobile.channel_drawer.search": "移動する...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name} を本当にアーカイブしますか?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "이미지 선택",
|
||||
"admin.team.dirDesc": "When true, teams that are configured to show in team directory will show on main page inplace of creating a new team.",
|
||||
"admin.team.dirTitle": "Enable Team Directory: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "메일 알림: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Show @channel and @all confirmation dialog: ",
|
||||
"admin.team.maxChannelsDescription": "Maximum total number of users per team, including both active and inactive users.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Dismiss",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "읽음으로 표시",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name}을 (를) 종료 하시겠습니까?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Kies een nieuwe afbeelding",
|
||||
"admin.team.dirDesc": "Wanneer dit aanstaat, teams die geconfigureerd zijn om zichtbaar te zijn in de team directory zullen zichtbaar zijn op de hoofdpagina in plaats van het maken van een nieuw team.",
|
||||
"admin.team.dirTitle": "Inschakelen Team Directory: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Inschakelen van E-mail Meldingen: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Show @channel and @all confirmation dialog: ",
|
||||
"admin.team.maxChannelsDescription": "Maximum aantal gebruikers per team, inclusief actieve en niet-actieve gebruikers.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Dismiss",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Mark As Read",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Weet u zeker dat u deze {term} wilt verwijderen?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Wybierz nowy obraz",
|
||||
"admin.team.dirDesc": "Jeśli włączony, zespoły skonfigurowane do pojawiania się w katalogu zespołów zostaną wyświetlone na stronie głównej w miejscu tworzenia nowego zespołu.",
|
||||
"admin.team.dirTitle": "Włącz Katalog Zespołu:",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Włącz powiadomienia mailowe:",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Show @channel and @all confirmation dialog: ",
|
||||
"admin.team.maxChannelsDescription": "Maksymalna liczba kanałów dla zespołu, włącznie z aktywnymi jak i usuniętymi kanałami.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Dismiss",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Mark As Read",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Escolha Nova Imagem",
|
||||
"admin.team.dirDesc": "Quando verdadeiro, as equipes que estão configuradas para mostrar o diretório de equipe irá mostrar na página principal, em lugar de criar uma nova equipe.",
|
||||
"admin.team.dirTitle": "Ativar Diretório de Equipe: ",
|
||||
"admin.team.emailInvitationsDescription": "Quando verdadeiro, usuários podem convidar outros para o sistema usando email.",
|
||||
"admin.team.emailInvitationsTitle": "Habilitar Convites por E-mail: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "Quando verdadeiro, os usuários serão alertados para confirmar o envio do post para @channel e @all em todos os canais com mais de 5 membros. Quando falso, nenhuma confirmação será necessária.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Mostrar para @channel e @all a janela de confirmação: ",
|
||||
"admin.team.maxChannelsDescription": "Número máximo total de canais por equipe, incluindo ambos canais ativos e arquivados.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Ignorar",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Anúncio",
|
||||
"mobile.authentication_error.message": "Mattermost encontrou um erro. Por favor autentique novamente para iniciar uma nova sessão.",
|
||||
"mobile.authentication_error.title": "Error de Autenticação",
|
||||
"mobile.channel.markAsRead": "Marcar Como Lido",
|
||||
"mobile.channel_drawer.search": "Pular para...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Você tem certeza que quer arquivar o {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Выберите новое изображение",
|
||||
"admin.team.dirDesc": "When true, teams that are configured to show in team directory will show on main page inplace of creating a new team.",
|
||||
"admin.team.dirTitle": "Включить Team Directory: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "Включить уведомления по электронной почте: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "When true, users will be prompted to confirm when posting @channel and @all in channels with over five members. When false, no confirmation is required.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "Show @channel and @all confirmation dialog: ",
|
||||
"admin.team.maxChannelsDescription": "Максимальное количество каналов на команду, включая активные и удалённые.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Dismiss",
|
||||
"mobile.announcement_banner.ok": "OK",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Mark As Read",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Вы действительно хотите покинуть {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "Yeni Bir Görsel Seçin",
|
||||
"admin.team.dirDesc": "Bu seçenek etkinleştirildiğinde, takımlar ana sayfadaki yeni takım ekleme konumunda takım dizini içinde görüntülenir.",
|
||||
"admin.team.dirTitle": "Takım Dizini Kullanılsın: ",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "E-posta Bildirimleri Kullanılsın: ",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "Bu seçenek etkinleştirildiğinde, 5 taneden fazla kullanıcı bulunan kanallarda @channel ya da @all şeklinde ileti gönderirken kullanıcıdan onay istenir. Devre dışı bırakıldığında onay istenmez.",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "@channel ve @all onayı görüntülensin: ",
|
||||
"admin.team.maxChannelsDescription": "Etkin ve silinmiş kanallar dahil, bir takımdaki en fazla kanal sayısı.",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "Yok Say",
|
||||
"mobile.announcement_banner.ok": "Tamam",
|
||||
"mobile.announcement_banner.title": "Duyuru",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "Okunmuş Olarak İşaretle",
|
||||
"mobile.channel_drawer.search": "Şuraya geç...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name} kanalını arşivlemek istediğinize emin misiniz?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "选择新图像:",
|
||||
"admin.team.dirDesc": "当设置为是时,设置为显示在团队目录里的团队会在主页显示并替代创建新的团队的位置。",
|
||||
"admin.team.dirTitle": "启用团队目录:",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "启用发送邮件通知:",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "当设为是时,用户在超过五个成员的频道使用 @channel 和 @all 时提示确认。当设为否时,不需要确认。",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "显示 @channel 和 @all 确认对话框:",
|
||||
"admin.team.maxChannelsDescription": "每个团队最多频道数,包括活动的和已归档的频道。",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "解除",
|
||||
"mobile.announcement_banner.ok": "确定",
|
||||
"mobile.announcement_banner.title": "公告",
|
||||
"mobile.authentication_error.message": "Mattermost 遇到了错误。请重新认证开始新的会话。",
|
||||
"mobile.authentication_error.title": "认证错误",
|
||||
"mobile.channel.markAsRead": "标为已读",
|
||||
"mobile.channel_drawer.search": "转条到...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "您确定要归档 {term} {name}?",
|
||||
|
|
|
|||
|
|
@ -1284,6 +1284,8 @@
|
|||
"admin.team.chooseImage": "選擇新圖",
|
||||
"admin.team.dirDesc": "啟用時,設定為顯示在團隊列表的團隊將會顯示在主頁並取代原本建立團隊的位置。",
|
||||
"admin.team.dirTitle": "啟用團隊列表:",
|
||||
"admin.team.emailInvitationsDescription": "When true users can invite others to the system using email.",
|
||||
"admin.team.emailInvitationsTitle": "啟用電子郵件通知:",
|
||||
"admin.team.enableConfirmNotificationsToChannelDescription": "啟用時,當使用者在超過五人的頻道發布 @channel 跟 @all 訊息時,將會再次確認。停用時不需要確認。",
|
||||
"admin.team.enableConfirmNotificationsToChannelTitle": "顯示 @channel 跟 @all 確認對話欄:",
|
||||
"admin.team.maxChannelsDescription": "每個團隊最大頻道數,包含啟用跟被封存的頻道。",
|
||||
|
|
@ -2309,6 +2311,8 @@
|
|||
"mobile.announcement_banner.dismiss": "移除",
|
||||
"mobile.announcement_banner.ok": "確定",
|
||||
"mobile.announcement_banner.title": "公佈事項",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.channel.markAsRead": "標記為已讀",
|
||||
"mobile.channel_drawer.search": "跳至...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "確定要封存{term} {name} 嘛?",
|
||||
|
|
|
|||
|
|
@ -2531,7 +2531,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 125;
|
||||
CURRENT_PROJECT_VERSION = 126;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
|
@ -2581,7 +2581,7 @@
|
|||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 125;
|
||||
CURRENT_PROJECT_VERSION = 126;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@
|
|||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>125</string>
|
||||
<string>126</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.10.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>125</string>
|
||||
<string>126</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@
|
|||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>125</string>
|
||||
<string>126</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
Loading…
Reference in a new issue