Fix minor bugs #9
@@ -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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
9
app/helpers/email.js
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
const isValidEmail = (email) => {
|
||||||
|
const simpleEmailRegex = /^.+@.+\..+$/;
|
||||||
|
return (email && email.length < 250 && simpleEmailRegex.test(email));
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
isValidEmail
|
||||||
|
};
|
||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user