import React, { useState } from "react"; import Color from "color"; import PropTypes from "prop-types"; import { Appbar, Text, Card, Dialog, Portal, Button, Provider, RadioButton, TouchableRipple, overlay, } from "react-native-paper"; import { View, StatusBar, StyleSheet, Text as RNText } from "react-native"; import { NavigationContainer } from "@react-navigation/native"; import { TabView, SceneMap, TabBar } from "react-native-tab-view"; import Icon from "react-native-vector-icons/MaterialCommunityIcons"; import SubjectsContainer from "./containers/SubjectsContainer"; import TimetableContainer from "./containers/TimetableContainer"; import themes from "./themes"; function Dummy() { return ( Dummy ); } function ThemePicker({ onPress, selectionIdx }) { return ( <> {themes.map((t, idx) => ( onPress(t, idx)} key={idx} > onPress(t, idx)} /> {t.name} ))} ); } ThemePicker.propTypes = { onPress: PropTypes.func, selectionIdx: PropTypes.number, }; const App = ({ theme, setTheme }) => { function renderLabel({ route, focused, color }) { return {route.title}; } renderLabel.propTypes = { route: PropTypes.object, focused: PropTypes.bool, color: PropTypes.string, }; function renderIcon({ route, color }) { return ( ); } renderIcon.propTypes = renderLabel.propTypes; const [ pane, setPane ] = useState({ index: 0, routes: [ { key: "add", title: "Add Classes", icon: "pencil-plus" }, { key: "statistics", title: "Statistics", icon: "file-chart" }, { key: "timetable", title: "Timetable", icon: "timetable" }, { key: "subjects", title: "Subjects", icon: "book-open" }, ], }); const [ showDialog, setShowDialog ] = useState(false); const [ newTheme, setNewTheme ] = useState(themes.findIndex( i => JSON.stringify(i.theme) === JSON.stringify(theme) )); const renderScene = SceneMap({ add: Dummy, statistics: Dummy, timetable: TimetableContainer, subjects: SubjectsContainer, }); const backgroundColor = theme.dark && theme.mode === "adaptive" ? overlay(4, theme.colors.surface): theme.colors.primary; const activeColor = Color(backgroundColor).isLight() ? "#000" : "#FFF"; const inactiveColor = Color(backgroundColor).isLight() ? "#222" : "#AAA"; function dialogSelection(theme, idx) { setNewTheme(idx); setTheme(theme.theme); } return ( setShowDialog(true)} /> setPane({ index, routes: pane.routes })} renderScene={renderScene} shifting={true} tabBarPosition="bottom" renderTabBar={props => ( null} />) } sceneContainerStyle={{ backgroundColor: theme.colors.background }} /> setShowDialog(false)}> Theme ); }; App.propTypes = { theme: PropTypes.object, setTheme: PropTypes.func, }; const styles = StyleSheet.create({ radio: { flexDirection: "row", alignItems: "center", margin: 5 } }); export default App;