import "react-native-gesture-handler";
import { StatusBar } from "expo-status-bar";
import { Text, View } from "react-native";
import { createDrawerNavigator } from "@react-navigation/drawer";
import { DefaultTheme, NavigationContainer } from "@react-navigation/native";
import SideBar from "./src/Components/SideBar";
import {
AppContext,
AppProvider,
AppStyles,
Constants,
GetDataFromList,
GetMultipleData,
IsPlatformIos,
} from "./src/utils";
import { Suspense, lazy, useContext, useEffect } from "react";
import { SafeAreaView } from "react-native-safe-area-context";
import "./i18n";
import DeviceScreen from "./src/Screens/Device";
import { createStackNavigator } from "@react-navigation/stack";
import { TouchableOpacity } from "react-native";
import MyIcon from "./src/Components/Icon";
import { useTranslation } from "react-i18next";
import ChooseSceneModalContent from "./src/Screens/Device/modals/ChooseScene";
import CreateSceneModalContent from "./src/Screens/Device/modals/ChooseScene/CreateScene";
import AddSceneActionModalContent from "./src/Screens/Device/modals/AddSceneAction";
import LayerSelectionModalContent from "./src/Screens/Device/modals/AddSceneAction/LayerSelection";
import {
SettingsAppColorSchemeModalContent,
SettingsAppLanguageModalContent,
} from "./src/Screens/Settings";
import UpdateSceneNameModalContent from "./src/Screens/Device/modals/UpdateSceneName";
import SettingsChangeDeviceDisplayNameModalContent from "./src/Screens/Device/modals/SettingsChangeDeviceDisplayName";
import LightsEditActionModalContent, {
LightsEditActionColorModeSelectionModalContent,
} from "./src/Screens/Device/modals/EditActions/Lights";
import { EditActionAnimationSelectionModalContent } from "./src/Screens/Device/modals/EditActions";
import MotorEditActionModalContent, {
MotorEditActionMotorModeSelectionModalContent,
} from "./src/Screens/Device/modals/EditActions/Motor";
import WaitXSecondsEditActionModalContent from "./src/Screens/Device/modals/EditActions/Wait";
import StopEditActionModalContent from "./src/Screens/Device/modals/EditActions/Stop";
import SearchForNewDevicesModalContent from "./src/Screens/SearchForNewDevices";
import HelpCenterModalContent from "./src/Screens/Help/modals/HelpCenter";
import { FeedbackStepsModalContent } from "./src/Screens/Help/modals/Feedback/steps";
import GiveFeedbackModalContent from "./src/Screens/Help/modals/Feedback";
import FeedbackFinishedModalContent from "./src/Screens/Help/modals/Feedback/finished";
const Drawer = createDrawerNavigator();
const Stack = createStackNavigator();
const SettingsScreen = lazy(() => import("./src/Screens/Settings"));
const HelpScreen = lazy(() => import("./src/Screens/Help"));
const NoDevicesConnectedScreen = lazy(() =>
import("./src/Screens/NoDevicesConnected")
);
export function MyApp() {
const appContext = useContext(AppContext);
const { t } = useTranslation();
useEffect(() => {
const loadData = async () => {
const data = await GetMultipleData([
"appLanguage",
"appColorScheme",
"userExpertMode",
"userDeveloperMode",
"userColorSwatchesFavorites",
]);
const appLanguage = GetDataFromList(data, "appLanguage");
const appColorScheme = GetDataFromList(data, "appColorScheme");
const userExpertMode = GetDataFromList(data, "userExpertMode");
const userDeveloperMode = GetDataFromList(data, "userDeveloperMode");
const userColorSwatchesFavorites = GetDataFromList(
data,
"userColorSwatchesFavorites"
);
appContext.setAppLanguage(
appLanguage === null ? Constants.defaultLanguage : appLanguage
);
appContext.setAppColorScheme(
appColorScheme === null ? "auto" : appColorScheme
);
appContext.setIsUserExpertModeEnabled(
userExpertMode == null ? false : userExpertMode
);
appContext.setUserIsDeveloperModeEnabled(
userDeveloperMode == null ? false : userDeveloperMode
);
appContext.setUserColorSwatchesFavorites(
userColorSwatchesFavorites === null
? Constants.defaultColorSwatchesFavorites
: userColorSwatchesFavorites
);
};
loadData();
}, []);
const options = ({ navigation, pageTitle }) => {
return getScreenStackOptions(
navigation,
pageTitle,
appContext.appTheme.text,
appContext.appTheme.backgroundColor,
true
);
};
const navigatonTheme = {
...DefaultTheme,
colors: {
...DefaultTheme.colors,
background: appContext.appTheme.backgroundColor,
border: "transparent",
},
};
return (
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.modalChooseScene.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.modalCreateScene.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.modalAddSceneAction.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.modalLayerSelection.pageTitle"
),
})
}
/>
options({
navigation: navigation,
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.editActions.modalLightsEditActionColorModeSelection.pageTitle"
),
})
}
/>
options({
navigation: navigation,
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.editActions.modalMotorEditAction.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.editActions.modalMotorEditActionMotorModeSelection.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.editActions.modalWaitEditAction.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.editActions.modalStopEditAction.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.scenes.modalUpdateSceneName.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.help.modalHelpCenter.pageTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.help.modalGiveFeedback.pageTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.help.modalFeedbackSteps.pageTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.help.modalFeedbackFinished.pageTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.settings.appColorSchemeModalTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.settings.languageModalTitle"),
})
}
/>
options({
navigation: navigation,
pageTitle: t(
"screens.device.settings.modalSettingsChangeDeviceDisplayName.pageTitle"
),
})
}
/>
options({
navigation: navigation,
pageTitle: t("screens.modalSearchForNewDevices.pageTitle"),
})
}
/>
);
}
// This is for the left sidebar navigation
function MyDrawer() {
const appContext = useContext(AppContext);
return (
}
>
{appContext.devices.map((device) => (
))}
);
}
const DeviceScreenStack = (props) => {
return (
);
};
const NoDevicesConnectedStack = (props) => {
const { t } = useTranslation();
return (
);
};
const HelpScreenStack = (props) => {
const { t } = useTranslation();
return (
);
};
const SettingsScreenStack = (props) => {
const { t } = useTranslation();
return (
);
};
function getScreenStackOptions(
navigation,
pageTitle,
headerTintColor,
headerBackgroundColor,
isModalScreen
) {
return {
title: pageTitle,
headerLeft: () => (
isModalScreen ? navigation.goBack() : navigation.toggleDrawer()
}
>
),
headerTintColor: headerTintColor,
headerTitleAlign: "center",
headerStyle: {
backgroundColor: headerBackgroundColor,
height: IsPlatformIos() ? 76 : 56,
},
};
}
function MyScreenStack({ navigation, name, pageTitle, component, params }) {
const appContext = useContext(AppContext);
return (
);
}
export default function App() {
return (
Loading...
}
>
);
}