Merge branch 'fix-minor-bugs' into 'master'

Fix minor bugs

See merge request saburly/marketalarm/web!9
This commit was merged in pull request #9.
This commit is contained in:
Nedim Uka
2019-05-24 13:54:40 +00:00
14 changed files with 121 additions and 90 deletions

View File

@@ -1,5 +1,5 @@
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { gardenSizes } = require('../helpers/enums'); const { gardenSizes, getRealEstateTypeEnum } = require('../helpers/enums');
const getGardenSize = (req,res) => { const getGardenSize = (req,res) => {
res.render('gardenSize', { gardenSizes }); res.render('gardenSize', { gardenSizes });
@@ -11,8 +11,11 @@ const postGardenSize = async (req, res) => {
const nextStepPage = req.query.nextStep || 'cijena'; const nextStepPage = req.query.nextStep || 'cijena';
const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`;
request.gardenSize = req.body.gardensize; const realEstateType = getRealEstateTypeEnum(request.realEstateType);
await request.save(); if (realEstateType && realEstateType.hasGardenSize) {
request.gardenSize = req.body.gardensize;
await request.save();
}
res.redirect(nextStepUrl); res.redirect(nextStepUrl);
}; };

View File

@@ -1,6 +1,6 @@
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { getRegionName, getMunicipalityName } = require('../helpers/codes'); const { getRegionName, getMunicipalityName } = require('../helpers/codes');
const { realEstateTypes, sizes, gardenSizes, prices, getEnumTypeTitle } = require('../helpers/enums'); const { realEstateTypes, sizes, gardenSizes, prices, getEnumTypeTitle, getRealEstateTypeEnum } = require('../helpers/enums');
const getQueryReview = async (req,res) => { const getQueryReview = async (req,res) => {
const request = await currentRERequest(req); const request = await currentRERequest(req);
@@ -12,6 +12,9 @@ const getQueryReview = async (req,res) => {
const { realEstateType, region, municipality, size, gardenSize, price } = request.dataValues; const { realEstateType, region, municipality, size, gardenSize, price } = request.dataValues;
const realEstateTypeObject = getRealEstateTypeEnum(realEstateType);
const enableGardenSizeEdit = realEstateTypeObject ? realEstateTypeObject.hasGardenSize : false;
const realEstateTypeTitle = realEstateType ? getEnumTypeTitle(realEstateTypes, realEstateType) : null; const realEstateTypeTitle = realEstateType ? getEnumTypeTitle(realEstateTypes, realEstateType) : null;
const regionName = region ? getRegionName(region) : null; const regionName = region ? getRegionName(region) : null;
const municipalityName = (region && municipality) ? getMunicipalityName(region, municipality) : null; const municipalityName = (region && municipality) ? getMunicipalityName(region, municipality) : null;
@@ -45,7 +48,7 @@ const getQueryReview = async (req,res) => {
{ {
id: 'gardenSize', id: 'gardenSize',
title: gardenSizeTitle, title: gardenSizeTitle,
url: `/okucnica/${uniqueId}?nextStep=pregled`, url: enableGardenSizeEdit ? `/okucnica/${uniqueId}?nextStep=pregled` : '',
}, },
{ {
id: 'price', id: 'price',

View File

@@ -1,20 +1,29 @@
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { isValidEmail } = require('../helpers/email');
const getQuerySubmit = async (req,res) => { const getQuerySubmit = async (req,res) => {
const nextStep = req.query.nextStep; const nextStep = req.query.nextStep;
const error = req.query.error;
res.render('querySubmit', { res.render('querySubmit', {
nextStep nextStep,
error
}); });
}; };
const postQuerySubmit = async (req, res) => { const postQuerySubmit = async (req, res) => {
const request = await currentRERequest(req); const request = await currentRERequest(req);
const nextStep = req.query.nextStep || '/ponovo'; const nextStep = req.query.nextStep || '/ponovo';
//TODO: validate email
request.email = req.body.email; const emailInput = req.body.email;
await request.save();
res.redirect(nextStep); if (isValidEmail(emailInput)){
request.email = req.body.email;
await request.save();
res.redirect(nextStep);
} else {
res.redirect('?error=1');
}
}; };
module.exports = { module.exports = {

View File

@@ -1,7 +1,7 @@
const db = require('../models/index'); const db = require('../models/index');
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { realEstateTypes } = require('../helpers/enums'); const { realEstateTypes, getRealEstateTypeEnum } = require('../helpers/enums');
const getRealEstateTypes = (req,res) => { const getRealEstateTypes = (req,res) => {
@@ -16,6 +16,9 @@ const postRealEstateTypes = async (req, res) => {
if (request && request.uniqueId) { if (request && request.uniqueId) {
const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`;
request.realEstateType = req.body.realestatetype; request.realEstateType = req.body.realestatetype;
if (!getRealEstateTypeEnum(request.realEstateType).hasGardenSize){
request.gardenSize = null;
}
await request.save(); await request.save();
res.redirect(nextStepUrl) res.redirect(nextStepUrl)

View File

@@ -1,5 +1,5 @@
const { currentRERequest } = require('../helpers/url'); const { currentRERequest } = require('../helpers/url');
const { sizes } = require('../helpers/enums'); const { sizes, getRealEstateTypeEnum } = require('../helpers/enums');
const getSize = (req,res) => { const getSize = (req,res) => {
res.render('size', { sizes }); res.render('size', { sizes });
@@ -8,7 +8,10 @@ const getSize = (req,res) => {
const postSize = async (req, res) => { const postSize = async (req, res) => {
const request = await currentRERequest(req); const request = await currentRERequest(req);
const nextStepPage = req.query.nextStep || 'okucnica'; const realEstateType = getRealEstateTypeEnum(request.realEstateType);
const nextStep = realEstateType && realEstateType.hasGardenSize ? 'okucnica' : 'cijena';
const nextStepPage = req.query.nextStep || nextStep;
const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`; const nextStepUrl = `/${nextStepPage}/${request.uniqueId}`;
request.size = req.body.size; request.size = req.body.size;

9
app/helpers/email.js Normal file
View File

@@ -0,0 +1,9 @@
const isValidEmail = (email) => {
const simpleEmailRegex = /^.+@.+\..+$/;
return (email && email.length < 250 && simpleEmailRegex.test(email));
};
module.exports = {
isValidEmail
};

View File

@@ -1,7 +1,7 @@
const realEstateTypes = [ const realEstateTypes = [
{ title: "Kuća", id: "kuca" }, { title: "Kuća", id: "kuca", hasGardenSize: true },
{ title: "Stan", id: "stan" }, { title: "Stan", id: "stan", hasGardenSize: false },
{ title: "Vikendica", id: "vikendica" } { title: "Vikendica", id: "vikendica", hasGardenSize: true }
]; ];
const sizes = [ const sizes = [
@@ -31,8 +31,16 @@ const prices = [
{ title: "preko 250 000 KM", id: "moreThan250kKM" } { title: "preko 250 000 KM", id: "moreThan250kKM" }
]; ];
const getEnumObject = (enumType, enumId) => {
return enumType.find(enumValue => enumValue.id === enumId);
};
const getRealEstateTypeEnum = (enumId) => {
return getEnumObject(realEstateTypes, enumId) || null;
}
const getEnumTypeTitle = (enumType, enumId) => { const getEnumTypeTitle = (enumType, enumId) => {
const enumObject = enumType.find(enumValue => enumValue.id === enumId); const enumObject = getEnumObject(enumType, enumId);
if (!enumObject){ if (!enumObject){
return null; return null;
} }
@@ -44,5 +52,6 @@ module.exports = {
sizes, sizes,
gardenSizes, gardenSizes,
prices, prices,
getRealEstateTypeEnum,
getEnumTypeTitle, getEnumTypeTitle,
}; };

View File

@@ -8,8 +8,8 @@
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const gardenSize of gardenSizes) { %> <% for(const gardenSize of gardenSizes) { %>
<li class="collection-item" > <li class="collection-item" >
<div id="<%= gardenSize.id %>" ><%= gardenSize.title %> <div id="<%= gardenSize.id %>" onclick="saveAndSubmit(this.id)"><%= gardenSize.title %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,12 +21,9 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#gardensize").val(id);
const clickedId = $(e.target).attr("id"); $("#form-gardensize").submit();
$("#gardensize").val(clickedId); }
$("#form-gardensize").submit();
});
});
</script> </script>

View File

@@ -7,9 +7,9 @@
<div class="row center-align"> <div class="row center-align">
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const municipality of municipalities) { %> <% for(const municipality of municipalities) { %>
<li class="collection-item" > <li class="collection-item">
<div id="<%= municipality.id %>" ><%= municipality.name %> <div id="<%= municipality.id %>" onclick="saveAndSubmit(this.id)"><%= municipality.name %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,11 +21,8 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#municipality").val(id);
const clickedId = $(e.target).attr("id");
$("#municipality").val(clickedId);
$("#form-municipality").submit(); $("#form-municipality").submit();
}); }
});
</script> </script>

View File

@@ -8,8 +8,8 @@
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const price of prices) { %> <% for(const price of prices) { %>
<li class="collection-item" > <li class="collection-item" >
<div id="<%= price.id %>" ><%= price.title %> <div id="<%= price.id %>" onclick="saveAndSubmit(this.id)"><%= price.title %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,12 +21,9 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#price").val(id);
const clickedId = $(e.target).attr("id"); $("#form-price").submit();
$("#price").val(clickedId); }
$("#form-price").submit();
});
});
</script> </script>

View File

@@ -4,29 +4,39 @@
</div> </div>
<form method="POST" id="form-submitquery"> <form method="POST" id="form-submitquery">
<div class="row center-align"> <div class="row center-align">
<div class="col s6 push-s3"> <div class="col s6 push-s3">
<input id="email" name="email" type="email" placeholder="vas.email@mail.com"/> <input id="email" name="email" type="email" placeholder="vas.email@mail.com" required size="250" />
</div>
</div> </div>
</div> <% if (error) {%>
<div class="row"> <div class="row">
<div class="col s6 push-s3"> <div class="col s6 push-s3">
<a id="submit" href="#" class="welcome-center-button waves-effect waves-light btn"> <h6 style="color: red">Greška ! Unesite ispravan email</h6>
Javi mi </div>
</a> </div>
<%}%>
<div class="row">
<div class="col s6 push-s3">
<a id="submit" href="#" class="welcome-center-button waves-effect waves-light btn">
Javi mi
</a>
</div>
</div> </div>
</div> <div class="row">
<div class="row"> <div class="col s6 push-s3">
<div class="col s6 push-s3"> <p>* U svakom trenutku možete prekinuti slanje objava kroz link u e-mailu</p>
<p>* U svakom trenutku možete prekinuti slanje objava kroz link u e-mailu</p> </div>
</div> </div>
</div>
</form> </form>
<script> <script>
$(document).ready( () => { $(document).ready( () => {
$("#submit").click( () => { $("#submit").click( () => {
$("#form-submitquery").submit(); const emailField = document.getElementById('email');
if (emailField.validity.valid){
$("#form-submitquery").submit();
}
}); });
}); });
</script> </script>

View File

@@ -6,10 +6,10 @@
<form method="POST" id="form-real-estate-type"> <form method="POST" id="form-real-estate-type">
<div class="row center-align"> <div class="row center-align">
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const realEstatetype of realEstateTypes) { %> <% for(const realEstateType of realEstateTypes) { %>
<li class="collection-item" > <li class="collection-item">
<div id="<%= realEstatetype.id %>" ><%= realEstatetype.title %> <div id="<%= realEstateType.id %>" onclick="saveAndSubmit(this.id)"><%= realEstateType.title %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,13 +21,10 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#realestatetype").val(id);
const clickedId = $(e.target).attr("id"); $("#form-real-estate-type").submit();
$("#realestatetype").val(clickedId); }
$("#form-real-estate-type").submit();
});
});
</script> </script>

View File

@@ -7,9 +7,9 @@
<div class="row center-align"> <div class="row center-align">
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const region of regions) { %> <% for(const region of regions) { %>
<li class="collection-item" > <li class="collection-item">
<div id="<%= region.id %>" ><%= region.name %> <div id="<%= region.id %>" onclick="saveAndSubmit(this.id)"><%= region.name %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,12 +21,9 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#region").val(id);
const clickedId = $(e.target).attr("id"); $("#form-region").submit();
$("#region").val(clickedId); }
$("#form-region").submit();
});
});
</script> </script>

View File

@@ -7,9 +7,9 @@
<div class="row center-align"> <div class="row center-align">
<ul class="collection with-header"> <ul class="collection with-header">
<% for(const size of sizes) { %> <% for(const size of sizes) { %>
<li class="collection-item" > <li class="collection-item">
<div id="<%= size.id %>" ><%= size.title %> <div id="<%= size.id %>" onclick="saveAndSubmit(this.id)"><%= size.title %>
<a href="#!" class="secondary-content"> <a href="#" class="secondary-content">
<i class="material-icons">send</i> <i class="material-icons">send</i>
</a> </a>
</div> </div>
@@ -21,12 +21,9 @@
</form> </form>
<script> <script>
$(document).ready( () => { function saveAndSubmit(id) {
$(".collection-item").click( (e) => { $("#size").val(id);
const clickedId = $(e.target).attr("id"); $("#form-size").submit();
$("#size").val(clickedId); }
$("#form-size").submit();
});
});
</script> </script>