@navinc/base-react-components
Version:
Nav's Pattern Library
60 lines • 5.1 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 utils_1 = require("@navinc/utils");
const react_1 = require("react");
const styled_components_1 = __importDefault(require("styled-components"));
const copy_js_1 = require("./copy.js");
const shared_js_1 = require("./form-elements/shared.js");
const handlePreventSubmitOnEnter = (keyDownEvent) => {
if (keyDownEvent.keyCode === 13)
keyDownEvent.preventDefault();
};
const AddressInput = (_a) => {
var { className, label, hasSpaceForErrors, isInvalid, value, required, type, errors = [], lede = '', onAddressSelected = utils_1.noop, 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)();
(0, react_1.useEffect)(() => {
var _a, _b, _c, _d;
Promise.resolve((_d = (_c = (_b = (_a = utils_1.global === null || utils_1.global === void 0 ? void 0 : utils_1.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 = utils_1.global === null || utils_1.global === void 0 ? void 0 : utils_1.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_js_1.Copy, Object.assign({ bold: true }, { children: lede })), (0, jsx_runtime_1.jsxs)(shared_js_1.Field, Object.assign({ "data-heap-redact-text": "true", className: "js-private", isVisited: touched || !!value || !!placeholder, onKeyDown: handlePreventSubmitOnEnter }, { 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)), (0, jsx_runtime_1.jsx)(shared_js_1.Label, Object.assign({ required: required }, { children: label }))] })), (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}`)) }))] })));
};
exports.AddressInput = AddressInput;
const StyledAddressInput = (0, styled_components_1.default)(exports.AddressInput).withConfig({ displayName: "brc-sc-StyledAddressInput", componentId: "brc-sc-trxfzq" }) ``;
exports.default = StyledAddressInput;
//# sourceMappingURL=address-input.js.map