@umituz/react-native-notifications 1.0.0 → 1.0.3
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.
- package/lib/infrastructure/services/NotificationManager.d.ts.map +1 -1
- package/lib/infrastructure/services/NotificationManager.js +6 -5
- package/lib/infrastructure/services/NotificationManager.js.map +1 -1
- package/lib/presentation/screens/NotificationsScreen.d.ts +10 -0
- package/lib/presentation/screens/NotificationsScreen.d.ts.map +1 -0
- package/lib/presentation/screens/NotificationsScreen.js +77 -0
- package/lib/presentation/screens/NotificationsScreen.js.map +1 -0
- package/package.json +19 -8
- package/src/infrastructure/services/NotificationManager.ts +6 -5
- package/src/presentation/screens/NotificationsScreen.tsx +94 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationManager.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/NotificationManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3B,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,SAAS;IAUhB;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"NotificationManager.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/NotificationManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,EAAE,mBAAmB,CAAC;IAC7B,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3B,CAAC;IACF,OAAO,EAAE,GAAG,CAAC;CACd;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,SAAS;IAUhB;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IA2B5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAWxC;;OAEG;YACW,qBAAqB;IAkCnC;;;;;;;;;;;;;;;;;;OAkBG;IACG,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,MAAM,CAAC;IAyDjF;;OAEG;IACG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/D;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C;;OAEG;IACG,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAkBnE;;OAEG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9C;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAYtC;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUlD"}
|
|
@@ -53,11 +53,12 @@ export class NotificationManager {
|
|
|
53
53
|
console.warn('[NotificationManager] Notifications only work on physical devices');
|
|
54
54
|
return false;
|
|
55
55
|
}
|
|
56
|
-
const
|
|
56
|
+
const permissionsResponse = await Notifications.getPermissionsAsync();
|
|
57
|
+
const existingStatus = permissionsResponse.status || (permissionsResponse.granted ? 'granted' : 'denied');
|
|
57
58
|
let finalStatus = existingStatus;
|
|
58
59
|
if (existingStatus !== 'granted') {
|
|
59
|
-
const
|
|
60
|
-
finalStatus = status;
|
|
60
|
+
const requestResponse = await Notifications.requestPermissionsAsync();
|
|
61
|
+
finalStatus = requestResponse.status || (requestResponse.granted ? 'granted' : 'denied');
|
|
61
62
|
}
|
|
62
63
|
if (Platform.OS === 'android') {
|
|
63
64
|
await this.createAndroidChannels();
|
|
@@ -76,8 +77,8 @@ export class NotificationManager {
|
|
|
76
77
|
try {
|
|
77
78
|
if (!Device.isDevice)
|
|
78
79
|
return false;
|
|
79
|
-
const
|
|
80
|
-
return status === 'granted';
|
|
80
|
+
const permissionsResponse = await Notifications.getPermissionsAsync();
|
|
81
|
+
return permissionsResponse.status === 'granted' || permissionsResponse.granted === true;
|
|
81
82
|
}
|
|
82
83
|
catch (error) {
|
|
83
84
|
console.error('[NotificationManager] Permission check failed:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotificationManager.js","sourceRoot":"","sources":["../../../src/infrastructure/services/NotificationManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAqCxC;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAC9B;;OAEG;IACH,MAAM,CAAC,SAAS;QACd,aAAa,CAAC,sBAAsB,CAAC;YACnC,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC/B,eAAe,EAAE,IAAI;gBACrB,eAAe,EAAE,IAAI;gBACrB,cAAc,EAAE,IAAI;aACrB,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;gBAClF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,
|
|
1
|
+
{"version":3,"file":"NotificationManager.js","sourceRoot":"","sources":["../../../src/infrastructure/services/NotificationManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications Screen - {{APP_NAME}}
|
|
3
|
+
*
|
|
4
|
+
* Simple notification toggle - enable or disable reminders
|
|
5
|
+
* Theme: {{THEME_ID}} ({{CATEGORY}} category)
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
8
|
+
export declare const NotificationsScreen: React.FC;
|
|
9
|
+
export default NotificationsScreen;
|
|
10
|
+
//# sourceMappingURL=NotificationsScreen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationsScreen.d.ts","sourceRoot":"","sources":["../../../src/presentation/screens/NotificationsScreen.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AAevC,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAwCvC,CAAC;AA+BF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications Screen - {{APP_NAME}}
|
|
3
|
+
*
|
|
4
|
+
* Simple notification toggle - enable or disable reminders
|
|
5
|
+
* Theme: {{THEME_ID}} ({{CATEGORY}} category)
|
|
6
|
+
*/
|
|
7
|
+
import React, { useMemo } from 'react';
|
|
8
|
+
import { View, StyleSheet, ActivityIndicator } from 'react-native';
|
|
9
|
+
import { AtomicIcon, AtomicSwitch, AtomicCard, AtomicText, ScreenLayout, STATIC_TOKENS } from '@umituz/react-native-design-system';
|
|
10
|
+
import { useAppDesignTokens } from '@umituz/react-native-design-system-theme';
|
|
11
|
+
import { useNotificationSettings } from '../../infrastructure/hooks/useNotificationSettings';
|
|
12
|
+
// Note: Translation function should be provided by the app using this package
|
|
13
|
+
// This is a placeholder - apps should wrap this component with their i18n provider
|
|
14
|
+
const t = (key) => {
|
|
15
|
+
// Return key as fallback - apps should provide translation function
|
|
16
|
+
return key;
|
|
17
|
+
};
|
|
18
|
+
export const NotificationsScreen = () => {
|
|
19
|
+
const tokens = useAppDesignTokens();
|
|
20
|
+
const styles = useMemo(() => getStyles(tokens), [tokens]);
|
|
21
|
+
const { notificationsEnabled, setNotificationsEnabled, isLoading } = useNotificationSettings();
|
|
22
|
+
if (isLoading) {
|
|
23
|
+
return (<ScreenLayout testID="notifications-screen">
|
|
24
|
+
<View style={styles.loadingContainer}>
|
|
25
|
+
<ActivityIndicator size="large" color={tokens.colors.primary}/>
|
|
26
|
+
</View>
|
|
27
|
+
</ScreenLayout>);
|
|
28
|
+
}
|
|
29
|
+
return (<ScreenLayout testID="notifications-screen" hideScrollIndicator>
|
|
30
|
+
<AtomicCard style={styles.card}>
|
|
31
|
+
<View style={styles.settingItem}>
|
|
32
|
+
<View style={styles.iconContainer}>
|
|
33
|
+
<AtomicIcon name="Bell" size="lg" color="primary"/>
|
|
34
|
+
</View>
|
|
35
|
+
<View style={styles.textContainer}>
|
|
36
|
+
<AtomicText type="bodyLarge" style={{ color: tokens.colors.textPrimary }}>
|
|
37
|
+
{t('settings.notifications.enableNotifications')}
|
|
38
|
+
</AtomicText>
|
|
39
|
+
<AtomicText type="bodySmall" style={{ color: tokens.colors.textSecondary, marginTop: STATIC_TOKENS.spacing.xs }}>
|
|
40
|
+
{t('settings.notifications.description')}
|
|
41
|
+
</AtomicText>
|
|
42
|
+
</View>
|
|
43
|
+
<AtomicSwitch value={notificationsEnabled} onValueChange={setNotificationsEnabled} testID="notifications-toggle"/>
|
|
44
|
+
</View>
|
|
45
|
+
</AtomicCard>
|
|
46
|
+
</ScreenLayout>);
|
|
47
|
+
};
|
|
48
|
+
const getStyles = (tokens) => StyleSheet.create({
|
|
49
|
+
loadingContainer: {
|
|
50
|
+
flex: 1,
|
|
51
|
+
justifyContent: 'center',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
},
|
|
54
|
+
card: {
|
|
55
|
+
padding: STATIC_TOKENS.spacing.lg,
|
|
56
|
+
backgroundColor: tokens.colors.surface,
|
|
57
|
+
},
|
|
58
|
+
settingItem: {
|
|
59
|
+
flexDirection: 'row',
|
|
60
|
+
alignItems: 'center',
|
|
61
|
+
},
|
|
62
|
+
iconContainer: {
|
|
63
|
+
width: 48,
|
|
64
|
+
height: 48,
|
|
65
|
+
borderRadius: 24,
|
|
66
|
+
backgroundColor: tokens.colors.surfaceSecondary,
|
|
67
|
+
justifyContent: 'center',
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
marginRight: STATIC_TOKENS.spacing.md,
|
|
70
|
+
},
|
|
71
|
+
textContainer: {
|
|
72
|
+
flex: 1,
|
|
73
|
+
marginRight: STATIC_TOKENS.spacing.md,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
export default NotificationsScreen;
|
|
77
|
+
//# sourceMappingURL=NotificationsScreen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NotificationsScreen.js","sourceRoot":"","sources":["../../../src/presentation/screens/NotificationsScreen.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@umituz/react-native-notifications",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Offline-first local notifications system for React Native apps using expo-notifications",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -31,23 +31,28 @@
|
|
|
31
31
|
"url": "https://github.com/umituz/react-native-notifications"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"@react-native-async-storage/async-storage": "^
|
|
35
|
-
"
|
|
34
|
+
"@react-native-async-storage/async-storage": "^2.2.0",
|
|
35
|
+
"@umituz/react-native-design-system": "*",
|
|
36
|
+
"@umituz/react-native-design-system-theme": "*",
|
|
36
37
|
"expo-device": "~6.0.2",
|
|
38
|
+
"expo-notifications": "~0.28.0",
|
|
37
39
|
"react": ">=18.2.0",
|
|
38
40
|
"react-native": ">=0.74.0",
|
|
39
41
|
"zustand": "^5.0.2"
|
|
40
42
|
},
|
|
41
43
|
"devDependencies": {
|
|
42
|
-
"@react-native-async-storage/async-storage": "^1.
|
|
44
|
+
"@react-native-async-storage/async-storage": "^1.21.0",
|
|
43
45
|
"@types/react": "^18.2.45",
|
|
44
46
|
"@types/react-native": "^0.73.0",
|
|
45
|
-
"
|
|
47
|
+
"@umituz/react-native-design-system": "^1.5.28",
|
|
48
|
+
"@umituz/react-native-design-system-theme": "latest",
|
|
49
|
+
"@umituz/react-native-design-system-atoms": "*",
|
|
46
50
|
"expo-device": "~6.0.2",
|
|
51
|
+
"expo-notifications": "~0.28.0",
|
|
47
52
|
"react": "^18.2.0",
|
|
48
53
|
"react-native": "^0.74.0",
|
|
49
54
|
"typescript": "^5.3.3",
|
|
50
|
-
"zustand": "^5.0.
|
|
55
|
+
"zustand": "^5.0.8"
|
|
51
56
|
},
|
|
52
57
|
"publishConfig": {
|
|
53
58
|
"access": "public"
|
|
@@ -57,6 +62,12 @@
|
|
|
57
62
|
"src",
|
|
58
63
|
"README.md",
|
|
59
64
|
"LICENSE"
|
|
60
|
-
]
|
|
65
|
+
],
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@react-native-community/datetimepicker": "^8.5.0",
|
|
68
|
+
"@react-navigation/native": "^7.1.19",
|
|
69
|
+
"@umituz/react-native-design-system-atoms": "*",
|
|
70
|
+
"expo-linear-gradient": "^15.0.7",
|
|
71
|
+
"react-native-safe-area-context": "^5.6.2"
|
|
72
|
+
}
|
|
61
73
|
}
|
|
62
|
-
|
|
@@ -92,12 +92,13 @@ export class NotificationManager {
|
|
|
92
92
|
return false;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
const
|
|
95
|
+
const permissionsResponse = await Notifications.getPermissionsAsync();
|
|
96
|
+
const existingStatus = (permissionsResponse as any).status || ((permissionsResponse as any).granted ? 'granted' : 'denied');
|
|
96
97
|
let finalStatus = existingStatus;
|
|
97
98
|
|
|
98
99
|
if (existingStatus !== 'granted') {
|
|
99
|
-
const
|
|
100
|
-
finalStatus = status;
|
|
100
|
+
const requestResponse = await Notifications.requestPermissionsAsync();
|
|
101
|
+
finalStatus = (requestResponse as any).status || ((requestResponse as any).granted ? 'granted' : 'denied');
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
if (Platform.OS === 'android') {
|
|
@@ -117,8 +118,8 @@ export class NotificationManager {
|
|
|
117
118
|
async hasPermissions(): Promise<boolean> {
|
|
118
119
|
try {
|
|
119
120
|
if (!Device.isDevice) return false;
|
|
120
|
-
const
|
|
121
|
-
return status === 'granted';
|
|
121
|
+
const permissionsResponse = await Notifications.getPermissionsAsync();
|
|
122
|
+
return (permissionsResponse as any).status === 'granted' || (permissionsResponse as any).granted === true;
|
|
122
123
|
} catch (error) {
|
|
123
124
|
console.error('[NotificationManager] Permission check failed:', error);
|
|
124
125
|
return false;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notifications Screen - {{APP_NAME}}
|
|
3
|
+
*
|
|
4
|
+
* Simple notification toggle - enable or disable reminders
|
|
5
|
+
* Theme: {{THEME_ID}} ({{CATEGORY}} category)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import React, { useMemo } from 'react';
|
|
9
|
+
import { View, StyleSheet, ActivityIndicator } from 'react-native';
|
|
10
|
+
import { AtomicIcon, AtomicSwitch, AtomicCard, AtomicText, ScreenLayout, STATIC_TOKENS } from '@umituz/react-native-design-system';
|
|
11
|
+
|
|
12
|
+
import { useAppDesignTokens } from '@umituz/react-native-design-system-theme';
|
|
13
|
+
import { useNotificationSettings } from '../../infrastructure/hooks/useNotificationSettings';
|
|
14
|
+
import type { DesignTokens } from '@umituz/react-native-design-system';
|
|
15
|
+
|
|
16
|
+
// Note: Translation function should be provided by the app using this package
|
|
17
|
+
// This is a placeholder - apps should wrap this component with their i18n provider
|
|
18
|
+
const t = (key: string): string => {
|
|
19
|
+
// Return key as fallback - apps should provide translation function
|
|
20
|
+
return key;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export const NotificationsScreen: React.FC = () => {
|
|
24
|
+
|
|
25
|
+
const tokens = useAppDesignTokens();
|
|
26
|
+
const styles = useMemo(() => getStyles(tokens), [tokens]);
|
|
27
|
+
const { notificationsEnabled, setNotificationsEnabled, isLoading } = useNotificationSettings();
|
|
28
|
+
|
|
29
|
+
if (isLoading) {
|
|
30
|
+
return (
|
|
31
|
+
<ScreenLayout testID="notifications-screen">
|
|
32
|
+
<View style={styles.loadingContainer}>
|
|
33
|
+
<ActivityIndicator size="large" color={tokens.colors.primary} />
|
|
34
|
+
</View>
|
|
35
|
+
</ScreenLayout>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<ScreenLayout testID="notifications-screen" hideScrollIndicator>
|
|
41
|
+
<AtomicCard style={styles.card}>
|
|
42
|
+
<View style={styles.settingItem}>
|
|
43
|
+
<View style={styles.iconContainer}>
|
|
44
|
+
<AtomicIcon name="Bell" size="lg" color="primary" />
|
|
45
|
+
</View>
|
|
46
|
+
<View style={styles.textContainer}>
|
|
47
|
+
<AtomicText type="bodyLarge" style={{ color: tokens.colors.textPrimary }}>
|
|
48
|
+
{t('settings.notifications.enableNotifications')}
|
|
49
|
+
</AtomicText>
|
|
50
|
+
<AtomicText type="bodySmall" style={{ color: tokens.colors.textSecondary, marginTop: STATIC_TOKENS.spacing.xs }}>
|
|
51
|
+
{t('settings.notifications.description')}
|
|
52
|
+
</AtomicText>
|
|
53
|
+
</View>
|
|
54
|
+
<AtomicSwitch
|
|
55
|
+
value={notificationsEnabled}
|
|
56
|
+
onValueChange={setNotificationsEnabled}
|
|
57
|
+
testID="notifications-toggle"
|
|
58
|
+
/>
|
|
59
|
+
</View>
|
|
60
|
+
</AtomicCard>
|
|
61
|
+
</ScreenLayout>
|
|
62
|
+
);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const getStyles = (tokens: DesignTokens) => StyleSheet.create({
|
|
66
|
+
loadingContainer: {
|
|
67
|
+
flex: 1,
|
|
68
|
+
justifyContent: 'center',
|
|
69
|
+
alignItems: 'center',
|
|
70
|
+
},
|
|
71
|
+
card: {
|
|
72
|
+
padding: STATIC_TOKENS.spacing.lg,
|
|
73
|
+
backgroundColor: tokens.colors.surface,
|
|
74
|
+
},
|
|
75
|
+
settingItem: {
|
|
76
|
+
flexDirection: 'row',
|
|
77
|
+
alignItems: 'center',
|
|
78
|
+
},
|
|
79
|
+
iconContainer: {
|
|
80
|
+
width: 48,
|
|
81
|
+
height: 48,
|
|
82
|
+
borderRadius: 24,
|
|
83
|
+
backgroundColor: tokens.colors.surfaceSecondary,
|
|
84
|
+
justifyContent: 'center',
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
marginRight: STATIC_TOKENS.spacing.md,
|
|
87
|
+
},
|
|
88
|
+
textContainer: {
|
|
89
|
+
flex: 1,
|
|
90
|
+
marginRight: STATIC_TOKENS.spacing.md,
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
export default NotificationsScreen;
|