Search for a command to run...
В этом руководстве вы узнаете, как включить встроенное автозаполнение адреса через DaData при оформлении заказа или добавить собственный провайдер для другой страны или сервиса.
Ввод адреса на шаге оформления заказа реализован как подключаемый провайдер, а не как фиксированный набор полей. Витрина поставляется с одним реальным провайдером (DaData для российских адресов), обычным полем адреса как резервным вариантом и режимом ручного ввода, на который покупатель может переключиться в любой момент.
считывает активный провайдер из переменной окружения и переключается по нему:
src/modules/common/components/address-autocomplete/index.tsx1const renderAutocomplete = () => {2 switch (true) {3 case isDaData(addressAutocompleteProvider):4 return <DaDataAddressInput {...props} />5 default:6 return <PlainAddressInput {...props} />7 }8}
и оба определены в . Любое значение кроме , включая незаданную переменную, проваливается в (), который отрисовывает одно поле адреса без какого-либо автозаполнения.
Независимо от активного провайдера, также отрисовывает чекбокс, который позволяет посетителю сразу переключиться на ручной ввод. Чекбокс подменяет провайдер на , четыре обычных поля для адреса, индекса, города и региона. Поэтому автозаполнение никогда не блокирует того, чей адрес не подходит под ожидания провайдера.
Задайте две переменные окружения в :
apps/storefront/.env.local1NEXT_PUBLIC_ADDRESS_AUTOCOMPLETE_PROVIDER=dadata2NEXT_PUBLIC_ADDRESS_AUTOCOMPLETE_PROVIDER_API_KEY=
Получите API-ключ в своём аккаунте DaData. () передаёт его напрямую в компонент библиотеки . Этот компонент подсказывает только российские адреса.
Каждый компонент-провайдер принимает одни и те же props: на входе, на выходе:
src/modules/common/components/address-autocomplete/types.ts1export type AddressFields = {2 address_1: string3 postal_code: string4 city: string5 province: string6}78export type AddressAutocompleteProps = {9 values: AddressFields10 onChange: (fields: AddressFields) => void11 required?: boolean12}
Чтобы добавить провайдер для другой страны или сервиса:
На форму props и вызовы у можно ориентироваться при написании нового провайдера: это рабочий минимальный пример. Сам он, впрочем, не обращается ни к какому внешнему API.