@navinc/base-react-components
Version:
Nav's Pattern Library
61 lines • 5.13 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AddressInput = void 0;
const jsx_runtime_1 = require("react/jsx-runtime");
const react_1 = require("react");
const styled_components_1 = __importDefault(require("styled-components"));
const copy_1 = require("./copy");
const shared_js_1 = require("./form-elements/shared.js");
const utils_1 = require("@navinc/utils");
const noop_js_1 = __importDefault(require("@navinc/utils/noop.js"));
const handlePreventSubmitOnEnter = (keyDownEvent) => {
if (keyDownEvent.keyCode === 13)
keyDownEvent.preventDefault();
};
const AddressInput = (_a) => {
var { className, label, hasSpaceForErrors, isInvalid, value, required, type, errors = [], lede = '', onAddressSelected = noop_js_1.default, touched, placeholder = 'Enter a location' } = _a, props = __rest(_a, ["className", "label", "hasSpaceForErrors", "isInvalid", "value", "required", "type", "errors", "lede", "onAddressSelected", "touched", "placeholder"]);
const inputRef = (0, react_1.useRef)(null);
(0, react_1.useEffect)(() => {
var _a, _b, _c, _d;
Promise.resolve((_d = (_c = (_b = (_a = global === null || global === void 0 ? void 0 : global.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.places) === null || _c === void 0 ? void 0 : _c.Autocomplete) !== null && _d !== void 0 ? _d : (0, utils_1.loadScript)('https://maps.googleapis.com/maps/api/js?key=AIzaSyAvfE0mS4qeMdHm2fsIfE2XowJj6XG2pW8&libraries=places').then(() => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = global === null || global === void 0 ? void 0 : global.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.places) === null || _c === void 0 ? void 0 : _c.Autocomplete) !== null && _d !== void 0 ? _d : Promise.reject(new Error('Error loading GoogleMaps script')); }))
.then((Autocomplete) => {
const autocomplete = new Autocomplete(inputRef.current, {
types: ['address'],
componentRestrictions: { country: 'us' },
});
autocomplete.addListener('place_changed', () => {
const place = autocomplete.getPlace();
// bail if there is a problem getting data from the api
if (!place || !Array.isArray(place.address_components))
return;
const { locality: city = '', administrative_area_level_1: state = '', postal_code: zip = '', street_number: streetNumber = '', route: street = '', street1 = `${streetNumber} ${street}`.trim(), } = Object.assign(...place.address_components
.filter(({ types: [type] }) => ['street_number', 'route', 'locality', 'administrative_area_level_1', 'postal_code'].includes(type))
.map(({ types: [type], long_name: longName, short_name: shortName }) => ({
[type]: ['route', 'locality'].includes(type) ? longName : shortName,
})));
onAddressSelected({ city, state, street1, zip });
});
})
.catch((err) => console.error(err));
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return ((0, jsx_runtime_1.jsxs)(shared_js_1.FieldWrapper, Object.assign({ className: className }, { children: [lede && (0, jsx_runtime_1.jsx)(copy_1.Copy, Object.assign({ bold: true }, { children: lede }), void 0), (0, jsx_runtime_1.jsxs)(shared_js_1.Field, Object.assign({ className: "js-private", isInvalid: isInvalid, isVisited: touched || value || placeholder, onKeyDown: handlePreventSubmitOnEnter, required: required, type: type, value: value }, { children: [(0, jsx_runtime_1.jsx)(shared_js_1.Input, Object.assign({ ref: inputRef, type: type, required: required, value: value, isInvalid: isInvalid, placeholder: placeholder }, props), void 0), (0, jsx_runtime_1.jsx)(shared_js_1.Label, Object.assign({ required: required, value: value }, { children: label }), void 0)] }), void 0), (0, jsx_runtime_1.jsx)(shared_js_1.Errors, Object.assign({ hasSpaceForErrors: hasSpaceForErrors }, { children: !!errors.length && errors.map((err, i) => (0, jsx_runtime_1.jsx)(shared_js_1.Err, { children: err }, `err-${i}`)) }), void 0)] }), void 0));
};
exports.AddressInput = AddressInput;
const StyledAddressInput = (0, styled_components_1.default)(exports.AddressInput) ``;
exports.default = StyledAddressInput;
//# sourceMappingURL=address-input.js.map