Skip to content

Commit c604cb8

Browse files
authored
Merge pull request #5 from RustCONxyz/develop
v0.3.0-beta
2 parents 34c4a24 + d176f9e commit c604cb8

44 files changed

Lines changed: 412 additions & 175 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app.json

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"name": "RustCON",
44
"owner": "kopter",
55
"slug": "rustcon",
6-
"version": "0.2.0-beta",
6+
"version": "0.3.0-beta",
77
"githubUrl": "https://github.com/RustCONxyz/mobile",
88
"orientation": "portrait",
99
"icon": "./assets/images/icon.png",
@@ -34,15 +34,26 @@
3434
"foregroundImage": "./assets/images/adaptive-icon.png",
3535
"backgroundColor": "#0a0a0a"
3636
},
37-
"package": "xyz.rustcon.app"
37+
"package": "xyz.rustcon.app",
38+
"googleServicesFile": "./google-services.json"
3839
},
3940
"extra": {
4041
"eas": {
4142
"projectId": "309b0a43-07c5-4218-91af-a414b1d98fdb"
4243
}
4344
},
4445
"plugins": [
45-
"expo-router"
46-
]
46+
"expo-router",
47+
[
48+
"expo-notifications",
49+
{
50+
"icon": "./assets/images/notification-icon.png",
51+
"color": "#0a0a0a"
52+
}
53+
]
54+
],
55+
"experiments": {
56+
"tsconfigPaths": true
57+
}
4758
}
4859
}

app/(auth)/index.tsx

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { Link } from "expo-router";
55
import { Image } from "expo-image";
66
import { MaterialIcons } from "@expo/vector-icons";
77
import { CheckBox } from "@rneui/themed";
8-
import { Text, PasswordInput, NumberInput, Separator } from "../../components/Themed";
9-
import FailedToConnect from "../../components/FailedToConnect";
10-
import SavedConnectionsModal from "../../components/modals/SavedConnectionsModal";
11-
import useWindowDimensions from "../../hooks/useWindowDimensions";
12-
import { useAppDispatch, useAppSelector } from "../../hooks/redux";
13-
import { selectIsConnecting } from "../../store/slices/websocket";
14-
import buildWebSocketAction from "../../store/websocket/actions";
15-
import * as websocketActions from "../../store/websocket/actions";
8+
import { Text, PasswordInput, NumberInput, Separator } from "@/components/Themed";
9+
import FailedToConnect from "@/components/FailedToConnect";
10+
import SavedConnectionsModal from "@/components/modals/SavedConnectionsModal";
11+
import useWindowDimensions from "@/hooks/useWindowDimensions";
12+
import { useAppDispatch, useAppSelector } from "@/hooks/redux";
13+
import { selectIsConnecting } from "@/store/slices/websocket";
14+
import buildWebSocketAction from "@/store/websocket/actions";
15+
import * as websocketActions from "@/store/websocket/actions";
1616

1717
const formDefaultValues = { serverIP: "", rconPort: "", rconPassword: "", saveInformation: false };
1818

@@ -55,15 +55,21 @@ export default function LoginScreen() {
5555
</View>
5656
<View className="m-auto w-full">
5757
<View className="flex flex-row justify-center items-center mb-12">
58-
<Image source={require("../../assets/images/logo.png")} className="w-12 h-12 mr-6" />
58+
<Image source={require("@/assets/images/logo.png")} className="w-12 h-12 mr-6" />
5959
<Text className="text-center text-3xl font-bold">RustCON</Text>
6060
</View>
6161
<View className="px-12">
6262
<Text className="mb-2 font-semibold">Server IP</Text>
6363
<Controller
6464
control={control}
6565
render={({ field: { onChange, onBlur, value } }) =>
66-
<NumberInput className="mb-6" onBlur={onBlur} onChangeText={value => onChange(value)} value={value} editable={!isConnecting} />
66+
<NumberInput
67+
className="mb-6"
68+
onBlur={onBlur}
69+
onChangeText={onChange}
70+
value={value}
71+
editable={!isConnecting}
72+
/>
6773
}
6874
name="serverIP"
6975
rules={{ required: true, pattern: { value: /^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}$/, message: "Invalid IP Address" } }}
@@ -72,7 +78,13 @@ export default function LoginScreen() {
7278
<Controller
7379
control={control}
7480
render={({ field: { onChange, onBlur, value } }) =>
75-
<NumberInput className="mb-6" onBlur={onBlur} onChangeText={value => onChange(value)} value={value} editable={!isConnecting} />
81+
<NumberInput
82+
className="mb-6"
83+
onBlur={onBlur}
84+
onChangeText={onChange}
85+
value={value}
86+
editable={!isConnecting}
87+
/>
7688
}
7789
name="rconPort"
7890
rules={{ required: true }}
@@ -81,7 +93,13 @@ export default function LoginScreen() {
8193
<Controller
8294
control={control}
8395
render={({ field: { onChange, onBlur, value } }) =>
84-
<PasswordInput className="mb-6" onBlur={onBlur} onChangeText={value => onChange(value)} value={value} editable={!isConnecting} />
96+
<PasswordInput
97+
className="mb-6"
98+
onBlur={onBlur}
99+
onChangeText={onChange}
100+
value={value}
101+
editable={!isConnecting}
102+
/>
85103
}
86104
name="rconPassword"
87105
rules={{ required: true }}

app/(tabs)/_layout.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
import Drawer from "../../navigation/Drawer";
2-
import Sidebar from "../../navigation/Sidebar";
3-
import useWindowDimensions from "../../hooks/useWindowDimensions";
1+
import { Drawer } from "expo-router/drawer";
2+
import DrawerSidebar from "@/components/DrawerSidebar";
3+
import useWindowDimensions from "@/hooks/useWindowDimensions";
44

55
export default function TabLayout() {
66

77
const { width } = useWindowDimensions();
88

99
return (
1010
<Drawer
11-
drawerContent={Sidebar}
11+
drawerContent={DrawerSidebar}
1212
screenOptions={{
1313
headerShown: false,
1414
swipeEnabled: true,

app/(tabs)/bans.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { View, FlatList, TouchableOpacity } from "react-native";
22
import { MaterialIcons } from "@expo/vector-icons";
33
import { useState, useEffect, useCallback } from "react";
4-
import { Text, Separator, TextInput } from "../../components/Themed";
5-
import SelectedBanModal from "../../components/modals/SelectedBanModal";
6-
import UnbanDialog from "../../components/dialogs/UnbanDialog";
7-
import { useAppDispatch, useAppSelector } from "../../hooks/redux";
8-
import { selectServerBans } from "../../store/slices/serverBans";
9-
import buildWebSocketAction from "../../store/websocket/actions";
10-
import * as websocketActions from "../../store/websocket/actions";
4+
import { Text, Separator, TextInput } from "@/components/Themed";
5+
import SelectedBanModal from "@/components/modals/SelectedBanModal";
6+
import UnbanDialog from "@/components/dialogs/UnbanDialog";
7+
import { useAppDispatch, useAppSelector } from "@/hooks/redux";
8+
import { selectServerBans } from "@/store/slices/serverBans";
9+
import buildWebSocketAction from "@/store/websocket/actions";
10+
import * as websocketActions from "@/store/websocket/actions";
1111

1212
export default function BansScreen() {
1313

app/(tabs)/chat.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { View, FlatList, TouchableOpacity } from "react-native";
22
import { Feather } from "@expo/vector-icons";
33
import { useState, useRef, useCallback } from "react";
4-
import { Text, TextInput, Separator } from "../../components/Themed";
5-
import { useAppDispatch, useAppSelector } from "../../hooks/redux";
6-
import { selectServerChat } from "../../store/slices/serverChat";
7-
import buildWebSocketAction from "../../store/websocket/actions";
8-
import * as websocketActions from "../../store/websocket/actions";
4+
import { Text, TextInput, Separator } from "@/components/Themed";
5+
import { useAppDispatch, useAppSelector } from "@/hooks/redux";
6+
import { selectServerChat } from "@/store/slices/serverChat";
7+
import buildWebSocketAction from "@/store/websocket/actions";
8+
import * as websocketActions from "@/store/websocket/actions";
99

1010
type ChatInputProps = { onSubmit: (inputText: string) => void, onFocus: () => void };
1111

app/(tabs)/console.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { View, FlatList, TouchableOpacity } from "react-native";
22
import { Feather } from "@expo/vector-icons";
33
import { useState, useRef, useCallback } from "react";
4-
import { Text, TextInput } from "../../components/Themed";
5-
import { useAppDispatch, useAppSelector } from "../../hooks/redux";
6-
import { selectServerConsole } from "../../store/slices/serverConsole";
7-
import buildWebSocketAction from "../../store/websocket/actions";
8-
import * as websocketActions from "../../store/websocket/actions";
4+
import { Text, TextInput } from "@/components/Themed";
5+
import { useAppDispatch, useAppSelector } from "@/hooks/redux";
6+
import { selectServerConsole } from "@/store/slices/serverConsole";
7+
import buildWebSocketAction from "@/store/websocket/actions";
8+
import * as websocketActions from "@/store/websocket/actions";
99

1010
type ConsoleInputProps = { onSubmit: (inputText: string) => void, onFocus: () => void };
1111

app/(tabs)/home.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { View, ScrollView } from "react-native";
2-
import { Text, Separator } from "../../components/Themed";
3-
import LineChart from "../../components/LineChart";
4-
import { useAppSelector } from "../../hooks/redux";
5-
import { selectServerInfo } from "../../store/slices/serverInfo";
2+
import { Text, Separator } from "@/components/Themed";
3+
import LineChart from "@/components/LineChart";
4+
import { useAppSelector } from "@/hooks/redux";
5+
import { selectServerInfo } from "@/store/slices/serverInfo";
66

77
export default function HomeScreen() {
88

app/(tabs)/players.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { View, FlatList, TouchableOpacity } from "react-native";
22
import { MaterialIcons } from "@expo/vector-icons";
33
import { useState, useEffect, useCallback } from "react";
4-
import { Text, Separator, TextInput } from "../../components/Themed";
5-
import SelectedPlayerModal from "../../components/modals/SelectedPlayerModal";
6-
import KickDialog from "../../components/dialogs/KickDialog";
7-
import BanDialog from "../../components/dialogs/BanDialog";
8-
import { useAppDispatch, useAppSelector } from "../../hooks/redux";
9-
import { selectOnlinePlayers } from "../../store/slices/serverPlayers";
10-
import buildWebSocketAction from "../../store/websocket/actions";
11-
import * as websocketActions from "../../store/websocket/actions";
4+
import { Text, Separator, TextInput } from "@/components/Themed";
5+
import SelectedPlayerModal from "@/components/modals/SelectedPlayerModal";
6+
import KickDialog from "@/components/dialogs/KickDialog";
7+
import BanDialog from "@/components/dialogs/BanDialog";
8+
import { useAppDispatch, useAppSelector } from "@/hooks/redux";
9+
import { selectOnlinePlayers } from "@/store/slices/serverPlayers";
10+
import buildWebSocketAction from "@/store/websocket/actions";
11+
import * as websocketActions from "@/store/websocket/actions";
1212

1313
export default function PlayersScreen() {
1414

app/_layout.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@ import { SafeAreaView } from "react-native-safe-area-context";
44
import { Provider as ReduxProvider } from "react-redux";
55
import { ModalPortal } from "react-native-modals";
66

7-
import store from "../store/store";
7+
import store from "@/store/store";
88

9-
import useNotifications from "../hooks/useNotifications";
10-
import useCachedResources from "../hooks/useCachedResources";
9+
import useNotifications from "@/hooks/useNotifications";
10+
import useCachedResources from "@/hooks/useCachedResources";
1111

12-
import RouteRedirect from "../components/RouteRedirect";
12+
import RouteRedirect from "@/components/RouteRedirect";
1313

1414
SplashScreen.preventAutoHideAsync();
1515

1616
export default function RootLayout() {
1717

18-
//useNotifications();
18+
useNotifications();
1919

2020
const isLoadingComplete = useCachedResources();
2121

app/settings.tsx

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import { View, ScrollView } from "react-native";
22
import { useEffect, useReducer } from "react";
33
import { MaterialCommunityIcons } from "@expo/vector-icons";
44
import Constants from "expo-constants"
5-
import { Text, Link, Separator, Switch } from "../components/Themed";
6-
import ExternalLink from "../components/ExternalLink";
7-
import { getNotificationSettings, setNotificationSettings, type NotificationSettings } from "../utils/storage/notifications";
5+
import { Text, Link, Separator, Switch } from "@/components/Themed";
6+
import ExternalLink from "@/components/ExternalLink";
7+
import { getNotificationSettings, setNotificationSettings, type NotificationSettings } from "@/utils/storage/notifications";
88

99
export default function SettingsScreen() {
1010

@@ -16,7 +16,7 @@ export default function SettingsScreen() {
1616

1717
return settings;
1818

19-
}, { client: true, server: true, oxide: true, carbon: true });
19+
}, { clientUpdates: true, serverUpdates: true, oxideUpdates: true, carbonUpdates: true, protocolUpdates: true });
2020

2121
useEffect(() => {
2222

@@ -33,24 +33,28 @@ export default function SettingsScreen() {
3333
</Link>
3434
</View>
3535
<Separator className="my-4" />
36-
<View className="bg-zinc-900 rounded-md pb-2 pt-4 px-4">
36+
<View className="bg-zinc-900 rounded-md p-4">
3737
<Text className="text-xl">Notifications</Text>
3838
<Separator className="mt-4 mb-2" />
3939
<View className="mt-4 flex flex-row justify-between items-center">
4040
<Text>Client Updates</Text>
41-
<Switch value={notifications.client} onChange={() => setNotifications({ client: !notifications.client })} />
41+
<Switch value={notifications.clientUpdates} onChange={() => setNotifications({ clientUpdates: !notifications.clientUpdates })} />
4242
</View>
4343
<View className="mt-4 flex flex-row justify-between items-center">
4444
<Text>Server Updates</Text>
45-
<Switch value={notifications.server} onChange={() => setNotifications({ server: !notifications.server })} />
45+
<Switch value={notifications.serverUpdates} onChange={() => setNotifications({ serverUpdates: !notifications.serverUpdates })} />
4646
</View>
4747
<View className="mt-4 flex flex-row justify-between items-center">
4848
<Text>Oxide Updates</Text>
49-
<Switch value={notifications.oxide} onChange={() => setNotifications({ oxide: !notifications.oxide })} />
49+
<Switch value={notifications.oxideUpdates} onChange={() => setNotifications({ oxideUpdates: !notifications.oxideUpdates })} />
5050
</View>
5151
<View className="mt-4 flex flex-row justify-between items-center">
5252
<Text>Carbon Updates</Text>
53-
<Switch value={notifications.carbon} onChange={() => setNotifications({ carbon: !notifications.carbon })} />
53+
<Switch value={notifications.carbonUpdates} onChange={() => setNotifications({ carbonUpdates: !notifications.carbonUpdates })} />
54+
</View>
55+
<View className="mt-4 flex flex-row justify-between items-center">
56+
<Text>Protocol Updates</Text>
57+
<Switch value={notifications.protocolUpdates} onChange={() => setNotifications({ protocolUpdates: !notifications.protocolUpdates })} />
5458
</View>
5559
</View>
5660
<Separator className="my-4" />

0 commit comments

Comments
 (0)