Compare commits

...

5 Commits

Author SHA1 Message Date
Saúl Ibarra Corretgé f545dc417f flow: tame the beast
🔥🔥🔥
2019-03-19 22:00:08 +01:00
Saúl Ibarra Corretgé 38c414baf0 flow: update type definitions 2019-03-19 22:00:08 +01:00
Saúl Ibarra Corretgé 4e8697385d chore: use strings as action types
Using anything non-serializable for action types is discouraged:
https://redux.js.org/faq/actions#actions

In fact, this is the Flow definition for dispatching actions:

declare export type DispatchAPI<A> = (action: A) => A;
declare export type Dispatch<A: { type: $Subtype<string> }> = DispatchAPI<A>;

Note how the `type` field is defined as a subtype of string, which Symbol isn’t.
2019-03-19 22:00:08 +01:00
Saúl Ibarra Corretgé 31f97c666b android: enable 64bit builds 2019-03-19 22:00:08 +01:00
Saúl Ibarra Corretgé f56cd37b9f deps: update React Native to version 0.59
This new version comes with an updated JSC runtime, so we no longer need to
depend on the updated version ourselves.
2019-03-19 22:00:08 +01:00
208 changed files with 2092 additions and 1831 deletions

View File

@ -33,7 +33,6 @@
[libs]
node_modules/react-native/Libraries/react-native/react-native-interface.js
node_modules/react-native/flow/
node_modules/react-native/flow-github/
[options]
emoji=true
@ -83,4 +82,4 @@ module.file_ext=.jsx
module.file_ext=.json
[version]
^0.78.0
^0.92.0

View File

@ -33,19 +33,6 @@ dependencies {
}
```
Also, enable 32bit mode for react-native, since the react-native version we currently depend on only supports 32bit apps. (If you have a 64bit device, it will not run unless this setting it set).
```gradle
android {
...
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
...
```
### Build and use your own SDK artifacts/binaries
<details>
@ -69,10 +56,6 @@ To copy React Native to your local Maven repository, you can simply copy part of
$ cp -r ../node_modules/react-native/android/com /tmp/repo/
In the same way, copy the JavaScriptCore dependency:
$ cp -r ../node_modules/jsc-android/dist/org /tmp/repo/
Alternatively, you can use the scripts located in the android/scripts directory to publish these dependencies to your Maven repo.
Third-party React Native _modules_, which Jitsi Meet SDK for Android depends on, are download by NPM in source code form. These need to be assembled into Maven artifacts, and then published to your local Maven repository. The SDK project facilitates this.

View File

@ -22,17 +22,7 @@ android {
targetSdkVersion rootProject.ext.targetSdkVersion
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
packagingOptions {
// The project react-native does not provide 64-bit binaries at the
// time of this writing. Unfortunately, packaging any 64-bit
// binaries into the .apk will crash the app at runtime on 64-bit
// platforms.
exclude '/lib/mips64/**'
exclude '/lib/arm64-v8a/**'
exclude '/lib/x86_64/**'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}
}

View File

@ -25,7 +25,6 @@ allprojects {
repositories {
google()
jcenter()
maven { url "$rootDir/../node_modules/jsc-android/dist" }
// React Native (JS, Obj-C sources, Android binaries) is installed from
// npm.
maven { url "$rootDir/../node_modules/react-native/android" }
@ -42,12 +41,6 @@ allprojects {
def version = new JsonSlurper().parseText(file.text).version
details.useVersion version
}
if (details.requested.group == 'org.webkit'
&& details.requested.name == 'android-jsc') {
def file = new File("$rootDir/../node_modules/jsc-android/package.json")
def version = new JsonSlurper().parseText(file.text).version
details.useVersion "r${version.tokenize('.')[0]}"
}
}
}
}

View File

@ -1,17 +0,0 @@
#!/bin/bash
CWD=$(dirname $0)
MVN_REPO=$(realpath $1)
JSC_VERSION="r"$(jq -r '.dependencies."jsc-android"' ${CWD}/../../package.json | cut -d . -f 1)
pushd ${CWD}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION}
mvn \
deploy:deploy-file \
-Durl=file://${MVN_REPO} \
-Dfile=android-jsc-${JSC_VERSION}.aar \
-Dpackaging=aar \
-DgeneratePom=false \
-DpomFile=android-jsc-${JSC_VERSION}.pom
popd

View File

@ -24,7 +24,6 @@ dependencies {
implementation "com.android.support:support-v4:${rootProject.ext.supportLibVersion}"
implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
implementation 'org.webkit:android-jsc:+'
implementation 'com.amplitude:android-sdk:2.14.1'
implementation 'com.dropbox.core:dropbox-core-sdk:3.0.8'
api 'com.facebook.react:react-native:+'

View File

@ -15,17 +15,21 @@ import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.module.annotations.ReactModule;
@ReactModule(name = AndroidSettingsModule.NAME)
class AndroidSettingsModule
extends ReactContextBaseJavaModule {
public static final String NAME = "AndroidSettings";
public AndroidSettingsModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return "AndroidSettings";
return NAME;
}
@ReactMethod

View File

@ -23,13 +23,17 @@ import android.content.pm.PackageManager;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.module.annotations.ReactModule;
import java.util.HashMap;
import java.util.Map;
@ReactModule(name = AppInfoModule.NAME)
class AppInfoModule
extends ReactContextBaseJavaModule {
public static final String NAME = "AppInfo";
public AppInfoModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@ -74,6 +78,6 @@ class AppInfoModule
@Override
public String getName() {
return "AppInfo";
return NAME;
}
}

View File

@ -35,6 +35,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.module.annotations.ReactModule;
import java.util.HashMap;
import java.util.HashSet;
@ -58,9 +59,12 @@ import java.util.concurrent.Executors;
* Before a call has started and after it has ended the
* {@code AudioModeModule.DEFAULT} mode should be used.
*/
@ReactModule(name = AudioModeModule.NAME)
class AudioModeModule extends ReactContextBaseJavaModule
implements AudioManager.OnAudioFocusChangeListener {
public static final String NAME = "AudioMode";
/**
* Constants representing the audio mode.
* - DEFAULT: Used before and after every call. It represents the default
@ -89,16 +93,10 @@ class AudioModeModule extends ReactContextBaseJavaModule
*/
private static final int TYPE_USB_HEADSET = 22;
/**
* The name of {@code AudioModeModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "AudioMode";
/**
* The {@code Log} tag {@code AudioModeModule} is to log messages with.
*/
static final String TAG = MODULE_NAME;
static final String TAG = NAME;
/**
* Converts any of the "DEVICE_" constants into the corresponding
@ -373,7 +371,7 @@ class AudioModeModule extends ReactContextBaseJavaModule
*/
@Override
public String getName() {
return MODULE_NAME;
return NAME;
}
/**

View File

@ -22,14 +22,18 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.module.annotations.ReactModule;
/**
* Module implementing an API for sending events from JavaScript to native code.
*/
@ReactModule(name = ExternalAPIModule.NAME)
class ExternalAPIModule
extends ReactContextBaseJavaModule {
private static final String TAG = ExternalAPIModule.class.getSimpleName();
public static final String NAME = "ExternalAPI";
private static final String TAG = NAME;
/**
* Initializes a new module instance. There shall be a single instance of
@ -49,7 +53,7 @@ class ExternalAPIModule
*/
@Override
public String getName() {
return "ExternalAPI";
return NAME;
}
/**

View File

@ -27,11 +27,15 @@ import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.module.annotations.ReactModule;
@ReactModule(name = PictureInPictureModule.NAME)
class PictureInPictureModule
extends ReactContextBaseJavaModule {
private final static String TAG = "PictureInPicture";
public static final String NAME = "PictureInPicture";
private static final String TAG = NAME;
static boolean isPictureInPictureSupported() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O;
@ -101,6 +105,6 @@ class PictureInPictureModule
@Override
public String getName() {
return TAG;
return NAME;
}
}

View File

@ -24,6 +24,7 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.module.annotations.ReactModule;
/**
* Module implementing a simple API to enable a proximity sensor-controlled
@ -31,14 +32,11 @@ import com.facebook.react.bridge.UiThreadUtil;
* object it will dim the screen and disable touch controls. The functionality
* is used with the conference audio-only mode.
*/
@ReactModule(name = ProximityModule.NAME)
class ProximityModule
extends ReactContextBaseJavaModule {
/**
* The name of {@code ProximityModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "Proximity";
public static final String NAME = "Proximity";
/**
* This type of wake lock (the one activated by the proximity sensor) has
@ -74,7 +72,7 @@ class ProximityModule
wakeLock
= powerManager.newWakeLock(
PROXIMITY_SCREEN_OFF_WAKE_LOCK,
MODULE_NAME);
"jitsi:"+NAME);
} catch (Throwable ignored) {
wakeLock = null;
}
@ -89,7 +87,7 @@ class ProximityModule
*/
@Override
public String getName() {
return MODULE_NAME;
return NAME;
}
/**

View File

@ -18,6 +18,7 @@ import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.module.annotations.ReactModule;
/**
* The react-native side of Jitsi Meet's {@link ConnectionService}. Exposes
@ -26,10 +27,13 @@ import com.facebook.react.bridge.ReadableMap;
* @author Pawel Domas
*/
@RequiresApi(api = Build.VERSION_CODES.O)
@ReactModule(name = RNConnectionService.NAME)
class RNConnectionService
extends ReactContextBaseJavaModule {
private final static String TAG = ConnectionService.TAG;
public static final String NAME = "ConnectionService";
private static final String TAG = ConnectionService.TAG;
/**
* Sets the audio route on all existing {@link android.telecom.Connection}s
@ -146,7 +150,7 @@ class RNConnectionService
@Override
public String getName() {
return "ConnectionService";
return NAME;
}
/**

View File

@ -25,6 +25,7 @@ import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.module.annotations.ReactModule;
import org.json.JSONArray;
import org.json.JSONObject;
@ -43,19 +44,16 @@ import java.util.concurrent.Executors;
* Gathers rssi, signal in percentage, timestamp and the addresses of the wifi
* device.
*/
@ReactModule(name = WiFiStatsModule.NAME)
class WiFiStatsModule
extends ReactContextBaseJavaModule {
/**
* The name of {@code WiFiStatsModule} to be used in the React Native
* bridge.
*/
private static final String MODULE_NAME = "WiFiStats";
public static final String NAME = "WiFiStats";
/**
* The {@code Log} tag {@code WiFiStatsModule} is to log messages with.
*/
static final String TAG = MODULE_NAME;
static final String TAG = NAME;
/**
* The scale used for the signal value. A level of the signal, given in the
@ -87,7 +85,7 @@ class WiFiStatsModule
*/
@Override
public String getName() {
return MODULE_NAME;
return NAME;
}
/**

View File

@ -22,6 +22,7 @@ import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.amplitude.api.Amplitude;
import com.facebook.react.module.annotations.ReactModule;
import org.json.JSONException;
import org.json.JSONObject;
@ -29,9 +30,12 @@ import org.json.JSONObject;
/**
* Implements the react-native module for the Amplitude integration.
*/
@ReactModule(name = AmplitudeModule.NAME)
public class AmplitudeModule
extends ReactContextBaseJavaModule {
public static final String NAME = "Amplitude";
public AmplitudeModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@ -71,9 +75,8 @@ public class AmplitudeModule
*/
@ReactMethod
public void logEvent(String instanceName, String eventType, String eventPropsString) {
JSONObject eventProps = null;
try {
eventProps = new JSONObject(eventPropsString);
JSONObject eventProps = new JSONObject(eventPropsString);
Amplitude.getInstance(instanceName).logEvent(eventType, eventProps);
} catch (JSONException e) {
e.printStackTrace();
@ -82,6 +85,6 @@ public class AmplitudeModule
@Override
public String getName() {
return "Amplitude";
return NAME;
}
}

View File

@ -20,6 +20,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.dropbox.core.android.Auth;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.module.annotations.ReactModule;
import java.util.HashMap;
import java.util.Map;
@ -27,9 +28,13 @@ import java.util.Map;
/**
* Implements the react-native module for the dropbox integration.
*/
@ReactModule(name = Dropbox.NAME)
public class Dropbox
extends ReactContextBaseJavaModule
implements LifecycleEventListener {
public static final String NAME = "Dropbox";
private String appKey;
private String clientId;
@ -131,7 +136,7 @@ public class Dropbox
@Override
public String getName() {
return "Dropbox";
return NAME;
}
/**

View File

@ -21,6 +21,7 @@ import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.module.annotations.ReactModule;
import java.net.UnknownHostException;
@ -32,9 +33,12 @@ import java.net.UnknownHostException;
* [1]: https://tools.ietf.org/html/rfc6146
* [2]: https://tools.ietf.org/html/rfc6052
*/
@ReactModule(name = NAT64AddrInfoModule.NAME)
public class NAT64AddrInfoModule
extends ReactContextBaseJavaModule {
public final static String NAME = "NAT64AddrInfo";
/**
* The host for which the module wil try to resolve both IPv4 and IPv6
* addresses in order to figure out the NAT64 prefix.
@ -46,15 +50,10 @@ public class NAT64AddrInfoModule
*/
private final static long INFO_LIFETIME = 60 * 1000;
/**
* The name of this module.
*/
private final static String MODULE_NAME = "NAT64AddrInfo";
/**
* The {@code Log} tag {@code NAT64AddrInfoModule} is to log messages with.
*/
private final static String TAG = MODULE_NAME;
private final static String TAG = NAME;
/**
* The {@link NAT64AddrInfo} instance which holds NAT64 prefix/suffix.
@ -119,6 +118,6 @@ public class NAT64AddrInfoModule
@Override
public String getName() {
return MODULE_NAME;
return NAME;
}
}

View File

@ -1,5 +1,5 @@
// flow-typed signature: d71d314ca25fc6c20610a3ba80af9df0
// flow-typed version: 9698a46399/jquery_v3.x.x/flow_>=v0.28.x
// flow-typed signature: f26fda66e3a551aef37d3b0f53058e6a
// flow-typed version: 44ad941b7a/jquery_v3.x.x/flow_>=v0.28.x
/* eslint-disable max-len, no-unused-vars, flowtype/no-weak-types */
@ -364,6 +364,13 @@ declare class JQueryGenericPromise<T> {
failFilter?: (...reasons: any[]) => any,
progressFilter?: (...progression: any[]) => any
): JQueryPromise<void>;
/**
* Add handlers to be called when the Deferred object is rejected.
*
* @param failFilter An function that is called when the Deferred is rejected.
*/
catch(failFilter: (...reasons: any[]) => any): JQueryPromise<T>;
}
/**
@ -822,7 +829,7 @@ declare class JQueryStatic {
*/
get(
url: string,
data?: Object | string,
data?: {} | string,
success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any,
dataType?: string
): JQueryXHR;
@ -845,7 +852,7 @@ declare class JQueryStatic {
*/
getJSON(
url: string,
data?: Object | string,
data?: {} | string,
success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any
): JQueryXHR;
/**
@ -886,7 +893,7 @@ declare class JQueryStatic {
*/
post(
url: string,
data?: Object | string,
data?: {} | string,
success?: (data: any, textStatus: string, jqXHR: JQueryXHR) => any,
dataType?: string
): JQueryXHR;
@ -967,7 +974,7 @@ declare class JQueryStatic {
* @param html A string defining a single, standalone, HTML element (e.g. <div/> or <div></div>).
* @param attributes An object of attributes, events, and methods to call on the newly-created element.
*/
(html: string, attributes: Object): JQuery;
(html: string, attributes: {}): JQuery;
/**
* Relinquish jQuery's control of the $ variable.
@ -1425,7 +1432,7 @@ declare class JQuery {
*/
load(
url: string,
data?: string | Object,
data?: string | {},
complete?: (
responseText: string,
textStatus: string,
@ -1482,7 +1489,7 @@ declare class JQuery {
*
* @param attributes An object of attribute-value pairs to set.
*/
attr(attributes: Object): JQuery;
attr(attributes: {}): JQuery;
/**
* Get the value of an attribute for the first element in the set of matched elements.
*
@ -1532,7 +1539,7 @@ declare class JQuery {
*
* @param properties An object of property-value pairs to set.
*/
prop(properties: Object): JQuery;
prop(properties: {}): JQuery;
/**
* Set one or more properties for the set of matched elements.
*
@ -1598,7 +1605,7 @@ declare class JQuery {
/**
* Get the current value of the first element in the set of matched elements.
*/
val(_: void): any;
val(_: void): string | string[] | number;
/**
* Set the value of each element in the set of matched elements.
*
@ -1634,7 +1641,7 @@ declare class JQuery {
*
* @param properties An object of property-value pairs to set.
*/
css(properties: Object): JQuery;
css(properties: {}): JQuery;
/**
* Get the value of style properties for the first element in the set of matched elements.
*
@ -1847,7 +1854,7 @@ declare class JQuery {
* @param complete A function to call once the animation is complete.
*/
animate(
properties: Object,
properties: {},
duration?: string | number,
complete?: Function
): JQuery;
@ -1860,7 +1867,7 @@ declare class JQuery {
* @param complete A function to call once the animation is complete.
*/
animate(
properties: Object,
properties: {},
duration?: string | number,
easing?: string,
complete?: Function
@ -1871,7 +1878,7 @@ declare class JQuery {
* @param properties An object of CSS properties and values that the animation will move toward.
* @param options A map of additional options to pass to the method.
*/
animate(properties: Object, options: JQueryAnimationOptions): JQuery;
animate(properties: {}, options: JQueryAnimationOptions): JQuery;
/**
* Set a timer to delay execution of subsequent items in the queue.
@ -2920,14 +2927,14 @@ declare class JQuery {
* @param eventType A string containing a JavaScript event type, such as click or submit.
* @param extraParameters Additional parameters to pass along to the event handler.
*/
trigger(eventType: string, extraParameters?: any[] | Object): JQuery;
trigger(eventType: string, extraParameters?: any[] | {}): JQuery;
/**
* Execute all handlers and behaviors attached to the matched elements for the given event type.
*
* @param event A jQuery.Event object.
* @param extraParameters Additional parameters to pass along to the event handler.
*/
trigger(event: JQueryEventObject, extraParameters?: any[] | Object): JQuery;
trigger(event: JQueryEventObject, extraParameters?: any[] | {}): JQuery;
/**
* Execute all handlers attached to an element for an event.

File diff suppressed because it is too large Load Diff

View File

@ -1,329 +0,0 @@
// flow-typed signature: c30aa20539f52183d4d30dd36d8ab9c2
// flow-typed version: 886cf7c002/moment_v2.3.x/flow_>=v0.63.x
type moment$MomentOptions = {
y?: number | string,
year?: number | string,
years?: number | string,
M?: number | string,
month?: number | string,
months?: number | string,
d?: number | string,
day?: number | string,
days?: number | string,
date?: number | string,
h?: number | string,
hour?: number | string,
hours?: number | string,
m?: number | string,
minute?: number | string,
minutes?: number | string,
s?: number | string,
second?: number | string,
seconds?: number | string,
ms?: number | string,
millisecond?: number | string,
milliseconds?: number | string
};
type moment$MomentObject = {
years: number,
months: number,
date: number,
hours: number,
minutes: number,
seconds: number,
milliseconds: number
};
type moment$MomentCreationData = {
input: string,
format: string,
locale: Object,
isUTC: boolean,
strict: boolean
};
type moment$CalendarFormat = string | ((moment: moment$Moment) => string);
type moment$CalendarFormats = {
sameDay?: moment$CalendarFormat,
nextDay?: moment$CalendarFormat,
nextWeek?: moment$CalendarFormat,
lastDay?: moment$CalendarFormat,
lastWeek?: moment$CalendarFormat,
sameElse?: moment$CalendarFormat
};
declare class moment$LocaleData {
months(moment: moment$Moment): string,
monthsShort(moment: moment$Moment): string,
monthsParse(month: string): number,
weekdays(moment: moment$Moment): string,
weekdaysShort(moment: moment$Moment): string,
weekdaysMin(moment: moment$Moment): string,
weekdaysParse(weekDay: string): number,
longDateFormat(dateFormat: string): string,
isPM(date: string): boolean,
meridiem(hours: number, minutes: number, isLower: boolean): string,
calendar(
key:
| "sameDay"
| "nextDay"
| "lastDay"
| "nextWeek"
| "prevWeek"
| "sameElse",
moment: moment$Moment
): string,
relativeTime(
number: number,
withoutSuffix: boolean,
key: "s" | "m" | "mm" | "h" | "hh" | "d" | "dd" | "M" | "MM" | "y" | "yy",
isFuture: boolean
): string,
pastFuture(diff: any, relTime: string): string,
ordinal(number: number): string,
preparse(str: string): any,
postformat(str: string): any,
week(moment: moment$Moment): string,
invalidDate(): string,
firstDayOfWeek(): number,
firstDayOfYear(): number
}
declare class moment$MomentDuration {
humanize(suffix?: boolean): string,
milliseconds(): number,
asMilliseconds(): number,
seconds(): number,
asSeconds(): number,
minutes(): number,
asMinutes(): number,
hours(): number,
asHours(): number,
days(): number,
asDays(): number,
months(): number,
asMonths(): number,
years(): number,
asYears(): number,
add(value: number | moment$MomentDuration | Object, unit?: string): this,
subtract(value: number | moment$MomentDuration | Object, unit?: string): this,
as(unit: string): number,
get(unit: string): number,
toJSON(): string,
toISOString(): string,
isValid(): boolean
}
declare class moment$Moment {
static ISO_8601: string,
static (
string?: string,
format?: string | Array<string>,
strict?: boolean
): moment$Moment,
static (
string?: string,
format?: string | Array<string>,
locale?: string,
strict?: boolean
): moment$Moment,
static (
initDate: ?Object | number | Date | Array<number> | moment$Moment | string
): moment$Moment,
static unix(seconds: number): moment$Moment,
static utc(): moment$Moment,
static utc(number: number | Array<number>): moment$Moment,
static utc(
str: string,
str2?: string | Array<string>,
str3?: string
): moment$Moment,
static utc(moment: moment$Moment): moment$Moment,
static utc(date: Date): moment$Moment,
static parseZone(): moment$Moment,
static parseZone(rawDate: string): moment$Moment,
static parseZone(
rawDate: string,
format: string | Array<string>
): moment$Moment,
static parseZone(
rawDate: string,
format: string,
strict: boolean
): moment$Moment,
static parseZone(
rawDate: string,
format: string,
locale: string,
strict: boolean
): moment$Moment,
isValid(): boolean,
invalidAt(): 0 | 1 | 2 | 3 | 4 | 5 | 6,
creationData(): moment$MomentCreationData,
millisecond(number: number): this,
milliseconds(number: number): this,
millisecond(): number,
milliseconds(): number,
second(number: number): this,
seconds(number: number): this,
second(): number,
seconds(): number,
minute(number: number): this,
minutes(number: number): this,
minute(): number,
minutes(): number,
hour(number: number): this,
hours(number: number): this,
hour(): number,
hours(): number,
date(number: number): this,
dates(number: number): this,
date(): number,
dates(): number,
day(day: number | string): this,
days(day: number | string): this,
day(): number,
days(): number,
weekday(number: number): this,
weekday(): number,
isoWeekday(number: number): this,
isoWeekday(): number,
dayOfYear(number: number): this,
dayOfYear(): number,
week(number: number): this,
weeks(number: number): this,
week(): number,
weeks(): number,
isoWeek(number: number): this,
isoWeeks(number: number): this,
isoWeek(): number,
isoWeeks(): number,
month(number: number): this,
months(number: number): this,
month(): number,
months(): number,
quarter(number: number): this,
quarter(): number,
year(number: number): this,
years(number: number): this,
year(): number,
years(): number,
weekYear(number: number): this,
weekYear(): number,
isoWeekYear(number: number): this,
isoWeekYear(): number,
weeksInYear(): number,
isoWeeksInYear(): number,
get(string: string): number,
set(unit: string, value: number): this,
set(options: { [unit: string]: number }): this,
static max(...dates: Array<moment$Moment>): moment$Moment,
static max(dates: Array<moment$Moment>): moment$Moment,
static min(...dates: Array<moment$Moment>): moment$Moment,
static min(dates: Array<moment$Moment>): moment$Moment,
add(
value: number | moment$MomentDuration | moment$Moment | Object,
unit?: string
): this,
subtract(
value: number | moment$MomentDuration | moment$Moment | string | Object,
unit?: string
): this,
startOf(unit: string): this,
endOf(unit: string): this,
local(): this,
utc(): this,
utcOffset(
offset: number | string,
keepLocalTime?: boolean,
keepMinutes?: boolean
): this,
utcOffset(): number,
format(format?: string): string,
fromNow(removeSuffix?: boolean): string,
from(
value: moment$Moment | string | number | Date | Array<number>,
removePrefix?: boolean
): string,
toNow(removePrefix?: boolean): string,
to(
value: moment$Moment | string | number | Date | Array<number>,
removePrefix?: boolean
): string,
calendar(refTime?: any, formats?: moment$CalendarFormats): string,
diff(
date: moment$Moment | string | number | Date | Array<number>,
format?: string,
floating?: boolean
): number,
valueOf(): number,
unix(): number,
daysInMonth(): number,
toDate(): Date,
toArray(): Array<number>,
toJSON(): string,
toISOString(
keepOffset?: boolean
): string,
toObject(): moment$MomentObject,
isBefore(
date?: moment$Moment | string | number | Date | Array<number>,
units?: ?string
): boolean,
isSame(
date?: moment$Moment | string | number | Date | Array<number>,
units?: ?string
): boolean,
isAfter(
date?: moment$Moment | string | number | Date | Array<number>,
units?: ?string
): boolean,
isSameOrBefore(
date?: moment$Moment | string | number | Date | Array<number>,
units?: ?string
): boolean,
isSameOrAfter(
date?: moment$Moment | string | number | Date | Array<number>,
units?: ?string
): boolean,
isBetween(
fromDate: moment$Moment | string | number | Date | Array<number>,
toDate?: ?moment$Moment | string | number | Date | Array<number>,
granularity?: ?string,
inclusion?: ?string
): boolean,
isDST(): boolean,
isDSTShifted(): boolean,
isLeapYear(): boolean,
clone(): moment$Moment,
static isMoment(obj: any): boolean,
static isDate(obj: any): boolean,
static locale(locale: string, localeData?: Object): string,
static updateLocale(locale: string, localeData?: ?Object): void,
static locale(locales: Array<string>): string,
locale(locale: string, customization?: Object | null): moment$Moment,
locale(): string,
static months(): Array<string>,
static monthsShort(): Array<string>,
static weekdays(): Array<string>,
static weekdaysShort(): Array<string>,
static weekdaysMin(): Array<string>,
static months(): string,
static monthsShort(): string,
static weekdays(): string,
static weekdaysShort(): string,
static weekdaysMin(): string,
static localeData(key?: string): moment$LocaleData,
static duration(
value: number | Object | string,
unit?: string
): moment$MomentDuration,
static isDuration(obj: any): boolean,
static normalizeUnits(unit: string): string,
static invalid(object: any): moment$Moment
}
declare module "moment" {
declare module.exports: Class<moment$Moment>;
}

View File

@ -1,192 +1,276 @@
// flow-typed signature: d4e793bc07ef1dc9906a244b12960f7b
// flow-typed version: cf33ff8762/react-redux_v5.x.x/flow_>=v0.63.0
// flow-typed signature: f06f00c3ad0cfedb90c0c6de04b219f3
// flow-typed version: 3a6d556e4b/react-redux_v5.x.x/flow_>=v0.89.x
import type { Dispatch, Store } from "redux";
/**
The order of type arguments for connect() is as follows:
declare module "react-redux" {
import type { ComponentType, ElementConfig } from 'react';
connect<Props, OwnProps, StateProps, DispatchProps, State, Dispatch>()
declare export class Provider<S, A> extends React$Component<{
store: Store<S, A>,
children?: any
}> {}
In Flow v0.89 only the first two are mandatory to specify. Other 4 can be repaced with the new awesome type placeholder:
declare export function createProvider(
storeKey?: string,
subKey?: string
): Provider<*, *>;
connect<Props, OwnProps, _, _, _, _>()
/*
But beware, in case of weird type errors somewhere in random places
just type everything and get to a green field and only then try to
remove the definitions you see bogus.
Decrypting the abbreviations:
WC = Component being wrapped
S = State
A = Action
D = Dispatch
OP = OwnProps
SP = StateProps
DP = DispatchProps
MP = Merge props
MDP = Map dispatch to props object
RSP = Returned state props
RDP = Returned dispatch props
RMP = Returned merge props
CP = Props for returned component
Com = React Component
ST = Static properties of Com
EFO = Extra factory options (used only in connectAdvanced)
*/
declare type MapStateToProps<S: Object, SP: Object, RSP: Object> = (state: S, props: SP) => RSP;
declare module "react-redux" {
// ------------------------------------------------------------
// Typings for connect()
// ------------------------------------------------------------
declare type MapDispatchToProps<A, OP: Object, RDP: Object> = (dispatch: Dispatch<A>, ownProps: OP) => RDP;
declare type MergeProps<SP: Object, DP: Object, MP: Object, RMP: Object> = (
stateProps: SP,
dispatchProps: DP,
ownProps: MP
) => RMP;
declare type ConnectOptions<S: Object, OP: Object, RSP: Object, RMP: Object> = {|
declare export type Options<S, OP, SP, MP> = {|
pure?: boolean,
withRef?: boolean,
areStatesEqual?: (next: S, prev: S) => boolean,
areOwnPropsEqual?: (next: OP, prev: OP) => boolean,
areStatePropsEqual?: (next: RSP, prev: RSP) => boolean,
areMergedPropsEqual?: (next: RMP, prev: RMP) => boolean,
storeKey?: string
areStatePropsEqual?: (next: SP, prev: SP) => boolean,
areMergedPropsEqual?: (next: MP, prev: MP) => boolean,
storeKey?: string,
|};
declare type OmitDispatch<Component> = $Diff<Component, {dispatch: Dispatch<*>}>;
declare type MapStateToProps<-S, -OP, +SP> =
| ((state: S, ownProps: OP) => SP)
// If you want to use the factory function but get a strange error
// like "function is not an object" then just type the factory function
// like this:
// const factory: (State, OwnProps) => (State, OwnProps) => StateProps
// and provide the StateProps type to the SP type parameter.
| ((state: S, ownProps: OP) => (state: S, ownProps: OP) => SP);
declare export function connect<
Com: ComponentType<*>,
declare type Bind<D> = <A, R>((...A) => R) => (...A) => $Call<D, R>;
declare type MapDispatchToPropsFn<D, -OP, +DP> =
| ((dispatch: D, ownProps: OP) => DP)
// If you want to use the factory function but get a strange error
// like "function is not an object" then just type the factory function
// like this:
// const factory: (Dispatch, OwnProps) => (Dispatch, OwnProps) => DispatchProps
// and provide the DispatchProps type to the DP type parameter.
| ((dispatch: D, ownProps: OP) => (dispatch: D, ownProps: OP) => DP);
declare class ConnectedComponent<OP, +WC> extends React$Component<OP> {
static +WrappedComponent: WC;
getWrappedInstance(): React$ElementRef<WC>;
}
// The connection of the Wrapped Component and the Connected Component
// happens here in `MP: P`. It means that type wise MP belongs to P,
// so to say MP >= P.
declare type Connector<P, OP, MP: P> = <WC: React$ComponentType<P>>(
WC,
) => Class<ConnectedComponent<OP, WC>> & WC;
// No `mergeProps` argument
// Got error like inexact OwnProps is incompatible with exact object type?
// Just make the OP parameter for `connect()` an exact object.
declare type MergeOP<OP, D> = {| ...$Exact<OP>, dispatch: D |};
declare type MergeOPSP<OP, SP, D> = {| ...$Exact<OP>, ...SP, dispatch: D |};
declare type MergeOPDP<OP, DP> = {| ...$Exact<OP>, ...DP |};
declare type MergeOPSPDP<OP, SP, DP> = {| ...$Exact<OP>, ...SP, ...DP |};
declare export function connect<-P, -OP, -SP, -DP, -S, -D>(
mapStateToProps?: null | void,
mapDispatchToProps?: null | void,
mergeProps?: null | void,
options?: ?Options<S, OP, {||}, MergeOP<OP, D>>,
): Connector<P, OP, MergeOP<OP, D>>;
declare export function connect<-P, -OP, -SP, -DP, -S, -D>(
// If you get error here try adding return type to your mapStateToProps function
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps?: null | void,
mergeProps?: null | void,
options?: ?Options<S, OP, SP, MergeOPSP<OP, SP, D>>,
): Connector<P, OP, MergeOPSP<OP, SP, D>>;
// In this case DP is an object of functions which has been bound to dispatch
// by the given mapDispatchToProps function.
declare export function connect<-P, -OP, -SP, -DP, S, D>(
mapStateToProps: null | void,
mapDispatchToProps: MapDispatchToPropsFn<D, OP, DP>,
mergeProps?: null | void,
options?: ?Options<S, OP, {||}, MergeOPDP<OP, DP>>,
): Connector<P, OP, MergeOPDP<OP, DP>>;
// In this case DP is an object of action creators not yet bound to dispatch,
// this difference is not important in the vanila redux,
// but in case of usage with redux-thunk, the return type may differ.
declare export function connect<-P, -OP, -SP, -DP, S, D>(
mapStateToProps: null | void,
mapDispatchToProps: DP,
mergeProps?: null | void,
options?: ?Options<S, OP, {||}, MergeOPDP<OP, DP>>,
): Connector<P, OP, MergeOPDP<OP, $ObjMap<DP, Bind<D>>>>;
declare export function connect<-P, -OP, -SP, -DP, S, D>(
// If you get error here try adding return type to your mapStateToProps function
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps: MapDispatchToPropsFn<D, OP, DP>,
mergeProps?: null | void,
options?: ?Options<S, OP, SP, {| ...OP, ...SP, ...DP |}>,
): Connector<P, OP, {| ...OP, ...SP, ...DP |}>;
declare export function connect<-P, -OP, -SP, -DP, S, D>(
// If you get error here try adding return type to your mapStateToProps function
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps: DP,
mergeProps?: null | void,
options?: ?Options<S, OP, SP, MergeOPSPDP<OP, SP, DP>>,
): Connector<P, OP, MergeOPSPDP<OP, SP, $ObjMap<DP, Bind<D>>>>;
// With `mergeProps` argument
declare type MergeProps<+P, -OP, -SP, -DP> = (
stateProps: SP,
dispatchProps: DP,
ownProps: OP,
) => P;
declare export function connect<-P, -OP, -SP: {||}, -DP: {||}, S, D>(
mapStateToProps: null | void,
mapDispatchToProps: null | void,
// If you get error here try adding return type to you mapStateToProps function
mergeProps: MergeProps<P, OP, {||}, {| dispatch: D |}>,
options?: ?Options<S, OP, {||}, P>,
): Connector<P, OP, P>;
declare export function connect<-P, -OP, -SP, -DP: {||}, S, D>(
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps: null | void,
// If you get error here try adding return type to you mapStateToProps function
mergeProps: MergeProps<P, OP, SP, {| dispatch: D |}>,
options?: ?Options<S, OP, SP, P>,
): Connector<P, OP, P>;
// In this case DP is an object of functions which has been bound to dispatch
// by the given mapDispatchToProps function.
declare export function connect<-P, -OP, -SP: {||}, -DP, S, D>(
mapStateToProps: null | void,
mapDispatchToProps: MapDispatchToPropsFn<D, OP, DP>,
mergeProps: MergeProps<P, OP, {||}, DP>,
options?: ?Options<S, OP, {||}, P>,
): Connector<P, OP, P>;
// In this case DP is an object of action creators not yet bound to dispatch,
// this difference is not important in the vanila redux,
// but in case of usage with redux-thunk, the return type may differ.
declare export function connect<-P, -OP, -SP: {||}, -DP, S, D>(
mapStateToProps: null | void,
mapDispatchToProps: DP,
mergeProps: MergeProps<P, OP, {||}, $ObjMap<DP, Bind<D>>>,
options?: ?Options<S, OP, {||}, P>,
): Connector<P, OP, P>;
// In this case DP is an object of functions which has been bound to dispatch
// by the given mapDispatchToProps function.
declare export function connect<-P, -OP, -SP, -DP, S, D>(
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps: MapDispatchToPropsFn<D, OP, DP>,
mergeProps: MergeProps<P, OP, SP, DP>,
options?: ?Options<S, OP, SP, P>,
): Connector<P, OP, P>;
// In this case DP is an object of action creators not yet bound to dispatch,
// this difference is not important in the vanila redux,
// but in case of usage with redux-thunk, the return type may differ.
declare export function connect<-P, -OP, -SP, -DP, S, D>(
mapStateToProps: MapStateToProps<S, OP, SP>,
mapDispatchToProps: DP,
mergeProps: MergeProps<P, OP, SP, $ObjMap<DP, Bind<D>>>,
options?: ?Options<S, OP, SP, P>,
): Connector<P, OP, P>;
// ------------------------------------------------------------
// Typings for Provider
// ------------------------------------------------------------
declare export class Provider<Store> extends React$Component<{
store: Store,
children?: React$Node,
}> {}
declare export function createProvider(
storeKey?: string,
subKey?: string,
): Class<Provider<*>>;
// ------------------------------------------------------------
// Typings for connectAdvanced()
// ------------------------------------------------------------
declare type ConnectAdvancedOptions = {
getDisplayName?: (name: string) => string,
methodName?: string,
renderCountProp?: string,
shouldHandleStateChanges?: boolean,
storeKey?: string,
withRef?: boolean,
};
declare type SelectorFactoryOptions<Com> = {
getDisplayName: (name: string) => string,
methodName: string,
renderCountProp: ?string,
shouldHandleStateChanges: boolean,
storeKey: string,
withRef: boolean,
displayName: string,
wrappedComponentName: string,
WrappedComponent: Com,
};
declare type MapStateToPropsEx<S: Object, SP: Object, RSP: Object> = (
state: S,
props: SP,
) => RSP;
declare type SelectorFactory<
Com: React$ComponentType<*>,
Dispatch,
S: Object,
DP: Object,
RSP: Object,
CP: $Diff<OmitDispatch<ElementConfig<Com>>, RSP>
>(
mapStateToProps: MapStateToProps<S, DP, RSP>,
mapDispatchToProps?: null
): (component: Com) => ComponentType<CP & DP>;
declare export function connect<Com: ComponentType<*>>(
mapStateToProps?: null,
mapDispatchToProps?: null
): (component: Com) => ComponentType<OmitDispatch<ElementConfig<Com>>>;
declare export function connect<
Com: ComponentType<*>,
A,
S: Object,
DP: Object,
SP: Object,
RSP: Object,
RDP: Object,
CP: $Diff<$Diff<ElementConfig<Com>, RSP>, RDP>
>(
mapStateToProps: MapStateToProps<S, SP, RSP>,
mapDispatchToProps: MapDispatchToProps<A, DP, RDP>
): (component: Com) => ComponentType<CP & SP & DP>;
declare export function connect<
Com: ComponentType<*>,
A,
OP: Object,
DP: Object,
PR: Object,
CP: $Diff<ElementConfig<Com>, DP>
>(
mapStateToProps?: null,
mapDispatchToProps: MapDispatchToProps<A, OP, DP>
): (Com) => ComponentType<CP & OP>;
EFO: Object,
CP: Object,
> = (
dispatch: Dispatch,
factoryOptions: SelectorFactoryOptions<Com> & EFO,
) => MapStateToPropsEx<S, OP, CP>;
declare export function connect<
Com: ComponentType<*>,
MDP: Object
>(
mapStateToProps?: null,
mapDispatchToProps: MDP
): (component: Com) => ComponentType<$Diff<ElementConfig<Com>, MDP>>;
declare export function connect<
Com: ComponentType<*>,
declare export function connectAdvanced<
Com: React$ComponentType<*>,
D,
S: Object,
SP: Object,
RSP: Object,
MDP: Object,
CP: $Diff<ElementConfig<Com>, RSP>
OP: Object,
CP: Object,
EFO: Object,
ST: { [_: $Keys<Com>]: any },
>(
mapStateToProps: MapStateToProps<S, SP, RSP>,
mapDispatchToPRops: MDP
): (component: Com) => ComponentType<$Diff<CP, MDP> & SP>;
declare export function connect<
Com: ComponentType<*>,
A,
S: Object,
DP: Object,
SP: Object,
RSP: Object,
RDP: Object,
MP: Object,
RMP: Object,
CP: $Diff<ElementConfig<Com>, RMP>
>(
mapStateToProps: MapStateToProps<S, SP, RSP>,
mapDispatchToProps: ?MapDispatchToProps<A, DP, RDP>,
mergeProps: MergeProps<RSP, RDP, MP, RMP>
): (component: Com) => ComponentType<CP & SP & DP & MP>;
declare export function connect<
Com: ComponentType<*>,
A,
S: Object,
DP: Object,
SP: Object,
RSP: Object,
RDP: Object,
MDP: Object,
MP: Object,
RMP: Object,
CP: $Diff<ElementConfig<Com>, RMP>
>(
mapStateToProps: MapStateToProps<S, SP, RSP>,
mapDispatchToProps: MDP,
mergeProps: MergeProps<RSP, RDP, MP, RMP>
): (component: Com) => ComponentType<CP & SP & DP & MP>;
declare export function connect<Com: ComponentType<*>,
A,
S: Object,
DP: Object,
SP: Object,
RSP: Object,
RDP: Object,
MP: Object,
RMP: Object
>(
mapStateToProps: ?MapStateToProps<S, SP, RSP>,
mapDispatchToProps: ?MapDispatchToProps<A, DP, RDP>,
mergeProps: ?MergeProps<RSP, RDP, MP, RMP>,
options: ConnectOptions<S, SP & DP & MP, RSP, RMP>
): (component: Com) => ComponentType<$Diff<ElementConfig<Com>, RMP> & SP & DP & MP>;
declare export function connect<Com: ComponentType<*>,
A,
S: Object,
DP: Object,
SP: Object,
RSP: Object,
RDP: Object,
MDP: Object,
MP: Object,
RMP: Object
>(
mapStateToProps: ?MapStateToProps<S, SP, RSP>,
mapDispatchToProps: ?MapDispatchToProps<A, DP, RDP>,
mergeProps: MDP,
options: ConnectOptions<S, SP & DP & MP, RSP, RMP>
): (component: Com) => ComponentType<$Diff<ElementConfig<Com>, RMP> & SP & DP & MP>;
selectorFactory: SelectorFactory<Com, D, S, OP, EFO, CP>,
connectAdvancedOptions: ?(ConnectAdvancedOptions & EFO),
): (component: Com) => React$ComponentType<OP> & $Shape<ST>;
declare export default {
Provider: typeof Provider,
createProvider: typeof createProvider,
connect: typeof connect,
connectAdvanced: typeof connectAdvanced,
};
}

View File

@ -1,3 +1,6 @@
// flow-typed signature: df80bdd535bfed9cf3223e077f3b4543
// flow-typed version: c4c8963c9c/redux_v4.x.x/flow_>=v0.55.x
declare module 'redux' {
/*

View File

@ -7,41 +7,41 @@ PODS:
- Fabric (~> 1.9.0)
- DoubleConversion (1.1.6)
- Fabric (1.9.0)
- Firebase/Core (5.15.0):
- Firebase/Core (5.18.0):
- Firebase/CoreOnly
- FirebaseAnalytics (= 5.4.0)
- Firebase/CoreOnly (5.15.0):
- FirebaseCore (= 5.1.10)
- Firebase/DynamicLinks (5.15.0):
- FirebaseAnalytics (= 5.7.0)
- Firebase/CoreOnly (5.18.0):
- FirebaseCore (= 5.3.1)
- Firebase/DynamicLinks (5.18.0):
- Firebase/CoreOnly
- FirebaseDynamicLinks (= 3.3.0)
- FirebaseAnalytics (5.4.0):
- FirebaseCore (~> 5.1)
- FirebaseInstanceID (~> 3.3)
- GoogleAppMeasurement (= 5.4.0)
- FirebaseDynamicLinks (= 3.4.1)
- FirebaseAnalytics (5.7.0):
- FirebaseCore (~> 5.3)
- FirebaseInstanceID (~> 3.6)
- GoogleAppMeasurement (= 5.7.0)
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
- GoogleUtilities/MethodSwizzler (~> 5.2)
- GoogleUtilities/Network (~> 5.2)
- "GoogleUtilities/NSData+zlib (~> 5.2)"
- nanopb (~> 0.3)
- FirebaseAnalyticsInterop (1.1.0)
- FirebaseCore (5.1.10):
- FirebaseAnalyticsInterop (1.2.0)
- FirebaseCore (5.3.1):
- GoogleUtilities/Logger (~> 5.2)
- FirebaseDynamicLinks (3.3.0):
- FirebaseDynamicLinks (3.4.1):
- FirebaseAnalytics (~> 5.1)
- FirebaseAnalyticsInterop (~> 1.0)
- FirebaseCore (~> 5.1)
- FirebaseInstanceID (3.3.0):
- FirebaseCore (~> 5.1)
- GoogleUtilities/Environment (~> 5.3)
- GoogleUtilities/UserDefaults (~> 5.3)
- FirebaseCore (~> 5.2)
- FirebaseInstanceID (3.7.0):
- FirebaseCore (~> 5.2)
- GoogleUtilities/Environment (~> 5.2)
- GoogleUtilities/UserDefaults (~> 5.2)
- FLAnimatedImage (1.0.12)
- Folly (2016.10.31.00):
- Folly (2018.10.22.00):
- boost-for-react-native
- DoubleConversion
- glog
- glog (0.3.5)
- GoogleAppMeasurement (5.4.0):
- GoogleAppMeasurement (5.7.0):
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
- GoogleUtilities/MethodSwizzler (~> 5.2)
- GoogleUtilities/Network (~> 5.2)
@ -59,23 +59,23 @@ PODS:
- GoogleToolboxForMac/Defines (= 2.2.0)
- "GoogleToolboxForMac/NSString+URLArguments (= 2.2.0)"
- "GoogleToolboxForMac/NSString+URLArguments (2.2.0)"
- GoogleUtilities/AppDelegateSwizzler (5.3.7):
- GoogleUtilities/AppDelegateSwizzler (5.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (5.3.7)
- GoogleUtilities/Logger (5.3.7):
- GoogleUtilities/Environment (5.4.1)
- GoogleUtilities/Logger (5.4.1):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (5.3.7):
- GoogleUtilities/MethodSwizzler (5.4.1):
- GoogleUtilities/Logger
- GoogleUtilities/Network (5.3.7):
- GoogleUtilities/Network (5.4.1):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (5.3.7)"
- GoogleUtilities/Reachability (5.3.7):
- "GoogleUtilities/NSData+zlib (5.4.1)"
- GoogleUtilities/Reachability (5.4.1):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (5.3.7):
- GoogleUtilities/UserDefaults (5.4.1):
- GoogleUtilities/Logger
- GTMSessionFetcher/Core (1.2.1)
- nanopb (0.3.901):
@ -84,8 +84,8 @@ PODS:
- nanopb/decode (0.3.901)
- nanopb/encode (0.3.901)
- ObjectiveDropboxOfficial (3.9.4)
- React (0.57.8):
- React/Core (= 0.57.8)
- React (0.59.1):
- React/Core (= 0.59.1)
- react-native-background-timer (2.1.1):
- React
- react-native-calendar-events (1.6.4):
@ -99,42 +99,50 @@ PODS:
- React
- react-native-webrtc (1.67.1):
- React
- React/Core (0.57.8):
- yoga (= 0.57.8.React)
- React/CxxBridge (0.57.8):
- Folly (= 2016.10.31.00)
- React/Core (0.59.1):
- yoga (= 0.59.1.React)
- React/CxxBridge (0.59.1):
- Folly (= 2018.10.22.00)
- React/Core
- React/cxxreact
- React/cxxreact (0.57.8):
- React/jsiexecutor
- React/cxxreact (0.59.1):
- boost-for-react-native (= 1.63.0)
- Folly (= 2016.10.31.00)
- React/jschelpers
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/jsinspector
- React/DevSupport (0.57.8):
- React/DevSupport (0.59.1):
- React/Core
- React/RCTWebSocket
- React/fishhook (0.57.8)
- React/jschelpers (0.57.8):
- Folly (= 2016.10.31.00)
- React/PrivateDatabase
- React/jsinspector (0.57.8)
- React/PrivateDatabase (0.57.8)
- React/RCTActionSheet (0.57.8):
- React/fishhook (0.59.1)
- React/jsi (0.59.1):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/jsiexecutor (0.59.1):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React/cxxreact
- React/jsi
- React/jsinspector (0.59.1)
- React/RCTActionSheet (0.59.1):
- React/Core
- React/RCTAnimation (0.57.8):
- React/RCTAnimation (0.59.1):
- React/Core
- React/RCTBlob (0.57.8):
- React/RCTBlob (0.59.1):
- React/Core
- React/RCTImage (0.57.8):
- React/RCTImage (0.59.1):
- React/Core
- React/RCTNetwork
- React/RCTLinkingIOS (0.57.8):
- React/RCTLinkingIOS (0.59.1):
- React/Core
- React/RCTNetwork (0.57.8):
- React/RCTNetwork (0.59.1):
- React/Core
- React/RCTText (0.57.8):
- React/RCTText (0.59.1):
- React/Core
- React/RCTWebSocket (0.57.8):
- React/RCTWebSocket (0.59.1):
- React/Core
- React/fishhook
- React/RCTBlob
@ -148,11 +156,11 @@ PODS:
- React/Core
- RNVectorIcons (6.0.2):
- React
- SDWebImage/Core (4.4.3)
- SDWebImage/GIF (4.4.3):
- SDWebImage/Core (4.4.6)
- SDWebImage/GIF (4.4.6):
- FLAnimatedImage (~> 1.0)
- SDWebImage/Core
- yoga (0.57.8.React)
- yoga (0.59.1.React)
DEPENDENCIES:
- Amplitude-iOS (~> 4.0.4)
@ -244,23 +252,23 @@ SPEC CHECKSUMS:
Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933
DoubleConversion: bb338842f62ab1d708ceb63ec3d999f0f3d98ecd
Fabric: f988e33c97f08930a413e08123064d2e5f68d655
Firebase: 8bb9268bff82374f2cbaaabb143e725743c316ae
FirebaseAnalytics: c06f9d70577d79074214700a71fd5d39de5550fb
FirebaseAnalyticsInterop: e5f21be9af6548372e2f0815834ff909bff395a2
FirebaseCore: 35747502d9e8c6ee217385ad04446c7c2aaf9c5c
FirebaseDynamicLinks: c713da5f75c324f38fb2d57164bbc1c461aa6739
FirebaseInstanceID: e2fa4cb35ef5558c200f7f0ad8a53e212215f93e
Firebase: 02f3281965c075426141a0ce1277e9de6649cab9
FirebaseAnalytics: 23851fe602c872130a2c5c55040b302120346cc2
FirebaseAnalyticsInterop: efbe45c8385ec626e29f9525e5ebd38520dfb6c1
FirebaseCore: 52f851b30e11360f1e67cf04b1edfebf0a47a2d3
FirebaseDynamicLinks: f209c3caccd82102caa0e91d393e3ccc593501fd
FirebaseInstanceID: bd6fc5a258884e206fd5c474ebe4f5b00e21770e
FLAnimatedImage: 4a0b56255d9b05f18b6dd7ee06871be5d3b89e31
Folly: c89ac2d5c6ab169cd7397ef27485c44f35f742c7
glog: e8acf0ebbf99759d3ff18c86c292a5898282dcde
GoogleAppMeasurement: 98b71f5e04142793729a5ef23e5b96651ff4b70f
Folly: de497beb10f102453a1afa9edbf8cf8a251890de
glog: aefd1eb5dda2ab95ba0938556f34b98e2da3a60d
GoogleAppMeasurement: 6cf307834da065863f9faf4c0de0a936d81dd832
GoogleSignIn: 7ff245e1a7b26d379099d3243a562f5747e23d39
GoogleToolboxForMac: ff31605b7d66400dcec09bed5861689aebadda4d
GoogleUtilities: 111a012f4c3a29c9e7c954c082fafd6ee3c999c0
GoogleUtilities: 1e25823cbf46540b4284f6ef8e17b3a68ee12bbc
GTMSessionFetcher: 32aeca0aa144acea523e1c8e053089dec2cb98ca
nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
ObjectiveDropboxOfficial: a5afefc83f6467c42c45f2253f583f2ad1ffc701
React: adbac0757ce35e92fbd447ab98c810209d27d9b0
React: 34a405ead72252839fdc4afc1f972a7ed984af84
react-native-background-timer: 0d34748e53a972507c66963490c775321a88f6f2
react-native-calendar-events: ee9573e355711ac679e071be70789542431f4ce3
react-native-fast-image: 47487b71169aea34868e7b38bf870b6b3f2157c5
@ -269,8 +277,8 @@ SPEC CHECKSUMS:
RNGoogleSignin: 361174d9a3090d295b06257162b560d8efc8a6ed
RNSound: 53d2fc9c6589bd68daba530262b7560393def3ac
RNVectorIcons: d819334932bcda3332deb3d2c8ea4d069e0b98f9
SDWebImage: c5594f1a19c48d526d321e548902b56b479cd508
yoga: 74cdf036c30820443b25ade59916236b1e95ee93
SDWebImage: 3f3f0c02f09798048c47a5ed0a13f17b063572d8
yoga: 8fb47f180b19b0dadb285a09e4c74c8a41721d3a
PODFILE CHECKSUM: b300161e95d65c24b91368803afb8873f4b873cc

889
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -49,7 +49,6 @@
"jquery-i18next": "1.2.0",
"js-md5": "0.6.1",
"js-utils": "github:jitsi/js-utils#73a67a7a60d52f8e895f50939c8fcbd1f20fe7b5",
"jsc-android": "224109.1.0",
"jsrsasign": "8.0.12",
"jwt-decode": "2.2.0",
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#74f48e168eec4c05fd8600812cc00e6e34e9ab90",
@ -58,12 +57,12 @@
"moment": "2.19.4",
"moment-duration-format": "2.2.2",
"postis": "2.2.0",
"react": "16.6.3",
"react-dom": "16.6.3",
"react": "16.8.3",
"react-dom": "16.8.3",
"react-emoji-render": "0.4.6",
"react-i18next": "7.13.0",
"react-linkify": "0.2.2",
"react-native": "0.57.8",
"react-native": "0.59.1",
"react-native-background-timer": "2.1.1",
"react-native-calendar-events": "1.6.4",
"react-native-callstats": "3.57.1",
@ -76,7 +75,7 @@
"react-native-sound": "github:jitsi/react-native-sound#e4260ed7f641eeb0377d76eac7987aba72e1cf08",
"react-native-swipeout": "2.3.6",
"react-native-vector-icons": "6.0.2",
"react-native-webrtc": "github:jitsi/react-native-webrtc#c1be0cb1c6e8a83dfd406e478082a5ff205a97ec",
"react-native-webrtc": "github:jitsi/react-native-webrtc#032ee5c90e2c5ff27ab2f952217104772fcbd155",
"react-redux": "5.0.7",
"react-transition-group": "2.4.0",
"redux": "4.0.0",
@ -107,7 +106,7 @@
"eslint-plugin-react": "7.11.1",
"eslint-plugin-react-native": "3.3.0",
"expose-loader": "0.7.5",
"flow-bin": "0.78.0",
"flow-bin": "0.92.0",
"imports-loader": "0.7.1",
"metro-react-native-babel-preset": "0.49.2",
"node-sass": "4.10.0",

View File

@ -31,7 +31,7 @@ declare var APP: Object;
* @returns {Function}
*/
export function appNavigate(uri: ?string) {
return (dispatch: Dispatch<*>, getState: Function) =>
return (dispatch: Dispatch<any>, getState: Function) =>
_appNavigateToOptionalLocation(dispatch, getState, parseURIString(uri));
}
@ -50,7 +50,7 @@ export function appNavigate(uri: ?string) {
* @returns {Promise<void>}
*/
function _appNavigateToMandatoryLocation(
dispatch: Dispatch<*>, getState: Function,
dispatch: Dispatch<any>, getState: Function,
newLocation: Object
): Promise<void> {
const { room } = newLocation;
@ -111,7 +111,7 @@ function _appNavigateToMandatoryLocation(
* @returns {void}
*/
function _appNavigateToOptionalLocation(
dispatch: Dispatch<*>, getState: Function,
dispatch: Dispatch<any>, getState: Function,
location: Object) {
// If the specified location (URI) does not identify a host, use the app's
// default.
@ -150,7 +150,7 @@ function _appNavigateToOptionalLocation(
* @returns {Promise<Object>}
*/
function _loadConfig(
dispatch: Dispatch<*>,
dispatch: Dispatch<any>,
getState: Function,
{ contextRoot, host, protocol, room }) {
// XXX As the mobile/React Native app does not employ config on the
@ -211,7 +211,7 @@ function _loadConfig(
* @returns {Function}
*/
export function redirectWithStoredParams(pathname: string) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { locationURL } = getState()['features/base/connection'];
const newLocationURL = new URL(locationURL.href);
@ -248,7 +248,7 @@ export function reloadNow() {
* @returns {Function}
*/
export function reloadWithStoredParams() {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { locationURL } = getState()['features/base/connection'];
const windowLocation = window.location;
const oldSearchString = windowLocation.search;

View File

@ -6,7 +6,7 @@
* type: CANCEL_LOGIN
* }
*/
export const CANCEL_LOGIN = Symbol('CANCEL_LOGIN');
export const CANCEL_LOGIN = 'CANCEL_LOGIN';
/**
* The type of (redux) action which signals that the cyclic operation of waiting
@ -16,7 +16,7 @@ export const CANCEL_LOGIN = Symbol('CANCEL_LOGIN');
* type: STOP_WAIT_FOR_OWNER
* }
*/
export const STOP_WAIT_FOR_OWNER = Symbol('STOP_WAIT_FOR_OWNER');
export const STOP_WAIT_FOR_OWNER = 'STOP_WAIT_FOR_OWNER';
/**
* The type of (redux) action which informs that the authentication and role
@ -33,7 +33,7 @@ export const STOP_WAIT_FOR_OWNER = Symbol('STOP_WAIT_FOR_OWNER');
* thenableWithCancel: Object
* }
*/
export const UPGRADE_ROLE_FINISHED = Symbol('UPGRADE_ROLE_FINISHED');
export const UPGRADE_ROLE_FINISHED = 'UPGRADE_ROLE_FINISHED';
/**
* The type of (redux) action which signals that the process of authenticating
@ -44,7 +44,7 @@ export const UPGRADE_ROLE_FINISHED = Symbol('UPGRADE_ROLE_FINISHED');
* thenableWithCancel: Object
* }
*/
export const UPGRADE_ROLE_STARTED = Symbol('UPGRADE_ROLE_STARTED');
export const UPGRADE_ROLE_STARTED = 'UPGRADE_ROLE_STARTED';
/**
* The type of (redux) action that sets delayed handler which will check if
@ -57,4 +57,4 @@ export const UPGRADE_ROLE_STARTED = Symbol('UPGRADE_ROLE_STARTED');
* timeoutMs: number
* }
*/
export const WAIT_FOR_OWNER = Symbol('WAIT_FOR_OWNER');
export const WAIT_FOR_OWNER = 'WAIT_FOR_OWNER';

View File

@ -1,5 +1,7 @@
// @flow
import type { Dispatch } from 'redux';
import { appNavigate } from '../app';
import { checkIfCanJoin, conferenceLeft } from '../base/conference';
import { connectionFailed } from '../base/connection';
@ -33,7 +35,7 @@ export function authenticateAndUpgradeRole(
id: string,
password: string,
conference: Object) {
return (dispatch: Dispatch, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { password: roomPassword }
= getState()['features/base/conference'];
const process
@ -73,7 +75,7 @@ export function authenticateAndUpgradeRole(
* }}
*/
export function cancelLogin() {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
dispatch({ type: CANCEL_LOGIN });
// XXX The error associated with CONNECTION_FAILED was marked as
@ -100,7 +102,7 @@ export function cancelLogin() {
* @returns {Function}
*/
export function cancelWaitForOwner() {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
dispatch(stopWaitForOwner());
// XXX The error associated with CONFERENCE_FAILED was marked as
@ -228,7 +230,7 @@ function _upgradeRoleStarted(thenableWithCancel) {
* @returns {Function}
*/
export function waitForOwner() {
return (dispatch: Dispatch) =>
return (dispatch: Dispatch<any>) =>
dispatch({
type: WAIT_FOR_OWNER,
handler: () => dispatch(checkIfCanJoin()),

View File

@ -3,6 +3,7 @@
import React, { Component } from 'react';
import { Text, TextInput, View } from 'react-native';
import { connect as reduxConnect } from 'react-redux';
import type { Dispatch } from 'redux';
import { connect, toJid } from '../../base/connection';
import {
@ -59,7 +60,7 @@ type Props = {
/**
* Redux store dispatch method.
*/
dispatch: Dispatch<*>,
dispatch: Dispatch<any>,
/**
* Invoked to obtain translated strings.

View File

@ -2,6 +2,7 @@
import React, { Component } from 'react';
import { connect } from 'react-redux';
import type { Dispatch } from 'redux';
import { ConfirmDialog } from '../../base/dialog';
import { translate } from '../../base/i18n';
@ -21,7 +22,7 @@ type Props = {
/**
* Redux store dispatch function.
*/
dispatch: Dispatch<*>,
dispatch: Dispatch<any>,
/**
* Invoked to obtain translated strings.

View File

@ -1,5 +1,7 @@
// @flow
import type { Dispatch } from 'redux';
import { appNavigate } from '../app';
import {
CONFERENCE_FAILED,
@ -160,7 +162,7 @@ function _clearExistingWaitForOwnerTimeout(
* @param {Object} store - The redux store.
* @returns {void}
*/
function _hideLoginDialog({ dispatch }: { dispatch: Dispatch<*> }) {
function _hideLoginDialog({ dispatch }: { dispatch: Dispatch<any> }) {
dispatch(hideDialog(LoginDialog));
}

View File

@ -7,7 +7,7 @@
* app: App
* }
*/
export const APP_WILL_MOUNT = Symbol('APP_WILL_MOUNT');
export const APP_WILL_MOUNT = 'APP_WILL_MOUNT';
/**
* The type of (redux) action which signals that a specific App will unmount (in
@ -18,4 +18,4 @@ export const APP_WILL_MOUNT = Symbol('APP_WILL_MOUNT');
* app: App
* }
*/
export const APP_WILL_UNMOUNT = Symbol('APP_WILL_UNMOUNT');
export const APP_WILL_UNMOUNT = 'APP_WILL_UNMOUNT';

View File

@ -1,5 +1,7 @@
// @flow
import type { Dispatch } from 'redux';
import { APP_WILL_MOUNT, APP_WILL_UNMOUNT } from './actionTypes';
declare var APP;
@ -14,7 +16,7 @@ declare var APP;
* }}
*/
export function appWillMount(app: Object) {
return (dispatch: Dispatch<*>) => {
return (dispatch: Dispatch<any>) => {
dispatch({
type: APP_WILL_MOUNT,
app

View File

@ -122,8 +122,11 @@ class ColorSchemeRegistry {
} else if (typeof styleValue === 'function') {
// The value is a function, which indicates that it's a
// dynamic, schemed color we need to resolve.
// $FlowExpectedError
const value = styleValue();
schemedStyle[styleName]
= this._getColor(stateful, componentName, styleValue());
= this._getColor(stateful, componentName, value);
}
}

View File

@ -8,4 +8,4 @@
* colorScheme: Object
* }
*/
export const SET_COLOR_SCHEME = Symbol('SET_COLOR_SCHEME');
export const SET_COLOR_SCHEME = 'SET_COLOR_SCHEME';

View File

@ -8,7 +8,7 @@
* authLogin: string
* }
*/
export const AUTH_STATUS_CHANGED = Symbol('AUTH_STATUS_CHANGED');
export const AUTH_STATUS_CHANGED = 'AUTH_STATUS_CHANGED';
/**
* The type of (redux) action which signals that a specific conference failed.
@ -19,7 +19,7 @@ export const AUTH_STATUS_CHANGED = Symbol('AUTH_STATUS_CHANGED');
* error: Error
* }
*/
export const CONFERENCE_FAILED = Symbol('CONFERENCE_FAILED');
export const CONFERENCE_FAILED = 'CONFERENCE_FAILED';
/**
* The type of (redux) action which signals that a specific conference was
@ -30,7 +30,7 @@ export const CONFERENCE_FAILED = Symbol('CONFERENCE_FAILED');
* conference: JitsiConference
* }
*/
export const CONFERENCE_JOINED = Symbol('CONFERENCE_JOINED');
export const CONFERENCE_JOINED = 'CONFERENCE_JOINED';
/**
* The type of (redux) action which signals that a specific conference was left.
@ -40,7 +40,7 @@ export const CONFERENCE_JOINED = Symbol('CONFERENCE_JOINED');
* conference: JitsiConference
* }
*/
export const CONFERENCE_LEFT = Symbol('CONFERENCE_LEFT');
export const CONFERENCE_LEFT = 'CONFERENCE_LEFT';
/**
* The type of (redux) action, which indicates conference subject changes.
@ -50,7 +50,7 @@ export const CONFERENCE_LEFT = Symbol('CONFERENCE_LEFT');
* subject: string
* }
*/
export const CONFERENCE_SUBJECT_CHANGED = Symbol('CONFERENCE_SUBJECT_CHANGED');
export const CONFERENCE_SUBJECT_CHANGED = 'CONFERENCE_SUBJECT_CHANGED';
/**
* The type of (redux) action which signals that a specific conference will be
@ -61,7 +61,7 @@ export const CONFERENCE_SUBJECT_CHANGED = Symbol('CONFERENCE_SUBJECT_CHANGED');
* conference: JitsiConference
* }
*/
export const CONFERENCE_WILL_JOIN = Symbol('CONFERENCE_WILL_JOIN');
export const CONFERENCE_WILL_JOIN = 'CONFERENCE_WILL_JOIN';
/**
* The type of (redux) action which signals that a specific conference will be
@ -72,7 +72,7 @@ export const CONFERENCE_WILL_JOIN = Symbol('CONFERENCE_WILL_JOIN');
* conference: JitsiConference
* }
*/
export const CONFERENCE_WILL_LEAVE = Symbol('CONFERENCE_WILL_LEAVE');
export const CONFERENCE_WILL_LEAVE = 'CONFERENCE_WILL_LEAVE';
/**
* The type of (redux) action which signals that the data channel with the
@ -82,7 +82,7 @@ export const CONFERENCE_WILL_LEAVE = Symbol('CONFERENCE_WILL_LEAVE');
* type: DATA_CHANNEL_OPENED
* }
*/
export const DATA_CHANNEL_OPENED = Symbol('DATA_CHANNEL_OPENED');
export const DATA_CHANNEL_OPENED = 'DATA_CHANNEL_OPENED';
/**
* The type of action which signals that the user has been kicked out from
@ -93,7 +93,7 @@ export const DATA_CHANNEL_OPENED = Symbol('DATA_CHANNEL_OPENED');
* conference: JitsiConference
* }
*/
export const KICKED_OUT = Symbol('KICKED_OUT');
export const KICKED_OUT = 'KICKED_OUT';
/**
* The type of (redux) action which signals that the lock state of a specific
@ -105,7 +105,7 @@ export const KICKED_OUT = Symbol('KICKED_OUT');
* locked: boolean
* }
*/
export const LOCK_STATE_CHANGED = Symbol('LOCK_STATE_CHANGED');
export const LOCK_STATE_CHANGED = 'LOCK_STATE_CHANGED';
/**
* The type of (redux) action which sets the peer2peer flag for the current
@ -116,7 +116,7 @@ export const LOCK_STATE_CHANGED = Symbol('LOCK_STATE_CHANGED');
* p2p: boolean
* }
*/
export const P2P_STATUS_CHANGED = Symbol('P2P_STATUS_CHANGED');
export const P2P_STATUS_CHANGED = 'P2P_STATUS_CHANGED';
/**
* The type of (redux) action which sets the audio-only flag for the current
@ -127,7 +127,7 @@ export const P2P_STATUS_CHANGED = Symbol('P2P_STATUS_CHANGED');
* audioOnly: boolean
* }
*/
export const SET_AUDIO_ONLY = Symbol('SET_AUDIO_ONLY');
export const SET_AUDIO_ONLY = 'SET_AUDIO_ONLY';
/**
* The type of (redux) action which sets the desktop sharing enabled flag for
@ -139,7 +139,7 @@ export const SET_AUDIO_ONLY = Symbol('SET_AUDIO_ONLY');
* }
*/
export const SET_DESKTOP_SHARING_ENABLED
= Symbol('SET_DESKTOP_SHARING_ENABLED');
= 'SET_DESKTOP_SHARING_ENABLED';
/**
* The type of (redux) action which updates the current known status of the
@ -150,7 +150,7 @@ export const SET_DESKTOP_SHARING_ENABLED
* enabled: boolean
* }
*/
export const SET_FOLLOW_ME = Symbol('SET_FOLLOW_ME');
export const SET_FOLLOW_ME = 'SET_FOLLOW_ME';
/**
* The type of (redux) action which sets the video channel's lastN (value).
@ -160,7 +160,7 @@ export const SET_FOLLOW_ME = Symbol('SET_FOLLOW_ME');
* lastN: number
* }
*/
export const SET_LASTN = Symbol('SET_LASTN');
export const SET_LASTN = 'SET_LASTN';
/**
* The type of (redux) action which sets the maximum video height that should be
@ -173,7 +173,7 @@ export const SET_LASTN = Symbol('SET_LASTN');
* }
*/
export const SET_MAX_RECEIVER_VIDEO_QUALITY
= Symbol('SET_MAX_RECEIVER_VIDEO_QUALITY');
= 'SET_MAX_RECEIVER_VIDEO_QUALITY';
/**
* The type of (redux) action which sets the password to join or lock a specific
@ -186,7 +186,7 @@ export const SET_MAX_RECEIVER_VIDEO_QUALITY
* password: string
* }
*/
export const SET_PASSWORD = Symbol('SET_PASSWORD');
export const SET_PASSWORD = 'SET_PASSWORD';
/**
* The type of (redux) action which signals that setting a password on a
@ -197,7 +197,7 @@ export const SET_PASSWORD = Symbol('SET_PASSWORD');
* error: string
* }
*/
export const SET_PASSWORD_FAILED = Symbol('SET_PASSWORD_FAILED');
export const SET_PASSWORD_FAILED = 'SET_PASSWORD_FAILED';
/**
* The type of (redux) action which signals for pending subject changes.
@ -207,7 +207,7 @@ export const SET_PASSWORD_FAILED = Symbol('SET_PASSWORD_FAILED');
* subject: string
* }
*/
export const SET_PENDING_SUBJECT_CHANGE = Symbol('SET_PENDING_SUBJECT_CHANGE');
export const SET_PENDING_SUBJECT_CHANGE = 'SET_PENDING_SUBJECT_CHANGE';
/**
* The type of (redux) action which sets the preferred maximum video height that
@ -219,7 +219,7 @@ export const SET_PENDING_SUBJECT_CHANGE = Symbol('SET_PENDING_SUBJECT_CHANGE');
* }
*/
export const SET_PREFERRED_RECEIVER_VIDEO_QUALITY
= Symbol('SET_PREFERRED_RECEIVER_VIDEO_QUALITY');
= 'SET_PREFERRED_RECEIVER_VIDEO_QUALITY';
/**
* The type of (redux) action which sets the name of the room of the
@ -230,7 +230,7 @@ export const SET_PREFERRED_RECEIVER_VIDEO_QUALITY
* room: string
* }
*/
export const SET_ROOM = Symbol('SET_ROOM');
export const SET_ROOM = 'SET_ROOM';
/**
* The type of (redux) action, which indicates if a SIP gateway is enabled on
@ -241,7 +241,7 @@ export const SET_ROOM = Symbol('SET_ROOM');
* isSIPGatewayEnabled: boolean
* }
*/
export const SET_SIP_GATEWAY_ENABLED = Symbol('SET_SIP_GATEWAY_ENABLED');
export const SET_SIP_GATEWAY_ENABLED = 'SET_SIP_GATEWAY_ENABLED';
/**
* The type of (redux) action which updates the current known status of the
@ -253,4 +253,4 @@ export const SET_SIP_GATEWAY_ENABLED = Symbol('SET_SIP_GATEWAY_ENABLED');
* startVideoMutedPolicy: boolean
* }
*/
export const SET_START_MUTED_POLICY = Symbol('SET_START_MUTED_POLICY');
export const SET_START_MUTED_POLICY = 'SET_START_MUTED_POLICY';

View File

@ -299,7 +299,7 @@ export function conferenceSubjectChanged(subject: string) {
* @returns {Function}
*/
function _conferenceWillJoin(conference: Object) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const localTracks
= getLocalTracks(getState()['features/base/tracks'])
.map(t => t.jitsiTrack);
@ -565,7 +565,7 @@ export function setFollowMe(enabled: boolean) {
* @returns {Function}
*/
export function setLastN(lastN: ?number) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
if (typeof lastN === 'undefined') {
const config = getState()['features/base/config'];
@ -618,7 +618,7 @@ export function setPassword(
conference: Object,
method: Function,
password: string) {
return (dispatch: Dispatch<*>, getState: Function): ?Promise<void> => {
return (dispatch: Dispatch<any>, getState: Function): ?Promise<void> => {
switch (method) {
case conference.join: {
let state = getState()['features/base/conference'];
@ -721,7 +721,7 @@ export function setRoom(room: ?string) {
*/
export function setStartMutedPolicy(
startAudioMuted: boolean, startVideoMuted: boolean) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const conference = getCurrentConference(getState());
conference && conference.setStartMutedPolicy({
@ -740,7 +740,7 @@ export function setStartMutedPolicy(
* @returns {Function}
*/
export function toggleAudioOnly() {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { audioOnly } = getState()['features/base/conference'];
return dispatch(setAudioOnly(!audioOnly, true));
@ -754,7 +754,7 @@ export function toggleAudioOnly() {
* @returns {void}
*/
export function setSubject(subject: string = '') {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { conference } = getState()['features/base/conference'];
if (conference) {

View File

@ -7,7 +7,7 @@
* locationURL: URL
* }
*/
export const CONFIG_WILL_LOAD = Symbol('CONFIG_WILL_LOAD');
export const CONFIG_WILL_LOAD = 'CONFIG_WILL_LOAD';
/**
* The redux action which signals that a configuration (commonly known in Jitsi
@ -19,7 +19,7 @@ export const CONFIG_WILL_LOAD = Symbol('CONFIG_WILL_LOAD');
* locationURL: URL
* }
*/
export const LOAD_CONFIG_ERROR = Symbol('LOAD_CONFIG_ERROR');
export const LOAD_CONFIG_ERROR = 'LOAD_CONFIG_ERROR';
/**
* The redux action which sets the configuration represented by the feature
@ -32,4 +32,4 @@ export const LOAD_CONFIG_ERROR = Symbol('LOAD_CONFIG_ERROR');
* config: Object
* }
*/
export const SET_CONFIG = Symbol('SET_CONFIG');
export const SET_CONFIG = 'SET_CONFIG';

View File

@ -59,7 +59,7 @@ export function loadConfigError(error: Error, locationURL: URL) {
* @returns {Function}
*/
export function setConfig(config: Object = {}) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { locationURL } = getState()['features/base/connection'];
// Now that the loading of the config was successful override the values
@ -99,7 +99,7 @@ export function setConfig(config: Object = {}) {
* @returns {Function}
*/
export function storeConfig(baseURL: string, config: Object) {
return (dispatch: Dispatch<*>) => {
return (dispatch: Dispatch<any>) => {
// Try to store the configuration in localStorage. If the deployment
// specified 'getroom' as a function, for example, it does not make
// sense to and it will not be stored.

View File

@ -7,7 +7,7 @@
* message: string
* }
*/
export const CONNECTION_DISCONNECTED = Symbol('CONNECTION_DISCONNECTED');
export const CONNECTION_DISCONNECTED = 'CONNECTION_DISCONNECTED';
/**
* The type of (redux) action which signals that a connection was successfully
@ -19,7 +19,7 @@ export const CONNECTION_DISCONNECTED = Symbol('CONNECTION_DISCONNECTED');
* timeEstablished: number,
* }
*/
export const CONNECTION_ESTABLISHED = Symbol('CONNECTION_ESTABLISHED');
export const CONNECTION_ESTABLISHED = 'CONNECTION_ESTABLISHED';
/**
* The type of (redux) action which signals that a connection failed.
@ -30,7 +30,7 @@ export const CONNECTION_ESTABLISHED = Symbol('CONNECTION_ESTABLISHED');
* error: Object | string
* }
*/
export const CONNECTION_FAILED = Symbol('CONNECTION_FAILED');
export const CONNECTION_FAILED = 'CONNECTION_FAILED';
/**
* The type of (redux) action which signals that a connection will connect.
@ -40,7 +40,7 @@ export const CONNECTION_FAILED = Symbol('CONNECTION_FAILED');
* connection: JitsiConnection
* }
*/
export const CONNECTION_WILL_CONNECT = Symbol('CONNECTION_WILL_CONNECT');
export const CONNECTION_WILL_CONNECT = 'CONNECTION_WILL_CONNECT';
/**
* The type of (redux) action which sets the location URL of the application,
@ -51,4 +51,4 @@ export const CONNECTION_WILL_CONNECT = Symbol('CONNECTION_WILL_CONNECT');
* locationURL: ?URL
* }
*/
export const SET_LOCATION_URL = Symbol('SET_LOCATION_URL');
export const SET_LOCATION_URL = 'SET_LOCATION_URL';

View File

@ -76,7 +76,7 @@ export type ConnectionFailedError = {
* @returns {Function}
*/
export function connect(id: ?string, password: ?string) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const state = getState();
const options = _constructOptions(state);
const { issuer, jwt } = state['features/base/jwt'];
@ -322,7 +322,7 @@ function _constructOptions(state) {
* @returns {Function}
*/
export function disconnect() {
return (dispatch: Dispatch<*>, getState: Function): Promise<void> => {
return (dispatch: Dispatch<any>, getState: Function): Promise<void> => {
const state = getState();
// The conference we have already joined or are joining.

View File

@ -19,7 +19,7 @@ export {
* @returns {Promise<JitsiConnection>}
*/
export function connect() {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
// XXX Lib-jitsi-meet does not accept uppercase letters.
const room = getState()['features/base/conference'].room.toLowerCase();

View File

@ -7,7 +7,7 @@
* deviceId: string,
* }
*/
export const SET_AUDIO_INPUT_DEVICE = Symbol('SET_AUDIO_INPUT_DEVICE');
export const SET_AUDIO_INPUT_DEVICE = 'SET_AUDIO_INPUT_DEVICE';
/**
* The type of Redux action which signals that the currently used video
@ -18,7 +18,7 @@ export const SET_AUDIO_INPUT_DEVICE = Symbol('SET_AUDIO_INPUT_DEVICE');
* deviceId: string,
* }
*/
export const SET_VIDEO_INPUT_DEVICE = Symbol('SET_VIDEO_INPUT_DEVICE');
export const SET_VIDEO_INPUT_DEVICE = 'SET_VIDEO_INPUT_DEVICE';
/**
* The type of Redux action which signals that the list of known available
@ -29,4 +29,4 @@ export const SET_VIDEO_INPUT_DEVICE = Symbol('SET_VIDEO_INPUT_DEVICE');
* devices: Array<MediaDeviceInfo>,
* }
*/
export const UPDATE_DEVICE_LIST = Symbol('UPDATE_DEVICE_LIST');
export const UPDATE_DEVICE_LIST = 'UPDATE_DEVICE_LIST';

View File

@ -5,7 +5,7 @@
* type: HIDE_DIALOG
* }
*/
export const HIDE_DIALOG = Symbol('HIDE_DIALOG');
export const HIDE_DIALOG = 'HIDE_DIALOG';
/**
* The type of Redux action which begins a request to open a dialog.
@ -17,4 +17,4 @@ export const HIDE_DIALOG = Symbol('HIDE_DIALOG');
* }
*
*/
export const OPEN_DIALOG = Symbol('OPEN_DIALOG');
export const OPEN_DIALOG = 'OPEN_DIALOG';

View File

@ -1,4 +1,6 @@
/* @flow */
// @flow
import type { Dispatch } from 'redux';
import { HIDE_DIALOG, OPEN_DIALOG } from './actionTypes';
import { isDialogOpen } from './functions';
@ -53,7 +55,7 @@ export function openDialog(component: Object, componentProps: ?Object) {
* @returns {Function}
*/
export function toggleDialog(component: Object, componentProps: ?Object) {
return (dispatch: Dispatch, getState: Function) => {
return (dispatch: Dispatch<*>, getState: Function) => {
if (isDialogOpen(getState, component)) {
dispatch(hideDialog(component));
} else {

View File

@ -1,6 +1,7 @@
// @flow
import { Component } from 'react';
import type { Dispatch } from 'redux';
import { hideDialog } from '../actions';
import type { DialogProps } from '../constants';
@ -8,13 +9,12 @@ import type { DialogProps } from '../constants';
/**
* The type of the React {@code Component} props of {@link AbstractDialog}.
*/
export type Props = {
...DialogProps,
export type Props = DialogProps & {
/**
* Used to show/hide the dialog on cancel.
*/
dispatch: Dispatch<*>
dispatch: Dispatch<any>
};
/**

View File

@ -16,8 +16,7 @@ import AbstractDialog, {
} from '../AbstractDialog';
import { brandedDialog as styles } from './styles';
export type Props = {
...AbstractProps,
export type Props = AbstractProps & {
/**
* The color-schemed stylesheet of the feature.

View File

@ -10,8 +10,7 @@ import {
brandedDialog
} from './styles';
type Props = {
...BaseProps,
type Props = BaseProps & {
/**
* The color-schemed stylesheet of the feature.
@ -83,7 +82,7 @@ class BaseSubmitDialog<P: Props, S: *> extends BaseDialog<P, S> {
_onCancel: () => void;
_onSubmit: ?string => boolean;
_onSubmit: () => boolean;
_renderHTML: string => Object | string

View File

@ -107,4 +107,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps)(BottomSheet);

View File

@ -13,8 +13,7 @@ import { type Props as BaseProps } from './BaseDialog';
import BaseSubmitDialog from './BaseSubmitDialog';
import { brandedDialog } from './styles';
type Props = {
...BaseProps,
type Props = BaseProps & {
/**
* The color-schemed stylesheet of the feature.

View File

@ -21,4 +21,5 @@ class CustomDialog extends BaseDialog<Props, *> {
}
}
// $FlowExpectedError
export default connect(_abstractMapStateToProps)(CustomDialog);

View File

@ -9,9 +9,7 @@ import { _abstractMapStateToProps } from '../../functions';
import { type Props as BaseProps } from './BaseDialog';
import BaseSubmitDialog from './BaseSubmitDialog';
type Props = {
...BaseProps,
type Props = BaseProps & {
t: Function
}

View File

@ -18,8 +18,7 @@ import {
inputDialog as styles
} from './styles';
type Props = {
...BaseProps,
type Props = BaseProps & {
/**
* The color-schemed stylesheet of the feature.

View File

@ -10,8 +10,7 @@ import StatelessDialog from './StatelessDialog';
/**
* The type of the React {@code Component} props of {@link Dialog}.
*/
type Props = {
...AbstractDialogProps,
type Props = AbstractDialogProps & {
/**
* Whether the dialog is modal. This means clicking on the blanket will
@ -44,7 +43,7 @@ class Dialog extends AbstractDialog<Props, State> {
* @param {Object} props - The read-only properties with which the new
* instance is to be initialized.
*/
constructor(props) {
constructor(props: Props) {
super(props);
// Bind event handlers so they are only bound once per instance.
@ -65,6 +64,7 @@ class Dialog extends AbstractDialog<Props, State> {
onSubmit: this._onSubmit
};
// $FlowExpectedError
delete props.dispatch;
return <StatelessDialog { ...props } />;
@ -84,4 +84,5 @@ class Dialog extends AbstractDialog<Props, State> {
_onSubmit: (?string) => void;
}
// $FlowExpectedError
export default connect()(Dialog);

View File

@ -5,27 +5,27 @@ export type DialogProps = {
/**
* Whether cancel button is disabled. Enabled by default.
*/
cancelDisabled: boolean,
cancelDisabled: ?boolean,
/**
* Optional i18n key to change the cancel button title.
*/
cancelKey: string,
cancelKey: ?string,
/**
* The React {@code Component} children which represents the dialog's body.
*/
children: React$Node,
children: ?React$Node,
/**
* Is ok button enabled/disabled. Enabled by default.
*/
okDisabled: boolean,
okDisabled: ?boolean,
/**
* Optional i18n key to change the ok button title.
*/
okKey: string,
okKey: ?string,
/**
* The handler for onCancel event.
@ -47,14 +47,14 @@ export type DialogProps = {
/**
* Key to use for showing a title.
*/
titleKey: string,
titleKey: ?string,
/**
* The string to use as a title instead of {@code titleKey}. If a truthy
* value is specified, it takes precedence over {@code titleKey} i.e.
* the latter is unused.
*/
titleString: string
titleString: ?string
};
/**

View File

@ -7,4 +7,4 @@
* jwt: string
* }
*/
export const SET_JWT = Symbol('SET_JWT');
export const SET_JWT = 'SET_JWT';

View File

@ -9,4 +9,4 @@
* knownDomains: Array<string>
* }
*/
export const ADD_KNOWN_DOMAINS = Symbol('ADD_KNOWN_DOMAINS');
export const ADD_KNOWN_DOMAINS = 'ADD_KNOWN_DOMAINS';

View File

@ -5,7 +5,7 @@
* type: LIB_DID_DISPOSE
* }
*/
export const LIB_DID_DISPOSE = Symbol('LIB_DID_DISPOSE');
export const LIB_DID_DISPOSE = 'LIB_DID_DISPOSE';
/**
* The type of Redux action which signals that {@link JitsiMeetJS.init()} was
@ -15,7 +15,7 @@ export const LIB_DID_DISPOSE = Symbol('LIB_DID_DISPOSE');
* type: LIB_DID_INIT
* }
*/
export const LIB_DID_INIT = Symbol('LIB_DID_INIT');
export const LIB_DID_INIT = 'LIB_DID_INIT';
/**
* Action to signal that lib-jitsi-meet initialized failed with error.
@ -25,7 +25,7 @@ export const LIB_DID_INIT = Symbol('LIB_DID_INIT');
* error: Error
* }
*/
export const LIB_INIT_ERROR = Symbol('LIB_INIT_ERROR');
export const LIB_INIT_ERROR = 'LIB_INIT_ERROR';
/**
* The type of Redux action which signals that {@link JitsiMeetJS} will be
@ -35,7 +35,7 @@ export const LIB_INIT_ERROR = Symbol('LIB_INIT_ERROR');
* type: LIB_WILL_DISPOSE
* }
*/
export const LIB_WILL_DISPOSE = Symbol('LIB_WILL_DISPOSE');
export const LIB_WILL_DISPOSE = 'LIB_WILL_DISPOSE';
/**
* The type of Redux action which signals that {@link JitsiMeetJS.init()} will
@ -45,4 +45,4 @@ export const LIB_WILL_DISPOSE = Symbol('LIB_WILL_DISPOSE');
* type: LIB_WILL_INIT
* }
*/
export const LIB_WILL_INIT = Symbol('LIB_WILL_INIT');
export const LIB_WILL_INIT = 'LIB_WILL_INIT';

View File

@ -20,7 +20,7 @@ declare var APP: Object;
* @returns {Function}
*/
export function disposeLib() {
return (dispatch: Dispatch<*>) => {
return (dispatch: Dispatch<any>) => {
dispatch({ type: LIB_WILL_DISPOSE });
// TODO Currently, lib-jitsi-meet doesn't have the functionality to
@ -36,7 +36,7 @@ export function disposeLib() {
* @returns {Function}
*/
export function initLib() {
return (dispatch: Dispatch<*>, getState: Function): void => {
return (dispatch: Dispatch<any>, getState: Function): void => {
const config = getState()['features/base/config'];
if (!config) {

View File

@ -7,7 +7,7 @@
* logCollector: Logger.LogCollector
* }
*/
export const SET_LOG_COLLECTOR = Symbol('SET_LOG_COLLECTOR');
export const SET_LOG_COLLECTOR = 'SET_LOG_COLLECTOR';
/**
* The type of redux action which sets the configuration of the feature
@ -18,4 +18,4 @@ export const SET_LOG_COLLECTOR = Symbol('SET_LOG_COLLECTOR');
* config: Object
* }
*/
export const SET_LOGGING_CONFIG = Symbol('SET_LOGGING_CONFIG');
export const SET_LOGGING_CONFIG = 'SET_LOGGING_CONFIG';

View File

@ -6,7 +6,7 @@
* muted: boolean
* }
*/
export const SET_AUDIO_MUTED = Symbol('SET_AUDIO_MUTED');
export const SET_AUDIO_MUTED = 'SET_AUDIO_MUTED';
/**
* The type of (redux) action to adjust the availability of the local audio.
@ -16,7 +16,7 @@ export const SET_AUDIO_MUTED = Symbol('SET_AUDIO_MUTED');
* muted: boolean
* }
*/
export const SET_AUDIO_AVAILABLE = Symbol('SET_AUDIO_AVAILABLE');
export const SET_AUDIO_AVAILABLE = 'SET_AUDIO_AVAILABLE';
/**
* The type of (redux) action to set the facing mode of the local video camera
@ -27,7 +27,7 @@ export const SET_AUDIO_AVAILABLE = Symbol('SET_AUDIO_AVAILABLE');
* cameraFacingMode: CAMERA_FACING_MODE
* }
*/
export const SET_CAMERA_FACING_MODE = Symbol('SET_CAMERA_FACING_MODE');
export const SET_CAMERA_FACING_MODE = 'SET_CAMERA_FACING_MODE';
/**
* The type of (redux) action to adjust the availability of the local video.
@ -37,7 +37,7 @@ export const SET_CAMERA_FACING_MODE = Symbol('SET_CAMERA_FACING_MODE');
* available: boolean
* }
*/
export const SET_VIDEO_AVAILABLE = Symbol('SET_VIDEO_AVAILABLE');
export const SET_VIDEO_AVAILABLE = 'SET_VIDEO_AVAILABLE';
/**
* The type of (redux) action to set the muted state of the local video.
@ -47,7 +47,7 @@ export const SET_VIDEO_AVAILABLE = Symbol('SET_VIDEO_AVAILABLE');
* muted: boolean
* }
*/
export const SET_VIDEO_MUTED = Symbol('SET_VIDEO_MUTED');
export const SET_VIDEO_MUTED = 'SET_VIDEO_MUTED';
/**
* The type of (redux) action to store the last video {@link Transform} applied
@ -59,7 +59,7 @@ export const SET_VIDEO_MUTED = Symbol('SET_VIDEO_MUTED');
* transform: Transform
* }
*/
export const STORE_VIDEO_TRANSFORM = Symbol('STORE_VIDEO_TRANSFORM');
export const STORE_VIDEO_TRANSFORM = 'STORE_VIDEO_TRANSFORM';
/**
* The type of (redux) action to toggle the local video camera facing mode. In
@ -71,4 +71,4 @@ export const STORE_VIDEO_TRANSFORM = Symbol('STORE_VIDEO_TRANSFORM');
* type: TOGGLE_CAMERA_FACING_MODE
* }
*/
export const TOGGLE_CAMERA_FACING_MODE = Symbol('TOGGLE_CAMERA_FACING_MODE');
export const TOGGLE_CAMERA_FACING_MODE = 'TOGGLE_CAMERA_FACING_MODE';

View File

@ -99,7 +99,7 @@ export function setVideoMuted(
muted: boolean,
authority: number = VIDEO_MUTISM_AUTHORITY.USER,
ensureTrack: boolean = false) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const oldValue = getState()['features/base/media'].video.muted;
// eslint-disable-next-line no-bitwise

View File

@ -1,6 +1,7 @@
/* @flow */
import React, { Component } from 'react';
import type { Dispatch } from 'redux';
import { trackVideoStarted } from '../../tracks';
@ -15,7 +16,7 @@ export type Props = {
/**
* The Redux dispatch function.
*/
dispatch: Dispatch<*>,
dispatch: Dispatch<any>,
/**
* Callback to invoke when the {@link Video} of {@code AbstractVideoTrack}

View File

@ -29,4 +29,5 @@ class VideoTrack extends AbstractVideoTrack<Props> {
}
}
// $FlowExpectedError
export default connect()(VideoTrack);

View File

@ -5,6 +5,8 @@ import { PanResponder, PixelRatio, View } from 'react-native';
import { connect } from 'react-redux';
import { type Dispatch } from 'redux';
import type { PanResponderInstance } from 'PanResponder';
import { storeVideoTransform } from '../../actions';
import styles from './styles';
@ -117,7 +119,7 @@ class VideoTransform extends Component<Props, State> {
/**
* The gesture handler object.
*/
gestureHandlers: PanResponder;
gestureHandlers: PanResponderInstance;
/**
* The initial distance of the fingers on pinch start.
@ -190,7 +192,7 @@ class VideoTransform extends Component<Props, State> {
*
* @inheritdoc
*/
componentDidUpdate(prevProps, prevState) {
componentDidUpdate(prevProps: Props, prevState: State) {
if (prevProps.streamId !== this.props.streamId) {
this._storeTransform(prevProps.streamId, prevState.transform);
this._restoreTransform(this.props.streamId);
@ -687,7 +689,7 @@ class VideoTransform extends Component<Props, State> {
* _onUnmount: Function
* }}
*/
function _mapDispatchToProps(dispatch: Dispatch<*>) {
function _mapDispatchToProps(dispatch: Dispatch<any>) {
return {
/**
* Dispatches actions to store the last applied transform to a video.
@ -725,4 +727,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps, _mapDispatchToProps)(VideoTransform);

View File

@ -11,8 +11,7 @@ import Video from './Video';
/**
* The type of the React {@code Component} props of {@link VideoTrack}.
*/
type Props = {
...AbstractVideoTrackProps,
type Props = AbstractVideoTrackProps & {
/**
* CSS classes to add to the video element.
@ -64,4 +63,5 @@ class VideoTrack extends AbstractVideoTrack<Props> {
_onVideoPlaying: () => void;
}
// $FlowExpectedError
export default connect()(VideoTrack);

View File

@ -8,7 +8,7 @@
* }
* }
*/
export const DOMINANT_SPEAKER_CHANGED = Symbol('DOMINANT_SPEAKER_CHANGED');
export const DOMINANT_SPEAKER_CHANGED = 'DOMINANT_SPEAKER_CHANGED';
/**
* Create an action for removing a participant from the conference.
@ -18,7 +18,7 @@ export const DOMINANT_SPEAKER_CHANGED = Symbol('DOMINANT_SPEAKER_CHANGED');
* id: string
* }
*/
export const KICK_PARTICIPANT = Symbol('KICK_PARTICIPANT');
export const KICK_PARTICIPANT = 'KICK_PARTICIPANT';
/**
* Create an action for muting a remote participant.
@ -28,7 +28,7 @@ export const KICK_PARTICIPANT = Symbol('KICK_PARTICIPANT');
* id: string
* }
*/
export const MUTE_REMOTE_PARTICIPANT = Symbol('MUTE_REMOTE_PARTICIPANT');
export const MUTE_REMOTE_PARTICIPANT = 'MUTE_REMOTE_PARTICIPANT';
/**
* Create an action for when the local participant's display name is updated.
@ -40,7 +40,7 @@ export const MUTE_REMOTE_PARTICIPANT = Symbol('MUTE_REMOTE_PARTICIPANT');
* }
*/
export const PARTICIPANT_DISPLAY_NAME_CHANGED
= Symbol('PARTICIPANT_DISPLAY_NAME_CHANGED');
= 'PARTICIPANT_DISPLAY_NAME_CHANGED';
/**
* Action to signal that ID of participant has changed. This happens when
@ -53,7 +53,7 @@ export const PARTICIPANT_DISPLAY_NAME_CHANGED
* oldValue: string
* }
*/
export const PARTICIPANT_ID_CHANGED = Symbol('PARTICIPANT_ID_CHANGED');
export const PARTICIPANT_ID_CHANGED = 'PARTICIPANT_ID_CHANGED';
/**
* Action to signal that a participant has joined.
@ -63,7 +63,7 @@ export const PARTICIPANT_ID_CHANGED = Symbol('PARTICIPANT_ID_CHANGED');
* participant: Participant
* }
*/
export const PARTICIPANT_JOINED = Symbol('PARTICIPANT_JOINED');
export const PARTICIPANT_JOINED = 'PARTICIPANT_JOINED';
/**
* Action to handle case when participant lefts.
@ -75,7 +75,7 @@ export const PARTICIPANT_JOINED = Symbol('PARTICIPANT_JOINED');
* }
* }
*/
export const PARTICIPANT_LEFT = Symbol('PARTICIPANT_LEFT');
export const PARTICIPANT_LEFT = 'PARTICIPANT_LEFT';
/**
* Action to handle case when info about participant changes.
@ -85,7 +85,7 @@ export const PARTICIPANT_LEFT = Symbol('PARTICIPANT_LEFT');
* participant: Participant
* }
*/
export const PARTICIPANT_UPDATED = Symbol('PARTICIPANT_UPDATED');
export const PARTICIPANT_UPDATED = 'PARTICIPANT_UPDATED';
/**
* The type of the Redux action which pins a conference participant.
@ -97,7 +97,7 @@ export const PARTICIPANT_UPDATED = Symbol('PARTICIPANT_UPDATED');
* }
* }
*/
export const PIN_PARTICIPANT = Symbol('PIN_PARTICIPANT');
export const PIN_PARTICIPANT = 'PIN_PARTICIPANT';
/**
* Action to signal that a hidden participant has joined.
@ -107,7 +107,7 @@ export const PIN_PARTICIPANT = Symbol('PIN_PARTICIPANT');
* participant: Participant
* }
*/
export const HIDDEN_PARTICIPANT_JOINED = Symbol('HIDDEN_PARTICIPANT_JOINED');
export const HIDDEN_PARTICIPANT_JOINED = 'HIDDEN_PARTICIPANT_JOINED';
/**
* Action to handle case when hidden participant leaves.
@ -119,4 +119,4 @@ export const HIDDEN_PARTICIPANT_JOINED = Symbol('HIDDEN_PARTICIPANT_JOINED');
* }
* }
*/
export const HIDDEN_PARTICIPANT_LEFT = Symbol('HIDDEN_PARTICIPANT_LEFT');
export const HIDDEN_PARTICIPANT_LEFT = 'HIDDEN_PARTICIPANT_LEFT';

View File

@ -20,7 +20,7 @@ export type Item = {
/**
* An optional react element to append to the end of the Item.
*/
elementAfter?: ?ComponentType<any>,
elementAfter?: ?React$Node,
/**
* Unique ID of the item.

View File

@ -20,7 +20,7 @@ export type Props = {
/**
* React Elements to display within the component.
*/
children: React$Node | Object,
children: React$Node,
/**
* The event handler/listener to be invoked when this

View File

@ -32,7 +32,7 @@ type Props = {
/**
* Children of the component.
*/
children?: ?React$Element<*>,
children?: React$Node,
/**
* item containing data to be rendered
@ -70,6 +70,44 @@ export default class AvatarListItem extends Component<Props> {
this._renderItemLine = this._renderItemLine.bind(this);
}
/**
* Helper function to render the content in the avatar container.
*
* @returns {React$Element}
*/
_getAvatarContent() {
const {
avatarSize = AVATAR_SIZE,
avatarTextStyle
} = this.props;
const { avatar, title } = this.props.item;
const isAvatarURL = Boolean(avatar && avatar.match(/^http[s]*:\/\//i));
if (isAvatarURL) {
return (
<Avatar
size = { avatarSize }
uri = { avatar } />
);
}
if (avatar && !isAvatarURL) {
return (
<Icon name = { avatar } />
);
}
return (
<Text
style = { [
styles.avatarContent,
avatarTextStyle
] }>
{ title.substr(0, 1).toUpperCase() }
</Text>
);
}
/**
* Implements {@code Component#render}.
*
@ -78,10 +116,9 @@ export default class AvatarListItem extends Component<Props> {
render() {
const {
avatarSize = AVATAR_SIZE,
avatarStyle,
avatarTextStyle
avatarStyle
} = this.props;
const { avatar, colorBase, lines, title } = this.props.item;
const { colorBase, lines, title } = this.props.item;
const avatarStyles = {
...styles.avatar,
...this._getAvatarColor(colorBase),
@ -91,8 +128,6 @@ export default class AvatarListItem extends Component<Props> {
width: avatarSize
};
const isAvatarURL = Boolean(avatar && avatar.match(/^http[s]*:\/\//i));
return (
<Container
onClick = { this.props.onPress }
@ -100,26 +135,7 @@ export default class AvatarListItem extends Component<Props> {
underlayColor = { UNDERLAY_COLOR }>
<Container style = { styles.avatarContainer }>
<Container style = { avatarStyles }>
{
isAvatarURL && <Avatar
size = { avatarSize }
uri = { avatar } />
}
{
Boolean(avatar && !isAvatarURL) && <Icon
name = { avatar } />
}
{
!avatar && <Text
style = { [
styles.avatarContent,
avatarTextStyle
] }>
{ title.substr(0, 1).toUpperCase() }
</Text>
}
{ this._getAvatarContent() }
</Container>
</Container>
<Container style = { styles.listItemDetails }>

View File

@ -68,4 +68,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps)(BackButton);

View File

@ -165,4 +165,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps)(Header);

View File

@ -283,4 +283,5 @@ class PagedList extends Component<Props, State> {
}
}
// $FlowExpectedError
export default connect()(PagedList);

View File

@ -242,4 +242,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps)(translate(Watermarks));

View File

@ -32,14 +32,8 @@ class MiddlewareRegistry {
* @returns {Middleware}
*/
applyMiddleware(...additional: Array<Middleware<*, *>>) {
// XXX The explicit definition of the local variable middlewares is to
// satisfy flow.
const middlewares = [
...this._elements,
...additional
];
return applyMiddleware(...middlewares);
// $FlowExpectedError
return applyMiddleware(...this._elements, ...additional);
}
/**

View File

@ -38,6 +38,7 @@ class ReducerRegistry {
* @returns {Function}
*/
combineReducers(additional: NameReducerMap<*, *> = {}) {
// $FlowExpectedError
return combineReducers({
...this._elements,
...additional

View File

@ -1,5 +1,7 @@
// @flow
import type { Store } from 'redux';
const logger = require('jitsi-meet-logger').getLogger(__filename);
/**
@ -16,7 +18,8 @@ const logger = require('jitsi-meet-logger').getLogger(__filename);
* invoked only if {@code prevSelection} and {@code selection} are different.
* Immutable!
*/
type Listener = (selection: any, store: Store, prevSelection: any) => void;
type Listener
= (selection: any, store: Store<*, *>, prevSelection: any) => void;
/**
* The type selector supported for registration with
@ -65,7 +68,10 @@ class StateListenerRegistry {
*/
_selectorListeners: Set<SelectorListener> = new Set();
_listener: (Store) => void;
_listener: ({
prevSelections: Map<SelectorListener, any>,
store: Store<*, *>
}) => void;
/**
* Invoked by a specific redux store any time an action is dispatched, and
@ -78,7 +84,7 @@ class StateListenerRegistry {
*/
_listener({ prevSelections, store }: {
prevSelections: Map<SelectorListener, any>,
store: Store
store: Store<*, *>
}) {
for (const selectorListener of this._selectorListeners) {
const prevSelection = prevSelections.get(selectorListener);
@ -129,7 +135,7 @@ class StateListenerRegistry {
* {@code StateListenerRegistry} is to {@code subscribe}.
* @returns {void}
*/
subscribe(store: Store) {
subscribe(store: Store<*, *>) {
// XXX If StateListenerRegistry is not utilized by the app to listen to
// state changes, do not bother subscribing to the store at all.
if (this._selectorListeners.size) {

View File

@ -7,7 +7,7 @@
* aspectRatio: Symbol
* }
*/
export const SET_ASPECT_RATIO = Symbol('SET_ASPECT_RATIO');
export const SET_ASPECT_RATIO = 'SET_ASPECT_RATIO';
/**
* The type of redux action which signals that the reduces UI mode was enabled
@ -20,4 +20,4 @@ export const SET_ASPECT_RATIO = Symbol('SET_ASPECT_RATIO');
*
* @public
*/
export const SET_REDUCED_UI = Symbol('SET_REDUCED_UI');
export const SET_REDUCED_UI = 'SET_REDUCED_UI';

View File

@ -30,7 +30,7 @@ const REDUCED_UI_THRESHOLD = 300;
* }}
*/
export function setAspectRatio(width: number, height: number): Function {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
// Don't change the aspect ratio if width and height are the same, that
// is, if we transition to a 1:1 aspect ratio.
if (width !== height) {
@ -60,7 +60,7 @@ export function setAspectRatio(width: number, height: number): Function {
* }}
*/
export function setReducedUI(width: number, height: number): Function {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const reducedUI = Math.min(width, height) < REDUCED_UI_THRESHOLD;
if (reducedUI !== getState()['features/base/responsive-ui'].reducedUI) {

View File

@ -52,7 +52,7 @@ class AspectRatioDetector extends Component<Props> {
* _onDimensionsChanged: Function
* }}
*/
function _mapDispatchToProps(dispatch: Dispatch<*>) {
function _mapDispatchToProps(dispatch: Dispatch<any>) {
return {
/**
* Handles the "on dimensions changed" event and dispatches aspect ratio
@ -69,4 +69,5 @@ function _mapDispatchToProps(dispatch: Dispatch<*>) {
};
}
// $FlowExpectedError
export default connect(undefined, _mapDispatchToProps)(AspectRatioDetector);

View File

@ -53,7 +53,7 @@ class ReducedUIDetector extends Component<Props> {
* _onDimensionsChanged: Function
* }}
*/
function _mapDispatchToProps(dispatch: Dispatch<*>) {
function _mapDispatchToProps(dispatch: Dispatch<any>) {
return {
/**
* Handles the "on dimensions changed" event and dispatches the
@ -70,4 +70,5 @@ function _mapDispatchToProps(dispatch: Dispatch<*>) {
};
}
// $FlowExpectedError
export default connect(undefined, _mapDispatchToProps)(ReducedUIDetector);

View File

@ -4,7 +4,7 @@
*
* @type {Symbol}
*/
export const ASPECT_RATIO_NARROW = Symbol('ASPECT_RATIO_NARROW');
export const ASPECT_RATIO_NARROW = 'ASPECT_RATIO_NARROW';
/**
* The aspect ratio constant which indicates that the width (of whatever the
@ -12,4 +12,4 @@ export const ASPECT_RATIO_NARROW = Symbol('ASPECT_RATIO_NARROW');
*
* @type {Symbol}
*/
export const ASPECT_RATIO_WIDE = Symbol('ASPECT_RATIO_WIDE');
export const ASPECT_RATIO_WIDE = 'ASPECT_RATIO_WIDE';

View File

@ -19,4 +19,4 @@
* }
* }
*/
export const SETTINGS_UPDATED = Symbol('SETTINGS_UPDATED');
export const SETTINGS_UPDATED = 'SETTINGS_UPDATED';

View File

@ -8,7 +8,7 @@
* soundId: string
* }
*/
export const _ADD_AUDIO_ELEMENT = Symbol('_ADD_AUDIO_ELEMENT');
export const _ADD_AUDIO_ELEMENT = '_ADD_AUDIO_ELEMENT';
/**
* The type of feature/internal/protected (redux) action to remove an audio
@ -19,7 +19,7 @@ export const _ADD_AUDIO_ELEMENT = Symbol('_ADD_AUDIO_ELEMENT');
* soundId: string
* }
*/
export const _REMOVE_AUDIO_ELEMENT = Symbol('_REMOVE_AUDIO_ELEMENT');
export const _REMOVE_AUDIO_ELEMENT = '_REMOVE_AUDIO_ELEMENT';
/**
* The type of (redux) action to play a sound from the sounds collection.
@ -29,7 +29,7 @@ export const _REMOVE_AUDIO_ELEMENT = Symbol('_REMOVE_AUDIO_ELEMENT');
* soundId: string
* }
*/
export const PLAY_SOUND = Symbol('PLAY_SOUND');
export const PLAY_SOUND = 'PLAY_SOUND';
/**
* The type of (redux) action to register a new sound with the sounds
@ -40,7 +40,7 @@ export const PLAY_SOUND = Symbol('PLAY_SOUND');
* soundId: string
* }
*/
export const REGISTER_SOUND = Symbol('REGISTER_SOUND');
export const REGISTER_SOUND = 'REGISTER_SOUND';
/**
* The type of (redux) action to stop a sound from the sounds collection.
@ -50,7 +50,7 @@ export const REGISTER_SOUND = Symbol('REGISTER_SOUND');
* soundId: string
* }
*/
export const STOP_SOUND = Symbol('STOP_SOUND');
export const STOP_SOUND = 'STOP_SOUND';
/**
* The type of (redux) action to unregister an existing sound from the sounds
@ -61,4 +61,4 @@ export const STOP_SOUND = Symbol('STOP_SOUND');
* soundId: string
* }
*/
export const UNREGISTER_SOUND = Symbol('UNREGISTER_SOUND');
export const UNREGISTER_SOUND = 'UNREGISTER_SOUND';

View File

@ -153,4 +153,5 @@ export function _mapDispatchToProps(dispatch: Function) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps, _mapDispatchToProps)(SoundCollection);

View File

@ -46,7 +46,7 @@ const _WELL_KNOWN_NUMBER_PROPERTIES = [ 'height', 'width' ];
* @returns {StyleType} - The merged styles.
*/
export function combineStyles(a: StyleType, b: StyleType): StyleType {
const result = [];
const result: Array<StyleSheet> = [];
if (a) {
if (Array.isArray(a)) {

View File

@ -6,4 +6,4 @@
* type: SET_CONNECTION_STATE
* }
*/
export const SET_CONNECTION_STATE = Symbol('SET_CONNECTION_STATE');
export const SET_CONNECTION_STATE = 'SET_CONNECTION_STATE';

View File

@ -89,7 +89,7 @@ class TestConnectionInfo extends Component<Props, State> {
* @param {Object} props - The read-only properties with which the new
* instance is to be initialized.
*/
constructor(props: Object) {
constructor(props: Props) {
super(props);
this._onStatsUpdated = this._onStatsUpdated.bind(this);
@ -142,7 +142,7 @@ class TestConnectionInfo extends Component<Props, State> {
* @inheritdoc
* returns {void}
*/
componentDidUpdate(prevProps) {
componentDidUpdate(prevProps: Props) {
if (prevProps._localUserId !== this.props._localUserId) {
statsEmitter.unsubscribeToClientStats(
prevProps._localUserId, this._onStatsUpdated);
@ -215,4 +215,5 @@ function _mapStateToProps(state) {
};
}
// $FlowExpectedError
export default connect(_mapStateToProps)(TestConnectionInfo);

View File

@ -34,4 +34,5 @@ class TestHint extends Component<TestHintProps> {
}
}
// $FlowExpectedError
export default connect(_mapStateToProps)(TestHint);

View File

@ -201,6 +201,7 @@ export default class AbstractToolboxItem<P : Props> extends Component<P> {
*/
_renderItem() {
// To be implemented by a subclass.
return null;
}
/**

View File

@ -6,7 +6,7 @@
* type: TOGGLE_SCREENSHARING
* }
*/
export const TOGGLE_SCREENSHARING = Symbol('TOGGLE_SCREENSHARING');
export const TOGGLE_SCREENSHARING = 'TOGGLE_SCREENSHARING';
/**
* The type of redux action dispatched when a track has been (locally or
@ -17,7 +17,7 @@ export const TOGGLE_SCREENSHARING = Symbol('TOGGLE_SCREENSHARING');
* track: Track
* }
*/
export const TRACK_ADDED = Symbol('TRACK_ADDED');
export const TRACK_ADDED = 'TRACK_ADDED';
/**
* The type of redux action dispatched when a canceled {@code getUserMedia}
@ -29,7 +29,7 @@ export const TRACK_ADDED = Symbol('TRACK_ADDED');
* trackType: MEDIA_TYPE
* }
*/
export const TRACK_CREATE_CANCELED = Symbol('TRACK_CREATE_CANCELED');
export const TRACK_CREATE_CANCELED = 'TRACK_CREATE_CANCELED';
/**
* The type of redux action dispatched when {@code getUserMedia} fails with an
@ -41,7 +41,7 @@ export const TRACK_CREATE_CANCELED = Symbol('TRACK_CREATE_CANCELED');
* trackType: MEDIA_TYPE
* }
*/
export const TRACK_CREATE_ERROR = Symbol('TRACK_CREATE_ERROR');
export const TRACK_CREATE_ERROR = 'TRACK_CREATE_ERROR';
/**
* The type of redux action dispatched when a track has been (locally or
@ -52,7 +52,7 @@ export const TRACK_CREATE_ERROR = Symbol('TRACK_CREATE_ERROR');
* track: Track
* }
*/
export const TRACK_REMOVED = Symbol('TRACK_REMOVED');
export const TRACK_REMOVED = 'TRACK_REMOVED';
/**
* The type of redux action dispatched when a track's properties were updated.
@ -62,7 +62,7 @@ export const TRACK_REMOVED = Symbol('TRACK_REMOVED');
* track: Track
* }
*/
export const TRACK_UPDATED = Symbol('TRACK_UPDATED');
export const TRACK_UPDATED = 'TRACK_UPDATED';
/**
* The type of redux action dispatched when a local track starts being created
@ -82,4 +82,4 @@ export const TRACK_UPDATED = Symbol('TRACK_UPDATED');
* }
* }
*/
export const TRACK_WILL_CREATE = Symbol('TRACK_WILL_CREATE');
export const TRACK_WILL_CREATE = 'TRACK_WILL_CREATE';

View File

@ -21,29 +21,6 @@ export function getJitsiMeetGlobalNS() {
return window.JitsiMeetJS.app;
}
/**
* Gets the description of a specific {@code Symbol}.
*
* @param {Symbol} symbol - The {@code Symbol} to retrieve the description of.
* @private
* @returns {string} The description of {@code symbol}.
*/
export function getSymbolDescription(symbol: ?Symbol) {
let description = symbol ? symbol.toString() : 'undefined';
if (description.startsWith('Symbol(') && description.endsWith(')')) {
description = description.slice(7, -1);
}
// The polyfill es6-symbol that we use does not appear to comply with the
// Symbol standard and, merely, adds @@ at the beginning of the description.
if (description.startsWith('@@')) {
description = description.slice(2);
}
return description;
}
/**
* A helper function that behaves similar to Object.assign, but only reassigns a
* property in target if it's defined in source.

View File

@ -8,7 +8,7 @@
* type: CLEAR_CALENDAR_INTEGRATION
* }
*/
export const CLEAR_CALENDAR_INTEGRATION = Symbol('CLEAR_CALENDAR_INTEGRATION');
export const CLEAR_CALENDAR_INTEGRATION = 'CLEAR_CALENDAR_INTEGRATION';
/**
* Action to refresh (re-fetch) the entry list.
@ -19,7 +19,7 @@ export const CLEAR_CALENDAR_INTEGRATION = Symbol('CLEAR_CALENDAR_INTEGRATION');
* isInteractive: boolean
* }
*/
export const REFRESH_CALENDAR = Symbol('REFRESH_CALENDAR');
export const REFRESH_CALENDAR = 'REFRESH_CALENDAR';
/**
* Action to signal that calendar access has already been requested since the
@ -31,7 +31,7 @@ export const REFRESH_CALENDAR = Symbol('REFRESH_CALENDAR');
* authorization: ?string
* }
*/
export const SET_CALENDAR_AUTHORIZATION = Symbol('SET_CALENDAR_AUTHORIZATION');
export const SET_CALENDAR_AUTHORIZATION = 'SET_CALENDAR_AUTHORIZATION';
/**
* Action to update the last error that occurred while trying to authenticate
@ -42,7 +42,7 @@ export const SET_CALENDAR_AUTHORIZATION = Symbol('SET_CALENDAR_AUTHORIZATION');
* error: ?Object
* }
*/
export const SET_CALENDAR_ERROR = Symbol('SET_CALENDAR_ERROR');
export const SET_CALENDAR_ERROR = 'SET_CALENDAR_ERROR';
/**
* Action to update the current calendar entry list in the store.
@ -52,7 +52,7 @@ export const SET_CALENDAR_ERROR = Symbol('SET_CALENDAR_ERROR');
* events: Array<Object>
* }
*/
export const SET_CALENDAR_EVENTS = Symbol('SET_CALENDAR_EVENTS');
export const SET_CALENDAR_EVENTS = 'SET_CALENDAR_EVENTS';
/**
* Action to update calendar type to be used for web.
@ -63,7 +63,7 @@ export const SET_CALENDAR_EVENTS = Symbol('SET_CALENDAR_EVENTS');
* integrationType: string
* }
*/
export const SET_CALENDAR_INTEGRATION = Symbol('SET_CALENDAR_INTEGRATION');
export const SET_CALENDAR_INTEGRATION = 'SET_CALENDAR_INTEGRATION';
/**
* The type of Redux action which changes Calendar API auth state.
@ -73,7 +73,7 @@ export const SET_CALENDAR_INTEGRATION = Symbol('SET_CALENDAR_INTEGRATION');
* }
* @public
*/
export const SET_CALENDAR_AUTH_STATE = Symbol('SET_CALENDAR_AUTH_STATE');
export const SET_CALENDAR_AUTH_STATE = 'SET_CALENDAR_AUTH_STATE';
/**
* The type of Redux action which changes Calendar Profile email state.
@ -84,7 +84,7 @@ export const SET_CALENDAR_AUTH_STATE = Symbol('SET_CALENDAR_AUTH_STATE');
* }
* @public
*/
export const SET_CALENDAR_PROFILE_EMAIL = Symbol('SET_CALENDAR_PROFILE_EMAIL');
export const SET_CALENDAR_PROFILE_EMAIL = 'SET_CALENDAR_PROFILE_EMAIL';
/**
* The type of Redux action which denotes whether a request is in flight to get
@ -97,4 +97,4 @@ export const SET_CALENDAR_PROFILE_EMAIL = Symbol('SET_CALENDAR_PROFILE_EMAIL');
* @public
*/
export const SET_LOADING_CALENDAR_EVENTS
= Symbol('SET_LOADING_CALENDAR_EVENTS');
= 'SET_LOADING_CALENDAR_EVENTS';

View File

@ -1,6 +1,8 @@
// @flow
import { generateRoomWithoutSeparator } from 'js-utils/random';
import type { Dispatch } from 'redux';
import { getDefaultURL } from '../app';
import { openDialog } from '../base/dialog';
@ -35,7 +37,7 @@ export function openUpdateCalendarEventDialog(eventId: string) {
* @returns {Function}
*/
export function updateCalendarEvent(eventId: string) {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const defaultUrl = getDefaultURL(getState);
const roomName = generateRoomWithoutSeparator();

View File

@ -1,6 +1,7 @@
// @flow
import { generateRoomWithoutSeparator } from 'js-utils/random';
import type { Dispatch } from 'redux';
import { loadGoogleAPI } from '../google-api';
@ -197,7 +198,7 @@ export function setIntegrationReady(integrationType: string) {
* @returns {Function}
*/
export function signIn(calendarType: string): Function {
return (dispatch: Dispatch<*>) => {
return (dispatch: Dispatch<any>) => {
const integration = _getCalendarIntegration(calendarType);
if (!integration) {
@ -229,7 +230,7 @@ export function signIn(calendarType: string): Function {
* @returns {Function}
*/
export function updateCalendarEvent(id: string, calendarId: string): Function {
return (dispatch: Dispatch<*>, getState: Function) => {
return (dispatch: Dispatch<any>, getState: Function) => {
const { integrationType } = getState()['features/calendar-sync'];
const integration = _getCalendarIntegration(integrationType);
@ -276,7 +277,7 @@ export function updateCalendarEvent(id: string, calendarId: string): Function {
* @returns {Function}
*/
export function updateProfile(calendarType: string): Function {
return (dispatch: Dispatch<*>) => {
return (dispatch: Dispatch<any>) => {
const integration = _getCalendarIntegration(calendarType);
if (!integration) {

View File

@ -1,8 +1,9 @@
// @flow
import Tooltip from '@atlaskit/tooltip';
import React, { Component } from 'react';
import { connect } from 'react-redux';
import Tooltip from '@atlaskit/tooltip';
import type { Dispatch } from 'redux';
import {
createCalendarClickedEvent,
@ -25,7 +26,7 @@ type Props = {
/**
* Invoked to add a meeting URL to a calendar event.
*/
dispatch: Dispatch<*>,
dispatch: Dispatch<any>,
/**
* The ID of the calendar event that will have a meeting URL added on click.

View File

@ -108,7 +108,7 @@ class CalendarListContent extends Component<Props> {
);
}
_onPress: (string, string) => Function;
_onPress: (string, ?string) => Function;
/**
* Handles the list's navigate action.

View File

@ -59,7 +59,7 @@ class CalendarListContent extends Component<Props> {
*
* @inheritdoc
*/
constructor(props) {
constructor(props: Props) {
super(props);
// Bind event handlers so they are only bound once per instance.
@ -114,7 +114,7 @@ class CalendarListContent extends Component<Props> {
this._onPress(url, 'calendar.meeting.join');
}
_onPress: (string, string) => Function;
_onPress: (string, ?string) => Function;
/**
* Handles the list's navigate action.
@ -173,5 +173,7 @@ function _mapStateToProps(state: Object) {
}
export default isCalendarEnabled()
// $FlowExpectedError
? connect(_mapStateToProps)(CalendarListContent)
: undefined;

View File

@ -2,6 +2,7 @@
import { NativeModules, Platform } from 'react-native';
import RNCalendarEvents from 'react-native-calendar-events';
import type { Store } from 'redux';
import { getShareInfoText } from '../invite';
@ -22,7 +23,7 @@ const logger = require('jitsi-meet-logger').getLogger(__filename);
* @returns {Promise<*>}
*/
export function addLinkToCalendarEntry(
state: Object, id: string, link: string) {
state: Object, id: string, link: string): Promise<any> {
return new Promise((resolve, reject) => {
getShareInfoText(state, link, true).then(shareInfoText => {
RNCalendarEvents.findEventById(id).then(event => {
@ -76,9 +77,9 @@ export function isCalendarEnabled() {
* @returns {void}
*/
export function _fetchCalendarEntries(
store,
maybePromptForPermission,
forcePermission) {
store: Store<*, *>,
maybePromptForPermission: boolean,
forcePermission: ?boolean) {
const { dispatch, getState } = store;
const promptForPermission
= (maybePromptForPermission

View File

@ -47,9 +47,9 @@ export function isCalendarEnabled() {
* @returns {void}
*/
export function _fetchCalendarEntries(
store,
maybePromptForPermission,
forcePermission) {
store: Object,
maybePromptForPermission: boolean,
forcePermission: ?boolean) {
/* eslint-enable no-unused-vars */
const { dispatch, getState } = store;

Some files were not shown because too many files have changed in this diff Show More