You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.5 KiB
45 lines
1.5 KiB
import type { MothershipAddressCandidate } from "@/modules/address/types";
|
|
import type { HostPublicAddressDraft } from "@/modules/host/types";
|
|
import type { QuoteRequestBody } from "@/lib/frontend/types";
|
|
|
|
function draftPlaceId(draft: HostPublicAddressDraft): string {
|
|
const street = draft.street.trim();
|
|
const city = draft.city.trim();
|
|
const state = draft.state.trim();
|
|
return `draft_${street}_${city}_${state}`.replace(/\s+/g, "_").slice(0, 64);
|
|
}
|
|
|
|
function draftAddress(draft: HostPublicAddressDraft): QuoteRequestBody["pickup_address"] {
|
|
const street = draft.street.trim();
|
|
const city = draft.city.trim();
|
|
const state = draft.state.trim();
|
|
const zip = draft.zip?.trim() ?? "";
|
|
return {
|
|
street,
|
|
city,
|
|
state,
|
|
zip,
|
|
place_id: draftPlaceId(draft),
|
|
formatted_address: `${street}, ${city}, ${state}${zip ? ` ${zip}` : ""}`,
|
|
selected_from_suggestions: true,
|
|
};
|
|
}
|
|
|
|
/** 用户确认的 MotherShip 候选 → 询价地址 */
|
|
export function applyHostCandidate(
|
|
draft: HostPublicAddressDraft,
|
|
candidate: MothershipAddressCandidate,
|
|
): QuoteRequestBody["pickup_address"] {
|
|
return {
|
|
...draftAddress(draft),
|
|
street: candidate.street,
|
|
city: candidate.city,
|
|
state: candidate.state,
|
|
zip: candidate.zip || draft.zip?.trim() || "",
|
|
formatted_address: candidate.formatted_address,
|
|
mothership_option_id: candidate.option_id,
|
|
mothership_display_label: candidate.display_label,
|
|
selected_from_mothership: true,
|
|
};
|
|
}
|