140 lines
4.0 KiB
JavaScript
140 lines
4.0 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
angular.module('todoapp')
|
|
.service('dataService', ['$q', '$http', 'sharepointApi', 'todoListName', 'hideFinishedTasks', dataService]);
|
|
|
|
function dataService($q, $http, sharepointApi, todoListName, hideFinishedTasks) {
|
|
return {
|
|
getTodos: getTodos,
|
|
addTodo: addTodo,
|
|
deleteTodo: deleteTodo,
|
|
setTodoStatus: setTodoStatus
|
|
};
|
|
|
|
function getTodos() {
|
|
var deferred = $q.defer();
|
|
|
|
var url = sharepointApi + 'web/lists/getbytitle(\'' + todoListName + '\')/items?$select=Id,Title,Status&$orderby=ID desc';
|
|
|
|
if (hideFinishedTasks === true) {
|
|
url += "&$filter=Status ne 'Completed'";
|
|
}
|
|
|
|
$http({
|
|
url: url,
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata'
|
|
}
|
|
}).then(function(result) {
|
|
var todos = [];
|
|
for (var i = 0; i < result.data.value.length; i++) {
|
|
var todo = result.data.value[i];
|
|
todos.push({
|
|
id: todo.Id,
|
|
title: todo.Title,
|
|
done: todo.Status === 'Completed'
|
|
})
|
|
}
|
|
deferred.resolve(todos);
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function addTodo(todo) {
|
|
var deferred = $q.defer();
|
|
|
|
$http({
|
|
url: sharepointApi + 'contextinfo',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata'
|
|
}
|
|
}).then(function(result) {
|
|
var requestDigest = result.data.FormDigestValue;
|
|
var body = JSON.stringify({
|
|
'__metadata': { 'type': 'SP.Data.' + todoListName + 'ListItem' },
|
|
'Title': todo
|
|
});
|
|
$http({
|
|
url: sharepointApi + 'web/lists/getbytitle(\'' + todoListName + '\')/items',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata',
|
|
'Content-type': 'application/json;odata=verbose',
|
|
'X-RequestDigest': requestDigest
|
|
},
|
|
data: body
|
|
}).then(function(result) {
|
|
deferred.resolve();
|
|
});
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function deleteTodo(todo) {
|
|
var deferred = $q.defer();
|
|
|
|
$http({
|
|
url: sharepointApi + 'contextinfo',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata'
|
|
}
|
|
}).then(function(result) {
|
|
var requestDigest = result.data.FormDigestValue;
|
|
$http({
|
|
url: sharepointApi + 'web/lists/getbytitle(\'' + todoListName + '\')/items(' + todo.id + ')',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata',
|
|
'X-RequestDigest': requestDigest,
|
|
'IF-MATCH': '*',
|
|
'X-HTTP-Method': 'DELETE'
|
|
}
|
|
}).then(function(result) {
|
|
deferred.resolve();
|
|
});
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function setTodoStatus(todo, done) {
|
|
var deferred = $q.defer();
|
|
|
|
$http({
|
|
url: sharepointApi + 'contextinfo',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata'
|
|
}
|
|
}).then(function(result) {
|
|
var requestDigest = result.data.FormDigestValue;
|
|
var body = JSON.stringify({
|
|
'__metadata': { 'type': 'SP.Data.' + todoListName + 'ListItem' },
|
|
'Status': done ? 'Completed' : 'Not started'
|
|
});
|
|
$http({
|
|
url: sharepointApi + 'web/lists/getbytitle(\'' + todoListName + '\')/items(' + todo.id + ')',
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json;odata=nometadata',
|
|
'Content-type': 'application/json;odata=verbose',
|
|
'X-RequestDigest': requestDigest,
|
|
'IF-MATCH': '*',
|
|
'X-HTTP-Method': 'MERGE'
|
|
},
|
|
data: body
|
|
}).then(function(result) {
|
|
deferred.resolve();
|
|
});
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
}
|
|
})();
|