init commit,

This commit is contained in:
louiscklaw
2025-05-28 09:55:51 +08:00
commit efe70ceb69
8042 changed files with 951668 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
// Main Tabs
import Status from "../pages/Status";
import Calls from "../pages/Calls";
import Chats from "../pages/Chats";
import Settings from "../pages/Settings";
// Main tab children
import Chat from "../pages/Chat";
import Starred from "../pages/Starred";
// Sub pages
// import InboxItem from "../../pages/InboxItem";
// Tab icons
import {
callOutline,
cameraOutline,
chatbubblesOutline,
discOutline,
settingsOutline,
} from "ionicons/icons";
// Import custom tab menu
import Tabs from "../components/Tabs";
import SubPages from "../components/SubPages";
// Array of objects representing tab pages
// These will be the main tabs across the app
// * PARAMS per tab object *
// isTab = true will make the tab appear
// default = the default tab page to open and be redirected to at "/"
// NOTE: there should only be one default tab (default: true)
// label = the label to show with the tab
// component = the component related to this tab page
// icon = icon to show on the tab bar menu
// path = the path which the tab is accessible
export const tabRoutes = [
{
label: "Status",
component: Status,
icon: discOutline,
path: "/tabs/status",
default: false,
isTab: true,
},
{
label: "Calls",
component: Calls,
icon: callOutline,
path: "/tabs/calls",
default: false,
isTab: true,
},
{
label: "Camera",
component: Calls,
icon: cameraOutline,
path: "/tabs/camera",
default: false,
isTab: true,
},
{
label: "Chats",
component: Chats,
icon: chatbubblesOutline,
path: "/tabs/chats",
default: true,
isTab: true,
},
{
label: "Settings",
component: Settings,
icon: settingsOutline,
path: "/tabs/settings",
default: false,
isTab: true,
},
];
// Array of objects representing children pages of tabs
// * PARAMS per tab object *
// isTab = should always be set to false for these
// component = the component related to this tab page
// path = the path which the tab is accessible
// These pages should be related to tab pages and be held within the same path
// E.g. /tabs/tab1/child
const tabChildrenRoutes = [
// { component: InboxItem, path: "/tabs/tab2/:id", isTab: false },
];
// Array of objects representing sub pages
// * PARAMS per tab object *
// component = the component related to this sub page
// path = the path which the sub page is accessible
// This array should be sub pages which are not directly related to a tab page
// E.g. /child
const subPageRoutes = [
{ component: Chat, path: "/view-chat/:contact_id" },
{ component: Starred, path: "/starred-messages" },
];
// Let's combine these together as they need to be controlled within the same IonRouterOutlet
const tabsAndChildrenRoutes = [...tabRoutes, ...tabChildrenRoutes];
// Render sub routes
export const AllSubPages = () => <SubPages routes={subPageRoutes} />;
// Render tab menu
export const AllTabs = () => (
<Tabs tabs={tabsAndChildrenRoutes} position="bottom" />
);

View File

@@ -0,0 +1,28 @@
import { IonRouterOutlet } from "@ionic/react";
import { IonReactRouter } from "@ionic/react-router";
import { Redirect, Route } from "react-router-dom";
import { AllSubPages, AllTabs, tabRoutes } from "./AllRoutes";
const NavRoutes = () => {
return (
<IonReactRouter>
<IonRouterOutlet id="main">
<Route path="/tabs" render={() => <AllTabs />} />
<AllSubPages />
<Route
path="/"
component={tabRoutes.filter((t) => t.default)[0].component}
exact={true}
/>
<Redirect
exact
from="/"
to={tabRoutes.filter((t) => t.default)[0].path.toString()}
/>
</IonRouterOutlet>
</IonReactRouter>
);
};
export default NavRoutes;