Skip to content

Commit 5c5ce32

Browse files
authored
Merge pull request #17 from bamlab/improve-dev-experience
Improve dev experience
2 parents bcb9f51 + 693fda6 commit 5c5ce32

25 files changed

Lines changed: 2036 additions & 561 deletions

.circleci/config.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Javascript Node CircleCI 2.0 configuration file
2+
#
3+
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
4+
#
5+
version: 2
6+
jobs:
7+
build:
8+
docker:
9+
# specify the version you desire here
10+
- image: circleci/node:7.10
11+
12+
# Specify service dependencies here if necessary
13+
# CircleCI maintains a library of pre-built images
14+
# documented at https://circleci.com/docs/2.0/circleci-images/
15+
# - image: circleci/mongo:3.4.4
16+
17+
working_directory: ~/react-native-image-header-scroll-view
18+
19+
steps:
20+
- checkout
21+
22+
# Download and cache dependencies
23+
- restore_cache:
24+
keys:
25+
- v1-dependencies-{{ checksum "package.json" }}
26+
# fallback to using the latest cache if no exact match is found
27+
- v1-dependencies-
28+
29+
- run: yarn install && cd example && yarn install && cd ..
30+
31+
- save_cache:
32+
paths:
33+
- node_modules
34+
key: v1-dependencies-{{ checksum "package.json" }}
35+
36+
# run tests!
37+
- run: yarn test
38+
39+

.eslintignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
**/node_modules
2+
**/android
3+
**/ios
4+
**/vendors
5+
**/coverage
6+
**/flow-coverage

.eslintrc

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,28 @@
11
{
2-
"extends": "airbnb",
3-
"parser": "babel-eslint",
2+
"extends": [
3+
"react-app",
4+
"prettier",
5+
"prettier/flowtype",
6+
"prettier/react"
7+
],
8+
"plugins": [
9+
"flowtype",
10+
"react",
11+
"prettier"
12+
],
13+
"globals": {
14+
"__DEV__": true
15+
},
416
"rules": {
5-
"react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }],
6-
"import/no-extraneous-dependencies": [0],
7-
"import/no-unresolved": [2, { ignore: ['^react(-native)?$'] }],
8-
"import/extensions": [2, { "js": "never", "json": "always" }]
17+
"no-use-before-define": 0,
18+
"no-unused-vars": "error",
19+
"prettier/prettier": [
20+
"error",
21+
{
22+
"trailingComma": "es5",
23+
"singleQuote": true,
24+
"printWidth": 100
25+
}
26+
]
927
}
1028
}

.flowconfig

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[ignore]
2+
; We fork some components by platform
3+
.*/*[.]android.js
4+
5+
; Ignore "BUCK" generated dirs
6+
<PROJECT_ROOT>/\.buckd/
7+
8+
; Ignore unexpected extra "@providesModule"
9+
.*/node_modules/.*/node_modules/fbjs/.*
10+
11+
; Ignore duplicate module providers
12+
; For RN Apps installed via npm, "Libraries" folder is inside
13+
; "node_modules/react-native" but in the source repo it is in the root
14+
.*/Libraries/react-native/React.js
15+
.*/Libraries/react-native/ReactNative.js
16+
17+
.*/node_modules/react-navigation
18+
19+
; Do not remove all example to have react-native
20+
.*/example/main.js
21+
.*/example/Pages/.*
22+
23+
; Remove duplication between example and .
24+
.*/example/node_modules/fbjs/
25+
26+
; Remove not passing libs
27+
.*/example/node_modules/react-native-tab-view/
28+
29+
[include]
30+
31+
[libs]
32+
example/node_modules/react-native/Libraries/react-native/react-native-interface.js
33+
example/node_modules/react-native/flow
34+
flow/
35+
36+
[options]
37+
emoji=true
38+
39+
module.system=haste
40+
41+
munge_underscores=true
42+
43+
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
44+
45+
suppress_type=$FlowIssue
46+
suppress_type=$FlowFixMe
47+
suppress_type=$FixMe
48+
49+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(4[0-7]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
50+
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(4[0-7]\\|[1-3][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
51+
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
52+
suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
53+
54+
unsafe.enable_getters_and_setters=true
55+
56+
[version]
57+
^0.47.0

example/.babelrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"presets": ["react-native", "react-native-stage-0/decorator-support"]
2+
"presets": ["react-native"]
33
}

example/.gitignore

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,5 +51,3 @@ buck-out/
5151
fastlane/report.xml
5252
fastlane/Preview.html
5353
fastlane/screenshots
54-
55-
ImageHeaderScrollView/*.js

example/Pages/Menu.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ const Menu = props =>
7474
text="Forms and buttons"
7575
target="avignon"
7676
/>
77+
<Button {...props} image={require('../assets/pullrefresh.jpg')} text="Pull To Refresh" target="pullrefresh" />
7778
</ScrollView>;
7879

7980
Menu.route = {

example/Pages/PullToRefresh.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import React from 'react';
2+
import {
3+
StyleSheet,
4+
Text,
5+
Image,
6+
TouchableOpacity,
7+
View,
8+
Dimensions,
9+
RefreshControl,
10+
} from 'react-native';
11+
import { Header } from 'react-navigation';
12+
13+
import HeaderImageScrollView from 'react-native-image-header-scroll-view';
14+
15+
const MIN_HEIGHT = Header.HEIGHT;
16+
const MAX_HEIGHT = 200;
17+
18+
class BasicUsage extends React.Component {
19+
constructor() {
20+
super();
21+
this.state = {
22+
refreshing: false,
23+
};
24+
}
25+
26+
_onRefresh() {
27+
this.setState({
28+
refreshing: true,
29+
});
30+
31+
setTimeout(() => {
32+
this.setState({
33+
refreshing: false,
34+
});
35+
}, 2000);
36+
}
37+
38+
render() {
39+
return (
40+
<View style={styles.container}>
41+
<HeaderImageScrollView
42+
maxHeight={MAX_HEIGHT}
43+
minHeight={MIN_HEIGHT}
44+
minOverlayOpacity={0.4}
45+
renderHeader={() =>
46+
<Image source={require('../assets/pullrefresh.jpg')} style={styles.image} />}
47+
refreshControl={
48+
<RefreshControl
49+
refreshing={this.state.refreshing}
50+
onRefresh={this._onRefresh.bind(this)}
51+
tintColor="white"
52+
/>
53+
}
54+
renderTouchableFixedForeground={() =>
55+
<View style={{ height: MAX_HEIGHT, justifyContent: 'center', alignItems: 'center' }}>
56+
<TouchableOpacity onPress={() => console.log('tap!!')} style={styles.button}>
57+
<Text style={styles.buttonText}>Click Me!</Text>
58+
</TouchableOpacity>
59+
</View>}
60+
>
61+
<View style={{ height: 1000 }} />
62+
</HeaderImageScrollView>
63+
</View>
64+
);
65+
}
66+
}
67+
68+
const styles = StyleSheet.create({
69+
container: {
70+
flex: 1,
71+
},
72+
image: {
73+
height: MAX_HEIGHT,
74+
width: Dimensions.get('window').width,
75+
},
76+
button: {
77+
borderWidth: 1,
78+
borderRadius: 8,
79+
paddingVertical: 10,
80+
paddingHorizontal: 30,
81+
borderColor: 'white',
82+
backgroundColor: '#00000066',
83+
},
84+
buttonText: {
85+
color: 'white',
86+
backgroundColor: 'transparent',
87+
},
88+
});
89+
90+
export default BasicUsage;

example/Pages/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export { default as TvShow } from './TvShow';
33
export { default as BasicUsage } from './BasicUsage';
44
export { default as ColorsPage } from './Colors';
55
export { default as Avignon } from './Avignon';
6+
export { default as PullToRefresh } from './PullToRefresh';

example/android/app/BUCK

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import re
2-
31
# To learn about Buck see [Docs](https://buckbuild.com/).
42
# To run your application with Buck:
53
# - install Buck
@@ -11,56 +9,57 @@ import re
119
#
1210

1311
lib_deps = []
12+
1413
for jarfile in glob(['libs/*.jar']):
15-
name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)
14+
name = 'jars__' + jarfile[jarfile.rindex('/') + 1: jarfile.rindex('.jar')]
1615
lib_deps.append(':' + name)
1716
prebuilt_jar(
1817
name = name,
1918
binary_jar = jarfile,
2019
)
2120

2221
for aarfile in glob(['libs/*.aar']):
23-
name = 'aars__' + re.sub(r'^.*/([^/]+)\.aar$', r'\1', aarfile)
22+
name = 'aars__' + aarfile[aarfile.rindex('/') + 1: aarfile.rindex('.aar')]
2423
lib_deps.append(':' + name)
2524
android_prebuilt_aar(
2625
name = name,
2726
aar = aarfile,
2827
)
2928

3029
android_library(
31-
name = 'all-libs',
32-
exported_deps = lib_deps
30+
name = "all-libs",
31+
exported_deps = lib_deps,
3332
)
3433

3534
android_library(
36-
name = 'app-code',
37-
srcs = glob([
38-
'src/main/java/**/*.java',
39-
]),
40-
deps = [
41-
':all-libs',
42-
':build_config',
43-
':res',
44-
],
35+
name = "app-code",
36+
srcs = glob([
37+
"src/main/java/**/*.java",
38+
]),
39+
deps = [
40+
":all-libs",
41+
":build_config",
42+
":res",
43+
],
4544
)
4645

4746
android_build_config(
48-
name = 'build_config',
49-
package = 'com.imageheaderscrollview',
47+
name = "build_config",
48+
package = "com.imageheaderscrollview",
5049
)
5150

5251
android_resource(
53-
name = 'res',
54-
res = 'src/main/res',
55-
package = 'com.imageheaderscrollview',
52+
name = "res",
53+
package = "com.imageheaderscrollview",
54+
res = "src/main/res",
5655
)
5756

5857
android_binary(
59-
name = 'app',
60-
package_type = 'debug',
61-
manifest = 'src/main/AndroidManifest.xml',
62-
keystore = '//android/keystores:debug',
63-
deps = [
64-
':app-code',
65-
],
58+
name = "app",
59+
keystore = "//android/keystores:debug",
60+
manifest = "src/main/AndroidManifest.xml",
61+
package_type = "debug",
62+
deps = [
63+
":app-code",
64+
],
6665
)

0 commit comments

Comments
 (0)