UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

180 lines (179 loc) 6.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMockData = getMockData; exports.responseResolver = exports.preResponseResolver = void 0; exports.suggestions = suggestions; exports.suggestionsElement = suggestionsElement; exports.unsupportedCountryMessage = exports.supportedCountryCodes = void 0; var _react = _interopRequireDefault(require("react")); var _index = _interopRequireDefault(require("../../Field/Selection/index.js")); var _useTranslation = _interopRequireDefault(require("../../hooks/useTranslation.js")); var _createContext = require("../createContext.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const supportedCountryCodes = exports.supportedCountryCodes = ['NO']; const unsupportedCountryMessage = exports.unsupportedCountryMessage = 'Postal code verification is not supported for {countryCode}.'; const preResponseResolver = ({ value }) => { if (!value) { return { addresses: [] }; } }; exports.preResponseResolver = preResponseResolver; const responseResolver = (data, handlerConfig) => { const resolver = handlerConfig === null || handlerConfig === void 0 ? void 0 : handlerConfig.responseResolver; if (typeof resolver === 'function') { return resolver(data); } const payload = data === null || data === void 0 ? void 0 : data.addresses.map(item => { const street = [item.street_name, item.house_number].filter(Boolean).join(' '); const city = [item.postal_code, item.city].filter(Boolean).join(' '); return { item, selected_value: street, selectedKey: street || item['address_id'], content: [street, city] }; }); return { payload }; }; exports.responseResolver = responseResolver; function suggestions(generalConfig, handlerConfig) { const abortControllerRef = { current: null }; return async function suggestionsHandlerWrapper(event) { return await suggestionsHandler(event.value, event); }; async function suggestionsHandler(value, additionalArgs) { if (!(typeof value === 'string')) { return; } const { countryCode } = (0, _createContext.handleCountryPath)({ value, countryCode: handlerConfig === null || handlerConfig === void 0 ? void 0 : handlerConfig.countryCode, additionalArgs, handler: suggestionsHandler }); if (!(0, _createContext.isSupportedCountryCode)(countryCode, supportedCountryCodes)) { return; } try { var _handlerConfig$preRes; additionalArgs.showIndicator(); const parameters = { countryCode: String(countryCode).toLowerCase() }; const { data } = await (0, _createContext.fetchData)(value, { generalConfig, parameters, abortControllerRef, preResponseResolver: (_handlerConfig$preRes = handlerConfig === null || handlerConfig === void 0 ? void 0 : handlerConfig.preResponseResolver) !== null && _handlerConfig$preRes !== void 0 ? _handlerConfig$preRes : preResponseResolver }); const { payload } = responseResolver(data, handlerConfig); additionalArgs.updateData(payload); additionalArgs.hideIndicator(); } catch (error) { additionalArgs.hideIndicator(); return error; } } } function suggestionsElement(generalConfig, handlerConfig) { const onType = suggestions(generalConfig, handlerConfig); const onChange = (value, additionalArgs) => { const { cityPath, postalCodePath } = handlerConfig || {}; const data = additionalArgs === null || additionalArgs === void 0 ? void 0 : additionalArgs.data; if (data) { const dataContext = additionalArgs.dataContext; dataContext.handlePathChangeUnvalidated(postalCodePath, data.item.postal_code); dataContext.handlePathChangeUnvalidated(cityPath, data.item.city); } }; const Autocomplete = props => { const { suggestionPlaceholder } = (0, _useTranslation.default)().StreetAddress; return _react.default.createElement(_index.default, _extends({ variant: "autocomplete" }, props, { autocompleteProps: { mode: 'async', disableFilter: true, keepValue: true, openOnFocus: true, placeholder: suggestionPlaceholder, onType, ...(props === null || props === void 0 ? void 0 : props.autocompleteProps) }, onChange: onChange })); }; return Autocomplete; } function getMockData(countryCode) { switch (String(countryCode).toUpperCase()) { case 'SE': return { addresses: [] }; case 'NO': default: return { addresses: [{ address_id: '1398742', street_name: 'Gransvea', house_number: 37, postal_code: '1391', city: 'Vollen', county: 'Akershus', municipality: 'Asker', type: 'STREET' }, { address_id: '3168496', street_name: 'Gransvegen', house_number: 1, postal_code: '2090', city: 'Hurdal', county: 'Akershus', municipality: 'Hurdal', type: 'STREET' }, { address_id: '325829', street_name: 'Gransveien', house_number: 2, postal_code: '1900', city: 'Fetsund', county: 'Akershus', municipality: 'Lillestrøm', type: 'STREET' }, { address_id: '325829', street_name: 'Somewhere else', house_number: 100, postal_code: '1234', city: 'City', county: 'County', municipality: 'Municipality', type: 'STREET' }] }; } } //# sourceMappingURL=address.js.map