forked from Ivasoft/mattermost-mobile
Compare commits
4 Commits
release-1.
...
release-1.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ba81fbf96 | ||
|
|
689ef9cb8b | ||
|
|
f13df74c44 | ||
|
|
812c20934d |
3
Makefile
3
Makefile
@@ -80,6 +80,9 @@ post-install:
|
||||
@cp ./native_modules/RNCWebViewManager.java node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java
|
||||
@cp ./native_modules/RNCWKWebView.m node_modules/react-native-webview/ios/RNCWKWebView.m
|
||||
|
||||
# Need to copy custom RNCookieManagerIOS.m that fixes a crash when cookies does not have expiration date set
|
||||
@cp ./native_modules/RNCookieManagerIOS.m node_modules/react-native-cookies/ios/RNCookieManagerIOS/RNCookieManagerIOS.m
|
||||
|
||||
@rm -f node_modules/intl/.babelrc
|
||||
@# Hack to get react-intl and its dependencies to work with react-native
|
||||
@# Based off of https://github.com/este/este/blob/master/gulp/native-fix.js
|
||||
|
||||
@@ -118,8 +118,8 @@ android {
|
||||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 186
|
||||
versionName "1.18.0"
|
||||
versionCode 187
|
||||
versionName "1.18.1"
|
||||
multiDexEnabled = true
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
|
||||
@@ -47,6 +47,7 @@ function mapStateToProps(state, ownProps) {
|
||||
channelId: ownProps.channelId || (currentChannel ? currentChannel.id : ''),
|
||||
channelTeamId: currentChannel ? currentChannel.team_id : '',
|
||||
canUploadFiles: canUploadFilesOnMobile(state),
|
||||
channelDisplayName: state.views.channel.displayName || (currentChannel ? currentChannel.display_name : ''),
|
||||
channelIsLoading: state.views.channel.loading,
|
||||
channelIsReadOnly: isCurrentChannelReadOnly(state) || false,
|
||||
channelIsArchived: ownProps.channelIsArchived || (currentChannel ? currentChannel.delete_at !== 0 : false),
|
||||
|
||||
@@ -46,6 +46,7 @@ export default class PostTextbox extends PureComponent {
|
||||
}).isRequired,
|
||||
canUploadFiles: PropTypes.bool.isRequired,
|
||||
channelId: PropTypes.string.isRequired,
|
||||
channelDisplayName: PropTypes.string,
|
||||
channelTeamId: PropTypes.string.isRequired,
|
||||
channelIsLoading: PropTypes.bool,
|
||||
channelIsReadOnly: PropTypes.bool.isRequired,
|
||||
@@ -518,6 +519,7 @@ export default class PostTextbox extends PureComponent {
|
||||
const {
|
||||
canUploadFiles,
|
||||
channelId,
|
||||
channelDisplayName,
|
||||
channelIsLoading,
|
||||
channelIsReadOnly,
|
||||
deactivatedChannel,
|
||||
@@ -559,7 +561,7 @@ export default class PostTextbox extends PureComponent {
|
||||
} else if (rootId) {
|
||||
placeholder = {id: t('create_comment.addComment'), defaultMessage: 'Add a comment...'};
|
||||
} else {
|
||||
placeholder = {id: t('create_post.write'), defaultMessage: 'Write a message...'};
|
||||
placeholder = {id: t('create_post.write'), defaultMessage: 'Write to {channelDisplayName}'};
|
||||
}
|
||||
|
||||
let attachmentButton = null;
|
||||
@@ -611,7 +613,7 @@ export default class PostTextbox extends PureComponent {
|
||||
value={textValue}
|
||||
onChangeText={this.handleTextChange}
|
||||
onSelectionChange={this.handlePostDraftSelectionChanged}
|
||||
placeholder={intl.formatMessage(placeholder)}
|
||||
placeholder={intl.formatMessage(placeholder, {channelDisplayName})}
|
||||
placeholderTextColor={changeOpacity('#000', 0.5)}
|
||||
multiline={true}
|
||||
numberOfLines={5}
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
"combined_system_message.you": "You",
|
||||
"create_comment.addComment": "Add a comment...",
|
||||
"create_post.deactivated": "You are viewing an archived channel with a deactivated user.",
|
||||
"create_post.write": "Write a message...",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"edit_post.editPost": "Edit the post...",
|
||||
"edit_post.save": "Save",
|
||||
"error.team_not_found.title": "Team Not Found",
|
||||
|
||||
@@ -2540,7 +2540,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 186;
|
||||
CURRENT_PROJECT_VERSION = 187;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -2598,7 +2598,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 186;
|
||||
CURRENT_PROJECT_VERSION = 187;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.18.0</string>
|
||||
<string>1.18.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@@ -34,7 +34,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>186</string>
|
||||
<string>187</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.18.0</string>
|
||||
<string>1.18.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>186</string>
|
||||
<string>187</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.18.0</string>
|
||||
<string>1.18.1</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>186</string>
|
||||
<string>187</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
274
native_modules/RNCookieManagerIOS.m
Normal file
274
native_modules/RNCookieManagerIOS.m
Normal file
@@ -0,0 +1,274 @@
|
||||
#import "RNCookieManagerIOS.h"
|
||||
#if __has_include("RCTConvert.h")
|
||||
#import "RCTConvert.h"
|
||||
#else
|
||||
#import <React/RCTConvert.h>
|
||||
#endif
|
||||
|
||||
static NSString * const NOT_AVAILABLE_ERROR_MESSAGE = @"WebKit/WebKit-Components are only available with iOS11 and higher!";
|
||||
|
||||
@implementation RNCookieManagerIOS
|
||||
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.formatter = [NSDateFormatter new];
|
||||
[self.formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
+ (BOOL)requiresMainQueueSetup
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
RCT_EXPORT_MODULE()
|
||||
|
||||
RCT_EXPORT_METHOD(
|
||||
set:(NSDictionary *)props
|
||||
useWebKit:(BOOL)useWebKit
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject)
|
||||
{
|
||||
NSString *name = [RCTConvert NSString:props[@"name"]];
|
||||
NSString *value = [RCTConvert NSString:props[@"value"]];
|
||||
NSString *domain = [RCTConvert NSString:props[@"domain"]];
|
||||
NSString *origin = [RCTConvert NSString:props[@"origin"]];
|
||||
NSString *path = [RCTConvert NSString:props[@"path"]];
|
||||
NSString *version = [RCTConvert NSString:props[@"version"]];
|
||||
NSDate *expiration = [RCTConvert NSDate:props[@"expiration"]];
|
||||
|
||||
NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary];
|
||||
[cookieProperties setObject:name forKey:NSHTTPCookieName];
|
||||
[cookieProperties setObject:value forKey:NSHTTPCookieValue];
|
||||
[cookieProperties setObject:domain forKey:NSHTTPCookieDomain];
|
||||
[cookieProperties setObject:origin forKey:NSHTTPCookieOriginURL];
|
||||
[cookieProperties setObject:path forKey:NSHTTPCookiePath];
|
||||
[cookieProperties setObject:version forKey:NSHTTPCookieVersion];
|
||||
[cookieProperties setObject:expiration forKey:NSHTTPCookieExpires];
|
||||
|
||||
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:cookieProperties];
|
||||
|
||||
NSLog(@"SETTING COOKIE");
|
||||
NSLog(@"%@", cookie);
|
||||
|
||||
if (useWebKit) {
|
||||
if (@available(iOS 11.0, *)) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^(){
|
||||
WKHTTPCookieStore *cookieStore = [[WKWebsiteDataStore defaultDataStore] httpCookieStore];
|
||||
[cookieStore setCookie:cookie completionHandler:nil];
|
||||
resolve(nil);
|
||||
});
|
||||
} else {
|
||||
reject(@"", NOT_AVAILABLE_ERROR_MESSAGE, nil);
|
||||
}
|
||||
} else {
|
||||
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
|
||||
resolve(nil);
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(setFromResponse:(NSURL *)url
|
||||
value:(NSString *)value
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:@{@"Set-Cookie": value} forURL:url];
|
||||
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:url mainDocumentURL:NULL];
|
||||
resolve(nil);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getFromResponse:(NSURL *)url
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
NSURLRequest *request = [NSURLRequest requestWithURL:url];
|
||||
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init]
|
||||
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
|
||||
|
||||
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
|
||||
NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:httpResponse.allHeaderFields forURL:response.URL];
|
||||
NSMutableDictionary *dics = [NSMutableDictionary dictionary];
|
||||
|
||||
for (int i = 0; i < cookies.count; i++) {
|
||||
NSHTTPCookie *cookie = [cookies objectAtIndex:i];
|
||||
[dics setObject:cookie.value forKey:cookie.name];
|
||||
NSLog(@"cookie: name=%@, value=%@", cookie.name, cookie.value);
|
||||
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
|
||||
}
|
||||
resolve(dics);
|
||||
}];
|
||||
}
|
||||
|
||||
-(NSString *)getDomainName:(NSURL *) url
|
||||
{
|
||||
NSString *separator = @".";
|
||||
NSInteger maxLength = 2;
|
||||
|
||||
NSURLComponents *components = [[NSURLComponents alloc]initWithURL:url resolvingAgainstBaseURL:FALSE];
|
||||
NSArray<NSString *> *separatedHost = [components.host componentsSeparatedByString:separator];
|
||||
NSInteger count = [separatedHost count];
|
||||
NSInteger endPosition = count;
|
||||
NSInteger startPosition = count - maxLength;
|
||||
|
||||
NSMutableString *result = [[NSMutableString alloc]init];
|
||||
for (NSUInteger i = startPosition; i != endPosition; i++) {
|
||||
[result appendString:separator];
|
||||
[result appendString:[separatedHost objectAtIndex:i]];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(
|
||||
get:(NSURL *) url
|
||||
useWebKit:(BOOL)useWebKit
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject)
|
||||
{
|
||||
if (useWebKit) {
|
||||
if (@available(iOS 11.0, *)) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^(){
|
||||
NSString *topLevelDomain = [self getDomainName:url];
|
||||
|
||||
WKHTTPCookieStore *cookieStore = [[WKWebsiteDataStore defaultDataStore] httpCookieStore];
|
||||
[cookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *allCookies) {
|
||||
NSMutableDictionary *cookies = [NSMutableDictionary dictionary];
|
||||
for(NSHTTPCookie *currentCookie in allCookies) {
|
||||
if([currentCookie.domain containsString:topLevelDomain]) {
|
||||
[cookies setObject:currentCookie.value forKey:currentCookie.name];
|
||||
}
|
||||
}
|
||||
resolve(cookies);
|
||||
}];
|
||||
});
|
||||
} else {
|
||||
reject(@"", NOT_AVAILABLE_ERROR_MESSAGE, nil);
|
||||
}
|
||||
} else {
|
||||
NSMutableDictionary *cookies = [NSMutableDictionary dictionary];
|
||||
for (NSHTTPCookie *c in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url]) {
|
||||
NSMutableDictionary *d = [NSMutableDictionary dictionary];
|
||||
[d setObject:c.value forKey:@"value"];
|
||||
[d setObject:c.name forKey:@"name"];
|
||||
[d setObject:c.domain forKey:@"domain"];
|
||||
[d setObject:c.path forKey:@"path"];
|
||||
NSString *expires = [self.formatter stringFromDate:c.expiresDate];
|
||||
if (expires != nil) {
|
||||
[d setObject:expires forKey:@"expiresDate"];
|
||||
}
|
||||
[cookies setObject:d forKey:c.name];
|
||||
}
|
||||
resolve(cookies);
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(
|
||||
clearAll:(BOOL)useWebKit
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject)
|
||||
{
|
||||
if (useWebKit) {
|
||||
if (@available(iOS 11.0, *)) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^(){
|
||||
WKHTTPCookieStore *cookieStore = [[WKWebsiteDataStore defaultDataStore] httpCookieStore];
|
||||
[cookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *allCookies) {
|
||||
for(NSHTTPCookie *currentCookie in allCookies) {
|
||||
// Uses the NSHTTPCookie directly has no effect, nor deleted the cookie nor thrown an error.
|
||||
// Create a new cookie with the given values and delete this one do the work.
|
||||
NSMutableDictionary<NSHTTPCookiePropertyKey, id> *cookieData = [NSMutableDictionary dictionary];
|
||||
[cookieData setValue:currentCookie.name forKey:NSHTTPCookieName];
|
||||
[cookieData setValue:currentCookie.value forKey:NSHTTPCookieValue];
|
||||
[cookieData setValue:currentCookie.domain forKey:NSHTTPCookieDomain];
|
||||
[cookieData setValue:currentCookie.path forKey:NSHTTPCookiePath];
|
||||
|
||||
NSHTTPCookie *newCookie = [NSHTTPCookie cookieWithProperties:cookieData];
|
||||
[cookieStore deleteCookie:newCookie completionHandler:^{}];
|
||||
}
|
||||
resolve(nil);
|
||||
}];
|
||||
});
|
||||
} else {
|
||||
reject(@"", NOT_AVAILABLE_ERROR_MESSAGE, nil);
|
||||
}
|
||||
} else {
|
||||
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||
for (NSHTTPCookie *c in cookieStorage.cookies) {
|
||||
[cookieStorage deleteCookie:c];
|
||||
}
|
||||
resolve(nil);
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(clearByName:(NSString *) name
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||
for (NSHTTPCookie *c in cookieStorage.cookies) {
|
||||
if ([[c name] isEqualToString:name]) {
|
||||
[cookieStorage deleteCookie:c];
|
||||
}
|
||||
}
|
||||
resolve(nil);
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(
|
||||
getAll:(BOOL)useWebKit
|
||||
resolver:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject)
|
||||
{
|
||||
if (useWebKit) {
|
||||
if (@available(iOS 11.0, *)) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^(){
|
||||
WKHTTPCookieStore *cookieStore = [[WKWebsiteDataStore defaultDataStore] httpCookieStore];
|
||||
[cookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *allCookies) {
|
||||
resolve([self createCookieList: allCookies]);
|
||||
}];
|
||||
});
|
||||
} else {
|
||||
reject(@"", NOT_AVAILABLE_ERROR_MESSAGE, nil);
|
||||
}
|
||||
} else {
|
||||
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||
resolve([self createCookieList:cookieStorage.cookies]);
|
||||
}
|
||||
}
|
||||
|
||||
RCT_EXPORT_METHOD(getAll:(RCTPromiseResolveBlock)resolve
|
||||
rejecter:(RCTPromiseRejectBlock)reject) {
|
||||
NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
|
||||
NSMutableDictionary *cookies = [NSMutableDictionary dictionary];
|
||||
for (NSHTTPCookie *c in cookieStorage.cookies) {
|
||||
NSMutableDictionary *d = [NSMutableDictionary dictionary];
|
||||
[d setObject:c.value forKey:@"value"];
|
||||
[d setObject:c.name forKey:@"name"];
|
||||
[d setObject:c.domain forKey:@"domain"];
|
||||
[d setObject:c.path forKey:@"path"];
|
||||
NSString *expires = [self.formatter stringFromDate:c.expiresDate];
|
||||
if (expires != nil) {
|
||||
[d setObject:expires forKey:@"expiresDate"];
|
||||
}
|
||||
[cookies setObject:d forKey:c.name];
|
||||
}
|
||||
}
|
||||
|
||||
-(NSDictionary *)createCookieList:(NSArray<NSHTTPCookie *>*)cookies
|
||||
{
|
||||
NSMutableDictionary *cookieList = [NSMutableDictionary dictionary];
|
||||
for (NSHTTPCookie *cookie in cookies) {
|
||||
// NSLog(@"COOKIE: %@", cookie);
|
||||
[cookieList setObject:[self createCookieData:cookie] forKey:cookie.name];
|
||||
}
|
||||
return cookieList;
|
||||
}
|
||||
|
||||
-(NSDictionary *)createCookieData:(NSHTTPCookie *)cookie
|
||||
{
|
||||
NSMutableDictionary *cookieData = [NSMutableDictionary dictionary];
|
||||
[cookieData setObject:cookie.value forKey:@"value"];
|
||||
[cookieData setObject:cookie.name forKey:@"name"];
|
||||
[cookieData setObject:cookie.domain forKey:@"domain"];
|
||||
[cookieData setObject:cookie.path forKey:@"path"];
|
||||
return cookieData;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -44,7 +44,7 @@ import {
|
||||
import ChannelButton from './channel_button';
|
||||
import TeamButton from './team_button';
|
||||
|
||||
const defalultTheme = Preferences.THEMES.default;
|
||||
const defaultTheme = Preferences.THEMES.default;
|
||||
const extensionSvg = {
|
||||
csv: ExcelSvg,
|
||||
pdf: PdfSvg,
|
||||
@@ -64,6 +64,7 @@ export default class ExtensionPost extends PureComponent {
|
||||
getTeamChannels: PropTypes.func.isRequired,
|
||||
}).isRequired,
|
||||
channelId: PropTypes.string,
|
||||
channels: PropTypes.object.isRequired,
|
||||
currentUserId: PropTypes.string.isRequired,
|
||||
maxFileSize: PropTypes.number.isRequired,
|
||||
navigation: PropTypes.object.isRequired,
|
||||
@@ -111,7 +112,7 @@ export default class ExtensionPost extends PureComponent {
|
||||
>
|
||||
<View style={styles.left}>
|
||||
<PaperPlane
|
||||
color={defalultTheme.sidebarHeaderTextColor}
|
||||
color={defaultTheme.sidebarHeaderTextColor}
|
||||
height={20}
|
||||
width={20}
|
||||
/>
|
||||
@@ -352,7 +353,10 @@ export default class ExtensionPost extends PureComponent {
|
||||
|
||||
renderBody = () => {
|
||||
const {formatMessage} = this.context.intl;
|
||||
const {value} = this.state;
|
||||
const {channelId, value} = this.state;
|
||||
|
||||
const channel = this.props.channels[channelId];
|
||||
const channelDisplayName = channel?.display_name || ''; //eslint-disable-line camelcase
|
||||
|
||||
return (
|
||||
<ScrollView
|
||||
@@ -368,8 +372,8 @@ export default class ExtensionPost extends PureComponent {
|
||||
onBlur={this.handleBlur}
|
||||
onChangeText={this.handleTextChange}
|
||||
onFocus={this.handleFocus}
|
||||
placeholder={formatMessage({id: 'create_post.write', defaultMessage: 'Write a message...'})}
|
||||
placeholderTextColor={changeOpacity(defalultTheme.centerChannelColor, 0.5)}
|
||||
placeholder={formatMessage({id: 'create_post.write', defaultMessage: 'Write to {channelDisplayName}'}, {channelDisplayName})}
|
||||
placeholderTextColor={changeOpacity(defaultTheme.centerChannelColor, 0.5)}
|
||||
style={styles.input}
|
||||
underlineColorAndroid='transparent'
|
||||
value={value}
|
||||
@@ -386,7 +390,7 @@ export default class ExtensionPost extends PureComponent {
|
||||
<ChannelButton
|
||||
channelId={channelId}
|
||||
onPress={this.goToChannels}
|
||||
theme={defalultTheme}
|
||||
theme={defaultTheme}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -489,7 +493,7 @@ export default class ExtensionPost extends PureComponent {
|
||||
<TeamButton
|
||||
onPress={this.goToTeams}
|
||||
teamId={teamId}
|
||||
theme={defalultTheme}
|
||||
theme={defaultTheme}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -661,4 +665,4 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
};
|
||||
});
|
||||
|
||||
const styles = getStyleSheet(defalultTheme);
|
||||
const styles = getStyleSheet(defaultTheme);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
import {bindActionCreators} from 'redux';
|
||||
import {connect} from 'react-redux';
|
||||
|
||||
import {getCurrentChannel, getDefaultChannel} from 'mattermost-redux/selectors/entities/channels';
|
||||
import {getAllChannels, getCurrentChannel, getDefaultChannel} from 'mattermost-redux/selectors/entities/channels';
|
||||
import {getCurrentTeamId} from 'mattermost-redux/selectors/entities/teams';
|
||||
import {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';
|
||||
import {getConfig} from 'mattermost-redux/selectors/entities/general';
|
||||
@@ -25,6 +25,7 @@ function mapStateToProps(state) {
|
||||
|
||||
return {
|
||||
channelId: channel?.id,
|
||||
channels: getAllChannels(state),
|
||||
currentUserId: getCurrentUserId(state),
|
||||
maxFileSize: getAllowedServerMaxFileSize(config),
|
||||
teamId: getCurrentTeamId(state),
|
||||
|
||||
Reference in New Issue
Block a user