Yaltopia-Tickets-App/app/proforma/[id].tsx
2026-03-01 14:43:12 +03:00

212 lines
7.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React from "react";
import { View, ScrollView, Pressable } from "react-native";
import { useLocalSearchParams, router, Stack } from "expo-router";
import { Text } from "@/components/ui/text";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import {
ArrowLeft,
DraftingCompass,
Clock,
Tag,
Send,
ExternalLink,
ChevronRight,
CheckCircle2,
} from "@/lib/icons";
import { ScreenWrapper } from "@/components/ScreenWrapper";
const MOCK_ITEMS = [
{
description: "Marketing Landing Page Package",
qty: 1,
unitPrice: 1000,
total: 1000,
},
{
description: "Instagram Post Initial Design",
qty: 4,
unitPrice: 100,
total: 400,
},
];
const MOCK_SUBTOTAL = 1400;
const MOCK_TAX = 140;
const MOCK_TOTAL = 1540;
export default function ProformaDetailScreen() {
const { id } = useLocalSearchParams<{ id: string }>();
return (
<ScreenWrapper className="bg-background">
<Stack.Screen options={{ headerShown: false }} />
<View className="px-6 pt-4 flex-row justify-between items-center">
<Pressable
onPress={() => router.back()}
className="h-10 w-10 rounded-[10px] bg-card items-center justify-center border border-border"
>
<ArrowLeft color="#0f172a" size={20} />
</Pressable>
<Text variant="h4" className="text-foreground font-semibold">
Proforma
</Text>
<Pressable className="h-9 w-9 rounded-[6px] bg-card items-center justify-center border border-border">
<ExternalLink className="text-foreground" color="#000" size={17} />
</Pressable>
</View>
<ScrollView
className="flex-1"
contentContainerStyle={{ padding: 16, paddingBottom: 120 }}
showsVerticalScrollIndicator={false}
>
<Card className=" overflow-hidden rounded-[6px] border-0 bg-primary">
<View className="p-5">
<View className="flex-row items-center justify-between mb-3">
<View className="bg-white/20 p-1.5 rounded-[6px]">
<DraftingCompass color="white" size={16} strokeWidth={2.5} />
</View>
<View className="bg-amber-500/20 px-3 py-1 rounded-[6px] border border-white/10">
<Text className={`text-[10px] font-bold text-white`}>
Open Request
</Text>
</View>
</View>
<Text variant="small" className="text-white/70 mb-0.5">
Target Package
</Text>
<Text variant="h3" className="text-white font-bold mb-3">
Marketing Landing Page
</Text>
<View className="flex-row items-center gap-3 border-t border-white/40 pt-3">
<View className="flex-row items-center gap-1.5">
<Text className="text-white/90 text-xs font-semibold">
Expires in 5 days
</Text>
</View>
<View className="h-3 w-[1px] bg-white/60" />
<Text className="text-white/90 text-xs font-semibold">
REQ-{id || "002"}
</Text>
</View>
</View>
</Card>
<Card className="bg-card rounded-[6px] mb-4">
<View className="p-4">
<View className="flex-row items-center gap-2">
<Text variant="small" className="font-semibold">
Line Items
</Text>
</View>
{MOCK_ITEMS.map((item, i) => (
<View
key={i}
className={`flex-row justify-between py-3 ${i < MOCK_ITEMS.length - 1 ? "border-b border-border/40" : ""}`}
>
<View className="flex-1 pr-4">
<Text
variant="p"
className="text-foreground font-semibold text-sm"
>
{item.description}
</Text>
<Text variant="muted" className="text-[10px] mt-0.5">
{item.qty} × ${item.unitPrice.toLocaleString()}
</Text>
</View>
<Text variant="p" className="text-foreground font-bold text-sm">
${item.total.toLocaleString()}
</Text>
</View>
))}
<View className="mt-3 pt-3 border-t border-border/40 gap-2">
<View className="flex-row justify-between">
<Text
variant="p"
className="text-foreground font-semibold text-sm"
>
Subtotal
</Text>
<Text variant="p" className="text-foreground font-bold text-sm">
${MOCK_SUBTOTAL.toLocaleString()}
</Text>
</View>
<View className="flex-row justify-between">
<Text
variant="p"
className="text-foreground font-semibold text-sm"
>
Tax (10%)
</Text>
<Text variant="p" className="text-foreground font-bold text-sm">
${MOCK_TAX.toLocaleString()}
</Text>
</View>
<View className="flex-row justify-between items-center mt-1">
<Text variant="p" className="text-foreground font-semibold">
Estimated Total
</Text>
<Text
variant="h4"
className="text-foreground font-bold tracking-tight"
>
${MOCK_TOTAL.toLocaleString()}
</Text>
</View>
</View>
</View>
</Card>
<Text variant="h4" className="text-foreground mb-2">
Recent Submissions
</Text>
<Card className="bg-card rounded-[6px] mb-6">
<Pressable className="flex-row items-center p-3">
<View className="bg-secondary h-9 w-9 rounded-[6px] items-center justify-center mr-3 border border-border/50">
<CheckCircle2 className="text-muted-foreground" size={16} />
</View>
<View className="flex-1 mt-[-10px]">
<Text
variant="p"
className="text-foreground font-semibold text-sm"
>
Vendor A $1,450
</Text>
<Text variant="muted" className="text-xs mt-0.5">
Submitted 2 hours ago
</Text>
</View>
<ChevronRight className="text-muted-foreground/50" size={16} />
</Pressable>
</Card>
<View className="flex-row gap-3">
<Button
className="flex-1 h-11 rounded-[6px] bg-primary"
onPress={() => {}}
>
<Send color="#ffffff" size={14} strokeWidth={2.5} />
<Text className="ml-2 text-white font-bold text-[11px] uppercase tracking-widest">
Share
</Text>
</Button>
<Button
className="flex-1 h-11 rounded-[6px] bg-card border border-border"
onPress={() => router.back()}
>
<Text className="text-foreground font-semibold text-[11px] uppercase tracking-widest">
Back
</Text>
</Button>
</View>
</ScrollView>
</ScreenWrapper>
);
}