Created
January 25, 2013 11:18
-
-
Save kevinobee/4633611 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <reference path="../jquery-1.7.2-vsdoc.js" /> | |
/// <reference path="../jquery-ui-1.8.20.js" /> | |
/// <reference path="../knockout-2.1.0.debug.js" /> | |
/// <reference path="../knockout.mapping-latest.debug.js" /> | |
/// <reference path="../bootstrap-modal.js" /> | |
/// <reference path="../moment.js" /> | |
var mi = mi || {}; | |
$(document).ready(function () { | |
mi.Environment = function (name, url) { | |
this.name = name; | |
if (!url.endsWith('/')) { | |
url += '/'; | |
} | |
this.url = url; | |
}; | |
mi.viewModel = function () { | |
var self = this; | |
// Data | |
var data = { | |
domain: { | |
states: ['Unknown', | |
'DataEntry', | |
'RejectedRisk', | |
'Quote', | |
'SavedQuote', | |
'PaymentInProgress', | |
'Policy'], | |
environments: ko.observableArray([ | |
new mi.Environment('Localhost', "http://localhost.:12121"), | |
new mi.Environment('Local', "http://foo.local") | |
]) | |
}, | |
filters: { | |
state: ko.observable() | |
}, | |
searchForm: { | |
policyReference: ko.observable(), | |
email: ko.observable(), | |
postcode: ko.observable() | |
}, | |
sessions: { | |
loadedSessions: ko.observableArray([]), // Used to preserve sessions returned from API call | |
filteredSessions: ko.observableArray([]), | |
currentlySelected: ko.observable() | |
}, | |
loadData: { | |
fromDate: ko.observable(), | |
toDate: ko.observable(), | |
fromEnvironment: ko.observable() | |
}, | |
selectedEnvironment: ko.observable() | |
}; | |
var hasValue = function (value) { | |
return !((value === undefined || (value.length === 0))); | |
}; | |
data.searchForm.hasValues = ko.computed(function () { | |
return (hasValue(data.searchForm.email()) || | |
hasValue(data.searchForm.policyReference()) || | |
hasValue(data.searchForm.postcode())); | |
}); | |
var dateRangeFilter = function (hasFilters) { | |
var formatDateFilter = function (date, operator) { | |
var dateFilter = ''; | |
if (hasValue(date)) { | |
var formatstring; | |
if (operator === 'ge') { | |
formatstring = 'YYYY-MM-DDT00:00:00'; | |
} else { | |
formatstring = 'YYYY-MM-DDT23:59:59'; | |
} | |
dateFilter += "(Modified " + operator + " datetime'" + moment(date, 'DD/MM/YYYY').format(formatstring) + "')"; | |
} | |
return dateFilter; | |
}; | |
var fromFilter = formatDateFilter(data.loadData.fromDate(), 'ge'); | |
var toFilter = formatDateFilter(data.loadData.toDate(), 'le'); | |
var filter = ''; | |
if ((fromFilter.length > 0) || (toFilter.length > 0)) { | |
if (hasFilters === true) { | |
filter += ' and '; | |
} | |
} | |
filter += fromFilter; | |
if ((fromFilter.length > 0) && (toFilter.length > 0)) { | |
filter += ' and '; | |
} | |
filter += toFilter; | |
return filter; | |
}; | |
data.domain.sessionApiRoot = ko.computed(function () { | |
if (data.selectedEnvironment() !== undefined) { | |
return data.selectedEnvironment().url + "api/sessions/"; | |
} | |
else { | |
return ''; | |
} | |
}); | |
var sessionODataRoot = ko.computed(function () { | |
if (data.selectedEnvironment() !== undefined) { | |
return data.selectedEnvironment().url + "odata/sessions()"; | |
} | |
else { | |
return ''; | |
} | |
}); | |
data.sessions.hasLoaded = ko.computed(function () { | |
return data.sessions.loadedSessions && data.sessions.loadedSessions().length > 0; | |
}); | |
data.sessions.filteredCount = ko.computed(function () { | |
if (data.sessions.filteredSessions) { | |
return data.sessions.filteredSessions().length; | |
} else { | |
return 0; | |
} | |
}); | |
$('input[type=date]').datepicker({ | |
dateFormat: "dd/mm/yy" | |
}); | |
// Behaviours | |
var getSessions = function () { | |
resetSessions(); | |
$.when( | |
$.getJSON( | |
'api/proxy', | |
{ target: sessionODataRoot() + query() }) | |
.error(function () { | |
console.log('failed communicating with ' + data.selectedEnvironment().url); | |
})) | |
.done(function (values) { | |
var jsonData = $.parseJSON(values); | |
if (null !== jsonData) { | |
console.log(jsonData.d); | |
data.sessions.loadedSessions($.deepclone(jsonData.d)); | |
data.sessions.filteredSessions(jsonData.d); | |
} | |
}); | |
}; | |
var resetSessions = function () { | |
data.sessions.loadedSessions([]); | |
data.sessions.filteredSessions([]); | |
data.filters.state(undefined); | |
}; | |
var resetDateRange = function () { | |
data.loadData.fromDate(undefined); | |
data.loadData.toDate(undefined); | |
}; | |
var filterSessions = function () { | |
data.sessions.filteredSessions($.deepclone(data.sessions.loadedSessions())); | |
if (data.filters.state() !== undefined) { | |
data.sessions.filteredSessions.remove(function (item) { return item.State != data.filters.state(); }); | |
} | |
}; | |
var searchSessions = function () { | |
getSessions(); | |
resetSearch(); | |
disablePopup(); | |
}; | |
var resetSearch = function () { | |
data.searchForm.email(undefined); | |
data.searchForm.postcode(undefined); | |
data.searchForm.policyReference(undefined); | |
}; | |
var showDetail = function (item) { | |
data.sessions.currentlySelected(item); | |
$('#sessionDetails').modal(); | |
}; | |
var loadFullSession = function (item) { | |
data.sessions.currentlySelected(item); | |
var url = mi.viewModel.data.domain.sessionApiRoot() + item.Id; | |
window.open(url); | |
}; | |
$("#loading").bind("ajaxSend", function () { | |
$(this).show(); | |
}).bind("ajaxComplete", function () { | |
$(this).hide(); | |
}).hide(); | |
// Expose publc members | |
return { | |
data: data, | |
getSessions: getSessions, | |
resetSessions: resetSessions, | |
filterSessions: filterSessions, | |
searchSessions: searchSessions, | |
resetSearch: resetSearch, | |
showDetail: showDetail, | |
loadFullSession: loadFullSession, | |
resetDateRange: resetDateRange | |
}; | |
} (); | |
ko.applyBindings(mi.viewModel); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment