This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
3.1 KiB
122 lines
3.1 KiB
/** |
|
* Copyright (c) 2016-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
* |
|
* @providesModule Share |
|
* @flow |
|
*/ |
|
'use strict'; |
|
|
|
const Platform = require('Platform'); |
|
|
|
const invariant = require('fbjs/lib/invariant'); |
|
const processColor = require('processColor'); |
|
|
|
const { |
|
ActionSheetManager, |
|
ShareModule |
|
} = require('NativeModules'); |
|
|
|
type Content = { title?: string, message: string } | { title?: string, url: string }; |
|
type Options = { |
|
dialogTitle?: string, |
|
excludedActivityTypes?: Array<string>, |
|
tintColor?: string, |
|
subject?: string |
|
}; |
|
|
|
class Share { |
|
|
|
/** |
|
* Open a dialog to share text content. |
|
* |
|
* In iOS, Returns a Promise which will be invoked an object containing `action`, `activityType`. |
|
* If the user dismissed the dialog, the Promise will still be resolved with action being `Share.dismissedAction` |
|
* and all the other keys being undefined. |
|
* |
|
* In Android, Returns a Promise which always be resolved with action being `Share.sharedAction`. |
|
* |
|
* ### Content |
|
* |
|
* - `message` - a message to share |
|
* - `title` - title of the message |
|
* |
|
* #### iOS |
|
* |
|
* - `url` - an URL to share |
|
* |
|
* At least one of URL and message is required. |
|
* |
|
* ### Options |
|
* |
|
* #### iOS |
|
* |
|
* - `subject` - a subject to share via email |
|
* - `excludedActivityTypes` |
|
* - `tintColor` |
|
* |
|
* #### Android |
|
* |
|
* - `dialogTitle` |
|
* |
|
*/ |
|
static share(content: Content, options: Options = {}): Promise<Object> { |
|
invariant( |
|
typeof content === 'object' && content !== null, |
|
'Content to share must be a valid object' |
|
); |
|
invariant( |
|
typeof content.url === 'string' || typeof content.message === 'string', |
|
'At least one of URL and message is required' |
|
); |
|
invariant( |
|
typeof options === 'object' && options !== null, |
|
'Options must be a valid object' |
|
); |
|
|
|
if (Platform.OS === 'android') { |
|
invariant( |
|
!content.title || typeof content.title === 'string', |
|
'Invalid title: title should be a string.' |
|
); |
|
return ShareModule.share(content, options.dialogTitle); |
|
} else if (Platform.OS === 'ios') { |
|
return new Promise((resolve, reject) => { |
|
ActionSheetManager.showShareActionSheetWithOptions( |
|
{...content, ...options, tintColor: processColor(options.tintColor)}, |
|
(error) => reject(error), |
|
(success, activityType) => { |
|
if (success) { |
|
resolve({ |
|
'action': 'sharedAction', |
|
'activityType': activityType |
|
}); |
|
} else { |
|
resolve({ |
|
'action': 'dismissedAction' |
|
}); |
|
} |
|
} |
|
); |
|
}); |
|
} else { |
|
return Promise.reject(new Error('Unsupported platform')); |
|
} |
|
} |
|
|
|
/** |
|
* The content was successfully shared. |
|
*/ |
|
static get sharedAction(): string { return 'sharedAction'; } |
|
|
|
/** |
|
* The dialog has been dismissed. |
|
* @platform ios |
|
*/ |
|
static get dismissedAction(): string { return 'dismissedAction'; } |
|
|
|
} |
|
|
|
module.exports = Share;
|
|
|