feat(MED-100): add partner locations list for cart
This commit is contained in:
@@ -19,17 +19,13 @@ import {
|
|||||||
} from '@kit/ui/select';
|
} from '@kit/ui/select';
|
||||||
import { updateCartPartnerLocation } from '../../_lib/server/update-cart-partner-location';
|
import { updateCartPartnerLocation } from '../../_lib/server/update-cart-partner-location';
|
||||||
|
|
||||||
|
import partnerLocations from './partner-locations.json';
|
||||||
|
|
||||||
const AnalysisLocationSchema = z.object({
|
const AnalysisLocationSchema = z.object({
|
||||||
locationId: z.string().min(1),
|
locationId: z.string().min(1),
|
||||||
});
|
});
|
||||||
|
|
||||||
const MOCK_LOCATIONS: { id: string, name: string }[] = [
|
export default function AnalysisLocation({ cart, synlabAnalyses }: { cart: StoreCart, synlabAnalyses: StoreCartLineItem[] }) {
|
||||||
{ id: "synlab-tallinn-1", name: "SYNLAB - Tallinn" },
|
|
||||||
{ id: "synlab-tartu-1", name: "SYNLAB - Tartu" },
|
|
||||||
{ id: "synlab-parnu-1", name: "SYNLAB - Pärnu" },
|
|
||||||
]
|
|
||||||
|
|
||||||
export default function AnalysisLocation({ cart, analysisPackages }: { cart: StoreCart, analysisPackages: StoreCartLineItem[] }) {
|
|
||||||
const { t } = useTranslation('cart');
|
const { t } = useTranslation('cart');
|
||||||
|
|
||||||
const form = useForm<z.infer<typeof AnalysisLocationSchema>>({
|
const form = useForm<z.infer<typeof AnalysisLocationSchema>>({
|
||||||
@@ -39,12 +35,16 @@ export default function AnalysisLocation({ cart, analysisPackages }: { cart: Sto
|
|||||||
resolver: zodResolver(AnalysisLocationSchema),
|
resolver: zodResolver(AnalysisLocationSchema),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const getLocation = (locationId: string) => partnerLocations.find(({ name }) => name === locationId);
|
||||||
|
|
||||||
|
const selectedLocation = getLocation(form.watch('locationId'));
|
||||||
|
|
||||||
const onSubmit = async ({ locationId }: z.infer<typeof AnalysisLocationSchema>) => {
|
const onSubmit = async ({ locationId }: z.infer<typeof AnalysisLocationSchema>) => {
|
||||||
const promise = updateCartPartnerLocation({
|
const promise = updateCartPartnerLocation({
|
||||||
cartId: cart.id,
|
cartId: cart.id,
|
||||||
lineIds: analysisPackages.map(({ id }) => id),
|
lineIds: synlabAnalyses.map(({ id }) => id),
|
||||||
partnerLocationId: locationId,
|
partnerLocationId: locationId,
|
||||||
partnerLocationName: MOCK_LOCATIONS.find((location) => location.id === locationId)?.name ?? '',
|
partnerLocationName: getLocation(locationId)?.name ?? '',
|
||||||
});
|
});
|
||||||
|
|
||||||
toast.promise(promise, {
|
toast.promise(promise, {
|
||||||
@@ -55,7 +55,7 @@ export default function AnalysisLocation({ cart, analysisPackages }: { cart: Sto
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="w-full bg-white flex flex-col txt-medium">
|
<div className="w-full bg-white flex flex-col txt-medium gap-y-2">
|
||||||
<Form {...form}>
|
<Form {...form}>
|
||||||
<form
|
<form
|
||||||
onSubmit={form.handleSubmit((data) => onSubmit(data))}
|
onSubmit={form.handleSubmit((data) => onSubmit(data))}
|
||||||
@@ -78,18 +78,35 @@ export default function AnalysisLocation({ cart, analysisPackages }: { cart: Sto
|
|||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
|
|
||||||
<SelectContent>
|
<SelectContent>
|
||||||
<SelectGroup>
|
{Object.entries(partnerLocations
|
||||||
<SelectLabel>{t('cart:locations.locationSelect')}</SelectLabel>
|
.reduce((acc, curr) => ({
|
||||||
|
...acc,
|
||||||
{MOCK_LOCATIONS.map((location) => (
|
[curr.city]: [...((acc[curr.city] as typeof partnerLocations) ?? []), curr],
|
||||||
<SelectItem key={location.id} value={location.id}>{location.name}</SelectItem>
|
}), {} as Record<string, typeof partnerLocations>))
|
||||||
|
.map(([city, locations]) => (
|
||||||
|
<SelectGroup key={city}>
|
||||||
|
<SelectLabel>{city}</SelectLabel>
|
||||||
|
{locations.map((location) => (
|
||||||
|
<SelectItem key={location.name} value={location.name}>{location.name}</SelectItem>
|
||||||
))}
|
))}
|
||||||
</SelectGroup>
|
</SelectGroup>
|
||||||
|
))}
|
||||||
</SelectContent>
|
</SelectContent>
|
||||||
</Select>
|
</Select>
|
||||||
</form>
|
</form>
|
||||||
</Form>
|
</Form>
|
||||||
|
|
||||||
|
{selectedLocation && (
|
||||||
|
<div className="flex flex-col gap-y-2 mb-4">
|
||||||
|
<p className="text-sm">
|
||||||
|
{selectedLocation.address}
|
||||||
|
</p>
|
||||||
|
<p className="text-sm">
|
||||||
|
{selectedLocation.hours}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<p className="text-sm text-muted-foreground">
|
<p className="text-sm text-muted-foreground">
|
||||||
<Trans i18nKey={'cart:locations.description'} />
|
<Trans i18nKey={'cart:locations.description'} />
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
122
app/home/(user)/_components/cart/partner-locations.json
Normal file
122
app/home/(user)/_components/cart/partner-locations.json
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Veerenni verevõtupunkt",
|
||||||
|
"address": "Veerenni 53a, VI korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt E-R 7.30-15.30 ja L 8.00-16.00 (lõunapaus 13.00-13.30)",
|
||||||
|
"city": "Tallinn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti kesklinna verevõtupunkt",
|
||||||
|
"address": "Pärnu mnt 15 (Kawe Plaza), I korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-16.00 (lõunapaus 12.00-12.30)",
|
||||||
|
"city": "Tallinn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Lasnamäe verevõtupunkt",
|
||||||
|
"address": "Linnamäe tee 3 (Lasnamäe Tervisemaja), II korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-16.00 (lõunapaus 12.00-12.30)",
|
||||||
|
"city": "Tallinn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Ülemiste verevõtupunkt",
|
||||||
|
"address": "Valukoja 7 (Ülemiste Tervisemaja), II korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-16.00 (lõunapaus 12.00-12.30)",
|
||||||
|
"city": "Tallinn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Sepapaja verevõtupunkt",
|
||||||
|
"address": "Sepapaja 12/1 (Ülemiste Tervisemaja 2, Karl Ernst von Baeri maja), III korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-16.00 (lõunapaus 12.30-13.00)",
|
||||||
|
"city": "Tallinn"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Viimsi verevõtupunkt",
|
||||||
|
"address": "Ravi tee 4 (Viimsi Fertilitas) Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 7.30-15.30 (lõunapaus 12.30-13.00)",
|
||||||
|
"city": "Viimsi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Maardu verevõtupunkt",
|
||||||
|
"address": "Kallasmaa 4 (Maardu Tervisekeskus) Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-15.00 (lõunapaus 12.00-12.30)",
|
||||||
|
"city": "Maardu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Tartu kliiniline labor",
|
||||||
|
"address": "Raatuse 21, II korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-16.30",
|
||||||
|
"city": "Tartu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Tasku verevõtupunkt",
|
||||||
|
"address": "Turu 2, IV korrus (Tasku Meditsiinikeskus) Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-15.30",
|
||||||
|
"city": "Tartu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Tartu Tervisekeskuse verevõtupunkt",
|
||||||
|
"address": "Mõisavahe 34b, I korrus Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-15.00 (lõunapaus 12:30-13:00)",
|
||||||
|
"city": "Tartu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Pärnu Tervis SPA verevõtupunkt",
|
||||||
|
"address": "Seedri 6 (Tervis SPA), kabinet 202 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti E-N 8.00-15.00 R 8.00-13.00",
|
||||||
|
"city": "Pärnu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Suur-Sepa verevõtupunkt",
|
||||||
|
"address": "Suur-Sepa 14, kabinet 102 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti E-N 8.00-16.00 (lõunapaus 12.30-13.00) ja R 8.00-14.00 (lõunapaus 12.30-13.00)",
|
||||||
|
"city": "Pärnu"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Narva verevõtupunkt",
|
||||||
|
"address": "Fama 10/2, kabinet 14 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 7.30-12.00",
|
||||||
|
"city": "Narva"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Sillamäe verevõtupunkt",
|
||||||
|
"address": "Kajaka 9, IV korrus, kabinet 404 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-11.30",
|
||||||
|
"city": "Sillamäe"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Jõhvi verevõtupunkt",
|
||||||
|
"address": "Jaama 34, I korrus, kabinet 15 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-13.00",
|
||||||
|
"city": "Jõhvi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Viljandi verevõtupunkt",
|
||||||
|
"address": "Tallinna 19, II korrus, kabinet 210 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti E-N 8.00-15.00 ja R 8.00-12.00",
|
||||||
|
"city": "Viljandi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Võru labor",
|
||||||
|
"address": "Tartu tn 9 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti E-N 8.00-15.30 R 8.00-13.00",
|
||||||
|
"city": "Võru"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Elva labor",
|
||||||
|
"address": "Supelranna 21, kabinet 133 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-14.00",
|
||||||
|
"city": "Elva"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Põltsamaa labor",
|
||||||
|
"address": "Lossi 49 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti E-N 8.00-15.00 (lõunapaus 12:00-12:30) ja R 8.00-12.00",
|
||||||
|
"city": "Põltsamaa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SYNLAB Eesti Otepää labor",
|
||||||
|
"address": "Tartu mnt 2 Tel: 17123",
|
||||||
|
"hours": "Verevõtt tööpäeviti 8.00-12.00",
|
||||||
|
"city": "Otepää"
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user