Skip to content

Instantly share code, notes, and snippets.

@kevinobee
Created January 25, 2013 11:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevinobee/4633611 to your computer and use it in GitHub Desktop.
Save kevinobee/4633611 to your computer and use it in GitHub Desktop.
/// <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