import { useState } from "react"; import { redirect, type ActionFunctionArgs, type LoaderFunctionArgs } from "@remix-run/node"; import { Form, useActionData, useLoaderData, useNavigation } from "@remix-run/react"; import { Page, Card, BlockStack, FormLayout, TextField, Button, InlineStack, Checkbox, } from "@shopify/polaris"; import { TitleBar } from "@shopify/app-bridge-react"; import { authenticate } from "../shopify.server"; import db from "../db.server"; export const loader = async ({ request, params }: LoaderFunctionArgs) => { const { session } = await authenticate.admin(request); const location = await db.location.findFirst({ where: { id: params.id, shopDomain: session.shop }, }); if (!location) { throw new Response("Not found", { status: 404 }); } return { location }; }; export const action = async ({ request, params }: ActionFunctionArgs) => { const { session } = await authenticate.admin(request); const formData = await request.formData(); const intent = formData.get("intent"); if (intent === "delete") { await db.location.deleteMany({ where: { id: params.id, shopDomain: session.shop } }); return redirect("/app/locations"); } const name = String(formData.get("name") || "").trim(); const address = String(formData.get("address") || "").trim(); const timezone = String(formData.get("timezone") || "").trim(); const active = formData.get("active") === "true"; const errors: Record = {}; if (!name) errors.name = "Name is required"; if (!timezone) errors.timezone = "Timezone is required"; if (Object.keys(errors).length > 0) { return { errors }; } await db.location.updateMany({ where: { id: params.id, shopDomain: session.shop }, data: { name, address, timezone, active }, }); return { errors }; }; export default function EditLocation() { const { location } = useLoaderData(); const actionData = useActionData(); const navigation = useNavigation(); const isSubmitting = navigation.state === "submitting"; return ( ); } function LocationForm({ location, errors, isSubmitting, }: { location: { id: string; name: string; address: string; timezone: string; active: boolean }; errors?: Record; isSubmitting: boolean; }) { const [name, setName] = useState(location.name); const [address, setAddress] = useState(location.address); const [timezone, setTimezone] = useState(location.timezone); const [active, setActive] = useState(location.active); return (
Delete this location Removes all its slot templates and blackout dates.
); }