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.
97 lines
2.7 KiB
97 lines
2.7 KiB
/** |
|
* Copyright (c) 2015-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 IncrementalPresenter |
|
* @flow |
|
*/ |
|
'use strict'; |
|
|
|
const IncrementalGroup = require('IncrementalGroup'); |
|
const React = require('React'); |
|
const PropTypes = require('prop-types'); |
|
const View = require('View'); |
|
|
|
const ViewPropTypes = require('ViewPropTypes'); |
|
|
|
import type {Context} from 'Incremental'; |
|
|
|
/** |
|
* WARNING: EXPERIMENTAL. Breaking changes will probably happen a lot and will |
|
* not be reliably announced. The whole thing might be deleted, who knows? Use |
|
* at your own risk. |
|
* |
|
* `<IncrementalPresenter>` can be used to group sets of `<Incremental>` renders |
|
* such that they are initially invisible and removed from layout until all |
|
* descendants have finished rendering, at which point they are drawn all at once |
|
* so the UI doesn't jump around during the incremental rendering process. |
|
* |
|
* See Incremental.js for more info. |
|
*/ |
|
type Props = { |
|
name: string, |
|
disabled?: boolean, |
|
onDone?: () => void, |
|
onLayout?: (event: Object) => void, |
|
style?: mixed, |
|
children?: any, |
|
} |
|
class IncrementalPresenter extends React.Component<Props> { |
|
context: Context; |
|
_isDone: boolean; |
|
|
|
static propTypes = { |
|
name: PropTypes.string, |
|
disabled: PropTypes.bool, |
|
onDone: PropTypes.func, |
|
onLayout: PropTypes.func, |
|
style: ViewPropTypes.style, |
|
}; |
|
static contextTypes = { |
|
incrementalGroup: PropTypes.object, |
|
incrementalGroupEnabled: PropTypes.bool, |
|
}; |
|
|
|
constructor(props: Props, context: Context) { |
|
super(props, context); |
|
this._isDone = false; |
|
(this: any).onDone = this.onDone.bind(this); |
|
} |
|
onDone() { |
|
this._isDone = true; |
|
if (this.props.disabled !== true && |
|
this.context.incrementalGroupEnabled !== false) { |
|
// Avoid expensive re-renders and use setNativeProps |
|
this.refs.view.setNativeProps( |
|
{style: [this.props.style, {opacity: 1, position: 'relative'}]} |
|
); |
|
} |
|
this.props.onDone && this.props.onDone(); |
|
} |
|
render() { |
|
if (this.props.disabled !== true && |
|
this.context.incrementalGroupEnabled !== false && |
|
!this._isDone) { |
|
var style = [this.props.style, {opacity: 0, position: 'absolute'}]; |
|
} else { |
|
var style = this.props.style; |
|
} |
|
return ( |
|
<IncrementalGroup |
|
onDone={this.onDone} |
|
name={this.props.name} |
|
disabled={this.props.disabled}> |
|
<View |
|
children={this.props.children} |
|
ref="view" |
|
style={style} |
|
onLayout={this.props.onLayout} |
|
/> |
|
</IncrementalGroup> |
|
); |
|
} |
|
} |
|
|
|
module.exports = IncrementalPresenter;
|
|
|