import { Link, useNavigate } from "@remix-run/react";
import { MapPin, Menu, Pencil, Plus, Trash, X } from "lucide-react";
import { useEffect, useState } from "react";
import ProfilePagesHeader from "../components/ProfilePagesHeader";
import { MetaFunction } from "@remix-run/node";
import {
useServiceDeleteAddress,
useServiceGetAddresses,
} from "../utils/RequestHandler";
import { Button } from "../components/ui/button";
import { Drawer, DrawerContent, DrawerHeader } from "../components/ui/drawer";
import { Dialog, DialogContent, DialogOverlay } from "../components/ui/dialog";
import { useToast } from "../hooks/use-toast";
import { Address } from "src/api/types";
import UiProvider from "~/components/UiProvider";
export const meta: MetaFunction = () => {
const title = "آدرسهای من | ویترون";
const description = "مدیریت آدرسهای ارسال سفارشات در ویترون";
const imageUrl =
"https://vitrownstatics.s3.ir-thr-at1.arvanstorage.ir/SVG-06.svg?versionId=";
return [
{ title },
{ name: "description", content: description },
{
name: "keywords",
content: "آدرس، مدیریت آدرس، آدرس ارسال، ویترون",
},
{ name: "robots", content: "noindex, follow" },
// Open Graph
{ property: "og:type", content: "website" },
{ property: "og:title", content: title },
{ property: "og:description", content: description },
{ property: "og:image", content: imageUrl },
{ property: "og:site_name", content: "ویترون" },
{ property: "og:locale", content: "fa_IR" },
// Twitter Card
{ name: "twitter:card", content: "summary_large_image" },
{ name: "twitter:title", content: title },
{ name: "twitter:description", content: description },
{ name: "twitter:image", content: imageUrl },
];
};
export default function Locaton() {
return (
);
}
const MainContent = () => {
const {
data: dataAddress,
isFetching: isFetchingAddress,
isError,
refetch,
} = useServiceGetAddresses();
return (
{dataAddress?.map((address: Address, index: number) => {
return (
);
})}
);
};
const AddressRow = ({
address,
isLastAddress,
}: {
address: Address;
isLastAddress: boolean;
}) => {
const [isOpen, setIsOpen] = useState(false);
const toggleDrawer = () => {
setIsOpen(!isOpen);
};
return (
<>
toggleDrawer()}
onKeyDown={() => {}}
role="button"
tabIndex={0}
className={`w-full flex gap-2 items-center py-4 ${isLastAddress ? "border-b" : ""}`}
>
{address?.title}
{address?.mainAddress}
>
);
};
export const AdderssSettingDrawer = ({
isOpen,
setIsOpen,
address,
}: {
isOpen: boolean;
setIsOpen: (open: boolean) => void;
address: Address | null;
}) => {
const [deleteModalOpen, setDeleteModalOpen] = useState(false);
const navigate = useNavigate();
return (
<>
setIsOpen(false)}
className="absolute size-6 top-2 right-3"
/>
تنظیمات آدرس
{address?.title}
{address?.mainAddress}
>
);
};
const DeleteAddressModal = ({
address,
open,
onOpenChange,
}: {
address: Address | null;
open: boolean;
onOpenChange: (open: boolean) => void;
}) => {
const { toast } = useToast();
const deleteAddressMutation = useServiceDeleteAddress(
address?.id || "",
address?.title || "",
toast
);
useEffect(() => {
if (deleteAddressMutation.data) {
onOpenChange(false);
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [deleteAddressMutation.data, deleteAddressMutation.error]);
const onDelete = async () => {
if (!deleteAddressMutation.isPending) {
try {
onOpenChange(false);
await deleteAddressMutation.mutateAsync();
toast({
title: "آدرس با موفقیت حذف شد",
description: "آدرس شما با موفقیت حذف شد.",
});
} catch (error) {
toast({
title: "خطا در حذف آدرس",
description:
"متاسفانه مشکلی در حذف آدرس پیش آمده است. لطفا دوباره تلاش کنید.",
variant: "destructive",
});
}
}
};
return (
);
};