UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

185 lines (184 loc) 7.38 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 _Selection = _interopRequireDefault(require("../../Field/Selection")); var _useTranslation = _interopRequireDefault(require("../../hooks/useTranslation")); var _createContext = require("../createContext"); 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); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const supportedCountryCodes = exports.supportedCountryCodes = ['NO']; const unsupportedCountryMessage = exports.unsupportedCountryMessage = 'Postal code verification is not supported for {countryCode}.'; const preResponseResolver = _ref => { let { value } = _ref; 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(_Selection.default, _extends({ variant: "autocomplete" }, props, { autocompleteProps: _objectSpread({ 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