lml-main
Version:
This is now a mono repository published into many standalone packages.
103 lines • 5.16 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const React = require("react");
const react_redux_1 = require("react-redux");
const cosmo_redux_api_1 = require("@lml/cosmo-redux-api");
const frequencies_1 = require("../../../frequencies");
const selectors_1 = require("../../selectors");
const constants_1 = require("../../constants");
const actions_1 = require("../../actions");
const cosmoui_1 = require("cosmoui");
class PlaceFormComponent extends React.Component {
constructor() {
super(...arguments);
// WARNING - there appear to be some discrepencies between
// the place address model and the job address model hence
// why this has been done. please resolve with ryan and julien
this.formatAddress = (place) => place && place.address ? {
address: {
streets: place.address.street,
town: place.address.town,
country: place.address.country,
postcode: place.postcode,
},
position: {
type: 'point',
coordinates: place.coordinates,
},
} : undefined;
this.submitForm = (data) => {
const { partners, isNewPlace } = this.props;
const place = {};
Object.assign(place, {
placeId: data.placeId.value,
postcode: data.address.address.postcode,
coordinates: data.address.position.coordinates,
label: data.label.value,
createdAt: undefined,
partnerId: isNewPlace ? data.partnerId.value.value : data.partnerId.value,
address: {
street: data.address.address.streets,
town: data.address.address.town,
country: data.address.address.country,
},
});
isNewPlace
? this.props.postPlace(place.partnerId, place)
: this.props.putPlace(place.partnerId, place);
};
this.cancelForm = () => {
this.props.destroyForm(constants_1.PLACE_FORM_KEY);
this.props.closePlaceFormDrawer();
};
this.validateFrequency = (frequency) => {
if (!frequency)
return ['* required'];
if (frequency.length < 2)
return ['* Min 2 chars'];
if (!this.props.frequencies[frequency])
return ['* Not a valid frequency'];
return [];
};
this.validatePlaceId = (placeId) => {
if (!placeId)
return ['* required'];
if (!placeId.match(/^[0-9a-z]+$/))
return ['* alphanumeric only'];
return [];
};
this.formButtonStyles = () => ({
marginRight: '10px',
});
}
render() {
const { isNewPlace, partners, place } = this.props;
return (React.createElement(cosmoui_1.Form, { name: constants_1.PLACE_FORM_KEY, onSubmit: this.submitForm },
React.createElement(cosmoui_1.FormGroup, { label: "Partner *" }, isNewPlace ? (React.createElement(cosmoui_1.Select, { name: "partnerId", required: true, value: partners[0], options: partners, disabled: !isNewPlace })) : (React.createElement(cosmoui_1.TextInput, { name: "partnerId", disabled: true, value: place.partnerId }))),
React.createElement(cosmoui_1.FormGroup, { label: "Place ID *" },
React.createElement(cosmoui_1.TextInput, { name: "placeId", validate: this.validatePlaceId, disabled: !isNewPlace, value: place.placeId })),
React.createElement(cosmoui_1.FormGroup, { label: "Frequency *" },
React.createElement(cosmoui_1.TextInput, { name: "label", validate: this.validateFrequency, value: place.label })),
React.createElement(cosmoui_1.FormGroup, { label: "Address *" },
React.createElement(cosmoui_1.AddressInput, { id: "placeAddress", name: "address", showValidationIcon: true, current: this.formatAddress(place) })),
React.createElement(cosmoui_1.Button, { id: "place-form-submit-button", style: this.formButtonStyles(), type: "submit" }, isNewPlace ? 'ADD' : 'UPDATE'),
React.createElement(cosmoui_1.Button, { onClick: this.cancelForm, primary: false }, "CANCEL")));
}
}
const mapStateToProps = (state, ownProps) => ({
partners: selectors_1.getPartners(),
frequencies: frequencies_1.getFrequencies(state),
form: cosmoui_1.getForm(state, constants_1.PLACE_FORM_KEY),
isNewPlace: !ownProps.placeId,
place: ownProps.placeId ? cosmo_redux_api_1.getPlaceById(state, ownProps.placeId) : {},
});
const mapDispatchToProps = {
destroyForm: cosmoui_1.destroyForm,
resetForm: cosmoui_1.resetForm,
setFormField: cosmoui_1.setFormField,
postPlace: cosmo_redux_api_1.postPlace,
putPlace: cosmo_redux_api_1.putPlace,
closePlaceFormDrawer: actions_1.closePlaceFormDrawer,
};
exports.PlaceForm = react_redux_1.connect(mapStateToProps, mapDispatchToProps)(PlaceFormComponent);
//# sourceMappingURL=place-form.js.map