diff --git a/android/app/build.gradle b/android/app/build.gradle
index 2364f67d7..e41b27d79 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -123,7 +123,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
missingDimensionStrategy "RNN.reactNativeVersion", "reactNative57_5"
- versionCode 235
+ versionCode 236
versionName "1.24.0"
multiDexEnabled = true
ndk {
diff --git a/app/components/__snapshots__/fade.test.js.snap b/app/components/__snapshots__/fade.test.js.snap
index d576df934..41ef885f1 100644
--- a/app/components/__snapshots__/fade.test.js.snap
+++ b/app/components/__snapshots__/fade.test.js.snap
@@ -2,6 +2,7 @@
exports[`Fade should render {opacity: 0} 1`] = `
diff --git a/app/components/autocomplete/channel_mention_item/channel_mention_item.js b/app/components/autocomplete/channel_mention_item/channel_mention_item.js
index 226af6fe9..599249a43 100644
--- a/app/components/autocomplete/channel_mention_item/channel_mention_item.js
+++ b/app/components/autocomplete/channel_mention_item/channel_mention_item.js
@@ -8,6 +8,7 @@ import {
} from 'react-native';
import {General} from 'mattermost-redux/constants';
+import AutocompleteDivider from 'app/components/autocomplete/autocomplete_divider';
import {BotTag, GuestTag} from 'app/components/tag';
import {paddingHorizontal as padding} from 'app/components/safe_area_view/iphone_x_spacing';
import TouchableWithFeedback from 'app/components/touchable_with_feedback';
@@ -49,11 +50,13 @@ export default class ChannelMentionItem extends PureComponent {
const style = getStyleFromTheme(theme);
+ let component;
if (type === General.DM_CHANNEL || type === General.GM_CHANNEL) {
if (!displayName) {
return null;
}
- return (
+
+ component = (
);
+ } else {
+ component = (
+
+ {displayName}
+ {` (~${name})`}
+
+ );
}
+
return (
-
- {displayName}
- {` (~${name})`}
-
+
+ {component}
+
+
);
}
}
diff --git a/app/components/autocomplete/channel_mention_item/index.js b/app/components/autocomplete/channel_mention_item/index.js
index 3bf635684..c70208684 100644
--- a/app/components/autocomplete/channel_mention_item/index.js
+++ b/app/components/autocomplete/channel_mention_item/index.js
@@ -4,28 +4,28 @@
import {connect} from 'react-redux';
import {General} from 'mattermost-redux/constants';
-
import {getChannel} from 'mattermost-redux/selectors/entities/channels';
-
import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
+import {getUser} from 'mattermost-redux/selectors/entities/users';
import {getChannelNameForSearchAutocomplete} from 'app/selectors/channel';
+import {isLandscape} from 'app/selectors/device';
+import {isGuest as isGuestUser} from 'app/utils/users';
import ChannelMentionItem from './channel_mention_item';
-import {getUser} from 'mattermost-redux/selectors/entities/users';
-
-import {isLandscape} from 'app/selectors/device';
-
function mapStateToProps(state, ownProps) {
const channel = getChannel(state, ownProps.channelId);
- const displayName = getChannelNameForSearchAutocomplete(state, ownProps.channelId);
+ let displayName = getChannelNameForSearchAutocomplete(state, ownProps.channelId);
let isBot = false;
+ let isGuest = false;
if (channel.type === General.DM_CHANNEL) {
const teammate = getUser(state, channel.teammate_id);
- if (teammate && teammate.is_bot) {
- isBot = true;
+ if (teammate) {
+ displayName = teammate.username;
+ isBot = teammate.is_bot || false;
+ isGuest = isGuestUser(teammate) || false;
}
}
@@ -34,6 +34,7 @@ function mapStateToProps(state, ownProps) {
name: channel.name,
type: channel.type,
isBot,
+ isGuest,
theme: getTheme(state),
isLandscape: isLandscape(state),
};
diff --git a/app/components/fade.js b/app/components/fade.js
index bb7ac30ed..9819ec841 100644
--- a/app/components/fade.js
+++ b/app/components/fade.js
@@ -47,6 +47,7 @@ export default class Fade extends PureComponent {
opacity: fadeAnim,
transform: disableScale ? [] : [{scale: fadeAnim}],
}}
+ pointerEvents={'box-none'}
>
{this.props.children}
diff --git a/app/components/sidebars/main/channels_list/channel_item/__snapshots__/channel_item.test.js.snap b/app/components/sidebars/main/channels_list/channel_item/__snapshots__/channel_item.test.js.snap
index 2fc47d998..93f9b9c3e 100644
--- a/app/components/sidebars/main/channels_list/channel_item/__snapshots__/channel_item.test.js.snap
+++ b/app/components/sidebars/main/channels_list/channel_item/__snapshots__/channel_item.test.js.snap
@@ -82,7 +82,7 @@ exports[`ChannelItem should match snapshot 1`] = `
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -197,7 +197,7 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -311,7 +311,7 @@ exports[`ChannelItem should match snapshot for current user i.e currentUser (you
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -425,7 +425,7 @@ exports[`ChannelItem should match snapshot for deactivated user and is currentCh
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -528,7 +528,7 @@ exports[`ChannelItem should match snapshot for deactivated user and is searchRes
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -632,7 +632,7 @@ exports[`ChannelItem should match snapshot for deactivated user and not searchRe
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -740,7 +740,7 @@ exports[`ChannelItem should match snapshot with draft 1`] = `
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
@@ -846,7 +846,7 @@ exports[`ChannelItem should match snapshot with mentions and muted 1`] = `
Array [
Object {
"alignSelf": "center",
- "color": "rgba(255,255,255,0.88)",
+ "color": "rgba(255,255,255,0.6)",
"flex": 1,
"fontFamily": "Open Sans",
"fontSize": 16,
diff --git a/app/components/sidebars/main/channels_list/channel_item/channel_item.js b/app/components/sidebars/main/channels_list/channel_item/channel_item.js
index 5a6ea5e63..1022d8b7f 100644
--- a/app/components/sidebars/main/channels_list/channel_item/channel_item.js
+++ b/app/components/sidebars/main/channels_list/channel_item/channel_item.js
@@ -241,7 +241,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
paddingLeft: 11,
},
text: {
- color: changeOpacity(theme.sidebarText, 0.88),
+ color: changeOpacity(theme.sidebarText, 0.6),
fontSize: 16,
lineHeight: 24,
paddingRight: 10,
diff --git a/app/components/sidebars/main/channels_list/channel_item/index.js b/app/components/sidebars/main/channels_list/channel_item/index.js
index f79b7dedf..60c4141c2 100644
--- a/app/components/sidebars/main/channels_list/channel_item/index.js
+++ b/app/components/sidebars/main/channels_list/channel_item/index.js
@@ -35,18 +35,16 @@ function makeMapStateToProps() {
let isArchived = channel.delete_at > 0;
if (channel.type === General.DM_CHANNEL) {
- if (ownProps.isSearchResult) {
- isBot = Boolean(channel.isBot);
- } else {
- const teammateId = getUserIdFromChannelName(currentUserId, channel.name);
- const teammate = getUser(state, teammateId);
+ const teammateId = getUserIdFromChannelName(currentUserId, channel.name);
+ const teammate = getUser(state, teammateId);
+
+ isBot = Boolean(ownProps.isSearchResult ? channel.isBot : teammate?.is_bot); //eslint-disable-line camelcase
+
+ if (teammate) {
const teammateNameDisplay = getTeammateNameDisplaySetting(state);
displayName = displayUsername(teammate, teammateNameDisplay, false);
- if (teammate) {
- isArchived = teammate.delete_at > 0;
- isBot = teammate.is_bot || false;
- }
- isGuest = isGuestUser(teammate);
+ isArchived = teammate.delete_at > 0;
+ isGuest = isGuestUser(teammate) || false;
}
}
diff --git a/app/components/sidebars/main/channels_list/list/list.js b/app/components/sidebars/main/channels_list/list/list.js
index da9af34b6..39b8238c3 100644
--- a/app/components/sidebars/main/channels_list/list/list.js
+++ b/app/components/sidebars/main/channels_list/list/list.js
@@ -417,10 +417,10 @@ export default class List extends PureComponent {
/>
{UnreadIndicator &&
}
diff --git a/app/components/sidebars/main/channels_list/unread_indicator/index.js b/app/components/sidebars/main/channels_list/unread_indicator/index.js
index ce095e486..bcbb436da 100644
--- a/app/components/sidebars/main/channels_list/unread_indicator/index.js
+++ b/app/components/sidebars/main/channels_list/unread_indicator/index.js
@@ -16,7 +16,7 @@ import {makeStyleSheetFromTheme} from 'app/utils/theme';
export default class UnreadIndicator extends PureComponent {
static propTypes = {
- show: PropTypes.bool,
+ visible: PropTypes.bool,
style: ViewPropTypes.style,
onPress: PropTypes.func,
theme: PropTypes.object.isRequired,
@@ -27,31 +27,52 @@ export default class UnreadIndicator extends PureComponent {
onPress: () => true,
};
- render() {
- const {onPress, show, theme} = this.props;
+ renderContent = () => {
+ const {onPress, visible, theme} = this.props;
const style = getStyleSheet(theme);
+
+ const content = (
+
+
+
+
+ );
+
+ if (visible) {
+ return (
+
+ {content}
+
+ );
+ }
+
+ return content;
+ };
+
+ render() {
+ const {visible, theme} = this.props;
+ const style = getStyleSheet(theme);
+
return (
-
-
-
-
-
-
+ {this.renderContent()}
);
}
diff --git a/app/init/fetch.js b/app/init/fetch.js
index 57cd167a4..1d1c1c40a 100644
--- a/app/init/fetch.js
+++ b/app/init/fetch.js
@@ -147,7 +147,8 @@ const initFetchConfig = async () => {
// no managed config
}
- Client4.setUserAgent(DeviceInfo.getUserAgent());
+ const userAgent = await DeviceInfo.getUserAgent();
+ Client4.setUserAgent(userAgent);
if (Platform.OS === 'ios') {
const certificate = await mattermostBucket.getPreference('cert');
diff --git a/app/screens/interactive_dialog/interactive_dialog.js b/app/screens/interactive_dialog/interactive_dialog.js
index 03f70ea44..079b3a6dd 100644
--- a/app/screens/interactive_dialog/interactive_dialog.js
+++ b/app/screens/interactive_dialog/interactive_dialog.js
@@ -8,6 +8,7 @@ import {Navigation} from 'react-native-navigation';
import {checkDialogElementForError, checkIfErrorsMatchElements} from 'mattermost-redux/utils/integration_utils';
+import ErrorText from 'app/components/error_text';
import StatusBar from 'app/components/status_bar';
import FormattedText from 'app/components/formatted_text';
@@ -48,10 +49,13 @@ export default class InteractiveDialog extends PureComponent {
this.state = {
values,
+ error: null,
errors: {},
isLandscape: this.isLandscape(),
submitting: false,
};
+
+ this.scrollView = React.createRef();
}
componentDidMount() {
@@ -123,17 +127,29 @@ export default class InteractiveDialog extends PureComponent {
this.submitted = true;
- if (!data || !data.errors || Object.keys(data.errors).length === 0) {
+ let hasErrors = false;
+
+ if (data) {
+ if (data.errors &&
+ Object.keys(data.errors).length >= 0 &&
+ checkIfErrorsMatchElements(data.errors, elements)
+ ) {
+ hasErrors = true;
+ this.setState({errors: data.errors});
+ }
+
+ if (data.error) {
+ hasErrors = true;
+ this.setState({error: data.error});
+ if (this.scrollView?.current) {
+ this.scrollView.current.scrollTo({x: 0, y: 0});
+ }
+ }
+ }
+
+ if (!hasErrors) {
this.handleHide();
- return;
}
-
- if (checkIfErrorsMatchElements(data.errors, elements)) {
- this.setState({errors: data.errors});
- return;
- }
-
- this.handleHide();
}
notifyOnCancelIfNeeded = () => {
@@ -168,13 +184,22 @@ export default class InteractiveDialog extends PureComponent {
render() {
const {introductionText, elements, theme} = this.props;
- const {errors, isLandscape, values} = this.state;
+ const {error, errors, isLandscape, values} = this.state;
const style = getStyleFromTheme(theme);
return (
-
+
+ {error && (
+
+ )}
{Boolean(introductionText) &&
{
container: {
backgroundColor: changeOpacity(theme.centerChannelColor, 0.03),
},
+ errorContainer: {
+ marginTop: 15,
+ marginLeft: 15,
+ fontSize: 14,
+ fontWeight: 'bold',
+ },
scrollView: {
marginBottom: 20,
marginTop: 10,
diff --git a/app/screens/interactive_dialog/interactive_dialog.test.js b/app/screens/interactive_dialog/interactive_dialog.test.js
index dafcd2ec3..62ecb0273 100644
--- a/app/screens/interactive_dialog/interactive_dialog.test.js
+++ b/app/screens/interactive_dialog/interactive_dialog.test.js
@@ -7,6 +7,8 @@ import Preferences from 'mattermost-redux/constants/preferences';
import InteractiveDialog from './interactive_dialog';
+import ErrorText from 'app/components/error_text';
+
describe('InteractiveDialog', () => {
const baseProps = {
url: 'http://mattermost.com',
@@ -18,7 +20,8 @@ describe('InteractiveDialog', () => {
state: 'somestate',
theme: Preferences.THEMES.default,
actions: {
- submitInteractiveDialog: jest.fn(),
+ submitInteractiveDialog: jest.fn(() => ({})),
+ dismissModal: jest.fn(),
},
componentId: 'component-id',
};
@@ -140,4 +143,38 @@ describe('InteractiveDialog', () => {
expect(baseProps.actions.submitInteractiveDialog).toHaveBeenCalledTimes(1);
expect(baseProps.actions.submitInteractiveDialog).toHaveBeenCalledWith(dialog);
});
+
+ describe('generic error message', () => {
+ test('should show error when submit returns an error', async () => {
+ const props = {
+ ...baseProps,
+ actions: {
+ ...baseProps.actions,
+ submitInteractiveDialog: async () => ({
+ data: {error: 'This is an error message.'},
+ }),
+ },
+ };
+
+ const wrapper = shallow(
+
+ );
+ wrapper.instance().scrollView = {current: {scrollTo: jest.fn()}};
+
+ await wrapper.instance().handleSubmit();
+ expect(wrapper.find(ErrorText).find({error: 'This is an error message.'})).toHaveLength(1);
+ expect(wrapper.instance().scrollView.current.scrollTo).toHaveBeenCalledWith({x: 0, y: 0});
+ });
+
+ test('should show no error when submit does not return an error', async () => {
+ const wrapper = shallow(
+
+ );
+ wrapper.instance().scrollView = {current: {scrollTo: jest.fn()}};
+
+ await wrapper.instance().handleSubmit();
+ expect(wrapper.find(ErrorText)).not.toExist();
+ expect(wrapper.instance().scrollView.current.scrollTo).not.toHaveBeenCalled();
+ });
+ });
});
diff --git a/ios/Mattermost.xcodeproj/project.pbxproj b/ios/Mattermost.xcodeproj/project.pbxproj
index d93df45aa..eddc1fc0f 100644
--- a/ios/Mattermost.xcodeproj/project.pbxproj
+++ b/ios/Mattermost.xcodeproj/project.pbxproj
@@ -5,6 +5,7 @@
};
objectVersion = 46;
objects = {
+
/* Begin PBXBuildFile section */
00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
@@ -23,6 +24,7 @@
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
+ 1A892F126F594A27B6AA095E /* Mattermost-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = E2D17ED040D0465DBF9112D3 /* Mattermost-Regular.otf */; };
1BCA51319AC6442991C6A208 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0A091BF1A3D04650AD306A0D /* Zocial.ttf */; };
2B4C9B708010475DA575B81D /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1F071EE85494E269A50AE88 /* SimpleLineIcons.ttf */; };
2D5296A8926B4D7FBAF2D6E2 /* OpenSans-Light.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6561AEAC21CC40B8A72ABB93 /* OpenSans-Light.ttf */; };
@@ -41,7 +43,6 @@
552835DCC0C24FC691EE6CAB /* Roboto-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8F0B22D2C9924FAFA7FB681C /* Roboto-LightItalic.ttf */; };
55C6561DDBBA45929D88B6D1 /* OpenSans-BoldItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 32AC3D4EA79E44738A6E9766 /* OpenSans-BoldItalic.ttf */; };
5A0920184BD344979BCFCD5C /* libRCTVideo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B89192186C764B9FA473403A /* libRCTVideo.a */; };
- 5CB86E9DFB94485CAA748DF3 /* YTPlayerView-iframe-player.html in Resources */ = {isa = PBXBuildFile; fileRef = 79CB6EBA24FE4ABFB0C155F0 /* YTPlayerView-iframe-player.html */; };
5E1AF7B72B8D4A4E9E53FF9D /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 005346E5C0E542BFABAE1411 /* FontAwesome.ttf */; };
5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
62A8448264674B4D95A5A7C2 /* OpenSans-Semibold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C78A387124874496AD2C1466 /* OpenSans-Semibold.ttf */; };
@@ -125,7 +126,6 @@
F006936FC2884C24A1321FC0 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 356C9186FA374641A00EB2EA /* MaterialIcons.ttf */; };
F083DB472349411A8E6E7AAD /* OpenSans-LightItalic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BE17F630DB5D41FD93F32D22 /* OpenSans-LightItalic.ttf */; };
F23C99AA5FA10E457A76803A /* libPods-MattermostTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4246DC09024BB33A3E491E25 /* libPods-MattermostTests.a */; };
- 1A892F126F594A27B6AA095E /* Mattermost-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = E2D17ED040D0465DBF9112D3 /* Mattermost-Regular.otf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -807,7 +807,6 @@
7535D128F00C4A47A182627E /* libRNCookieManagerIOS.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNCookieManagerIOS.a; sourceTree = ""; };
77810F0A063349439B0D8B6B /* libJailMonkey.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libJailMonkey.a; sourceTree = ""; };
78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; };
- 79CB6EBA24FE4ABFB0C155F0 /* YTPlayerView-iframe-player.html */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "YTPlayerView-iframe-player.html"; path = "../node_modules/react-native-youtube/assets/YTPlayerView-iframe-player.html"; sourceTree = ""; };
7DCC3D826CE640AF8F491692 /* BVLinearGradient.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = BVLinearGradient.xcodeproj; path = "../node_modules/react-native-linear-gradient/BVLinearGradient.xcodeproj"; sourceTree = ""; };
7F11AA06228848D8001C9540 /* KeyboardTrackingView.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = KeyboardTrackingView.xcodeproj; path = "../node_modules/react-native-keyboard-tracking-view/lib/KeyboardTrackingView.xcodeproj"; sourceTree = ""; };
7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuntimeUtils.swift; path = Mattermost/RuntimeUtils.swift; sourceTree = ""; };
@@ -906,13 +905,13 @@
DC1D660B55BE462A9C3B8028 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; };
DE10E26B8E5644FB95A079FE /* AntDesign.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = AntDesign.ttf; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; };
DF9DAAAA482343F3910A1A4C /* RCTVideo.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTVideo.xcodeproj; path = "../node_modules/react-native-video/ios/RCTVideo.xcodeproj"; sourceTree = ""; };
+ E2D17ED040D0465DBF9112D3 /* Mattermost-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "Mattermost-Regular.otf"; path = "../assets/fonts/Mattermost-Regular.otf"; sourceTree = ""; };
EBA6063A99C141098D40C67A /* RNPasscodeStatus.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNPasscodeStatus.xcodeproj; path = "../node_modules/react-native-passcode-status/ios/RNPasscodeStatus.xcodeproj"; sourceTree = ""; };
EDC04CBCF81642219D199CBB /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; };
EE3EE4548D3F4A49B1274722 /* libRNLocalAuth.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNLocalAuth.a; sourceTree = ""; };
EE671DF7637347CD8C069819 /* libRNDeviceInfo.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNDeviceInfo.a; sourceTree = ""; };
F1F071EE85494E269A50AE88 /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; };
FBBEC29EE2D3418D9AC33BD5 /* OpenSans-ExtraBoldItalic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "OpenSans-ExtraBoldItalic.ttf"; path = "../assets/fonts/OpenSans-ExtraBoldItalic.ttf"; sourceTree = ""; };
- E2D17ED040D0465DBF9112D3 /* Mattermost-Regular.otf */ = {isa = PBXFileReference; name = "Mattermost-Regular.otf"; path = "../assets/fonts/Mattermost-Regular.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1078,7 +1077,6 @@
BC977883E2624E05975CA65B /* OpenSans-Regular.ttf */,
C78A387124874496AD2C1466 /* OpenSans-Semibold.ttf */,
0E617BF0F36D4E738F51D169 /* OpenSans-SemiboldItalic.ttf */,
- 79CB6EBA24FE4ABFB0C155F0 /* YTPlayerView-iframe-player.html */,
6EFF13DD24CE4E26953E598A /* Roboto-Black.ttf */,
7F54ABFAE6CE4A6DB11D1ED7 /* Roboto-BlackItalic.ttf */,
71E626D4980A4560B26F0E1C /* Roboto-Bold.ttf */,
@@ -1674,6 +1672,7 @@
37DA4BA41E6F55AD002B058E /* Embed Frameworks */,
AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */,
7FFE32A91FD9CB650038C7A0 /* Embed App Extensions */,
+ 27FBE48ACE3E38C56E5D745C /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -2560,7 +2559,6 @@
A08D512E7ADC40CCAD055A9E /* OpenSans-Regular.ttf in Resources */,
62A8448264674B4D95A5A7C2 /* OpenSans-Semibold.ttf in Resources */,
69AC753E496743BABB7A7124 /* OpenSans-SemiboldItalic.ttf in Resources */,
- 5CB86E9DFB94485CAA748DF3 /* YTPlayerView-iframe-player.html in Resources */,
DDE492F7425D451884DAA088 /* Roboto-Black.ttf in Resources */,
71F30A436B5847DF9D319D15 /* Roboto-BlackItalic.ttf in Resources */,
E052494CD6104A65840485E7 /* Roboto-Bold.ttf in Resources */,
@@ -2634,6 +2632,28 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
+ 27FBE48ACE3E38C56E5D745C /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${SRCROOT}/Pods/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh",
+ "${PODS_ROOT}/YoutubePlayer-in-WKWebView/WKYTPlayerView/WKYTPlayerView.bundle",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/WKYTPlayerView.bundle",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Mattermost/Pods-Mattermost-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
AE4769B235D14E6C9C64EA78 /* Upload Debug Symbols to Sentry */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -2836,7 +2856,7 @@
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 235;
+ CURRENT_PROJECT_VERSION = 236;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
ENABLE_BITCODE = NO;
@@ -2897,7 +2917,7 @@
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- CURRENT_PROJECT_VERSION = 235;
+ CURRENT_PROJECT_VERSION = 236;
DEAD_CODE_STRIPPING = NO;
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
ENABLE_BITCODE = NO;
diff --git a/ios/Mattermost/Info.plist b/ios/Mattermost/Info.plist
index f34300666..6f8e32fcb 100644
--- a/ios/Mattermost/Info.plist
+++ b/ios/Mattermost/Info.plist
@@ -34,7 +34,7 @@
CFBundleVersion
- 235
+ 236
ITSAppUsesNonExemptEncryption
LSRequiresIPhoneOS
diff --git a/ios/MattermostShare/Info.plist b/ios/MattermostShare/Info.plist
index 5ce937768..037b0b60e 100644
--- a/ios/MattermostShare/Info.plist
+++ b/ios/MattermostShare/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.24.0
CFBundleVersion
- 235
+ 236
NSAppTransportSecurity
NSAllowsArbitraryLoads
diff --git a/ios/MattermostTests/Info.plist b/ios/MattermostTests/Info.plist
index be0177058..5aba5d2c3 100644
--- a/ios/MattermostTests/Info.plist
+++ b/ios/MattermostTests/Info.plist
@@ -19,6 +19,6 @@
CFBundleSignature
????
CFBundleVersion
- 235
+ 236
diff --git a/ios/NotificationService/Info.plist b/ios/NotificationService/Info.plist
index 1adadb3c4..be47a6a67 100644
--- a/ios/NotificationService/Info.plist
+++ b/ios/NotificationService/Info.plist
@@ -19,7 +19,7 @@
CFBundleShortVersionString
1.24.0
CFBundleVersion
- 235
+ 236
NSExtension
NSExtensionPointIdentifier
diff --git a/ios/Podfile b/ios/Podfile
index 1e97b0909..3a701463e 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -7,6 +7,7 @@ target 'Mattermost' do
# Pods for Mattermost
pod 'XCDYouTubeKit', '2.7.1'
+ pod 'YoutubePlayer-in-WKWebView', '~> 0.3.1'
target 'MattermostTests' do
inherit! :search_paths
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index de555aa2b..dd0e6c594 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -1,16 +1,20 @@
PODS:
- XCDYouTubeKit (2.7.1)
+ - YoutubePlayer-in-WKWebView (0.3.3)
DEPENDENCIES:
- XCDYouTubeKit (= 2.7.1)
+ - YoutubePlayer-in-WKWebView (~> 0.3.1)
SPEC REPOS:
https://github.com/cocoapods/specs.git:
- XCDYouTubeKit
+ - YoutubePlayer-in-WKWebView
SPEC CHECKSUMS:
XCDYouTubeKit: c8567fd5cb388a3099fa26eee4b30df2a467847d
+ YoutubePlayer-in-WKWebView: 7694e858c5c3472ed067d6fe34eb9b944845e63c
-PODFILE CHECKSUM: 63cb0d0aef536c8cbf15bf664fcfe31852a13dd1
+PODFILE CHECKSUM: e565d3af8eabb0e489b73c79433e140e30f8fa9c
COCOAPODS: 1.5.3
diff --git a/package-lock.json b/package-lock.json
index ac0399f29..015aaed3a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14039,8 +14039,8 @@
"integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A=="
},
"mattermost-redux": {
- "version": "github:mattermost/mattermost-redux#b485e4a847f42be7ac7c8369ac1f7736069c45ca",
- "from": "github:mattermost/mattermost-redux#b485e4a847f42be7ac7c8369ac1f7736069c45ca",
+ "version": "github:mattermost/mattermost-redux#dc5f8c1f30cbc6a25d4304f2923f5b78e674099d",
+ "from": "github:mattermost/mattermost-redux#dc5f8c1f30cbc6a25d4304f2923f5b78e674099d",
"requires": {
"deep-equal": "1.0.1",
"eslint-plugin-header": "3.0.0",
@@ -16501,8 +16501,8 @@
}
},
"react-native-device-info": {
- "version": "github:mattermost/react-native-device-info#a434e5378a59825b4c33c9a31bf0d8dc98a45966",
- "from": "github:mattermost/react-native-device-info#a434e5378a59825b4c33c9a31bf0d8dc98a45966"
+ "version": "github:mattermost/react-native-device-info#58871122b6e1eb82c23674252430ad7e0a5afef3",
+ "from": "github:mattermost/react-native-device-info#58871122b6e1eb82c23674252430ad7e0a5afef3"
},
"react-native-doc-viewer": {
"version": "2.7.8",
@@ -16553,8 +16553,8 @@
}
},
"react-native-keyboard-tracking-view": {
- "version": "github:enahum/react-native-keyboard-tracking-view#66979a750e42fefe06366f0c924b29368bb586f2",
- "from": "github:enahum/react-native-keyboard-tracking-view#66979a750e42fefe06366f0c924b29368bb586f2"
+ "version": "github:enahum/react-native-keyboard-tracking-view#e23db601692c6b43de9a0bb399b4766df6701fca",
+ "from": "github:enahum/react-native-keyboard-tracking-view#e23db601692c6b43de9a0bb399b4766df6701fca"
},
"react-native-keychain": {
"version": "3.1.3",
@@ -16901,8 +16901,8 @@
}
},
"react-native-youtube": {
- "version": "github:mattermost/react-native-youtube#3f395b620ae4e05a3f1c6bdeef3a1158e78daadc",
- "from": "github:mattermost/react-native-youtube#3f395b620ae4e05a3f1c6bdeef3a1158e78daadc",
+ "version": "github:mattermost/react-native-youtube#22954c394146ec9a09ce5510056c17714a7155b2",
+ "from": "github:mattermost/react-native-youtube#22954c394146ec9a09ce5510056c17714a7155b2",
"requires": {
"prop-types": "^15.5.0"
}
diff --git a/package.json b/package.json
index c65c8039f..7ef0ff97c 100644
--- a/package.json
+++ b/package.json
@@ -21,7 +21,7 @@
"intl": "1.2.5",
"jail-monkey": "2.2.0",
"jsc-android": "241213.2.0",
- "mattermost-redux": "github:mattermost/mattermost-redux#b485e4a847f42be7ac7c8369ac1f7736069c45ca",
+ "mattermost-redux": "github:mattermost/mattermost-redux#dc5f8c1f30cbc6a25d4304f2923f5b78e674099d",
"mime-db": "1.40.0",
"moment-timezone": "0.5.25",
"prop-types": "15.7.2",
@@ -34,7 +34,7 @@
"react-native-calendars": "github:mattermost/react-native-calendars#4937ec5a3bf7e86f9f35fcd85eb4aa6133f45b58",
"react-native-circular-progress": "1.1.0",
"react-native-cookies": "github:joeferraro/react-native-cookies#f11374745deba9f18f7b8a9bb4b0b2573026f522",
- "react-native-device-info": "github:mattermost/react-native-device-info#a434e5378a59825b4c33c9a31bf0d8dc98a45966",
+ "react-native-device-info": "github:mattermost/react-native-device-info#58871122b6e1eb82c23674252430ad7e0a5afef3",
"react-native-doc-viewer": "2.7.8",
"react-native-document-picker": "2.3.0",
"react-native-exception-handler": "2.10.7",
@@ -43,7 +43,7 @@
"react-native-image-gallery": "github:mattermost/react-native-image-gallery#c1a9f7118e90cc87d47620bc0584c9cac4b0cf38",
"react-native-image-picker": "0.28.1",
"react-native-keyboard-aware-scroll-view": "0.8.0",
- "react-native-keyboard-tracking-view": "github:enahum/react-native-keyboard-tracking-view#66979a750e42fefe06366f0c924b29368bb586f2",
+ "react-native-keyboard-tracking-view": "github:enahum/react-native-keyboard-tracking-view#e23db601692c6b43de9a0bb399b4766df6701fca",
"react-native-keychain": "3.1.3",
"react-native-linear-gradient": "2.5.4",
"react-native-local-auth": "github:mattermost/react-native-local-auth#cc9ce2f468fbf7b431dfad3191a31aaa9227a6ab",
@@ -61,7 +61,7 @@
"react-native-vector-icons": "6.4.2",
"react-native-video": "4.4.1",
"react-native-webview": "github:mattermost/react-native-webview#b5e22940a613869d3999feac9451ee65352f4fbe",
- "react-native-youtube": "github:mattermost/react-native-youtube#3f395b620ae4e05a3f1c6bdeef3a1158e78daadc",
+ "react-native-youtube": "github:mattermost/react-native-youtube#22954c394146ec9a09ce5510056c17714a7155b2",
"react-navigation": "3.9.1",
"react-redux": "7.0.3",
"redux": "4.0.1",