UNPKG

create-expo-cljs-app

Version:

Create a react native application with Expo and Shadow-CLJS!

90 lines (78 loc) 2.03 kB
/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ 'use strict'; const React = require('react'); const {NativeModules, StyleSheet, View} = require('react-native'); const {Recording: RecordingModule} = NativeModules; const LAYOUT_SPECS = [ [10, 10, 100, 100], [10, 10, 50, 50], [0, 0, 50, 50], [0, 0, 50, 50], ]; class LayoutEventsTestApp extends React.Component { constructor() { super(); this.state = { specNumber: 0, }; this.numParentLayouts = 0; } handleOnLayout = e => { const layout = e.nativeEvent.layout; RecordingModule.record( layout.x + ',' + layout.y + '-' + layout.width + 'x' + layout.height, ); if (this.state.specNumber >= LAYOUT_SPECS.length) { // This will cause the test to fail RecordingModule.record('Got an extraneous layout call'); } else { this.setState({ specNumber: this.state.specNumber + 1, }); } }; handleParentOnLayout = e => { if (this.numParentLayouts > 0) { // This will cause the test to fail - the parent's layout doesn't change // so we should only get the event once. RecordingModule.record('Got an extraneous layout call on the parent'); } this.numParentLayouts++; }; render() { const layout = LAYOUT_SPECS[this.state.specNumber]; return ( <View onLayout={this.handleParentOnLayout} testID="parent" style={styles.container}> <View onLayout={this.handleOnLayout} testID="container" style={{ left: layout[0], top: layout[1], width: layout[2], height: layout[3], }} /> </View> ); } } const styles = StyleSheet.create({ container: { left: 0, top: 0, width: 500, height: 500, }, }); module.exports = LayoutEventsTestApp;