public TodoChangeMessage DeleteTodo(string id) { var result = new TodoChangeMessage(); var todo = todoDictionary[id]; if (todo.Parent != null) { var oldParent = todo.Parent; oldParent.DeleteChild(todo); result.Upsert = result.Upsert.Concat(new[] { TodoConvert.ConvertSingle(oldParent) }); } else { topTodo.Remove(todo); } if (todo.HasChildren) { foreach (var children in todo.Children) { result.Merge(DeleteTodoWithoutParent(children.Id)); } } result.Delete = result.Delete.Concat(new[] { TodoConvert.ConvertSingle(todo) }); todoDictionary.Remove(id); return(result); }
public TodoChangeMessage DeleteTodo(IEnumerable <TodoData> todo) { var result = new TodoChangeMessage(); foreach (var t in todo) { result.Merge(DeleteTodo(t.Id)); } return(result); }
public TodoChangeMessage UpsertTodoRange(IEnumerable <TodoData> data) { var result = new TodoChangeMessage(); foreach (var todo in data) { result.Merge(UpsertTodo(todo)); } return(result); }
private TodoChangeMessage DeleteTodoWithoutParent(string id) { var result = new TodoChangeMessage(); var todo = todoDictionary[id]; if (todo.HasChildren) { foreach (var children in todo.Children) { result.Merge(DeleteTodoWithoutParent(children.Id)); } } result.Delete = result.Delete.Concat(new[] { TodoConvert.ConvertSingle(todo) }); todoDictionary.Remove(id); return(result); }
public void OnUpdate(TodoChangeMessage data) { manager.UpsertTodoRange(data.Upsert); manager.DeleteTodo(data.Delete); ChangeTodo?.Invoke(); }
public void ApplyChange(TodoChangeMessage data) { UpsertTodoRange(data.Upsert); DeleteTodo(data.Delete); }
public void Merge(TodoChangeMessage message) { Upsert = Upsert.Concat(message.Upsert).ToArray(); Delete = Delete.Concat(message.Delete).ToArray(); }