forked from Ivasoft/mattermost-mobile
Gekidou Update deps (#5530)
This commit is contained in:
35
NOTICE.txt
35
NOTICE.txt
@@ -2956,41 +2956,6 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## rn-fetch-blob
|
||||
|
||||
This product contains a modified version of 'rn-fetch-blob' by Joltup.
|
||||
|
||||
A module provides upload, download, and files access API. Supports file stream read/write for process large files.
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/joltup/rn-fetch-blob#readme
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 xeiyan@gmail.com
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## rn-placeholder
|
||||
|
||||
This product contains a modified version of 'rn-placeholder' by Marvin FRACHET.
|
||||
|
||||
@@ -17,7 +17,7 @@ export function getDeviceTimezone() {
|
||||
return getTimeZone();
|
||||
}
|
||||
|
||||
export const autoUpdateTimezone = async (serverUrl: string, {deviceTimezone, userId}: {deviceTimezone: string, userId: string}) => {
|
||||
export const autoUpdateTimezone = async (serverUrl: string, {deviceTimezone, userId}: {deviceTimezone: string; userId: string}) => {
|
||||
const database = DatabaseManager.serverDatabases[serverUrl].database;
|
||||
if (!database) {
|
||||
return {error: `No database present for ${serverUrl}`};
|
||||
|
||||
@@ -20,7 +20,7 @@ const sortByNewest = (a: Session, b: Session) => {
|
||||
|
||||
export const scheduleExpiredNotification = async (serverUrl: string, intl: IntlShape) => {
|
||||
const database = DatabaseManager.serverDatabases[serverUrl].database;
|
||||
const {currentUserId, config}: {currentUserId: string, config: Partial<Config>} = await queryCommonSystemValues(database);
|
||||
const {currentUserId, config}: {currentUserId: string; config: Partial<Config>} = await queryCommonSystemValues(database);
|
||||
|
||||
if (config.ExtendSessionLengthWithActivity === 'true') {
|
||||
PushNotifications.cancelAllLocalNotifications();
|
||||
|
||||
@@ -24,8 +24,8 @@ import type Role from '@typings/database/models/servers/role';
|
||||
import type User from '@typings/database/models/servers/user';
|
||||
|
||||
type LoadedUser = {
|
||||
currentUser?: RawUser,
|
||||
error?: Client4Error
|
||||
currentUser?: RawUser;
|
||||
error?: Client4Error;
|
||||
}
|
||||
|
||||
const HTTP_UNAUTHORIZED = 401;
|
||||
@@ -36,7 +36,7 @@ export const completeLogin = async (serverUrl: string, user: RawUser) => {
|
||||
return {error: `${serverUrl} database not found`};
|
||||
}
|
||||
|
||||
const {config, license}: { config: Partial<Config>; license: Partial<License>; } = await queryCommonSystemValues(database);
|
||||
const {config, license}: { config: Partial<Config>; license: Partial<License> } = await queryCommonSystemValues(database);
|
||||
|
||||
if (!Object.keys(config)?.length || !Object.keys(license)?.length) {
|
||||
return null;
|
||||
|
||||
@@ -16,7 +16,7 @@ export interface ClientChannelsMix {
|
||||
convertChannelToPrivate: (channelId: string) => Promise<Channel>;
|
||||
updateChannelPrivacy: (channelId: string, privacy: any) => Promise<Channel>;
|
||||
patchChannel: (channelId: string, channelPatch: Partial<Channel>) => Promise<Channel>;
|
||||
updateChannelNotifyProps: (props: ChannelNotifyProps & {channel_id: string, user_id: string}) => Promise<any>;
|
||||
updateChannelNotifyProps: (props: ChannelNotifyProps & {channel_id: string; user_id: string}) => Promise<any>;
|
||||
getChannel: (channelId: string) => Promise<Channel>;
|
||||
getChannelByName: (teamId: string, channelName: string, includeDeleted?: boolean) => Promise<Channel>;
|
||||
getChannelByNameAndTeamName: (teamName: string, channelName: string, includeDeleted?: boolean) => Promise<Channel>;
|
||||
@@ -136,7 +136,7 @@ const ClientChannels = (superclass: any) => class extends superclass {
|
||||
);
|
||||
};
|
||||
|
||||
updateChannelNotifyProps = async (props: ChannelNotifyProps & {channel_id: string, user_id: string}) => {
|
||||
updateChannelNotifyProps = async (props: ChannelNotifyProps & {channel_id: string; user_id: string}) => {
|
||||
this.analytics.trackAPI('api_users_update_channel_notifications', {channel_id: props.channel_id});
|
||||
|
||||
return this.doFetch(
|
||||
|
||||
@@ -33,7 +33,7 @@ export interface ClientUsersMix {
|
||||
getUserByEmail: (email: string) => Promise<UserProfile>;
|
||||
getProfilePictureUrl: (userId: string, lastPictureUpdate: number) => string;
|
||||
getDefaultProfilePictureUrl: (userId: string) => string;
|
||||
autocompleteUsers: (name: string, teamId: string, channelId: string, options?: Record<string, any>) => Promise<{users: UserProfile[], out_of_channel?: UserProfile[]}>;
|
||||
autocompleteUsers: (name: string, teamId: string, channelId: string, options?: Record<string, any>) => Promise<{users: UserProfile[]; out_of_channel?: UserProfile[]}>;
|
||||
getSessions: (userId: string) => Promise<Session[]>;
|
||||
checkUserMfa: (loginId: string) => Promise<{mfa_required: boolean}>;
|
||||
attachDevice: (deviceId: string) => Promise<any>;
|
||||
|
||||
@@ -13,7 +13,7 @@ export type ClientErrorWithIntl = ClientError & {intl: {values?: Record<string,
|
||||
type ErrorProps = {
|
||||
error: ClientErrorWithIntl | string;
|
||||
testID?: string;
|
||||
textStyle?: StyleProp<ViewStyle> | StyleProp<TextStyle>
|
||||
textStyle?: StyleProp<ViewStyle> | StyleProp<TextStyle>;
|
||||
theme: Theme;
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ type FormattedTextProps = {
|
||||
defaultMessage: string;
|
||||
values?: Record<string, any>;
|
||||
testID?: string;
|
||||
style?: StyleProp<ViewStyle> | StyleProp<TextStyle>
|
||||
style?: StyleProp<ViewStyle> | StyleProp<TextStyle>;
|
||||
}
|
||||
|
||||
const FormattedText = (props: FormattedTextProps) => {
|
||||
|
||||
@@ -5,9 +5,9 @@ import React from 'react';
|
||||
import {ActivityIndicator, StyleSheet, View, ViewStyle} from 'react-native';
|
||||
|
||||
type LoadingProps = {
|
||||
color?: string,
|
||||
size?: 'small' | 'large',
|
||||
style?: ViewStyle,
|
||||
color?: string;
|
||||
size?: 'small' | 'large';
|
||||
style?: ViewStyle;
|
||||
}
|
||||
|
||||
const Loading = ({size = 'large', color = 'grey', style}: LoadingProps) => {
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import React from 'react';
|
||||
|
||||
import {storiesOf} from '@storybook/react-native';
|
||||
import {withKnobs, select} from '@storybook/addon-knobs';
|
||||
|
||||
import Loading from './index';
|
||||
|
||||
storiesOf('Loading Icon Story', module).
|
||||
addDecorator(withKnobs).
|
||||
add('loading icon', () => (
|
||||
<Loading
|
||||
size={select('size', {Large: 'large', Small: 'small'}, 'large')}
|
||||
color={select('color', {Red: 'red', Blue: 'blue', Yellow: 'yellow', Black: 'black'}, 'red')}
|
||||
/>
|
||||
));
|
||||
@@ -5,7 +5,7 @@
|
||||
* DataOperatorException: This exception can be used whenever an issue arises at the operator level. For example, if a required field is missing.
|
||||
*/
|
||||
class DataOperatorException extends Error {
|
||||
error : Error | undefined;
|
||||
error: Error | undefined;
|
||||
constructor(message: string, error?: Error) {
|
||||
super(message);
|
||||
this.name = 'DatabaseOperatorException';
|
||||
|
||||
@@ -5,6 +5,7 @@ import {Database, Q} from '@nozbe/watermelondb';
|
||||
import SQLiteAdapter, {MigrationEvents} from '@nozbe/watermelondb/adapters/sqlite';
|
||||
import logger from '@nozbe/watermelondb/utils/common/logger';
|
||||
import {DeviceEventEmitter, Platform} from 'react-native';
|
||||
import DeviceInfo from 'react-native-device-info';
|
||||
import {FileSystem} from 'react-native-unimodules';
|
||||
import urlParse from 'url-parse';
|
||||
|
||||
@@ -64,6 +65,14 @@ class DatabaseManager {
|
||||
for await (const serverUrl of serverUrls) {
|
||||
await this.initServerDatabase(serverUrl);
|
||||
}
|
||||
this.appDatabase?.operator.handleInfo({
|
||||
info: [{
|
||||
build_number: DeviceInfo.getBuildNumber(),
|
||||
created_at: Date.now(),
|
||||
version_number: DeviceInfo.getVersion(),
|
||||
}],
|
||||
prepareRecordsOnly: false,
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -48,7 +48,7 @@ export default class BaseDataOperator {
|
||||
* @returns {Promise<{ProcessRecordResults}>}
|
||||
*/
|
||||
processRecords = async ({createOrUpdateRawValues, deleteRawValues = [], tableName, findMatchingRecordBy, fieldName}: ProcessRecordsArgs): Promise<ProcessRecordResults> => {
|
||||
const getRecords = async (rawValues : RawValue[]) => {
|
||||
const getRecords = async (rawValues: RawValue[]) => {
|
||||
// We will query a table where one of its fields can match a range of values. Hence, here we are extracting all those potential values.
|
||||
const columnValues: string[] = getRangeOfValues({fieldName, raws: rawValues});
|
||||
|
||||
@@ -81,7 +81,7 @@ export default class BaseDataOperator {
|
||||
const createOrUpdateRaws = await getRecords(createOrUpdateRawValues);
|
||||
if (createOrUpdateRawValues.length > 0) {
|
||||
createOrUpdateRawValues.forEach((newElement: RawValue) => {
|
||||
const findIndex = createOrUpdateRaws.findIndex((existing) => {
|
||||
const findIndex = createOrUpdateRaws.findIndex((existing: Model) => {
|
||||
return findMatchingRecordBy(existing, newElement);
|
||||
});
|
||||
|
||||
@@ -128,7 +128,7 @@ export default class BaseDataOperator {
|
||||
throw new DataOperatorException('Database not defined');
|
||||
}
|
||||
|
||||
let preparedRecords: Promise<Model>[] = [];
|
||||
let preparedRecords: Array<Promise<Model>> = [];
|
||||
|
||||
// create operation
|
||||
if (createRaws?.length) {
|
||||
|
||||
@@ -35,10 +35,10 @@ const {
|
||||
} = MM_TABLES.SERVER;
|
||||
|
||||
export interface GroupHandlerMix {
|
||||
handleGroupMembership : ({groupMemberships, prepareRecordsOnly}: HandleGroupMembershipArgs) => GroupMembership[] | boolean,
|
||||
handleGroup : ({groups, prepareRecordsOnly}: HandleGroupArgs) => Group[] | boolean,
|
||||
handleGroupsInTeam : ({groupsInTeams, prepareRecordsOnly} : HandleGroupsInTeamArgs) => GroupsInTeam[] | boolean,
|
||||
handleGroupsInChannel : ({groupsInChannels, prepareRecordsOnly}: HandleGroupsInChannelArgs) => GroupsInChannel[] | boolean
|
||||
handleGroupMembership: ({groupMemberships, prepareRecordsOnly}: HandleGroupMembershipArgs) => GroupMembership[] | boolean;
|
||||
handleGroup: ({groups, prepareRecordsOnly}: HandleGroupArgs) => Group[] | boolean;
|
||||
handleGroupsInTeam: ({groupsInTeams, prepareRecordsOnly}: HandleGroupsInTeamArgs) => GroupsInTeam[] | boolean;
|
||||
handleGroupsInChannel: ({groupsInChannels, prepareRecordsOnly}: HandleGroupsInChannelArgs) => GroupsInChannel[] | boolean;
|
||||
}
|
||||
|
||||
const GroupHandler = (superclass: any) => class extends superclass {
|
||||
@@ -112,7 +112,7 @@ const GroupHandler = (superclass: any) => class extends superclass {
|
||||
* @throws DataOperatorException
|
||||
* @returns {GroupsInTeam[]}
|
||||
*/
|
||||
handleGroupsInTeam = async ({groupsInTeams, prepareRecordsOnly = true} : HandleGroupsInTeamArgs) => {
|
||||
handleGroupsInTeam = async ({groupsInTeams, prepareRecordsOnly = true}: HandleGroupsInTeamArgs) => {
|
||||
let records: GroupsInTeam[] = [];
|
||||
|
||||
if (!groupsInTeams.length) {
|
||||
|
||||
@@ -49,7 +49,7 @@ const {
|
||||
} = MM_TABLES.SERVER;
|
||||
|
||||
export interface PostHandlerMix {
|
||||
handleDraft: ({drafts, prepareRecordsOnly}: HandleDraftArgs) => Draft[] | boolean
|
||||
handleDraft: ({drafts, prepareRecordsOnly}: HandleDraftArgs) => Draft[] | boolean;
|
||||
handleFiles: ({files, prepareRecordsOnly}: HandleFilesArgs) => Promise<File[] | any[]>;
|
||||
handlePostMetadata: ({embeds, images, prepareRecordsOnly}: HandlePostMetadataArgs) => Promise<any[] | PostMetadata[]>;
|
||||
handlePosts: ({orders, values, previousPostId}: HandlePostsArgs) => Promise<void>;
|
||||
@@ -132,8 +132,8 @@ const PostHandler = (superclass: any) => class extends superclass {
|
||||
const postsInThread = [];
|
||||
let reactions: RawReaction[] = [];
|
||||
let emojis: RawCustomEmoji[] = [];
|
||||
const images: { images: Dictionary<PostImage>; postId: string }[] = [];
|
||||
const embeds: { embed: RawEmbed[]; postId: string }[] = [];
|
||||
const images: Array<{ images: Dictionary<PostImage>; postId: string }> = [];
|
||||
const embeds: Array<{ embed: RawEmbed[]; postId: string }> = [];
|
||||
|
||||
// We create the 'chain of posts' by linking each posts' previousId to the post before it in the order array
|
||||
const linkedRawPosts: RecordPair[] = createPostsChain({
|
||||
|
||||
@@ -39,10 +39,10 @@ const {
|
||||
} = MM_TABLES.SERVER;
|
||||
|
||||
export interface UserHandlerMix {
|
||||
handleChannelMembership : ({channelMemberships, prepareRecordsOnly}: HandleChannelMembershipArgs) => Promise<ChannelMembership[]>;
|
||||
handlePreferences : ({preferences, prepareRecordsOnly}: HandlePreferencesArgs) => Promise<Preference[]>;
|
||||
handleReactions : ({reactions, prepareRecordsOnly}: HandleReactionsArgs) => Promise<(Reaction | CustomEmoji)[]>;
|
||||
handleUsers : ({users, prepareRecordsOnly}: HandleUsersArgs) => Promise<User[]>;
|
||||
handleChannelMembership: ({channelMemberships, prepareRecordsOnly}: HandleChannelMembershipArgs) => Promise<ChannelMembership[]>;
|
||||
handlePreferences: ({preferences, prepareRecordsOnly}: HandlePreferencesArgs) => Promise<Preference[]>;
|
||||
handleReactions: ({reactions, prepareRecordsOnly}: HandleReactionsArgs) => Promise<Array<Reaction | CustomEmoji>>;
|
||||
handleUsers: ({users, prepareRecordsOnly}: HandleUsersArgs) => Promise<User[]>;
|
||||
}
|
||||
|
||||
const UserHandler = (superclass: any) => class extends superclass {
|
||||
@@ -117,7 +117,7 @@ const UserHandler = (superclass: any) => class extends superclass {
|
||||
* @returns {Promise<(Reaction| CustomEmoji)[]>}
|
||||
*/
|
||||
handleReactions = async ({reactions, prepareRecordsOnly}: HandleReactionsArgs) => {
|
||||
let batchRecords: (Reaction| CustomEmoji)[] = [];
|
||||
let batchRecords: Array<Reaction| CustomEmoji> = [];
|
||||
|
||||
if (!reactions.length) {
|
||||
throw new DataOperatorException(
|
||||
|
||||
@@ -88,7 +88,7 @@ export const getRawRecordPairs = (raws: any[]): RecordPair[] => {
|
||||
* @param {RawValue[]} raws
|
||||
* @param {string} key
|
||||
*/
|
||||
export const getUniqueRawsBy = ({raws, key}:{ raws: RawValue[], key: string}) => {
|
||||
export const getUniqueRawsBy = ({raws, key}: { raws: RawValue[]; key: string}) => {
|
||||
return [...new Map(raws.map((item) => {
|
||||
const curItemKey = item[key as keyof typeof item];
|
||||
return [curItemKey, item];
|
||||
|
||||
@@ -102,7 +102,7 @@ class GlobalEventHandler {
|
||||
relaunchApp({launchType: LaunchType.Normal}, true);
|
||||
};
|
||||
|
||||
onServerConfigChanged = ({serverUrl, config}: {serverUrl: string, config: ClientConfig}) => {
|
||||
onServerConfigChanged = ({serverUrl, config}: {serverUrl: string; config: ClientConfig}) => {
|
||||
this.configureAnalytics(serverUrl, config);
|
||||
|
||||
if (config.ExtendSessionLengthWithActivity === 'true') {
|
||||
@@ -110,7 +110,7 @@ class GlobalEventHandler {
|
||||
}
|
||||
};
|
||||
|
||||
onServerVersionChanged = async ({serverUrl, serverVersion}: {serverUrl: string, serverVersion?: string}) => {
|
||||
onServerVersionChanged = async ({serverUrl, serverVersion}: {serverUrl: string; serverVersion?: string}) => {
|
||||
const match = serverVersion?.match(/^[0-9]*.[0-9]*.[0-9]*(-[a-zA-Z0-9.-]*)?/g);
|
||||
const version = match && match[0];
|
||||
const locale = DEFAULT_LOCALE;
|
||||
|
||||
@@ -9,7 +9,7 @@ import type User from '@typings/database/models/servers/user';
|
||||
|
||||
import {queryCurrentUserId} from './system';
|
||||
|
||||
export const queryUserById = async ({userId, database}: { userId: string, database: Database}) => {
|
||||
export const queryUserById = async ({userId, database}: { userId: string; database: Database}) => {
|
||||
try {
|
||||
const userRecord = (await database.collections.get(MM_TABLES.SERVER.USER).find(userId)) as User;
|
||||
return userRecord;
|
||||
|
||||
@@ -26,11 +26,11 @@ import {preventDoubleTap} from '@utils/tap';
|
||||
import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme';
|
||||
|
||||
type MFAProps = {
|
||||
config: Partial<Config>,
|
||||
goToChannel: () => void,
|
||||
license: Partial<License>,
|
||||
loginId : string,
|
||||
password: string,
|
||||
config: Partial<Config>;
|
||||
goToChannel: () => void;
|
||||
license: Partial<License>;
|
||||
loginId: string;
|
||||
password: string;
|
||||
serverUrl: string;
|
||||
theme: Theme;
|
||||
}
|
||||
|
||||
@@ -284,7 +284,48 @@ export function showModal(name: string, title: string, passProps = {}, options =
|
||||
|
||||
export function showModalOverCurrentContext(name: string, passProps = {}, options = {}) {
|
||||
const title = '';
|
||||
const animationsEnabled = (Platform.OS === 'android').toString();
|
||||
let animations;
|
||||
switch (Platform.OS) {
|
||||
case 'android':
|
||||
animations = {
|
||||
showModal: {
|
||||
waitForRender: true,
|
||||
alpha: {
|
||||
from: 0,
|
||||
to: 1,
|
||||
duration: 250,
|
||||
},
|
||||
},
|
||||
dismissModal: {
|
||||
alpha: {
|
||||
from: 1,
|
||||
to: 0,
|
||||
duration: 250,
|
||||
},
|
||||
},
|
||||
};
|
||||
break;
|
||||
default:
|
||||
animations = {
|
||||
showModal: {
|
||||
enter: {
|
||||
enabled: false,
|
||||
},
|
||||
exit: {
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
dismissModal: {
|
||||
enter: {
|
||||
enabled: false,
|
||||
},
|
||||
exit: {
|
||||
enabled: false,
|
||||
},
|
||||
},
|
||||
};
|
||||
break;
|
||||
}
|
||||
const defaultOptions = {
|
||||
modalPresentationStyle: 'overCurrentContext',
|
||||
layout: {
|
||||
@@ -295,28 +336,9 @@ export function showModalOverCurrentContext(name: string, passProps = {}, option
|
||||
visible: false,
|
||||
height: 0,
|
||||
},
|
||||
animations: {
|
||||
showModal: {
|
||||
waitForRender: true,
|
||||
enabled: animationsEnabled,
|
||||
alpha: {
|
||||
from: 0,
|
||||
to: 1,
|
||||
duration: 250,
|
||||
},
|
||||
},
|
||||
dismissModal: {
|
||||
enabled: animationsEnabled,
|
||||
alpha: {
|
||||
from: 1,
|
||||
to: 0,
|
||||
duration: 250,
|
||||
},
|
||||
},
|
||||
},
|
||||
animations,
|
||||
};
|
||||
const mergeOptions = merge(defaultOptions, options);
|
||||
|
||||
showModal(name, title, passProps, mergeOptions);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ interface SSOWithRedirectURLProps {
|
||||
loginUrl: string;
|
||||
serverUrl: string;
|
||||
setLoginError: (value: string) => void;
|
||||
theme: Partial<Theme>
|
||||
theme: Partial<Theme>;
|
||||
}
|
||||
|
||||
const SSOWithRedirectURL = ({doSSOLogin, loginError, loginUrl, serverUrl, setLoginError, theme}: SSOWithRedirectURLProps) => {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import CookieManager, {Cookies} from '@react-native-cookies/cookies';
|
||||
import CookieManager, {Cookie, Cookies} from '@react-native-cookies/cookies';
|
||||
import React, {useEffect} from 'react';
|
||||
import {useIntl} from 'react-intl';
|
||||
import {Alert, Platform, Text, View} from 'react-native';
|
||||
@@ -63,7 +63,7 @@ interface SSOWithWebViewProps {
|
||||
loginUrl: string;
|
||||
serverUrl: string;
|
||||
ssoType: string;
|
||||
theme: Partial<Theme>
|
||||
theme: Partial<Theme>;
|
||||
}
|
||||
|
||||
const SSOWithWebView = ({completeUrlPath, doSSOLogin, loginError, loginUrl, serverUrl, ssoType, theme}: SSOWithWebViewProps) => {
|
||||
@@ -87,10 +87,10 @@ const SSOWithWebView = ({completeUrlPath, doSSOLogin, loginError, loginUrl, serv
|
||||
|
||||
const removeCookiesFromVisited = () => {
|
||||
if (Platform.OS === 'ios') {
|
||||
visitedUrls.forEach((visited) => {
|
||||
visitedUrls.forEach((visited: string) => {
|
||||
CookieManager.get(visited, true).then(async (cookies: Cookies) => {
|
||||
if (cookies) {
|
||||
const values = Object.values(cookies);
|
||||
const values = Object.values(cookies) as unknown as Cookie[];
|
||||
for (const cookie of values) {
|
||||
CookieManager.clearByName(visited, cookie.name, true);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import {cleanUrlForLogging} from '@utils/logging';
|
||||
|
||||
export class ClientError extends Error {
|
||||
details: Error;
|
||||
intl?: {defaultMessage?: string; id: string;} | { defaultMessage?: string; id: string } | { id: string; defaultMessage?: string; values: any } | { id: string; defaultMessage?: string };
|
||||
intl?: {defaultMessage?: string; id: string} | { defaultMessage?: string; id: string } | { id: string; defaultMessage?: string; values: any } | { id: string; defaultMessage?: string };
|
||||
url: string;
|
||||
server_error_id?: string | number;
|
||||
status_code?: number;
|
||||
|
||||
@@ -5,8 +5,8 @@ import {NativeModules} from 'react-native';
|
||||
|
||||
const {MattermostManaged} = NativeModules;
|
||||
|
||||
type IOSDeleteDatabase = { databaseName?: string, shouldRemoveDirectory?: boolean }
|
||||
type IOSAppGroupDetails = { appGroupIdentifier: string, appGroupSharedDirectory: string, appGroupDatabase: string }
|
||||
type IOSDeleteDatabase = { databaseName?: string; shouldRemoveDirectory?: boolean }
|
||||
type IOSAppGroupDetails = { appGroupIdentifier: string; appGroupSharedDirectory: string; appGroupDatabase: string }
|
||||
|
||||
/**
|
||||
* Retrieves information relative to the iOS AppGroup identifier and folders
|
||||
|
||||
@@ -42,7 +42,6 @@
|
||||
"mobile.oauth.failed_to_login": "Your login attempt failed. Please try again.",
|
||||
"mobile.oauth.failed_to_open_link": "The link failed to open. Please try again.",
|
||||
"mobile.oauth.failed_to_open_link_no_browser": "The link failed to open. Please verify if a browser is installed in the current space.",
|
||||
"mobile.oauth.restart_login": "Restart login",
|
||||
"mobile.oauth.something_wrong": "Something went wrong",
|
||||
"mobile.oauth.something_wrong.okButon": "Ok",
|
||||
"mobile.oauth.switch_to_browser": "Please use your browser to complete the login",
|
||||
|
||||
1
index.ts
1
index.ts
@@ -26,7 +26,6 @@ if (__DEV__) {
|
||||
'scaleY',
|
||||
]);
|
||||
LogBox.ignoreLogs(['Require cycle: node_modules/zod/lib/src/index.js']);
|
||||
require('storybook/mattermost_storybook.ts');
|
||||
}
|
||||
|
||||
setFontFamily();
|
||||
|
||||
151
ios/Podfile.lock
151
ios/Podfile.lock
@@ -4,12 +4,21 @@ PODS:
|
||||
- BVLinearGradient (2.5.6):
|
||||
- React
|
||||
- DoubleConversion (1.1.6)
|
||||
- EXConstants (10.1.3):
|
||||
- UMConstantsInterface
|
||||
- EXConstants (11.0.1):
|
||||
- ExpoModulesCore
|
||||
- UMCore
|
||||
- EXFileSystem (11.0.2):
|
||||
- EXFileSystem (11.1.3):
|
||||
- ExpoModulesCore
|
||||
- UMCore
|
||||
- ExpoModulesCore (0.2.0):
|
||||
- ExpoModulesCore/Core (= 0.2.0)
|
||||
- ExpoModulesCore/Interfaces (= 0.2.0)
|
||||
- UMCore
|
||||
- ExpoModulesCore/Core (0.2.0):
|
||||
- UMCore
|
||||
- ExpoModulesCore/Interfaces (0.2.0):
|
||||
- ExpoModulesCore/Core
|
||||
- UMCore
|
||||
- UMFileSystemInterface
|
||||
- FBLazyVector (0.64.2)
|
||||
- FBReactNativeSpec (0.64.2):
|
||||
- RCT-Folly (= 2020.01.13.00)
|
||||
@@ -19,7 +28,7 @@ PODS:
|
||||
- React-jsi (= 0.64.2)
|
||||
- ReactCommon/turbomodule/core (= 0.64.2)
|
||||
- glog (0.3.5)
|
||||
- jail-monkey (2.4.0):
|
||||
- jail-monkey (2.5.0):
|
||||
- React-Core
|
||||
- libwebp (1.2.0):
|
||||
- libwebp/demux (= 1.2.0)
|
||||
@@ -30,9 +39,9 @@ PODS:
|
||||
- libwebp/mux (1.2.0):
|
||||
- libwebp/demux
|
||||
- libwebp/webp (1.2.0)
|
||||
- Permission-Camera (3.0.4):
|
||||
- Permission-Camera (3.0.5):
|
||||
- RNPermissions
|
||||
- Permission-PhotoLibrary (3.0.4):
|
||||
- Permission-PhotoLibrary (3.0.5):
|
||||
- RNPermissions
|
||||
- RCT-Folly (2020.01.13.00):
|
||||
- boost-for-react-native
|
||||
@@ -236,7 +245,7 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-document-picker (5.2.0):
|
||||
- React-Core
|
||||
- react-native-emm (1.1.3):
|
||||
- react-native-emm (1.1.4):
|
||||
- React-Core
|
||||
- react-native-hw-keyboard-event (0.0.4):
|
||||
- React
|
||||
@@ -249,7 +258,7 @@ PODS:
|
||||
- SwiftyJSON (~> 5.0)
|
||||
- react-native-notifications (3.5.0):
|
||||
- React-Core
|
||||
- react-native-paste-input (0.1.3):
|
||||
- react-native-paste-input (0.1.4):
|
||||
- React-Core
|
||||
- Swime (= 3.0.6)
|
||||
- react-native-safe-area-context (3.2.0):
|
||||
@@ -259,7 +268,7 @@ PODS:
|
||||
- react-native-video/Video (= 5.1.1)
|
||||
- react-native-video/Video (5.1.1):
|
||||
- React-Core
|
||||
- react-native-webview (11.6.4):
|
||||
- react-native-webview (11.6.5):
|
||||
- React-Core
|
||||
- React-perflogger (0.64.2)
|
||||
- React-RCTActionSheet (0.64.2):
|
||||
@@ -329,17 +338,15 @@ PODS:
|
||||
- React-Core
|
||||
- ReactNativeKeyboardTrackingView (5.7.0):
|
||||
- React
|
||||
- ReactNativeNavigation (7.13.0):
|
||||
- ReactNativeNavigation (7.17.1):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
- ReactNativeNavigation/Core (= 7.13.0)
|
||||
- ReactNativeNavigation/Core (7.13.0):
|
||||
- ReactNativeNavigation/Core (= 7.17.1)
|
||||
- ReactNativeNavigation/Core (7.17.1):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
- rn-fetch-blob (0.12.0):
|
||||
- React-Core
|
||||
- RNCAsyncStorage (1.12.1):
|
||||
- React-Core
|
||||
- RNCClipboard (1.5.1):
|
||||
@@ -352,7 +359,7 @@ PODS:
|
||||
- React-Core
|
||||
- React-Core/DevSupport
|
||||
- React-RCTNetwork
|
||||
- RNFastImage (8.3.4):
|
||||
- RNFastImage (8.3.6):
|
||||
- React-Core
|
||||
- SDWebImage (~> 5.8)
|
||||
- SDWebImageWebPCoder (~> 0.6.1)
|
||||
@@ -364,7 +371,7 @@ PODS:
|
||||
- React-Core
|
||||
- RNLocalize (2.1.1):
|
||||
- React-Core
|
||||
- RNPermissions (3.0.4):
|
||||
- RNPermissions (3.0.5):
|
||||
- React-Core
|
||||
- RNReactNativeHapticFeedback (1.11.0):
|
||||
- React-Core
|
||||
@@ -399,17 +406,17 @@ PODS:
|
||||
- Yoga
|
||||
- RNRudderSdk (1.0.0):
|
||||
- React
|
||||
- Rudder
|
||||
- RNSentry (2.5.2):
|
||||
- Rudder (>= 1.0.20)
|
||||
- RNSentry (2.6.0):
|
||||
- React-Core
|
||||
- Sentry (= 7.0.0)
|
||||
- RNShare (6.2.1):
|
||||
- RNShare (6.2.3):
|
||||
- React-Core
|
||||
- RNSVG (12.1.1):
|
||||
- React
|
||||
- RNVectorIcons (8.1.0):
|
||||
- React-Core
|
||||
- Rudder (1.0.14)
|
||||
- Rudder (1.0.20)
|
||||
- SDWebImage (5.11.1):
|
||||
- SDWebImage/Core (= 5.11.1)
|
||||
- SDWebImage/Core (5.11.1)
|
||||
@@ -422,27 +429,13 @@ PODS:
|
||||
- Starscream (4.0.4)
|
||||
- SwiftyJSON (5.0.1)
|
||||
- Swime (3.0.6)
|
||||
- UMAppLoader (2.1.0)
|
||||
- UMBarCodeScannerInterface (6.1.0):
|
||||
- UMCore
|
||||
- UMCameraInterface (6.1.0):
|
||||
- UMCore
|
||||
- UMConstantsInterface (6.1.0):
|
||||
- UMCore
|
||||
- UMAppLoader (2.2.0)
|
||||
- UMCore (7.1.1)
|
||||
- UMFaceDetectorInterface (6.1.0)
|
||||
- UMFileSystemInterface (6.1.0)
|
||||
- UMFontInterface (6.1.0)
|
||||
- UMImageLoaderInterface (6.1.0)
|
||||
- UMPermissionsInterface (6.1.0):
|
||||
- UMCore
|
||||
- UMReactNativeAdapter (6.2.2):
|
||||
- UMReactNativeAdapter (6.3.4):
|
||||
- ExpoModulesCore
|
||||
- React-Core
|
||||
- UMCore
|
||||
- UMFontInterface
|
||||
- UMSensorsInterface (6.1.0):
|
||||
- UMCore
|
||||
- UMTaskManagerInterface (6.1.0):
|
||||
- UMTaskManagerInterface (6.2.0):
|
||||
- UMCore
|
||||
- WatermelonDB (0.22.0):
|
||||
- React
|
||||
@@ -456,6 +449,7 @@ DEPENDENCIES:
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- EXConstants (from `../node_modules/expo-constants/ios`)
|
||||
- EXFileSystem (from `../node_modules/expo-file-system/ios`)
|
||||
- ExpoModulesCore (from `../node_modules/expo-modules-core/ios`)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
|
||||
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
@@ -503,7 +497,6 @@ DEPENDENCIES:
|
||||
- ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`)
|
||||
- ReactNativeKeyboardTrackingView (from `../node_modules/react-native-keyboard-tracking-view`)
|
||||
- ReactNativeNavigation (from `../node_modules/react-native-navigation`)
|
||||
- rn-fetch-blob (from `../node_modules/rn-fetch-blob`)
|
||||
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
|
||||
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
||||
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
|
||||
@@ -525,17 +518,8 @@ DEPENDENCIES:
|
||||
- Starscream (from `https://github.com/mattermost/Starscream.git`, commit `1b4b93708fb63d2665625a11e57461772a65364a`)
|
||||
- Swime (= 3.0.6)
|
||||
- UMAppLoader (from `../node_modules/unimodules-app-loader/ios`)
|
||||
- UMBarCodeScannerInterface (from `../node_modules/unimodules-barcode-scanner-interface/ios`)
|
||||
- UMCameraInterface (from `../node_modules/unimodules-camera-interface/ios`)
|
||||
- UMConstantsInterface (from `../node_modules/unimodules-constants-interface/ios`)
|
||||
- "UMCore (from `../node_modules/@unimodules/core/ios`)"
|
||||
- UMFaceDetectorInterface (from `../node_modules/unimodules-face-detector-interface/ios`)
|
||||
- UMFileSystemInterface (from `../node_modules/unimodules-file-system-interface/ios`)
|
||||
- UMFontInterface (from `../node_modules/unimodules-font-interface/ios`)
|
||||
- UMImageLoaderInterface (from `../node_modules/unimodules-image-loader-interface/ios`)
|
||||
- UMPermissionsInterface (from `../node_modules/unimodules-permissions-interface/ios`)
|
||||
- "UMReactNativeAdapter (from `../node_modules/@unimodules/react-native-adapter/ios`)"
|
||||
- UMSensorsInterface (from `../node_modules/unimodules-sensors-interface/ios`)
|
||||
- UMTaskManagerInterface (from `../node_modules/unimodules-task-manager-interface/ios`)
|
||||
- "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)"
|
||||
- XCDYouTubeKit (= 2.8.2)
|
||||
@@ -564,6 +548,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/expo-constants/ios"
|
||||
EXFileSystem:
|
||||
:path: "../node_modules/expo-file-system/ios"
|
||||
ExpoModulesCore:
|
||||
:path: "../node_modules/expo-modules-core/ios"
|
||||
FBLazyVector:
|
||||
:path: "../node_modules/react-native/Libraries/FBLazyVector"
|
||||
FBReactNativeSpec:
|
||||
@@ -654,8 +640,6 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-keyboard-tracking-view"
|
||||
ReactNativeNavigation:
|
||||
:path: "../node_modules/react-native-navigation"
|
||||
rn-fetch-blob:
|
||||
:path: "../node_modules/rn-fetch-blob"
|
||||
RNCAsyncStorage:
|
||||
:path: "../node_modules/@react-native-community/async-storage"
|
||||
RNCClipboard:
|
||||
@@ -697,28 +681,10 @@ EXTERNAL SOURCES:
|
||||
:git: https://github.com/mattermost/Starscream.git
|
||||
UMAppLoader:
|
||||
:path: "../node_modules/unimodules-app-loader/ios"
|
||||
UMBarCodeScannerInterface:
|
||||
:path: "../node_modules/unimodules-barcode-scanner-interface/ios"
|
||||
UMCameraInterface:
|
||||
:path: "../node_modules/unimodules-camera-interface/ios"
|
||||
UMConstantsInterface:
|
||||
:path: "../node_modules/unimodules-constants-interface/ios"
|
||||
UMCore:
|
||||
:path: "../node_modules/@unimodules/core/ios"
|
||||
UMFaceDetectorInterface:
|
||||
:path: "../node_modules/unimodules-face-detector-interface/ios"
|
||||
UMFileSystemInterface:
|
||||
:path: "../node_modules/unimodules-file-system-interface/ios"
|
||||
UMFontInterface:
|
||||
:path: "../node_modules/unimodules-font-interface/ios"
|
||||
UMImageLoaderInterface:
|
||||
:path: "../node_modules/unimodules-image-loader-interface/ios"
|
||||
UMPermissionsInterface:
|
||||
:path: "../node_modules/unimodules-permissions-interface/ios"
|
||||
UMReactNativeAdapter:
|
||||
:path: "../node_modules/@unimodules/react-native-adapter/ios"
|
||||
UMSensorsInterface:
|
||||
:path: "../node_modules/unimodules-sensors-interface/ios"
|
||||
UMTaskManagerInterface:
|
||||
:path: "../node_modules/unimodules-task-manager-interface/ios"
|
||||
WatermelonDB:
|
||||
@@ -736,15 +702,16 @@ SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
DoubleConversion: cf9b38bf0b2d048436d9a82ad2abe1404f11e7de
|
||||
EXConstants: c4dd28acc12039c999612507a5f935556f2c86ce
|
||||
EXFileSystem: dcf2273f49431e5037347c733a2dc5d08e0d0a9e
|
||||
EXConstants: 3babb61f8f4bb7dffe85b8b7d6eaa31d903e4d7e
|
||||
EXFileSystem: 0a04aba8da751b9ac954065911bcf166503f8267
|
||||
ExpoModulesCore: 2734852616127a6c1fc23012197890a6f3763dc7
|
||||
FBLazyVector: e686045572151edef46010a6f819ade377dfeb4b
|
||||
FBReactNativeSpec: cef0cc6d50abc92e8cf52f140aa22b5371cfec0b
|
||||
glog: 73c2498ac6884b13ede40eda8228cb1eee9d9d62
|
||||
jail-monkey: 01cd0a75aa1034d08fd851869e6e6c3b063242d7
|
||||
jail-monkey: feb2bdedc4d67312cd41a455c22661d804bba985
|
||||
libwebp: e90b9c01d99205d03b6bb8f2c8c415e5a4ef66f0
|
||||
Permission-Camera: 74dc395c37a06ebe915069c5dca954c7a2a5a2e3
|
||||
Permission-PhotoLibrary: 440f206f0d36e5951c4c9b28567f60471fdddfb5
|
||||
Permission-Camera: ac603073e4128e51e6ca3c39129778f05b4082fa
|
||||
Permission-PhotoLibrary: 0748c1a490fad126dfe36dbea8234dedfe59cc27
|
||||
RCT-Folly: ec7a233ccc97cc556cf7237f0db1ff65b986f27c
|
||||
RCTRequired: 6d3e854f0e7260a648badd0d44fc364bc9da9728
|
||||
RCTTypeSafety: c1f31d19349c6b53085766359caac425926fafaa
|
||||
@@ -760,15 +727,15 @@ SPEC CHECKSUMS:
|
||||
react-native-cameraroll: 88f4e62d9ecd0e1f253abe4f685474f2ea14bfa2
|
||||
react-native-cookies: 2cb6ef472da68610dfcf0eaee68464c244943abd
|
||||
react-native-document-picker: f1b5398801b332c77bc62ae0eae2116f49bdff26
|
||||
react-native-emm: 1652c0f3ebc39ca0cb57a43f60b96f932b7b7f19
|
||||
react-native-emm: 0bb1fcf708a59b20731033b53e1b11287df10086
|
||||
react-native-hw-keyboard-event: b517cefb8d5c659a38049c582de85ff43337dc53
|
||||
react-native-netinfo: e849fc21ca2f4128a5726c801a82fc6f4a6db50d
|
||||
react-native-network-client: 30ab97e7e6c8d6f2d2b10cc1ebad0cbf9c894c6e
|
||||
react-native-notifications: 89a73cd2cd2648e1734fa10e3507681c9e4f14de
|
||||
react-native-paste-input: dbf0099efd191ddf53e55a4a454bea0783ce4e1d
|
||||
react-native-paste-input: 4d6ecc3875153212b5503b6da093277db4ace241
|
||||
react-native-safe-area-context: f0906bf8bc9835ac9a9d3f97e8bde2a997d8da79
|
||||
react-native-video: 0bb76b6d6b77da3009611586c7dbf817b947f30e
|
||||
react-native-webview: 1a19adb5578cdf7f005b7961dcc50c1c6b70f41b
|
||||
react-native-webview: 2e8fe70dc32b50d3231c23043f8e8b5a5525d346
|
||||
React-perflogger: 25373e382fed75ce768a443822f07098a15ab737
|
||||
React-RCTActionSheet: af7796ba49ffe4ca92e7277a5d992d37203f7da5
|
||||
React-RCTAnimation: 6a2e76ab50c6f25b428d81b76a5a45351c4d77aa
|
||||
@@ -783,46 +750,36 @@ SPEC CHECKSUMS:
|
||||
ReactCommon: 149906e01aa51142707a10665185db879898e966
|
||||
ReactNativeExceptionHandler: b11ff67c78802b2f62eed0e10e75cb1ef7947c60
|
||||
ReactNativeKeyboardTrackingView: 02137fac3b2ebd330d74fa54ead48b14750a2306
|
||||
ReactNativeNavigation: 4c4ca87edc0da4ee818158a62cb6188088454e5c
|
||||
rn-fetch-blob: 17961aec08caae68bb8fc0e5b40f93b3acfa6932
|
||||
ReactNativeNavigation: 8ccac6aadb88ce59ff1594bfbe1f579b9bb5e81a
|
||||
RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCMaskedView: 0e1bc4bfa8365eba5fbbb71e07fbdc0555249489
|
||||
RNDeviceInfo: 8d3a29207835f972bce883723882980143270d55
|
||||
RNDevMenu: fd325b5554b61fe7f48d9205a3877cf5ee88cd7c
|
||||
RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff
|
||||
RNFastImage: 044259b52d726b183fa401f3521b2e5a864afc0a
|
||||
RNFileViewer: 83cc066ad795b1f986791d03b56fe0ee14b6a69f
|
||||
RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211
|
||||
RNKeychain: f75b8c8b2f17d3b2aa1f25b4a0ac5b83d947ff8f
|
||||
RNLocalize: 82a569022724d35461e2dc5b5d015a13c3ca995b
|
||||
RNPermissions: c46788f4cd402287425983e04a4c9bb4356036eb
|
||||
RNPermissions: 7043bacbf928eae25808275cfe73799b8f618911
|
||||
RNReactNativeHapticFeedback: 653a8c126a0f5e88ce15ffe280b3ff37e1fbb285
|
||||
RNReanimated: 9c13c86454bfd54dab7505c1a054470bfecd2563
|
||||
RNRudderSdk: 5d99b1a5a582ab55d6213b38018d35e98818af63
|
||||
RNSentry: bfa1e2776c7413570e790cbbf79d2060dd0a565b
|
||||
RNShare: 5ac8f6532ca4cd80fc71caef1cfbba1854a6a045
|
||||
RNRudderSdk: 9aa881c2bf754dc3b05e392340a5e3663a970f0a
|
||||
RNSentry: a2b02b326ae4fce91ce7c57d3f7dcf8df4f72269
|
||||
RNShare: 16c78aeb7a78d19e8f5597e405e87f90d91f8eb9
|
||||
RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f
|
||||
RNVectorIcons: 31cebfcf94e8cf8686eb5303ae0357da64d7a5a4
|
||||
Rudder: 40f3a255fab3f8bbe120e496f90019de68c1aca1
|
||||
Rudder: 3eae52018e1a401d3610b3f16f6210026eb327c8
|
||||
SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
|
||||
SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21
|
||||
Sentry: 89d26e036063b9cb9caa59b6951dd2f8277aa13b
|
||||
Starscream: 5178aed56b316f13fa3bc55694e583d35dd414d9
|
||||
SwiftyJSON: 2f33a42c6fbc52764d96f13368585094bfd8aa5e
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
UMAppLoader: fe2708bb0ac5cd70052bc207d06aa3b7e72b9e97
|
||||
UMBarCodeScannerInterface: 79f92bea5f7af39b381a4c82298105ceb537408a
|
||||
UMCameraInterface: 81ff46700da88435f17afedfc88915eaede7e6a6
|
||||
UMConstantsInterface: bb94dd46039dcde276ed50225b29e22785e604bf
|
||||
UMAppLoader: 21af63390e55c82e037fb9752d93114a80ecf16e
|
||||
UMCore: 2f671796d7439604a1cf8ac7bbe5809cd5c50437
|
||||
UMFaceDetectorInterface: 791eec55ffca1171992976b7eceb73e69e391c58
|
||||
UMFileSystemInterface: f72245e90ce78fa6427180ff0b0904ead13d8161
|
||||
UMFontInterface: 5843cff7db85a42ba629aaac53d33091c35524d3
|
||||
UMImageLoaderInterface: 9ddffeb644b3f45d4eb0c2f51a2fd95fd5c8d1a4
|
||||
UMPermissionsInterface: 40b72935a7d12a3f60dc6b7bb99ce47908380cb1
|
||||
UMReactNativeAdapter: 65ada852a648fcb6674acfbfe72ccb095f2f5b75
|
||||
UMSensorsInterface: a5e9db661e5d9ae214762033d725989880ae6993
|
||||
UMTaskManagerInterface: 203c11259d2699b5b3a4eda4adbc466f5cb5c561
|
||||
UMReactNativeAdapter: 684b07b79d5fe52b496d2b50bfe31f68d7daf71a
|
||||
UMTaskManagerInterface: 2be431101b73604e64fbfffcf759336f9d8fccbb
|
||||
WatermelonDB: 1da309a2b3fe35360e92f5a6bda2156543447955
|
||||
XCDYouTubeKit: 79baadb0560673a67c771eba45f83e353fd12c1f
|
||||
Yoga: 575c581c63e0d35c9a83f4b46d01d63abc1100ac
|
||||
|
||||
24733
package-lock.json
generated
24733
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
89
package.json
89
package.json
@@ -8,47 +8,47 @@
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "7.14.6",
|
||||
"@formatjs/intl-datetimeformat": "4.1.5",
|
||||
"@formatjs/intl-getcanonicallocales": "1.7.0",
|
||||
"@formatjs/intl-locale": "2.4.32",
|
||||
"@formatjs/intl-numberformat": "7.1.4",
|
||||
"@formatjs/intl-pluralrules": "4.0.27",
|
||||
"@formatjs/intl-relativetimeformat": "9.1.6",
|
||||
"@mattermost/react-native-emm": "1.1.3",
|
||||
"@formatjs/intl-datetimeformat": "4.1.6",
|
||||
"@formatjs/intl-getcanonicallocales": "1.7.1",
|
||||
"@formatjs/intl-locale": "2.4.33",
|
||||
"@formatjs/intl-numberformat": "7.1.5",
|
||||
"@formatjs/intl-pluralrules": "4.0.28",
|
||||
"@formatjs/intl-relativetimeformat": "9.1.7",
|
||||
"@mattermost/react-native-emm": "1.1.4",
|
||||
"@mattermost/react-native-network-client": "github:mattermost/react-native-network-client",
|
||||
"@mattermost/react-native-paste-input": "0.1.3",
|
||||
"@mattermost/react-native-paste-input": "0.1.4",
|
||||
"@nozbe/watermelondb": "0.22.0",
|
||||
"@nozbe/with-observables": "1.3.0",
|
||||
"@nozbe/with-observables": "1.4.0",
|
||||
"@react-native-community/async-storage": "1.12.1",
|
||||
"@react-native-community/cameraroll": "4.0.4",
|
||||
"@react-native-community/clipboard": "1.5.1",
|
||||
"@react-native-cookies/cookies": "6.0.8",
|
||||
"@react-native-community/masked-view": "0.1.11",
|
||||
"@react-native-community/netinfo": "6.0.0",
|
||||
"@rudderstack/rudder-sdk-react-native": "1.0.10",
|
||||
"@sentry/react-native": "2.5.2",
|
||||
"commonmark": "github:mattermost/commonmark.js#f6ab98dede6ce4b4e7adea140ac77249bfb2d6ce",
|
||||
"commonmark-react-renderer": "github:mattermost/commonmark-react-renderer#3a2ac19cab725ad28b170fdc1d397dddedcf87eb",
|
||||
"@react-native-cookies/cookies": "6.0.8",
|
||||
"@rudderstack/rudder-sdk-react-native": "1.0.12",
|
||||
"@sentry/react-native": "2.6.0",
|
||||
"commonmark": "0.30.0",
|
||||
"commonmark-react-renderer": "4.3.5",
|
||||
"deep-equal": "2.0.5",
|
||||
"deepmerge": "4.2.2",
|
||||
"emoji-regex": "9.2.2",
|
||||
"fuse.js": "6.4.6",
|
||||
"jail-monkey": "2.4.0",
|
||||
"jail-monkey": "2.5.0",
|
||||
"mime-db": "1.48.0",
|
||||
"moment-timezone": "0.5.33",
|
||||
"nock": "13.1.0",
|
||||
"nock": "13.1.1",
|
||||
"prop-types": "15.7.2",
|
||||
"react": "17.0.2",
|
||||
"react-intl": "5.17.7",
|
||||
"react-intl": "5.20.4",
|
||||
"react-native": "0.64.2",
|
||||
"react-native-android-open-settings": "1.3.0",
|
||||
"react-native-button": "3.0.1",
|
||||
"react-native-calendars": "1.1263.0",
|
||||
"react-native-calendars": "1.1264.0",
|
||||
"react-native-device-info": "8.1.3",
|
||||
"react-native-document-picker": "5.2.0",
|
||||
"react-native-elements": "3.4.2",
|
||||
"react-native-exception-handler": "2.10.10",
|
||||
"react-native-fast-image": "8.3.4",
|
||||
"react-native-fast-image": "8.3.6",
|
||||
"react-native-file-viewer": "2.1.4",
|
||||
"react-native-gesture-handler": "1.10.3",
|
||||
"react-native-haptic-feedback": "1.11.0",
|
||||
@@ -58,21 +58,20 @@
|
||||
"react-native-keychain": "7.0.0",
|
||||
"react-native-linear-gradient": "2.5.6",
|
||||
"react-native-localize": "2.1.1",
|
||||
"react-native-navigation": "7.13.0",
|
||||
"react-native-navigation": "7.17.1",
|
||||
"react-native-notifications": "3.5.0",
|
||||
"react-native-permissions": "3.0.4",
|
||||
"react-native-permissions": "3.0.5",
|
||||
"react-native-reanimated": "2.2.0",
|
||||
"react-native-redash": "16.0.11",
|
||||
"react-native-redash": "16.1.1",
|
||||
"react-native-safe-area-context": "3.2.0",
|
||||
"react-native-share": "6.2.1",
|
||||
"react-native-share": "6.2.3",
|
||||
"react-native-slider": "0.11.0",
|
||||
"react-native-svg": "12.1.1",
|
||||
"react-native-unimodules": "0.13.3",
|
||||
"react-native-unimodules": "0.14.5",
|
||||
"react-native-vector-icons": "8.1.0",
|
||||
"react-native-video": "5.1.1",
|
||||
"react-native-webview": "11.6.4",
|
||||
"react-native-webview": "11.6.5",
|
||||
"react-native-youtube": "2.0.2",
|
||||
"rn-fetch-blob": "0.12.0",
|
||||
"rn-placeholder": "3.0.3",
|
||||
"semver": "7.3.5",
|
||||
"serialize-error": "8.1.0",
|
||||
@@ -87,57 +86,53 @@
|
||||
"@babel/plugin-proposal-decorators": "7.14.5",
|
||||
"@babel/plugin-transform-flow-strip-types": "7.14.5",
|
||||
"@babel/plugin-transform-runtime": "7.14.5",
|
||||
"@babel/preset-env": "7.14.5",
|
||||
"@babel/preset-env": "7.14.7",
|
||||
"@babel/preset-typescript": "7.14.5",
|
||||
"@babel/register": "7.14.5",
|
||||
"@react-native-community/eslint-config": "3.0.0",
|
||||
"@storybook/addon-knobs": "6.2.9",
|
||||
"@storybook/addon-ondevice-knobs": "5.3.25",
|
||||
"@storybook/react-native": "5.3.25",
|
||||
"@storybook/react-native-server": "5.3.23",
|
||||
"@testing-library/react-native": "7.2.0",
|
||||
"@types/jest": "26.0.23",
|
||||
"@types/react": "17.0.11",
|
||||
"@types/jest": "26.0.24",
|
||||
"@types/react": "17.0.14",
|
||||
"@types/react-intl": "3.0.0",
|
||||
"@types/react-native": "0.64.10",
|
||||
"@types/react-native": "0.64.11",
|
||||
"@types/react-native-button": "3.0.0",
|
||||
"@types/react-native-share": "3.3.2",
|
||||
"@types/react-native-video": "5.0.6",
|
||||
"@types/react-native-share": "3.3.3",
|
||||
"@types/react-native-video": "5.0.8",
|
||||
"@types/react-test-renderer": "17.0.1",
|
||||
"@types/semver": "7.3.6",
|
||||
"@types/semver": "7.3.7",
|
||||
"@types/shallow-equals": "1.0.0",
|
||||
"@types/tinycolor2": "1.4.2",
|
||||
"@types/tinycolor2": "1.4.3",
|
||||
"@types/url-parse": "1.4.3",
|
||||
"@typescript-eslint/eslint-plugin": "4.28.0",
|
||||
"@typescript-eslint/parser": "4.28.0",
|
||||
"@typescript-eslint/eslint-plugin": "4.28.2",
|
||||
"@typescript-eslint/parser": "4.28.2",
|
||||
"babel-eslint": "10.1.0",
|
||||
"babel-jest": "26.6.3",
|
||||
"babel-jest": "27.0.6",
|
||||
"babel-loader": "8.2.2",
|
||||
"babel-plugin-module-resolver": "4.1.0",
|
||||
"babel-plugin-transform-remove-console": "6.9.4",
|
||||
"deep-freeze": "0.0.1",
|
||||
"detox": "18.18.1",
|
||||
"eslint": "7.29.0",
|
||||
"eslint": "7.30.0",
|
||||
"eslint-plugin-header": "3.1.1",
|
||||
"eslint-plugin-jest": "24.3.6",
|
||||
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#070ce792d105482ffb2b27cfc0b7e78b3d20acee",
|
||||
"eslint-plugin-mattermost": "github:mattermost/eslint-plugin-mattermost#46ad99355644a719bf32082f472048f526605181",
|
||||
"eslint-plugin-react": "7.24.0",
|
||||
"eslint-plugin-react-hooks": "4.2.0",
|
||||
"husky": "6.0.0",
|
||||
"husky": "7.0.1",
|
||||
"isomorphic-fetch": "3.0.0",
|
||||
"jest": "26.6.3",
|
||||
"jest-cli": "26.6.3",
|
||||
"jetifier": "2.0.0",
|
||||
"metro-react-native-babel-preset": "0.66.0",
|
||||
"metro-react-native-babel-preset": "0.66.1",
|
||||
"mmjstool": "github:mattermost/mattermost-utilities#519b99a4e51e6c67a0dbd46a6efdff27dc835aaa",
|
||||
"mock-async-storage": "2.2.0",
|
||||
"patch-package": "6.4.7",
|
||||
"react-native-dev-menu": "4.0.2",
|
||||
"react-native-dotenv": "2.5.5",
|
||||
"react-native-dotenv": "3.0.0",
|
||||
"react-native-storybook-loader": "2.0.4",
|
||||
"react-test-renderer": "17.0.2",
|
||||
"ts-jest": "27.0.3",
|
||||
"typescript": "4.3.4",
|
||||
"typescript": "4.3.5",
|
||||
"underscore": "1.13.1",
|
||||
"util": "0.12.4"
|
||||
},
|
||||
|
||||
6470
patches/commonmark+0.30.0.patch
Normal file
6470
patches/commonmark+0.30.0.patch
Normal file
File diff suppressed because it is too large
Load Diff
351
patches/commonmark-react-renderer+4.3.5.patch
Normal file
351
patches/commonmark-react-renderer+4.3.5.patch
Normal file
@@ -0,0 +1,351 @@
|
||||
diff --git a/node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js b/node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js
|
||||
index 91b0001..05b80fa 100644
|
||||
--- a/node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js
|
||||
+++ b/node_modules/commonmark-react-renderer/src/commonmark-react-renderer.js
|
||||
@@ -12,7 +12,12 @@ var typeAliases = {
|
||||
htmlblock: 'html_block',
|
||||
htmlinline: 'html_inline',
|
||||
codeblock: 'code_block',
|
||||
- hardbreak: 'linebreak'
|
||||
+ hardbreak: 'linebreak',
|
||||
+ atmention: 'at_mention',
|
||||
+ channellink: 'channel_link',
|
||||
+ editedindicator: 'edited_indicator',
|
||||
+ tableRow: 'table_row',
|
||||
+ tableCell: 'table_cell'
|
||||
};
|
||||
|
||||
var defaultRenderers = {
|
||||
@@ -24,6 +29,7 @@ var defaultRenderers = {
|
||||
link: 'a',
|
||||
paragraph: 'p',
|
||||
strong: 'strong',
|
||||
+ del: 'del',
|
||||
thematic_break: 'hr', // eslint-disable-line camelcase
|
||||
|
||||
html_block: HtmlRenderer, // eslint-disable-line camelcase
|
||||
@@ -52,7 +58,71 @@ var defaultRenderers = {
|
||||
},
|
||||
|
||||
text: null,
|
||||
- softbreak: null
|
||||
+ softbreak: null,
|
||||
+
|
||||
+ at_mention: function AtMention(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ if (props.username) {
|
||||
+ props['data-mention-name'] = props.username;
|
||||
+ }
|
||||
+
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+ channel_link: function ChannelLink(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ if (props.channelName) {
|
||||
+ props['data-channel-name'] = props.channelName;
|
||||
+ }
|
||||
+
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+ emoji: function Emoji(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ if (props.emojiName) {
|
||||
+ props['data-emoji-name'] = props.emojiName;
|
||||
+ }
|
||||
+
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+ edited_indicator: null,
|
||||
+ hashtag: function Hashtag(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ if (props.hashtag) {
|
||||
+ props['data-hashtag'] = props.hashtag;
|
||||
+ }
|
||||
+
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+ mention_highlight: function MentionHighlight(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ newProps['data-mention-highlight'] = 'true';
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+ search_highlight: function SearchHighlight(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ newProps['data-search-highlight'] = 'true';
|
||||
+ return createElement('span', newProps, props.children);
|
||||
+ },
|
||||
+
|
||||
+ table: function Table(props) {
|
||||
+ var childrenArray = React.Children.toArray(props.children);
|
||||
+
|
||||
+ var children = [createElement('thead', {'key': 'thead'}, childrenArray.slice(0, 1))];
|
||||
+ if (childrenArray.length > 1) {
|
||||
+ children.push(createElement('tbody', {'key': 'tbody'}, childrenArray.slice(1)));
|
||||
+ }
|
||||
+
|
||||
+ return createElement('table', getCoreProps(props), children);
|
||||
+ },
|
||||
+ table_row: 'tr',
|
||||
+ table_cell: function TableCell(props) {
|
||||
+ var newProps = getCoreProps(props);
|
||||
+ if (props.align) {
|
||||
+ newProps.className = 'align-' + props.align;
|
||||
+ }
|
||||
+
|
||||
+ return createElement('td', newProps, props.children);
|
||||
+ }
|
||||
};
|
||||
|
||||
var coreTypes = Object.keys(defaultRenderers);
|
||||
@@ -147,7 +217,7 @@ function flattenPosition(pos) {
|
||||
}
|
||||
|
||||
// For some nodes, we want to include more props than for others
|
||||
-function getNodeProps(node, key, opts, renderer) {
|
||||
+function getNodeProps(node, key, opts, renderer, context) {
|
||||
var props = { key: key }, undef;
|
||||
|
||||
// `sourcePos` is true if the user wants source information (line/column info from markdown source)
|
||||
@@ -194,16 +264,49 @@ function getNodeProps(node, key, opts, renderer) {
|
||||
|
||||
// Commonmark treats image description as children. We just want the text
|
||||
props.alt = node.react.children.join('');
|
||||
- node.react.children = undef;
|
||||
break;
|
||||
case 'list':
|
||||
props.start = node.listStart;
|
||||
props.type = node.listType;
|
||||
props.tight = node.listTight;
|
||||
break;
|
||||
+ case 'at_mention':
|
||||
+ props.mentionName = node.mentionName;
|
||||
+ break;
|
||||
+ case 'channel_link':
|
||||
+ props.channelName = node.channelName;
|
||||
+ break;
|
||||
+ case 'emoji':
|
||||
+ props.emojiName = node.emojiName;
|
||||
+ props.literal = node.literal;
|
||||
+ break;
|
||||
+ case 'hashtag':
|
||||
+ props.hashtag = node.hashtag;
|
||||
+ break;
|
||||
+ case 'paragraph':
|
||||
+ props.first = !(node._prev && node._prev.type === 'paragraph');
|
||||
+ props.last = !(node._next && node._next.type === 'paragraph');
|
||||
+ break;
|
||||
+ case 'edited_indicator':
|
||||
+ break;
|
||||
+ case 'table':
|
||||
+ props.numRows = countRows(node);
|
||||
+ props.numColumns = countColumns(node);
|
||||
+ break;
|
||||
+ case 'table_row':
|
||||
+ props.isHeading = node.isHeading;
|
||||
+ break;
|
||||
+ case 'table_cell':
|
||||
+ props.isHeading = node.isHeading;
|
||||
+ props.align = node.align;
|
||||
+ break;
|
||||
default:
|
||||
}
|
||||
|
||||
+ if (opts.getExtraPropsForNode) {
|
||||
+ props = Object.assign(props, opts.getExtraPropsForNode(node));
|
||||
+ }
|
||||
+
|
||||
if (typeof renderer !== 'string') {
|
||||
props.literal = node.literal;
|
||||
}
|
||||
@@ -213,9 +316,29 @@ function getNodeProps(node, key, opts, renderer) {
|
||||
props.children = children.reduce(reduceChildren, []) || null;
|
||||
}
|
||||
|
||||
+ props.context = context.slice();
|
||||
+
|
||||
return props;
|
||||
}
|
||||
|
||||
+function countChildren(node) {
|
||||
+ var count = 0;
|
||||
+
|
||||
+ for (var child = node.firstChild; child; child = child.next) {
|
||||
+ count += 1;
|
||||
+ }
|
||||
+
|
||||
+ return count;
|
||||
+}
|
||||
+
|
||||
+function countRows(table) {
|
||||
+ return countChildren(table);
|
||||
+}
|
||||
+
|
||||
+function countColumns(table) {
|
||||
+ return countChildren(table.firstChild);
|
||||
+}
|
||||
+
|
||||
function getPosition(node) {
|
||||
if (!node) {
|
||||
return null;
|
||||
@@ -238,26 +361,23 @@ function renderNodes(block) {
|
||||
transformLinkUri: this.transformLinkUri,
|
||||
transformImageUri: this.transformImageUri,
|
||||
softBreak: this.softBreak,
|
||||
- linkTarget: this.linkTarget
|
||||
+ linkTarget: this.linkTarget,
|
||||
+ getExtraPropsForNode: this.getExtraPropsForNode
|
||||
};
|
||||
|
||||
- var e, node, entering, leaving, type, doc, key, nodeProps, prevPos, prevIndex = 0;
|
||||
+ var e;
|
||||
+ var doc;
|
||||
+ var context = [];
|
||||
+ var index = 0;
|
||||
while ((e = walker.next())) {
|
||||
- var pos = getPosition(e.node.sourcepos ? e.node : e.node.parent);
|
||||
- if (prevPos === pos) {
|
||||
- key = pos + prevIndex;
|
||||
- prevIndex++;
|
||||
- } else {
|
||||
- key = pos;
|
||||
- prevIndex = 0;
|
||||
- }
|
||||
+ var key = String(index);
|
||||
+ index += 1;
|
||||
|
||||
- prevPos = pos;
|
||||
- entering = e.entering;
|
||||
- leaving = !entering;
|
||||
- node = e.node;
|
||||
- type = normalizeTypeName(node.type);
|
||||
- nodeProps = null;
|
||||
+ var entering = e.entering;
|
||||
+ var leaving = !entering;
|
||||
+ var node = e.node;
|
||||
+ var type = normalizeTypeName(node.type);
|
||||
+ var nodeProps = null;
|
||||
|
||||
// If we have not assigned a document yet, assume the current node is just that
|
||||
if (!doc) {
|
||||
@@ -270,7 +390,7 @@ function renderNodes(block) {
|
||||
}
|
||||
|
||||
// In HTML, we don't want paragraphs inside of list items
|
||||
- if (type === 'paragraph' && isGrandChildOfList(node)) {
|
||||
+ if (!this.renderParagraphsInLists && type === 'paragraph' && isGrandChildOfList(node)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -289,7 +409,7 @@ function renderNodes(block) {
|
||||
if (this.allowNode && (isCompleteParent || !node.isContainer)) {
|
||||
var nodeChildren = isCompleteParent ? node.react.children : [];
|
||||
|
||||
- nodeProps = getNodeProps(node, key, propOptions, renderer);
|
||||
+ nodeProps = getNodeProps(node, key, propOptions, renderer, context);
|
||||
disallowedByUser = !this.allowNode({
|
||||
type: pascalCase(type),
|
||||
renderer: this.renderers[type],
|
||||
@@ -298,6 +418,30 @@ function renderNodes(block) {
|
||||
});
|
||||
}
|
||||
|
||||
+ if (node.isContainer) {
|
||||
+ var contextType = node.type;
|
||||
+ if (node.level) {
|
||||
+ contextType = node.type + node.level;
|
||||
+ } else if (node.type === 'table_row' && node.parent.firstChild === node) {
|
||||
+ contextType = 'table_header_row';
|
||||
+ } else {
|
||||
+ contextType = node.type;
|
||||
+ }
|
||||
+
|
||||
+ if (entering) {
|
||||
+ context.push(contextType);
|
||||
+ } else {
|
||||
+ var popped = context.pop();
|
||||
+
|
||||
+ if (!popped) {
|
||||
+ throw new Error('Attempted to pop empty stack');
|
||||
+ } else if (!popped === contextType) {
|
||||
+ throw new Error('Popped context of type `' + pascalCase(popped) +
|
||||
+ '` when expecting context of type `' + pascalCase(contextType) + '`');
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (!isDocument && (disallowedByUser || disallowedByConfig)) {
|
||||
if (!this.unwrapDisallowed && entering && node.isContainer) {
|
||||
walker.resumeAt(node, false);
|
||||
@@ -313,15 +457,25 @@ function renderNodes(block) {
|
||||
);
|
||||
}
|
||||
|
||||
- if (node.isContainer && entering) {
|
||||
+ if (context.length > this.maxDepth) {
|
||||
+ // Do nothing, we should not regularly be nested this deeply and we don't want to cause React to
|
||||
+ // overflow the stack
|
||||
+ } else if (node.isContainer && entering) {
|
||||
node.react = {
|
||||
component: renderer,
|
||||
props: {},
|
||||
children: []
|
||||
};
|
||||
} else {
|
||||
- var childProps = nodeProps || getNodeProps(node, key, propOptions, renderer);
|
||||
- if (renderer) {
|
||||
+ var childProps = nodeProps || getNodeProps(node, key, propOptions, renderer, context);
|
||||
+ if (renderer === ReactRenderer.forwardChildren) {
|
||||
+ if (childProps.children) {
|
||||
+ for (var i = 0; i < childProps.children.length; i++) {
|
||||
+ var child = childProps.children[i];
|
||||
+ addChild(node, child);
|
||||
+ }
|
||||
+ }
|
||||
+ } else if (renderer) {
|
||||
childProps = typeof renderer === 'string'
|
||||
? childProps
|
||||
: assign(childProps, {nodeKey: childProps.key});
|
||||
@@ -341,6 +495,10 @@ function renderNodes(block) {
|
||||
}
|
||||
}
|
||||
|
||||
+ if (context.length !== 0) {
|
||||
+ throw new Error('Expected context to be empty after rendering, but has `' + context.join(', ') + '`');
|
||||
+ }
|
||||
+
|
||||
return doc.react.children;
|
||||
}
|
||||
|
||||
@@ -401,21 +559,31 @@ function ReactRenderer(options) {
|
||||
renderers: assign({}, defaultRenderers, normalizeRenderers(opts.renderers)),
|
||||
escapeHtml: Boolean(opts.escapeHtml),
|
||||
skipHtml: Boolean(opts.skipHtml),
|
||||
+ renderParagraphsInLists: Boolean(opts.renderParagraphsInLists),
|
||||
transformLinkUri: linkFilter,
|
||||
transformImageUri: imageFilter,
|
||||
allowNode: opts.allowNode,
|
||||
allowedTypes: allowedTypes,
|
||||
unwrapDisallowed: Boolean(opts.unwrapDisallowed),
|
||||
render: renderNodes,
|
||||
- linkTarget: opts.linkTarget || false
|
||||
+ linkTarget: opts.linkTarget || false,
|
||||
+ maxDepth: opts.maxDepth || 30,
|
||||
+ getExtraPropsForNode: opts.getExtraPropsForNode
|
||||
};
|
||||
}
|
||||
|
||||
+function forwardChildren(props) {
|
||||
+ return props.children;
|
||||
+}
|
||||
+
|
||||
ReactRenderer.uriTransformer = defaultLinkUriFilter;
|
||||
ReactRenderer.types = coreTypes.map(pascalCase);
|
||||
ReactRenderer.renderers = coreTypes.reduce(function(renderers, type) {
|
||||
renderers[pascalCase(type)] = defaultRenderers[type];
|
||||
return renderers;
|
||||
}, {});
|
||||
+ReactRenderer.countRows = countRows;
|
||||
+ReactRenderer.countColumns = countColumns;
|
||||
+ReactRenderer.forwardChildren = forwardChildren;
|
||||
|
||||
module.exports = ReactRenderer;
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
|
||||
index 4e4f498..b7ddd86 100644
|
||||
index 3b4e398..8e91f6b 100644
|
||||
--- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
|
||||
+++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java
|
||||
@@ -55,14 +55,18 @@ public class NavigationModule extends ReactContextBaseJavaModule {
|
||||
@@ -29,7 +29,7 @@ index 4e4f498..b7ddd86 100644
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -201,8 +205,12 @@ public class NavigationModule extends ReactContextBaseJavaModule {
|
||||
@@ -210,8 +214,12 @@ public class NavigationModule extends ReactContextBaseJavaModule {
|
||||
|
||||
protected void handle(Runnable task) {
|
||||
UiThread.post(() -> {
|
||||
@@ -44,6 +44,32 @@ index 4e4f498..b7ddd86 100644
|
||||
}
|
||||
});
|
||||
}
|
||||
diff --git a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java
|
||||
index 1e5751e..f921605 100644
|
||||
--- a/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java
|
||||
+++ b/node_modules/react-native-navigation/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java
|
||||
@@ -1,10 +1,12 @@
|
||||
package com.reactnativenavigation.viewcontrollers.viewcontroller;
|
||||
|
||||
import android.app.Activity;
|
||||
+import android.content.Context;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewManager;
|
||||
import android.view.ViewTreeObserver;
|
||||
+import android.view.inputmethod.InputMethodManager;
|
||||
|
||||
import androidx.annotation.CallSuper;
|
||||
import androidx.annotation.CheckResult;
|
||||
@@ -276,6 +278,8 @@ public abstract class ViewController<T extends ViewGroup> implements ViewTreeObs
|
||||
((Destroyable) view).destroy();
|
||||
}
|
||||
if (view != null) {
|
||||
+ InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
view.setOnHierarchyChangeListener(null);
|
||||
if (view.getParent() instanceof ViewGroup) {
|
||||
diff --git a/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m b/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m
|
||||
index 815e1c6..a35a087 100644
|
||||
--- a/node_modules/react-native-navigation/lib/ios/RNNOverlayWindow.m
|
||||
@@ -68,19 +94,17 @@ index 815e1c6..a35a087 100644
|
||||
}
|
||||
|
||||
diff --git a/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m b/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m
|
||||
index 6b9981d..f725701 100644
|
||||
index 2e60123..56830c8 100644
|
||||
--- a/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m
|
||||
+++ b/node_modules/react-native-navigation/lib/ios/RNNViewLocation.m
|
||||
@@ -31,11 +31,7 @@
|
||||
@@ -21,8 +21,8 @@
|
||||
self.toBounds = [self convertViewBounds:toElement];
|
||||
self.fromCenter = [self convertViewCenter:fromElement];
|
||||
self.toCenter = [self convertViewCenter:toElement];
|
||||
- self.fromPath = [self resolveViewPath:fromElement withSuperView:fromElement.superview];
|
||||
- self.toPath = [self resolveViewPath:toElement withSuperView:toElement.superview];
|
||||
+ self.fromPath = fromElement.bounds;
|
||||
+ self.toPath = toElement.bounds;
|
||||
|
||||
- (CATransform3D)getTransform:(UIView *)view {
|
||||
if (view) {
|
||||
- if (!CATransform3DEqualToTransform(view.layer.transform, CATransform3DIdentity)) {
|
||||
- return view.layer.transform;
|
||||
- } else {
|
||||
- return [self getTransform:view.superview];
|
||||
- }
|
||||
+ return view.layer.transform;
|
||||
}
|
||||
|
||||
return CATransform3DIdentity;
|
||||
return self;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import '@storybook/addon-knobs/register';
|
||||
@@ -1,31 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import {Platform} from 'react-native';
|
||||
import {STORYBOOK_HOST, STORYBOOK_PORT} from '@env';
|
||||
import {getStorybookUI, configure} from '@storybook/react-native';
|
||||
|
||||
// load react-native addons for storybook rn
|
||||
import '@storybook/addon-ondevice-knobs/register';
|
||||
|
||||
import {loadStories} from './storyLoader';
|
||||
|
||||
// import stories
|
||||
configure(() => {
|
||||
loadStories();
|
||||
}, module);
|
||||
|
||||
// this seems to be required to get react-native-dotenv to load the env variables
|
||||
// properly. Possibly something related to babel-loader
|
||||
const port = STORYBOOK_PORT;
|
||||
const host = STORYBOOK_HOST;
|
||||
|
||||
// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters
|
||||
// To find allowed options for getStorybookUI
|
||||
const StorybookUIRoot = getStorybookUI({
|
||||
port: port || 7007,
|
||||
host: host || (Platform.OS === 'ios' ? 'localhost' : '10.0.2.2'),
|
||||
onDeviceUI: true,
|
||||
resetStorybook: true,
|
||||
});
|
||||
|
||||
export default StorybookUIRoot;
|
||||
@@ -1,8 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import {Navigation} from 'react-native-navigation';
|
||||
import {goToScreen} from '@screens/navigation';
|
||||
|
||||
import DevMenu from 'react-native-dev-menu';
|
||||
DevMenu.addItem('StoryBook', () => goToScreen('StoryBook', 'StoryBook'));
|
||||
Navigation.registerComponent('StoryBook', () => require('../storybook').default, () => require('../storybook').default);
|
||||
@@ -1,13 +0,0 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
function loadStories() {
|
||||
// require('../app/components/loading.stories');
|
||||
}
|
||||
|
||||
const stories = [];
|
||||
|
||||
module.exports = {
|
||||
loadStories,
|
||||
stories,
|
||||
};
|
||||
@@ -231,6 +231,7 @@ jest.mock('react-native-navigation', () => {
|
||||
const RNN = jest.requireActual('react-native-navigation');
|
||||
RNN.Navigation.setLazyComponentRegistrator = jest.fn();
|
||||
RNN.Navigation.setDefaultOptions = jest.fn();
|
||||
RNN.Navigation.registerComponent = jest.fn();
|
||||
return {
|
||||
...RNN,
|
||||
Navigation: {
|
||||
|
||||
2
types/api/client_error.d.ts
vendored
2
types/api/client_error.d.ts
vendored
@@ -3,7 +3,7 @@
|
||||
|
||||
interface ClientErrorProps extends Error {
|
||||
details: Error;
|
||||
intl?: {defaultMessage?: string; id: string;} | { defaultMessage?: string; id: string } | { id: string; defaultMessage?: string; values: any } | { id: string; defaultMessage?: string };
|
||||
intl?: {defaultMessage?: string; id: string} | { defaultMessage?: string; id: string } | { id: string; defaultMessage?: string; values: any } | { id: string; defaultMessage?: string };
|
||||
url: string;
|
||||
server_error_id?: string | number;
|
||||
status_code?: number;
|
||||
|
||||
2
types/api/emojis.d.ts
vendored
2
types/api/emojis.d.ts
vendored
@@ -26,7 +26,7 @@ type CustomEmoji = {
|
||||
|
||||
type SystemEmoji = {
|
||||
filename: string;
|
||||
aliases: Array<string>;
|
||||
aliases: string[];
|
||||
category: EmojiCategory;
|
||||
batch: number;
|
||||
};
|
||||
|
||||
2
types/api/files.d.ts
vendored
2
types/api/files.d.ts
vendored
@@ -23,7 +23,7 @@ type FileInfo = {
|
||||
|
||||
type FilesState = {
|
||||
files: Dictionary<FileInfo>;
|
||||
fileIdsByPostId: Dictionary<Array<string>>;
|
||||
fileIdsByPostId: Dictionary<string[]>;
|
||||
filePublicLink?: string;
|
||||
};
|
||||
|
||||
|
||||
4
types/api/groups.d.ts
vendored
4
types/api/groups.d.ts
vendored
@@ -47,8 +47,8 @@ type GroupChannel = {
|
||||
update_at: number;
|
||||
};
|
||||
type GroupSyncables = {
|
||||
teams: Array<GroupTeam>;
|
||||
channels: Array<GroupChannel>;
|
||||
teams: GroupTeam[];
|
||||
channels: GroupChannel[];
|
||||
};
|
||||
type GroupsState = {
|
||||
syncables: {
|
||||
|
||||
2
types/api/integrations.d.ts
vendored
2
types/api/integrations.d.ts
vendored
@@ -67,7 +67,7 @@ type DialogElement = {
|
||||
min_length: number;
|
||||
max_length: number;
|
||||
data_source: string;
|
||||
options: Array<DialogOption>;
|
||||
options: DialogOption[];
|
||||
};
|
||||
|
||||
type InteractiveDialogConfig = {
|
||||
|
||||
18
types/api/posts.d.ts
vendored
18
types/api/posts.d.ts
vendored
@@ -32,11 +32,11 @@ type PostImage = {
|
||||
};
|
||||
|
||||
type PostMetadata = {
|
||||
embeds: Array<PostEmbed>;
|
||||
emojis: Array<CustomEmoji>;
|
||||
files: Array<FileInfo>;
|
||||
embeds: PostEmbed[];
|
||||
emojis: CustomEmoji[];
|
||||
files: FileInfo[];
|
||||
images: Dictionary<PostImage>;
|
||||
reactions: Array<Reaction>;
|
||||
reactions: Reaction[];
|
||||
};
|
||||
|
||||
type Post = {
|
||||
@@ -60,7 +60,7 @@ type Post = {
|
||||
file_ids?: any[];
|
||||
metadata: PostMetadata;
|
||||
failed?: boolean;
|
||||
user_activity_posts?: Array<Post>;
|
||||
user_activity_posts?: Post[];
|
||||
state?: 'DELETED';
|
||||
ownPost?: boolean;
|
||||
};
|
||||
@@ -77,13 +77,13 @@ type PostWithFormatData = Post & {
|
||||
};
|
||||
|
||||
type PostOrderBlock = {
|
||||
order: Array<string>;
|
||||
order: string[];
|
||||
recent?: boolean;
|
||||
oldest?: boolean;
|
||||
};
|
||||
|
||||
type MessageHistory = {
|
||||
messages: Array<string>;
|
||||
messages: string[];
|
||||
index: {
|
||||
post: number;
|
||||
comment: number;
|
||||
@@ -92,11 +92,11 @@ type MessageHistory = {
|
||||
|
||||
type PostsState = {
|
||||
posts: IDMappedObjects<Post>;
|
||||
postsInChannel: Dictionary<Array<PostOrderBlock>>;
|
||||
postsInChannel: Dictionary<PostOrderBlock[]>;
|
||||
postsInThread: RelationOneToMany<Post, Post>;
|
||||
reactions: RelationOneToOne<Post, Dictionary<Reaction>>;
|
||||
openGraph: RelationOneToOne<Post, any>;
|
||||
pendingPostIds: Array<string>;
|
||||
pendingPostIds: string[];
|
||||
selectedPostId: string;
|
||||
currentFocusedPostId: string;
|
||||
messagesHistory: MessageHistory;
|
||||
|
||||
2
types/api/roles.d.ts
vendored
2
types/api/roles.d.ts
vendored
@@ -11,7 +11,7 @@ type Role = {
|
||||
create_at: number;
|
||||
update_at: number;
|
||||
delete_at: number;
|
||||
permissions: Array<string>;
|
||||
permissions: string[];
|
||||
scheme_managed: boolean;
|
||||
built_in: boolean;
|
||||
};
|
||||
|
||||
2
types/api/session.d.ts
vendored
2
types/api/session.d.ts
vendored
@@ -2,7 +2,7 @@
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
interface Session {
|
||||
id: string,
|
||||
id: string;
|
||||
create_at: string|number;
|
||||
device_id?: string;
|
||||
expires_at: string|number;
|
||||
|
||||
2
types/api/users.d.ts
vendored
2
types/api/users.d.ts
vendored
@@ -45,7 +45,7 @@ type UserProfile = {
|
||||
type UsersState = {
|
||||
currentUserId: string;
|
||||
isManualStatus: RelationOneToOne<UserProfile, boolean>;
|
||||
mySessions: Array<any>;
|
||||
mySessions: any[];
|
||||
profiles: IDMappedObjects<UserProfile>;
|
||||
profilesInTeam: RelationOneToMany<Team, UserProfile>;
|
||||
profilesNotInTeam: RelationOneToMany<Team, UserProfile>;
|
||||
|
||||
26
types/database/database.d.ts
vendored
26
types/database/database.d.ts
vendored
@@ -59,7 +59,7 @@ export type OperationArgs = {
|
||||
transformer: (TransformerArgs) => Promise<Model>;
|
||||
};
|
||||
|
||||
export type Models = Class<Model>[];
|
||||
export type Models = Array<Class<Model>>;
|
||||
|
||||
// The elements needed to create a new database
|
||||
export type CreateServerDatabaseArgs = {
|
||||
@@ -78,8 +78,8 @@ export type HandleFilesArgs = {
|
||||
};
|
||||
|
||||
export type HandlePostMetadataArgs = {
|
||||
embeds?: { embed: RawEmbed[]; postId: string }[];
|
||||
images?: { images: Dictionary<PostImage>; postId: string }[];
|
||||
embeds?: Array<{ embed: RawEmbed[]; postId: string }>;
|
||||
images?: Array<{ images: Dictionary<PostImage>; postId: string }>;
|
||||
prepareRecordsOnly: boolean;
|
||||
};
|
||||
|
||||
@@ -151,29 +151,29 @@ type PrepareOnly = {
|
||||
}
|
||||
|
||||
export type HandleInfoArgs = PrepareOnly & {
|
||||
info: RawInfo[]
|
||||
info: RawInfo[];
|
||||
}
|
||||
export type HandleServersArgs = PrepareOnly & {
|
||||
servers: RawServers[]
|
||||
servers: RawServers[];
|
||||
}
|
||||
export type HandleGlobalArgs = PrepareOnly & {
|
||||
global: RawGlobal[]
|
||||
global: RawGlobal[];
|
||||
}
|
||||
|
||||
export type HandleRoleArgs = PrepareOnly & {
|
||||
roles: RawRole[]
|
||||
roles: RawRole[];
|
||||
}
|
||||
|
||||
export type HandleCustomEmojiArgs = PrepareOnly & {
|
||||
emojis: RawCustomEmoji[]
|
||||
emojis: RawCustomEmoji[];
|
||||
}
|
||||
|
||||
export type HandleSystemArgs = PrepareOnly & {
|
||||
systems: RawSystem[]
|
||||
systems: RawSystem[];
|
||||
}
|
||||
|
||||
export type HandleTOSArgs = PrepareOnly & {
|
||||
termOfService: RawTermsOfService[]
|
||||
termOfService: RawTermsOfService[];
|
||||
}
|
||||
|
||||
export type HandleMyChannelArgs = PrepareOnly & {
|
||||
@@ -309,7 +309,7 @@ export type RawChannelInfo = {
|
||||
};
|
||||
|
||||
export type RawChannelMembership = {
|
||||
id? : string;
|
||||
id?: string;
|
||||
channel_id: string;
|
||||
user_id: string;
|
||||
roles: string;
|
||||
@@ -543,7 +543,7 @@ export type RawPreference = {
|
||||
};
|
||||
|
||||
export type RawReaction = {
|
||||
id? : string;
|
||||
id?: string;
|
||||
create_at: number;
|
||||
delete_at: number;
|
||||
emoji_name: string;
|
||||
@@ -592,7 +592,7 @@ export type RawTeamChannelHistory = {
|
||||
};
|
||||
|
||||
export type RawTeamMembership = {
|
||||
id? : string;
|
||||
id?: string;
|
||||
delete_at: number;
|
||||
explicit_roles: string;
|
||||
roles: string;
|
||||
|
||||
@@ -2,32 +2,32 @@
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
export type License = {
|
||||
Announcement: string,
|
||||
Cloud: string,
|
||||
Cluster: string,
|
||||
Company: string,
|
||||
Compliance: string,
|
||||
CustomPermissionsSchemes: string,
|
||||
CustomTermsOfService: string,
|
||||
DataRetention: string,
|
||||
Elasticsearch: string,
|
||||
EmailNotificationContents: string,
|
||||
GoogleOAuth: string,
|
||||
GuestAccounts: string,
|
||||
GuestAccountsPermissions: string,
|
||||
IDLoadedPushNotifications: string,
|
||||
IsLicensed: string,
|
||||
LDAP: string,
|
||||
LDAPGroups: string,
|
||||
LockTeammateNameDisplay: string,
|
||||
MFA: string,
|
||||
MHPNS: string,
|
||||
MessageExport: string,
|
||||
Metrics: string,
|
||||
Office365OAuth: string,
|
||||
OpenId: string,
|
||||
RemoteClusterService: string,
|
||||
SAML: string,
|
||||
SharedChannels: string,
|
||||
Users: string
|
||||
Announcement: string;
|
||||
Cloud: string;
|
||||
Cluster: string;
|
||||
Company: string;
|
||||
Compliance: string;
|
||||
CustomPermissionsSchemes: string;
|
||||
CustomTermsOfService: string;
|
||||
DataRetention: string;
|
||||
Elasticsearch: string;
|
||||
EmailNotificationContents: string;
|
||||
GoogleOAuth: string;
|
||||
GuestAccounts: string;
|
||||
GuestAccountsPermissions: string;
|
||||
IDLoadedPushNotifications: string;
|
||||
IsLicensed: string;
|
||||
LDAP: string;
|
||||
LDAPGroups: string;
|
||||
LockTeammateNameDisplay: string;
|
||||
MFA: string;
|
||||
MHPNS: string;
|
||||
MessageExport: string;
|
||||
Metrics: string;
|
||||
Office365OAuth: string;
|
||||
OpenId: string;
|
||||
RemoteClusterService: string;
|
||||
SAML: string;
|
||||
SharedChannels: string;
|
||||
Users: string;
|
||||
}
|
||||
|
||||
2
types/global/native_notifications.d.ts
vendored
2
types/global/native_notifications.d.ts
vendored
@@ -10,7 +10,7 @@ interface NativeNotificationPreferences {
|
||||
selectedUri?: string;
|
||||
shouldBlink: boolean;
|
||||
shouldVibrate: boolean;
|
||||
sounds: Array<NativeNotificationSound>;
|
||||
sounds: NativeNotificationSound[];
|
||||
}
|
||||
|
||||
interface NativeNotification {
|
||||
|
||||
40
types/modules/react-native-slider.d.ts
vendored
40
types/modules/react-native-slider.d.ts
vendored
@@ -20,46 +20,46 @@ declare module 'react-native-slider' {
|
||||
* *This is not a controlled component*, e.g. if you don't update
|
||||
* the value, the component won't be reset to its inital value.
|
||||
*/
|
||||
value?: number
|
||||
value?: number;
|
||||
|
||||
/**
|
||||
* If true the user won't be able to move the slider.
|
||||
* Default value is false.
|
||||
*/
|
||||
disabled?: boolean
|
||||
disabled?: boolean;
|
||||
|
||||
/**
|
||||
* Initial minimum value of the slider. Default value is 0.
|
||||
*/
|
||||
minimumValue?: number
|
||||
minimumValue?: number;
|
||||
|
||||
/**
|
||||
* Initial maximum value of the slider. Default value is 1.
|
||||
*/
|
||||
maximumValue?: number
|
||||
maximumValue?: number;
|
||||
|
||||
/**
|
||||
* Step value of the slider. The value should be between 0 and
|
||||
* (maximumValue - minimumValue). Default value is 0.
|
||||
*/
|
||||
step?: number
|
||||
step?: number;
|
||||
|
||||
/**
|
||||
* The color used for the track to the left of the button. Overrides the
|
||||
* default blue gradient image.
|
||||
*/
|
||||
minimumTrackTintColor?: string
|
||||
minimumTrackTintColor?: string;
|
||||
|
||||
/**
|
||||
* The color used for the track to the right of the button. Overrides the
|
||||
* default blue gradient image.
|
||||
*/
|
||||
maximumTrackTintColor?: string
|
||||
maximumTrackTintColor?: string;
|
||||
|
||||
/**
|
||||
* The color used for the thumb.
|
||||
*/
|
||||
thumbTintColor?: string
|
||||
thumbTintColor?: string;
|
||||
|
||||
/**
|
||||
* The size of the touch area that allows moving the thumb.
|
||||
@@ -68,64 +68,64 @@ declare module 'react-native-slider' {
|
||||
* to move it easily.
|
||||
* The default is {width: 40, height: 40}.
|
||||
*/
|
||||
thumbTouchSize?: { width: number; height: number }
|
||||
thumbTouchSize?: { width: number; height: number };
|
||||
|
||||
/**
|
||||
* Callback continuously called while the user is dragging the slider.
|
||||
*/
|
||||
onValueChange: (value: number) => void
|
||||
onValueChange: (value: number) => void;
|
||||
|
||||
/**
|
||||
* Callback called when the user starts changing the value (e.g. when
|
||||
* the slider is pressed).
|
||||
*/
|
||||
onSlidingStart?: (value: number) => void
|
||||
onSlidingStart?: (value: number) => void;
|
||||
|
||||
/**
|
||||
* Callback called when the user finishes changing the value (e.g. when
|
||||
* the slider is released).
|
||||
*/
|
||||
onSlidingComplete?: (value: number) => void
|
||||
onSlidingComplete?: (value: number) => void;
|
||||
|
||||
/**
|
||||
* The style applied to the slider container.
|
||||
*/
|
||||
style?: StyleProp<ViewStyle>
|
||||
style?: StyleProp<ViewStyle>;
|
||||
|
||||
/**
|
||||
* The style applied to the track.
|
||||
*/
|
||||
trackStyle?: StyleProp<ViewStyle>
|
||||
trackStyle?: StyleProp<ViewStyle>;
|
||||
|
||||
/**
|
||||
* The style applied to the thumb.
|
||||
*/
|
||||
thumbStyle?: StyleProp<ViewStyle>
|
||||
thumbStyle?: StyleProp<ViewStyle>;
|
||||
|
||||
/**
|
||||
* Sets an image for the thumb.
|
||||
*/
|
||||
thumbImage?: ImageSourcePropType
|
||||
thumbImage?: ImageSourcePropType;
|
||||
|
||||
/**
|
||||
* Set this to true to visually see the thumb touch rect in green.
|
||||
*/
|
||||
debugTouchArea?: boolean
|
||||
debugTouchArea?: boolean;
|
||||
|
||||
/**
|
||||
* Set to true to animate values with default 'timing' animation type
|
||||
*/
|
||||
animateTransitions?: boolean
|
||||
animateTransitions?: boolean;
|
||||
|
||||
/**
|
||||
* Custom Animation type. 'spring' or 'timing'.
|
||||
*/
|
||||
animationType?: 'spring' | 'timing'
|
||||
animationType?: 'spring' | 'timing';
|
||||
|
||||
/**
|
||||
* Used to configure the animation parameters. These are the same parameters in the Animated library.
|
||||
*/
|
||||
animationConfig?: SpringAnimationConfig | TimingAnimationConfig
|
||||
animationConfig?: SpringAnimationConfig | TimingAnimationConfig;
|
||||
}
|
||||
|
||||
const Slider: ComponentClass<SliderProps>;
|
||||
|
||||
6
types/screens/gallery.d.ts
vendored
6
types/screens/gallery.d.ts
vendored
@@ -55,7 +55,7 @@ export interface FooterRef {
|
||||
}
|
||||
|
||||
export interface GalleryProps {
|
||||
files: Array<FileInfo>;
|
||||
files: FileInfo[];
|
||||
footerVisible: boolean;
|
||||
height: number;
|
||||
initialIndex: number;
|
||||
@@ -104,11 +104,11 @@ export interface ToastProps {
|
||||
}
|
||||
|
||||
export interface ToastRef {
|
||||
show: ShowToast
|
||||
show: ShowToast;
|
||||
}
|
||||
|
||||
export interface ToastState {
|
||||
animation?: Animated.CompositeAnimation,
|
||||
animation?: Animated.CompositeAnimation;
|
||||
duration?: number;
|
||||
callback?: () => void;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user