Skip to content

Commit 2f7ae68

Browse files
Merge pull request #41 from pvinis/to-typescript
Moving to TypeScript
2 parents 7abd32f + b19d89b commit 2f7ae68

18 files changed

+301
-154
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
lib/
2+
13
# VSCode
24
.vscode/
35
jsconfig.json
46

57
# IntelliJ/Webstorm
68
.idea
79

8-
# OS X
10+
# macOS
911
.DS_Store
1012

1113
# NodeJS

lib/useAccessibilityInfo.js

Lines changed: 0 additions & 25 deletions
This file was deleted.

lib/useDeviceOrientation.js

Lines changed: 0 additions & 34 deletions
This file was deleted.

lib/useKeyboard.js

Lines changed: 0 additions & 52 deletions
This file was deleted.

lib/useLayout.js

Lines changed: 0 additions & 16 deletions
This file was deleted.

package.json

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
"description": "",
55
"main": "index.js",
66
"scripts": {
7-
"test": "echo \"Error: no test specified\" && exit 1",
8-
"release": "release-it"
7+
"build": "yarn tsc",
8+
"release": "release-it",
9+
"test": "echo \"Error: no test specified\" && exit 1"
910
},
1011
"author": "Nader Dabit",
1112
"license": "ISC",
@@ -14,6 +15,13 @@
1415
"react-native": ">=0.59"
1516
},
1617
"devDependencies": {
17-
"release-it": "^12.3.5"
18-
}
18+
"@types/react": "^16.9.10",
19+
"@types/react-native": "^0.60.21",
20+
"release-it": "^12.3.5",
21+
"typescript": "^3.6.4"
22+
},
23+
"files": [
24+
"index.js",
25+
"lib"
26+
]
1927
}

src/useAccessibilityInfo.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React, { useEffect, useState } from 'react'
2+
import {
3+
AccessibilityInfo,
4+
AccessibilityChangeEvent,
5+
AccessibilityEvent,
6+
} from 'react-native'
7+
8+
export default function useAccessibilityInfo() {
9+
const [reduceMotionEnabled, setReduceMotionEnabled] = useState(false)
10+
const [screenReaderEnabled, setScreenReaderEnabled] = useState(false)
11+
12+
const handleReduceMotionChanged = (enabled: AccessibilityChangeEvent) =>
13+
setReduceMotionEnabled(enabled)
14+
const handleScreenReaderChanged = (enabled: AccessibilityChangeEvent) =>
15+
setScreenReaderEnabled(enabled)
16+
17+
useEffect(() => {
18+
AccessibilityInfo.isReduceMotionEnabled().then(handleReduceMotionChanged)
19+
AccessibilityInfo.isScreenReaderEnabled().then(handleScreenReaderChanged)
20+
21+
AccessibilityInfo.addEventListener(
22+
'reduceMotionChanged',
23+
handleReduceMotionChanged as (event: AccessibilityEvent) => void,
24+
)
25+
AccessibilityInfo.addEventListener(
26+
'screenReaderChanged',
27+
handleScreenReaderChanged as (event: AccessibilityEvent) => void,
28+
)
29+
30+
return () => {
31+
AccessibilityInfo.removeEventListener(
32+
'reduceMotionChanged',
33+
handleReduceMotionChanged as (event: AccessibilityEvent) => void,
34+
)
35+
AccessibilityInfo.removeEventListener(
36+
'screenReaderChanged',
37+
handleScreenReaderChanged as (event: AccessibilityEvent) => void,
38+
)
39+
}
40+
}, [])
41+
42+
return { reduceMotionEnabled, screenReaderEnabled }
43+
}

lib/useAppState.js renamed to src/useAppState.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import React, { useEffect, useState } from 'react'
2-
import { AppState } from 'react-native'
2+
import { AppState, AppStateStatus } from 'react-native'
33

44
export default function useAppState() {
55
const currentState = AppState.currentState
66
const [appState, setAppState] = useState(currentState)
77

8-
function onChange (newState) {
8+
function onChange(newState: AppStateStatus) {
99
setAppState(newState)
1010
}
1111

lib/useBackHandler.js renamed to src/useBackHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect } from 'react'
22
import { BackHandler } from 'react-native'
33

4-
export default function useBackHandler(handler) {
4+
export default function useBackHandler(handler: () => void) {
55
useEffect(() => {
66
BackHandler.addEventListener('hardwareBackPress', handler)
77

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
import React, { useState } from 'react'
22
import {
3-
CameraRoll
3+
CameraRoll,
4+
GetPhotosParamType,
5+
GetPhotosReturnType,
46
} from 'react-native'
57

6-
const initialState = {
8+
const initialState: GetPhotosReturnType = {
79
edges: [],
810
page_info: {
911
end_cursor: '',
10-
has_next_page: null,
11-
start_cursor: ''
12-
}
12+
has_next_page: false,
13+
start_cursor: '',
14+
},
1315
}
1416

15-
const defaultConfig = {
17+
const defaultConfig: GetPhotosParamType = {
1618
first: 20,
17-
groupTypes: 'All'
19+
groupTypes: 'All',
1820
}
1921

2022
export default function useCameraRoll() {
@@ -29,7 +31,7 @@ export default function useCameraRoll() {
2931
}
3032
}
3133

32-
async function saveToCameraRoll(tag, type) {
34+
async function saveToCameraRoll(tag: string, type?: 'photo' | 'video') {
3335
try {
3436
await CameraRoll.saveToCameraRoll(tag, type)
3537
} catch (err) {
@@ -38,4 +40,4 @@ export default function useCameraRoll() {
3840
}
3941

4042
return [photos, getPhotos, saveToCameraRoll]
41-
}
43+
}

lib/useClipboard.js renamed to src/useClipboard.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ export default function useClipBoard() {
66

77
async function updateClipboard() {
88
const content = await Clipboard.getString()
9-
updateClipboardData(content);
9+
updateClipboardData(content)
1010
}
1111

1212
useEffect(() => {
1313
updateClipboard()
1414
}, [])
1515

16-
function setString(content) {
16+
function setString(content: string) {
1717
Clipboard.setString(content)
1818
updateClipboardData(content)
1919
}

src/useDeviceOrientation.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import React, { useEffect, useState } from 'react'
2+
import { Dimensions, ScaledSize } from 'react-native'
3+
4+
const screen = Dimensions.get('screen')
5+
6+
export default function() {
7+
const isOrientationPortrait = ({
8+
width,
9+
height,
10+
}: {
11+
width: number
12+
height: number
13+
}) => height >= width
14+
const isOrientationLandscape = ({
15+
width,
16+
height,
17+
}: {
18+
width: number
19+
height: number
20+
}) => width >= height
21+
22+
const [orientation, setOrientation] = useState({
23+
portrait: isOrientationPortrait(screen),
24+
landscape: isOrientationLandscape(screen),
25+
})
26+
27+
const onChange = ({ screen }: { screen: ScaledSize }) => {
28+
setOrientation({
29+
portrait: isOrientationPortrait(screen),
30+
landscape: isOrientationLandscape(screen),
31+
})
32+
}
33+
34+
useEffect(() => {
35+
Dimensions.addEventListener('change', onChange)
36+
37+
return () => {
38+
Dimensions.removeEventListener('change', onChange)
39+
}
40+
}, [orientation.portrait, orientation.landscape])
41+
42+
return orientation
43+
}
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
import React, { useEffect, useState } from 'react'
2-
import { Dimensions } from 'react-native'
2+
import { Dimensions, ScaledSize } from 'react-native'
33

44
const window = Dimensions.get('window')
55
const screen = Dimensions.get('screen')
66

77
export default function useDimensions() {
88
const [dimensions, setDimensions] = useState({
9-
window, screen
9+
window,
10+
screen,
1011
})
1112

12-
onChange = ({ window, screen }) => {
13+
const onChange = ({
14+
window,
15+
screen,
16+
}: {
17+
window: ScaledSize
18+
screen: ScaledSize
19+
}) => {
1320
setDimensions({ window, screen })
1421
}
1522

@@ -20,4 +27,4 @@ export default function useDimensions() {
2027
}, [])
2128

2229
return dimensions
23-
}
30+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import React, { useEffect, useState } from 'react';
2-
import { InteractionManager } from 'react-native';
1+
import React, { useEffect, useState } from 'react'
2+
import { InteractionManager } from 'react-native'
33

44
export default function useInteractionManager() {
5-
const [complete, updateInteractionStatus] = useState(false);
5+
const [complete, updateInteractionStatus] = useState(false)
66

77
useEffect(() => {
88
InteractionManager.runAfterInteractions(() => {
99
updateInteractionStatus(true)
1010
})
1111
}, [])
1212
return complete
13-
};
13+
}

0 commit comments

Comments
 (0)