@boneframework/native-components 1.0.0 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/Bone.ts +6 -0
  2. package/Components.ts +1 -0
  3. package/Contexts.ts +1 -0
  4. package/Hooks.ts +3 -0
  5. package/README.md +10 -1
  6. package/Screens.ts +4 -0
  7. package/Utilities.ts +1 -0
  8. package/api/client.js +29 -0
  9. package/api/expoPushTokens.js +7 -0
  10. package/api/notifications.js +9 -0
  11. package/api/ping.js +9 -0
  12. package/api/users.js +35 -0
  13. package/components/ActivityIndicator.js +48 -0
  14. package/components/Animation.js +21 -0
  15. package/components/ApiInterceptor.js +104 -0
  16. package/components/Button.js +40 -0
  17. package/components/Card.js +56 -0
  18. package/components/CategoryPickerItem.js +31 -0
  19. package/components/DateTimePicker.js +12 -0
  20. package/components/Icon.js +28 -0
  21. package/components/Image.js +61 -0
  22. package/components/ImageInput.tsx +97 -0
  23. package/components/ImageInputList.tsx +34 -0
  24. package/components/ListItemDeleteAction.tsx +30 -0
  25. package/components/ListItemFlipswitch.tsx +60 -0
  26. package/components/ListItemSeparator.tsx +23 -0
  27. package/components/ListItemSwipable.tsx +64 -0
  28. package/components/OfflineNotice.tsx +36 -0
  29. package/components/Picker.tsx +87 -0
  30. package/components/PickerItem.tsx +20 -0
  31. package/components/PickerItemComponent.tsx +14 -0
  32. package/components/RoundIconButton.tsx +36 -0
  33. package/components/Screen.tsx +26 -0
  34. package/components/SessionProvider.tsx +31 -0
  35. package/components/Text.tsx +15 -0
  36. package/components/TextInput.tsx +39 -0
  37. package/contexts/auth.js +5 -0
  38. package/hooks/useApi.js +20 -0
  39. package/hooks/useAuth.js +37 -0
  40. package/package.json +14 -3
  41. package/screens/RegisterScreen.tsx +87 -0
  42. package/screens/WelcomeScreen.tsx +50 -0
  43. package/utilities/authStorage.js +80 -0
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import {Image, ImageBackground, StyleSheet, Text, View} from "react-native";
3
+ import {exchangeCodeAsync, makeRedirectUri, useAuthRequest} from "expo-auth-session";
4
+
5
+ import Button from '@/components/Button'
6
+ import colors from '@/config/colors'
7
+
8
+ function WelcomeScreen({loginOnPress = () => {}, registerOnPress = () => {}}) {
9
+ return (
10
+ <ImageBackground blurRadius={10} style={styles.background} source={require('@/assets/background.png')} >
11
+ <View style={styles.logoContainer}>
12
+ <Image style={styles.logo} source={require('@/assets/logo.png')} />
13
+ <Text style={styles.tagline}>BONE FRAMEWORK</Text>
14
+ </View>
15
+ <View style={styles.buttonContainer}>
16
+ <Button title="login" color="primary" onPress={loginOnPress} ></Button>
17
+ <Button title="register" color="secondary" onPress={registerOnPress}></Button>
18
+ </View>
19
+ </ImageBackground>
20
+ );
21
+ }
22
+ const styles = StyleSheet.create({
23
+ background: {
24
+ flex: 1,
25
+ justifyContent: 'flex-end',
26
+ alignItems: 'center',
27
+ },
28
+ logo: {
29
+ width: 150,
30
+ height: 105
31
+ },
32
+ logoContainer: {
33
+ position: 'absolute',
34
+ top: 70,
35
+ alignItems: "center"
36
+ },
37
+ buttonContainer: {
38
+ width: "100%",
39
+ padding: 20
40
+ },
41
+ tagline: {
42
+ fontSize: 50,
43
+ fontWeight: 'bold',
44
+ paddingTop: 10,
45
+ color: colors.white,
46
+ textAlign: 'center'
47
+ },
48
+ });
49
+
50
+ export default WelcomeScreen;
@@ -0,0 +1,80 @@
1
+ import * as SecureStore from 'expo-secure-store';
2
+ import AsyncStorage from "@react-native-async-storage/async-storage";
3
+ import jwtDecode from 'jwt-decode';
4
+
5
+ const userKey = 'user';
6
+ const tokenKey = 'authToken';
7
+
8
+ const getUser = async () => {
9
+ return await fetch(userKey);
10
+ };
11
+
12
+ const storeUser = user => {
13
+ store(userKey, user, 'error storing the user');
14
+ };
15
+
16
+ const storeAuthToken = async token => {
17
+ await storeSecure(tokenKey, token, 'error storing the auth token');
18
+ };
19
+
20
+ const getAuthToken = async () => {
21
+ return await fetchSecure(tokenKey);
22
+ };
23
+
24
+ const removeAuthToken = () => {
25
+ removeSecure(tokenKey);
26
+ }
27
+
28
+ const removeUser = () => {
29
+ remove(userKey);
30
+ }
31
+
32
+ const removeSecure = async key => {
33
+ try {
34
+ await SecureStore.deleteItemAsync(key);
35
+ } catch (error) {
36
+ console.error('error removing ' + key + ' from storage', error);
37
+ }
38
+ }
39
+
40
+ const storeSecure = async (key, value, errorMessage = 'error storing value') => {
41
+ try {
42
+ await SecureStore.setItemAsync(key, JSON.stringify(value));
43
+ } catch (error) {
44
+ console.error(errorMessage, error);
45
+ }
46
+ }
47
+
48
+ const fetchSecure = async key => {
49
+ try {
50
+ return JSON.parse(await SecureStore.getItemAsync(key));
51
+ } catch (error) {
52
+ console.error('error fetcghing storage key ' + key, error);
53
+ }
54
+ }
55
+
56
+ const store = async (key, value, errorMessage = 'error storing value') => {
57
+ try {
58
+ await AsyncStorage.setItem(key, JSON.stringify(value));
59
+ } catch (error) {
60
+ console.error(errorMessage, error);
61
+ }
62
+ }
63
+
64
+ const fetch = async key => {
65
+ try {
66
+ return JSON.parse(await AsyncStorage.getItem(key));
67
+ } catch (error) {
68
+ console.error('error fetcghing storage key ' + key, error);
69
+ }
70
+ }
71
+
72
+ const remove = async key => {
73
+ try {
74
+ await AsyncStorage.removeItem(key);
75
+ } catch (error) {
76
+ console.error('error removing ' + key + ' from storage', error);
77
+ }
78
+ }
79
+
80
+ export default { getAuthToken, getUser, removeAuthToken, removeUser, storeAuthToken, storeUser };