-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLinkViewModel.swift
executable file
·71 lines (61 loc) · 2.27 KB
/
LinkViewModel.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//
// LinkViewModel.swift
// SaveLink
//
// Created by Home on 14/12/21.
//
import Foundation
final class LinkViewModel: ObservableObject {
@Published var links: [LinkModel] = []
@Published var messageError: String?
private let linkRepository: LinkRepository
init(linkRepository: LinkRepository = LinkRepository()) {
self.linkRepository = linkRepository
}
func getAllLinks() {
linkRepository.getAllLinks { [weak self] result in
switch result {
case .success(let linkModels):
self?.links = linkModels
case .failure(let error):
self?.messageError = error.localizedDescription
}
}
}
func createNewLink(fromURL url: String) {
let numbers = [0]
let _ = numbers[1]
Tracker.trackCreateLinkEvent(url: url)
linkRepository.createNewLink(withURL: url) { [weak self] result in
switch result {
case .success(let link):
print("✅ New link \(link.title) added")
Tracker.trackSaveLinkEvent()
case .failure(let error):
DispatchQueue.main.async {
self?.messageError = error.localizedDescription
Tracker.trackErrorSaveLinkEvent(error: error.localizedDescription)
}
}
}
}
func updateIsFavorited(link: LinkModel) {
let updatedLink = LinkModel(id: link.id,
url: link.url,
title: link.title,
isFavorited: link.isFavorited ? false : true,
isCompleted: link.isCompleted)
linkRepository.update(link: updatedLink)
}
func updateIsCompleted(link: LinkModel) {
let updatedLink = LinkModel(id: link.id,
url: link.url,
title: link.title,
isFavorited: link.isFavorited,
isCompleted: link.isCompleted ? false : true)
linkRepository.update(link: updatedLink)
}
func delete(link: LinkModel) {
linkRepository.delete(link: link)
}
}