enh
This commit is contained in:
parent
3ed324bde7
commit
31f011ba8c
39 changed files with 56 additions and 6565 deletions
6
apps/admin-ui/.expo/types/router.d.ts
vendored
6
apps/admin-ui/.expo/types/router.d.ts
vendored
File diff suppressed because one or more lines are too long
|
|
@ -152,6 +152,7 @@ export default function Layout() {
|
||||||
backBehavior="history"
|
backBehavior="history"
|
||||||
drawerContent={CustomDrawerContent}
|
drawerContent={CustomDrawerContent}
|
||||||
screenOptions={({ navigation, route }) => ({
|
screenOptions={({ navigation, route }) => ({
|
||||||
|
swipeEnabled: false,
|
||||||
headerShown: true,
|
headerShown: true,
|
||||||
headerStyle: {
|
headerStyle: {
|
||||||
backgroundColor: theme.colors.gray1,
|
backgroundColor: theme.colors.gray1,
|
||||||
|
|
@ -197,33 +198,26 @@ export default function Layout() {
|
||||||
),
|
),
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<Drawer.Screen name="dashboard" options={{ title: "Dashboard" }} />
|
<Drawer.Screen name="dashboard" options={{ title: "Dashboard" }} />
|
||||||
<Drawer.Screen name="add-product" options={{ title: "Add Product" }} />
|
|
||||||
<Drawer.Screen name="products" options={{ title: "Products" }} />
|
<Drawer.Screen name="products" options={{ title: "Products" }} />
|
||||||
<Drawer.Screen name="prices-overview" options={{ title: "Prices Overview" }} />
|
<Drawer.Screen name="prices-overview" options={{ title: "Prices Overview" }} />
|
||||||
<Drawer.Screen name="product-groupings" options={{ title: "Product Groupings" }} />
|
<Drawer.Screen name="product-groupings" options={{ title: "Product Groupings" }} />
|
||||||
<Drawer.Screen name="create-product-group" options={{ title: "Create Product Group" }} />
|
<Drawer.Screen name="create-product-group" options={{ title: "Create Product Group" }} />
|
||||||
<Drawer.Screen name="edit-product-group/[id]" options={{ title: "Edit Product Group" }} />
|
<Drawer.Screen name="edit-product-group/[id]" options={{ title: "Edit Product Group" }} />
|
||||||
|
|
||||||
<Drawer.Screen name="edit-product" options={{ title: "Edit Product" }} />
|
|
||||||
<Drawer.Screen
|
<Drawer.Screen
|
||||||
name="manage-orders"
|
name="manage-orders"
|
||||||
options={{ title: "Manage Orders" }}
|
options={{ title: "Manage Orders" }}
|
||||||
/>
|
/>
|
||||||
<Drawer.Screen name="complaints" options={{ title: "Complaints" }} />
|
<Drawer.Screen name="complaints" options={{ title: "Complaints" }} />
|
||||||
<Drawer.Screen name="coupons" options={{ title: "Coupons" }} />
|
<Drawer.Screen name="coupons" options={{ title: "Coupons" }} />
|
||||||
<Drawer.Screen name="create-coupon" options={{ title: "Create Coupon" }} />
|
<Drawer.Screen name="slots" options={{ title: "Slots" }} />
|
||||||
<Drawer.Screen name="edit-coupon/[id]" options={{ title: "Edit Coupon" }} />
|
|
||||||
<Drawer.Screen name="slots" options={{ title: "Slots" }} />
|
|
||||||
<Drawer.Screen name="add-slot" options={{ title: "Add Slot" }} />
|
|
||||||
<Drawer.Screen name="edit-slot/[id]" options={{ title: "Edit Slot" }} />
|
|
||||||
<Drawer.Screen name="vendor-snippets" options={{ title: "Vendor Snippets" }} />
|
<Drawer.Screen name="vendor-snippets" options={{ title: "Vendor Snippets" }} />
|
||||||
<Drawer.Screen name="delivery-sequences" options={{ title: "Delivery Sequences", headerShown: false }} />
|
<Drawer.Screen name="delivery-sequences" options={{ title: "Delivery Sequences", headerShown: false }} />
|
||||||
<Drawer.Screen name="stores" options={{ title: "Stores" }} />
|
<Drawer.Screen name="stores" options={{ title: "Stores" }} />
|
||||||
<Drawer.Screen name="address-management" options={{ title: "Address Management" }} />
|
<Drawer.Screen name="address-management" options={{ title: "Address Management" }} />
|
||||||
<Drawer.Screen name="product-tags" options={{ title: "Product Tags" }} />
|
<Drawer.Screen name="product-tags" options={{ title: "Product Tags" }} />
|
||||||
<Drawer.Screen name="add-tag" options={{ title: "Add Tag" }} />
|
|
||||||
<Drawer.Screen name="edit-tag" options={{ title: "Edit Tag" }} />
|
|
||||||
<Drawer.Screen name="order-details/[id]" options={{ title: "Order Details" }} />
|
<Drawer.Screen name="order-details/[id]" options={{ title: "Order Details" }} />
|
||||||
<Drawer.Screen name="orders" options={{ title: "Orders" }} />
|
<Drawer.Screen name="orders" options={{ title: "Orders" }} />
|
||||||
<Drawer.Screen name="rebalance-orders" options={{ title: "Rebalance Orders" }} />
|
<Drawer.Screen name="rebalance-orders" options={{ title: "Rebalance Orders" }} />
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
import { Stack } from "expo-router";
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack>
|
|
||||||
<Stack.Screen
|
|
||||||
name="index"
|
|
||||||
options={{
|
|
||||||
title: "Add Product",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from 'expo-router';
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
|
||||||
<Stack.Screen name="index" options={{ title: 'Add Slot' }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from 'expo-router';
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
|
||||||
<Stack.Screen name="index" options={{ title: 'Add Store' }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
import { Stack } from "expo-router";
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack>
|
|
||||||
<Stack.Screen
|
|
||||||
name="index"
|
|
||||||
options={{
|
|
||||||
title: "Add Tag",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -2,14 +2,10 @@ import { Stack } from "expo-router";
|
||||||
|
|
||||||
export default function Layout() {
|
export default function Layout() {
|
||||||
return (
|
return (
|
||||||
<Stack>
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
<Stack.Screen
|
<Stack.Screen name="index" options={{ title: "Coupons" }} />
|
||||||
name="index"
|
<Stack.Screen name="create" options={{ title: "Create Coupon" }} />
|
||||||
options={{
|
<Stack.Screen name="edit/[id]" options={{ title: "Edit Coupon" }} />
|
||||||
title: "Coupons",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Alert } from 'react-native';
|
import { View, Alert } from 'react-native';
|
||||||
import { tw, AppContainer } from 'common-ui';
|
import { tw, AppContainer } from 'common-ui';
|
||||||
import CouponForm from '../../../src/components/CouponForm';
|
import CouponForm from '@/src/components/CouponForm';
|
||||||
import { trpc } from '@/src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
import { useRouter } from 'expo-router';
|
import { useRouter } from 'expo-router';
|
||||||
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Alert } from 'react-native';
|
import { View, Alert } from 'react-native';
|
||||||
import { tw, AppContainer, MyText } from 'common-ui';
|
import { tw, AppContainer, MyText } from 'common-ui';
|
||||||
import CouponForm from '../../../../src/components/CouponForm';
|
import CouponForm from '@/src/components/CouponForm';
|
||||||
import { trpc } from '@/src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
import { useRouter, useLocalSearchParams } from 'expo-router';
|
import { useRouter, useLocalSearchParams } from 'expo-router';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
|
|
@ -90,7 +90,7 @@ const CouponItem = ({ item, onDelete }: { item: any; onDelete: (id: number) => v
|
||||||
|
|
||||||
<View style={tw`flex-row mt-3 gap-2`}>
|
<View style={tw`flex-row mt-3 gap-2`}>
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
onPress={() => router.push(`/(drawer)/edit-coupon/${item.id}`)}
|
onPress={() => router.push(`/coupons/edit/${item.id}`)}
|
||||||
style={tw`bg-blue-500 p-3 rounded-lg shadow-md flex-1 flex-row items-center justify-center`}
|
style={tw`bg-blue-500 p-3 rounded-lg shadow-md flex-1 flex-row items-center justify-center`}
|
||||||
>
|
>
|
||||||
<MaterialCommunityIcons name="pencil" size={16} color="white" />
|
<MaterialCommunityIcons name="pencil" size={16} color="white" />
|
||||||
|
|
@ -497,7 +497,7 @@ export default function Coupons() {
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<MyTouchableOpacity
|
<MyTouchableOpacity
|
||||||
onPress={() => router.push('/(drawer)/create-coupon')}
|
onPress={() => router.push('/coupons/create')}
|
||||||
activeOpacity={0.95}
|
activeOpacity={0.95}
|
||||||
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@ export default function ReservedCoupons() {
|
||||||
</View>
|
</View>
|
||||||
<MyText style={tw`text-xl font-semibold text-gray-600 mb-2`}>No Reserved Coupons Yet</MyText>
|
<MyText style={tw`text-xl font-semibold text-gray-600 mb-2`}>No Reserved Coupons Yet</MyText>
|
||||||
<MyText style={tw`text-gray-500 text-center mb-4`}>Create your first reserved coupon to start offering secret discounts</MyText>
|
<MyText style={tw`text-gray-500 text-center mb-4`}>Create your first reserved coupon to start offering secret discounts</MyText>
|
||||||
<MyButton onPress={() => router.push('/(drawer)/create-coupon')} style={tw`bg-blue-500`}>
|
<MyButton onPress={() => router.push('/coupons/create')} style={tw`bg-blue-500`}>
|
||||||
<View style={tw`flex-row items-center`}>
|
<View style={tw`flex-row items-center`}>
|
||||||
<MaterialCommunityIcons name="plus" size={16} color="white" />
|
<MaterialCommunityIcons name="plus" size={16} color="white" />
|
||||||
<MyText style={tw`text-white font-semibold ml-1`}>Create Reserved Coupon</MyText>
|
<MyText style={tw`text-white font-semibold ml-1`}>Create Reserved Coupon</MyText>
|
||||||
|
|
@ -230,7 +230,7 @@ export default function ReservedCoupons() {
|
||||||
|
|
||||||
{/* FAB for Add New Reserved Coupon */}
|
{/* FAB for Add New Reserved Coupon */}
|
||||||
<MyTouchableOpacity
|
<MyTouchableOpacity
|
||||||
onPress={() => router.push('/(drawer)/create-coupon')}
|
onPress={() => router.push('/coupons/create')}
|
||||||
activeOpacity={0.95}
|
activeOpacity={0.95}
|
||||||
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from "expo-router";
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack>
|
|
||||||
<Stack.Screen name="index" options={{ title: "Create Coupon", headerShown: false }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -91,7 +91,7 @@ export default function Dashboard() {
|
||||||
title: 'Add Product',
|
title: 'Add Product',
|
||||||
icon: 'add-circle',
|
icon: 'add-circle',
|
||||||
description: 'Create a new product listing',
|
description: 'Create a new product listing',
|
||||||
route: '/(drawer)/add-product',
|
route: '/products/add',
|
||||||
category: 'quick',
|
category: 'quick',
|
||||||
iconColor: theme.colors.brand500,
|
iconColor: theme.colors.brand500,
|
||||||
iconBg: theme.colors.brand50,
|
iconBg: theme.colors.brand50,
|
||||||
|
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
import { Stack } from "expo-router";
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack>
|
|
||||||
<Stack.Screen
|
|
||||||
name="index"
|
|
||||||
options={{
|
|
||||||
title: "Edit Product",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from 'expo-router';
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
|
||||||
<Stack.Screen name="[id]" options={{ title: 'Edit Slot' }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from 'expo-router';
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
|
||||||
<Stack.Screen name="index" options={{ title: 'Edit Store' }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,15 +0,0 @@
|
||||||
import { Stack } from "expo-router";
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack>
|
|
||||||
<Stack.Screen
|
|
||||||
name="index"
|
|
||||||
options={{
|
|
||||||
title: "Edit Tag",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
import { Stack } from 'expo-router';
|
|
||||||
|
|
||||||
export default function Layout() {
|
|
||||||
return (
|
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
|
||||||
<Stack.Screen name="[id]" options={{ title: 'Product Detail' }} />
|
|
||||||
</Stack>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
@ -2,14 +2,10 @@ import { Stack } from "expo-router";
|
||||||
|
|
||||||
export default function Layout() {
|
export default function Layout() {
|
||||||
return (
|
return (
|
||||||
<Stack>
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
<Stack.Screen
|
<Stack.Screen name="index" options={{ title: "Product Tags" }} />
|
||||||
name="index"
|
<Stack.Screen name="add" options={{ title: "Add Tag" }} />
|
||||||
options={{
|
<Stack.Screen name="edit/index" options={{ title: "Edit Tag" }} />
|
||||||
title: "Product Tags",
|
|
||||||
headerShown: false,
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -78,7 +78,7 @@ export default function ProductTags() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleAddNewTag = () => {
|
const handleAddNewTag = () => {
|
||||||
router.push('/(drawer)/add-tag');
|
router.push('/product-tags/add');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,9 @@ export default function Layout() {
|
||||||
return (
|
return (
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
<Stack.Screen name="index" options={{ title: 'Products' }} />
|
<Stack.Screen name="index" options={{ title: 'Products' }} />
|
||||||
|
<Stack.Screen name="add" options={{ title: 'Add Product' }} />
|
||||||
|
<Stack.Screen name="edit" options={{ title: 'Edit Product' }} />
|
||||||
|
<Stack.Screen name="detail/[id]" options={{ title: 'Product Detail' }} />
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Alert } from 'react-native';
|
import { Alert } from 'react-native';
|
||||||
import { AppContainer } from 'common-ui';
|
import { AppContainer } from 'common-ui';
|
||||||
import ProductForm from '../../../src/components/ProductForm';
|
import ProductForm from '@/src/components/ProductForm';
|
||||||
import { useCreateProduct, CreateProductPayload } from '../../../src/api-hooks/product.api';
|
import { useCreateProduct, CreateProductPayload } from '@/src/api-hooks/product.api';
|
||||||
|
|
||||||
export default function AddProduct() {
|
export default function AddProduct() {
|
||||||
const { mutate: createProduct, isPending: isCreating } = useCreateProduct();
|
const { mutate: createProduct, isPending: isCreating } = useCreateProduct();
|
||||||
|
|
@ -177,7 +177,7 @@ export default function ProductDetail() {
|
||||||
const product = productData?.product;
|
const product = productData?.product;
|
||||||
|
|
||||||
const handleEdit = () => {
|
const handleEdit = () => {
|
||||||
router.push(`/edit-product?id=${productId}` as any);
|
router.push(`/products/edit?id=${productId}` as any);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2,8 +2,8 @@ import React, { useRef } from 'react';
|
||||||
import { View, Text, Alert } from 'react-native';
|
import { View, Text, Alert } from 'react-native';
|
||||||
import { useLocalSearchParams } from 'expo-router';
|
import { useLocalSearchParams } from 'expo-router';
|
||||||
import { AppContainer, useManualRefresh, MyText, tw } from 'common-ui';
|
import { AppContainer, useManualRefresh, MyText, tw } from 'common-ui';
|
||||||
import ProductForm, { ProductFormRef } from '../../../src/components/ProductForm';
|
import ProductForm, { ProductFormRef } from '@/src/components/ProductForm';
|
||||||
import { useUpdateProduct } from '../../../src/api-hooks/product.api';
|
import { useUpdateProduct } from '@/src/api-hooks/product.api';
|
||||||
import { trpc } from '@/src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
|
|
||||||
export default function EditProduct() {
|
export default function EditProduct() {
|
||||||
|
|
@ -48,7 +48,7 @@ export default function Products() {
|
||||||
}, [products, searchTerm, activeFilter]);
|
}, [products, searchTerm, activeFilter]);
|
||||||
|
|
||||||
const handleEdit = (productId: number) => {
|
const handleEdit = (productId: number) => {
|
||||||
router.push(`/edit-product?id=${productId}` as any);
|
router.push(`/products/edit?id=${productId}` as any);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -80,7 +80,7 @@ export default function Products() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleViewDetails = (productId: number) => {
|
const handleViewDetails = (productId: number) => {
|
||||||
router.push(`/product-detail/${productId}` as any);
|
router.push(`/products/detail/${productId}` as any);
|
||||||
};
|
};
|
||||||
|
|
||||||
const FilterButton = ({ filter, label, count }: { filter: FilterType; label: string; count: number }) => (
|
const FilterButton = ({ filter, label, count }: { filter: FilterType; label: string; count: number }) => (
|
||||||
|
|
@ -129,7 +129,7 @@ export default function Products() {
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
<View style={tw`flex-row justify-between items-center mb-6`}>
|
<View style={tw`flex-row justify-between items-center mb-6`}>
|
||||||
<MyText style={tw`text-2xl font-bold text-gray-800`}>Products</MyText>
|
<MyText style={tw`text-2xl font-bold text-gray-800`}>Products</MyText>
|
||||||
<MyButton onPress={() => router.push('/add-product' as any)}>
|
<MyButton onPress={() => router.push('/products/add' as any)}>
|
||||||
Add Product
|
Add Product
|
||||||
</MyButton>
|
</MyButton>
|
||||||
</View>
|
</View>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ export default function Layout() {
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
<Stack.Screen name="index" options={{ title: 'Slots' }} />
|
<Stack.Screen name="index" options={{ title: 'Slots' }} />
|
||||||
<Stack.Screen name="slot-details" options={{ title: 'Slot Details' }} />
|
<Stack.Screen name="slot-details" options={{ title: 'Slot Details' }} />
|
||||||
|
<Stack.Screen name="add" options={{ title: 'Add Slot' }} />
|
||||||
|
<Stack.Screen name="edit/[id]" options={{ title: 'Edit Slot' }} />
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Text } from 'react-native';
|
import { View, Text } from 'react-native';
|
||||||
import { AppContainer } from 'common-ui';
|
import { AppContainer } from 'common-ui';
|
||||||
import SlotForm from '../../../components/SlotForm';
|
import SlotForm from '@/components/SlotForm';
|
||||||
import { useRouter, useLocalSearchParams } from 'expo-router';
|
import { useRouter, useLocalSearchParams } from 'expo-router';
|
||||||
import { trpc } from '../../../src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
|
|
||||||
export default function AddSlot() {
|
export default function AddSlot() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
@ -35,7 +35,7 @@ export default function AddSlot() {
|
||||||
<AppContainer>
|
<AppContainer>
|
||||||
<SlotForm
|
<SlotForm
|
||||||
onSlotAdded={handleSlotAdded}
|
onSlotAdded={handleSlotAdded}
|
||||||
initialProductIds={baseSlotData?.slot?.products?.map(p => p.id) || []}
|
initialProductIds={baseSlotData?.slot?.products?.map((p: any) => p.id) || []}
|
||||||
initialGroupIds={baseSlotData?.slot?.groupIds || []}
|
initialGroupIds={baseSlotData?.slot?.groupIds || []}
|
||||||
/>
|
/>
|
||||||
</AppContainer>
|
</AppContainer>
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Text } from 'react-native';
|
import { View, Text } from 'react-native';
|
||||||
import { AppContainer } from 'common-ui';
|
import { AppContainer } from 'common-ui';
|
||||||
// import SlotForm from '../../../components/SlotForm';
|
|
||||||
// import { trpc } from '../../../src/trpc-client';
|
|
||||||
import { useRouter, useLocalSearchParams } from 'expo-router';
|
import { useRouter, useLocalSearchParams } from 'expo-router';
|
||||||
import { trpc } from '@/src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
import SlotForm from '@/components/SlotForm';
|
import SlotForm from '@/components/SlotForm';
|
||||||
|
|
@ -45,9 +43,9 @@ export default function EditSlot() {
|
||||||
initialFreezeTime={new Date(slot.slot.freezeTime)}
|
initialFreezeTime={new Date(slot.slot.freezeTime)}
|
||||||
initialIsActive={slot.slot.isActive}
|
initialIsActive={slot.slot.isActive}
|
||||||
slotId={slot.slot.id}
|
slotId={slot.slot.id}
|
||||||
initialProductIds={slot.slot.products?.map(p => p.id) || []}
|
initialProductIds={slot.slot.products?.map((p: any) => p.id) || []}
|
||||||
onSlotAdded={handleSlotUpdated}
|
onSlotAdded={handleSlotUpdated}
|
||||||
/>
|
/>
|
||||||
</AppContainer>
|
</AppContainer>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
||||||
import { MaterialCommunityIcons, Entypo } from '@expo/vector-icons';
|
import { MaterialCommunityIcons, Entypo } from '@expo/vector-icons';
|
||||||
import { View, TouchableOpacity, FlatList, Alert } from 'react-native';
|
import { View, TouchableOpacity, FlatList, Alert } from 'react-native';
|
||||||
import { AppContainer, MyText, tw, MyFlatList , BottomDialog, MyTouchableOpacity } from 'common-ui';
|
import { AppContainer, MyText, tw, MyFlatList , BottomDialog, MyTouchableOpacity } from 'common-ui';
|
||||||
import { trpc } from '../../../src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
import { useRouter } from 'expo-router';
|
import { useRouter } from 'expo-router';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { LinearGradient } from 'expo-linear-gradient';
|
import { LinearGradient } from 'expo-linear-gradient';
|
||||||
|
|
@ -47,7 +47,7 @@ const SlotItemComponent: React.FC<SlotItemProps> = ({
|
||||||
</View>
|
</View>
|
||||||
<View style={tw`flex-row items-center`}>
|
<View style={tw`flex-row items-center`}>
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
onPress={() => router.push(`/edit-slot/${slot.id}` as any)}
|
onPress={() => router.push(`/slots/edit/${slot.id}` as any)}
|
||||||
style={tw`px-3 py-1 rounded-full bg-pink2 mr-2`}
|
style={tw`px-3 py-1 rounded-full bg-pink2 mr-2`}
|
||||||
>
|
>
|
||||||
<View style={tw`flex-row items-center`}>
|
<View style={tw`flex-row items-center`}>
|
||||||
|
|
@ -75,7 +75,7 @@ const SlotItemComponent: React.FC<SlotItemProps> = ({
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
setMenuOpen(false);
|
setMenuOpen(false);
|
||||||
router.push(`/add-slot?baseslot=${slot.id}` as any);
|
router.push(`/slots/add?baseslot=${slot.id}` as any);
|
||||||
}}
|
}}
|
||||||
style={tw`py-4 border-b border-gray-200`}
|
style={tw`py-4 border-b border-gray-200`}
|
||||||
>
|
>
|
||||||
|
|
@ -202,7 +202,7 @@ export default function Slots() {
|
||||||
|
|
||||||
{/* FAB for Add New Slot */}
|
{/* FAB for Add New Slot */}
|
||||||
<MyTouchableOpacity
|
<MyTouchableOpacity
|
||||||
onPress={() => router.push('/add-slot' as any)}
|
onPress={() => router.push('/slots/add' as any)}
|
||||||
activeOpacity={0.95}
|
activeOpacity={0.95}
|
||||||
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
style={{ position: 'absolute', bottom: 32, right: 24, zIndex: 100 }}
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import React, { useState } from 'react';
|
import React, { useState } from 'react';
|
||||||
import { View, ScrollView, TouchableOpacity, Alert, Share } from 'react-native';
|
import { View, ScrollView, TouchableOpacity, Alert, Share } from 'react-native';
|
||||||
import { theme, AppContainer, MyText, tw, MyTouchableOpacity, BottomDialog } from 'common-ui';
|
import { theme, AppContainer, MyText, tw, MyTouchableOpacity, BottomDialog } from 'common-ui';
|
||||||
import { trpc } from '../../../src/trpc-client';
|
import { trpc } from '@/src/trpc-client';
|
||||||
import MaterialIcons from '@expo/vector-icons/MaterialIcons';
|
import MaterialIcons from '@expo/vector-icons/MaterialIcons';
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import { useRouter, useLocalSearchParams } from 'expo-router';
|
import { useRouter, useLocalSearchParams } from 'expo-router';
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ export default function Layout() {
|
||||||
return (
|
return (
|
||||||
<Stack screenOptions={{ headerShown: false }}>
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
<Stack.Screen name="index" options={{ title: 'Stores' }} />
|
<Stack.Screen name="index" options={{ title: 'Stores' }} />
|
||||||
|
<Stack.Screen name="add" options={{ title: 'Add Store' }} />
|
||||||
|
<Stack.Screen name="edit" options={{ title: 'Edit Store' }} />
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -14,7 +14,7 @@ export default function AddStore() {
|
||||||
createStoreMutation.mutate(values, {
|
createStoreMutation.mutate(values, {
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
Alert.alert('Success', data.message);
|
Alert.alert('Success', data.message);
|
||||||
router.push('/(drawer)/stores' as any); // Navigate back to stores list
|
router.push('/stores' as any); // Navigate back to stores list
|
||||||
},
|
},
|
||||||
onError: (error: any) => {
|
onError: (error: any) => {
|
||||||
Alert.alert('Error', error.message || 'Failed to create store');
|
Alert.alert('Error', error.message || 'Failed to create store');
|
||||||
|
|
@ -23,7 +23,7 @@ export default function EditStore() {
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
refetch();
|
refetch();
|
||||||
Alert.alert('Success', data.message);
|
Alert.alert('Success', data.message);
|
||||||
router.push('/(drawer)/stores' as any);
|
router.push('/stores' as any);
|
||||||
},
|
},
|
||||||
onError: (error: any) => {
|
onError: (error: any) => {
|
||||||
Alert.alert('Error', error.message || 'Failed to update store');
|
Alert.alert('Error', error.message || 'Failed to update store');
|
||||||
|
|
@ -106,7 +106,7 @@ export default function Stores() {
|
||||||
const stores = storesData?.stores || [];
|
const stores = storesData?.stores || [];
|
||||||
|
|
||||||
const handleEdit = (storeId: number) => {
|
const handleEdit = (storeId: number) => {
|
||||||
router.push({ pathname: '/edit-store', params: { id: storeId } });
|
router.push({ pathname: '/stores/edit', params: { id: storeId } });
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDelete = (storeId: number) => {
|
const handleDelete = (storeId: number) => {
|
||||||
|
|
@ -207,7 +207,7 @@ export default function Stores() {
|
||||||
<Animated.View entering={FadeInUp.delay(500)} style={tw`absolute bottom-8 right-6 shadow-xl`}>
|
<Animated.View entering={FadeInUp.delay(500)} style={tw`absolute bottom-8 right-6 shadow-xl`}>
|
||||||
<TouchableOpacity
|
<TouchableOpacity
|
||||||
activeOpacity={0.8}
|
activeOpacity={0.8}
|
||||||
onPress={() => router.push('/add-store' as any)}
|
onPress={() => router.push('/stores/add' as any)}
|
||||||
>
|
>
|
||||||
<LinearGradient
|
<LinearGradient
|
||||||
colors={['#2563EB', '#1D4ED8']}
|
colors={['#2563EB', '#1D4ED8']}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ export const TagMenu: React.FC<TagMenuProps> = ({
|
||||||
|
|
||||||
const handleEditTag = () => {
|
const handleEditTag = () => {
|
||||||
setIsOpen(false);
|
setIsOpen(false);
|
||||||
router.push(`/(drawer)/edit-tag?tagId=${tagId}`);
|
router.push(`/product-tags/edit?tagId=${tagId}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleDeleteTag = () => {
|
const handleDeleteTag = () => {
|
||||||
|
|
|
||||||
|
|
@ -63,8 +63,8 @@ const isDevMode = Constants.executionEnvironment !== "standalone";
|
||||||
// const BASE_API_URL = API_URL;
|
// const BASE_API_URL = API_URL;
|
||||||
// const BASE_API_URL = 'http://10.0.2.2:4000';
|
// const BASE_API_URL = 'http://10.0.2.2:4000';
|
||||||
// const BASE_API_URL = 'http://192.168.100.101:4000';
|
// const BASE_API_URL = 'http://192.168.100.101:4000';
|
||||||
const BASE_API_URL = 'http://192.168.1.3:4000';
|
// const BASE_API_URL = 'http://192.168.1.3:4000';
|
||||||
// let BASE_API_URL = "https://mf.freshyo.in";
|
let BASE_API_URL = "https://mf.freshyo.in";
|
||||||
// let BASE_API_URL = 'http://192.168.100.104:4000';
|
// let BASE_API_URL = 'http://192.168.100.104:4000';
|
||||||
// let BASE_API_URL = 'http://192.168.29.176:4000';
|
// let BASE_API_URL = 'http://192.168.29.176:4000';
|
||||||
|
|
||||||
|
|
|
||||||
6386
session-ses_3ec7.md
6386
session-ses_3ec7.md
File diff suppressed because one or more lines are too long
Loading…
Add table
Reference in a new issue