Skip to content

Commit

Permalink
rewrite backend to create a simpler system to minimize processing on …
Browse files Browse the repository at this point in the history
…the frontend
  • Loading branch information
dlustre committed Jun 16, 2024
1 parent 4b26c6b commit 5edcdd7
Show file tree
Hide file tree
Showing 142 changed files with 5,465 additions and 3,884 deletions.
11 changes: 5 additions & 6 deletions apps/expo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,9 @@
"@trpc/client": "11.0.0-rc.330",
"@trpc/react-query": "11.0.0-rc.330",
"@trpc/server": "11.0.0-rc.330",
"@zotmeal/api": "workspace:^",
"@zotmeal/db": "workspace:^",
"@zotmeal/utils": "workspace:^",
"@zotmeal/api": "workspace:*",
"burnt": "^0.12.2",
"date-fns": "^3.6.0",
"expo": "~51.0.11",
"expo-constants": "~16.0.2",
"expo-font": "^12.0.7",
Expand Down Expand Up @@ -69,9 +68,9 @@
"@jest/globals": "^29.7.0",
"@testing-library/react-native": "^12.5.1",
"@types/react-datepicker": "^6.2.0",
"@zotmeal/eslint-config": "workspace:^0.2.0",
"@zotmeal/prettier-config": "workspace:^0.1.0",
"@zotmeal/tailwind-config": "workspace:^0.1.0",
"@zotmeal/eslint-config": "workspace:*",
"@zotmeal/prettier-config": "workspace:*",
"@zotmeal/tailwind-config": "workspace:*",
"@zotmeal/tsconfig": "workspace:^0.1.0",
"eslint": "^8.57.0",
"jest": "^29.7.0",
Expand Down
32 changes: 14 additions & 18 deletions apps/expo/src/app/_layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@ import { config } from "@tamagui/config/v3";

import "@tamagui/core/reset.css";

import type { FontSource } from "expo-font";
import { useState } from "react";
import { Platform } from "react-native";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useFonts } from "expo-font";
import { Stack } from "expo-router";
import { StatusBar } from "expo-status-bar";
import { ClerkProvider } from "@clerk/clerk-expo";
import InterBold from "@tamagui/font-inter/otf/Inter-Bold.otf";
import Inter from "@tamagui/font-inter/otf/Inter-Medium.otf";
import { Info } from "@tamagui/lucide-icons";
import { ToastProvider, ToastViewport } from "@tamagui/toast";
import {
Expand All @@ -33,7 +30,7 @@ import { env } from "../utils/env";
const tamaguiConfig = createTamagui(config);

const DevInfo = () => {
const [open, setOpen] = useState(true);
const [open, setOpen] = useState(false);

return (
<View
Expand Down Expand Up @@ -70,23 +67,22 @@ const DevInfo = () => {

export default function RootLayout() {
const [loaded] = useFonts({
Inter: Inter as FontSource,
InterBold: InterBold as FontSource,
Inter: require("@tamagui/font-inter/otf/Inter-Medium.otf"),
InterBold: require("@tamagui/font-inter/otf/Inter-Bold.otf"),
});

const colorScheme = useZotmealColorScheme();

const { top, ...insets } = useSafeAreaInsets();

if (!loaded) return null;

return (
<TRPCProvider>
<TamaguiProvider config={tamaguiConfig}>
<ClerkProvider
publishableKey={env.CLERK_PUBLISHABLE_KEY}
tokenCache={tokenCache}
>
<ClerkProvider
publishableKey={env.CLERK_PUBLISHABLE_KEY}
tokenCache={tokenCache}
>
<TRPCProvider>
<TamaguiProvider config={tamaguiConfig}>
<ToastProvider>
<Theme name={colorScheme}>
<Stack
Expand All @@ -107,16 +103,16 @@ export default function RootLayout() {
name="events"
options={{
presentation: "modal",
}}
/> */}
}}
/> */}
</Stack>
<StatusBar style="light" />
</Theme>
<ToastViewport flexDirection="column" {...insets} />
<DevInfo />
</ToastProvider>
</ClerkProvider>
</TamaguiProvider>
</TRPCProvider>
</TamaguiProvider>
</TRPCProvider>
</ClerkProvider>
);
}
16 changes: 6 additions & 10 deletions apps/expo/src/app/events/event/[title].tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,18 @@ import {
YStack,
} from "tamagui";

import type { Event } from "@zotmeal/db";

import { useZotmealStore } from "~/utils";

export default function Event() {
const { title } = useGlobalSearchParams();
const { title, restaurant } = useGlobalSearchParams();
const { zotmeal } = useZotmealStore();

if (!title || typeof title !== "string")
throw new Error("title is not a string");
if (restaurant !== "brandywine" && restaurant !== "anteatery")
throw new Error("restaurant should be either brandywine or anteatery");

const { selectedRestaurant, anteateryEvents, brandywineEvents } =
useZotmealStore();

const events =
selectedRestaurant === "anteatery" ? anteateryEvents : brandywineEvents;
const events = zotmeal?.[restaurant].events;

const event = events?.find((event) => event.title === title);

Expand Down Expand Up @@ -84,8 +81,7 @@ export default function Event() {
<XStack alignItems="center" padding={0} gap="$2">
<MapPin />
<Text fontWeight="700">
{selectedRestaurant.charAt(0).toUpperCase() +
selectedRestaurant.slice(1)}
{restaurant.charAt(0).toUpperCase() + restaurant.slice(1)}
</Text>
</XStack>
<XStack alignItems="center" padding={0} gap="$2">
Expand Down
130 changes: 72 additions & 58 deletions apps/expo/src/app/events/index.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import { useEffect } from "react";
import React from "react";
import { Link } from "expo-router";
import { CalendarX2 } from "@tamagui/lucide-icons";
import { format } from "date-fns";
import { H3, Image, Spinner, Tabs, Text, View, YStack } from "tamagui";

import type { Event } from "@zotmeal/db";
import { getRestaurantNameById } from "@zotmeal/utils";
import { format, isWithinInterval } from "date-fns";
import { H3, Image, Tabs, Text, View, YStack } from "tamagui";

import type { Event } from "~/utils";
import { RestaurantTabs } from "~/components";
import { useZotmealStore } from "~/utils";
import { api } from "~/utils/api";

const EventCard = ({ event }: Readonly<{ event: Event }>) => (
<Link
href={{
pathname: "/events/event/[title]",
params: { title: event.title },
params: {
title: event.title,
restaurant: event.restaurantId === "3314" ? "brandywine" : "anteatery",
},
}}
asChild
>
Expand Down Expand Up @@ -60,68 +60,82 @@ const EventCard = ({ event }: Readonly<{ event: Event }>) => (

// Events Component
export default function Events() {
const {
anteateryEvents,
brandywineEvents,
setAnteateryEvents,
setBrandywineEvents,
} = useZotmealStore();
const { zotmeal } = useZotmealStore();
const [restaurant, setRestaurant] = React.useState<
"brandywine" | "anteatery"
>("brandywine");

const eventsQuery = api.event.get.useQuery(undefined, {
retry: false,
refetchOnWindowFocus: false,
});
const anteateryInfo = zotmeal?.anteatery;
const brandywineInfo = zotmeal?.brandywine;

useEffect(() => {
if (!eventsQuery.isSuccess) return;
const anteateryEvents = anteateryInfo?.events;
const brandywineEvents = brandywineInfo?.events;

const anteateryEvents = eventsQuery.data.filter(
(event) => event.restaurantId === "3056",
);
const brandywineEvents = eventsQuery.data.filter(
(event) => event.restaurantId === "3314",
);
const periods = {
anteatery: anteateryInfo?.menus.map((menu) => menu.period) ?? [],
brandywine: brandywineInfo?.menus.map((menu) => menu.period) ?? [],
};

const currentAnteateryPeriod = periods.anteatery.find((period) =>
isWithinInterval(new Date(), {
start: period.startTime,
end: period.endTime,
}),
);

setAnteateryEvents(anteateryEvents);
setBrandywineEvents(brandywineEvents);
}, [eventsQuery.data]);
const currentBrandywinePeriod = periods.brandywine.find((period) =>
isWithinInterval(new Date(), {
start: period.startTime,
end: period.endTime,
}),
);

// TODO: show a toast if there is an error
if ((anteateryEvents || brandywineEvents) && eventsQuery.isError) {
console.error(eventsQuery.error);
setAnteateryEvents(null);
setBrandywineEvents(null);
}

const EventsContent = () =>
eventsQuery.isLoading ? (
<Spinner size="large" marginTop="$10" />
) : (
const EventsContent = () => {
// if (query.isLoading) return <Spinner size="large" marginTop="$10" />;

return (
<>
{[brandywineEvents, anteateryEvents].map((events, index) => (
<Tabs.Content
key={index}
value={getRestaurantNameById(index === 0 ? "3314" : "3056")}
>
{events && events.length > 0 ? (
<YStack>
{events.map((event, index) => (
<EventCard key={index} event={event} />
))}
</YStack>
) : (
<View alignItems="center">
<CalendarX2 size="$10" />
<Text>Events not found</Text>
</View>
)}
</Tabs.Content>
))}
<Tabs.Content value="brandywine">
{brandywineEvents && brandywineEvents.length > 0 ? (
<YStack>
{brandywineEvents.map((event, index) => (
<EventCard key={index} event={event} />
))}
</YStack>
) : (
<View alignItems="center">
<CalendarX2 size="$10" />
<Text>No events found</Text>
</View>
)}
</Tabs.Content>
<Tabs.Content value="anteatery">
{anteateryEvents && anteateryEvents.length > 0 ? (
<YStack>
{anteateryEvents.map((event, index) => (
<EventCard key={index} event={event} />
))}
</YStack>
) : (
<View alignItems="center">
<CalendarX2 size="$10" />
<Text>No events found</Text>
</View>
)}
</Tabs.Content>
</>
);
};

return (
<RestaurantTabs>
<RestaurantTabs
restaurant={restaurant}
setRestaurant={setRestaurant}
anteateryStatus={currentAnteateryPeriod ? "open" : "closed"}
brandywineStatus={currentBrandywinePeriod ? "open" : "closed"}
>
<EventsContent />
</RestaurantTabs>
);
Expand Down
Loading

0 comments on commit 5edcdd7

Please sign in to comment.