Guest User

Untitled

a guest
Aug 29th, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.84 KB | None | 0 0
  1. import SwiftUI
  2. import AppKit
  3. import Foundation
  4. import Combine
  5.  
  6. extension NSTextField {
  7. open override var focusRingType: NSFocusRingType {
  8. get { .none }
  9. set { }
  10. }
  11. }
  12.  
  13. struct Response: Codable {
  14. let status: String
  15. let users: [UserType]?
  16. }
  17.  
  18. struct UserType: Codable {
  19. let position: Int
  20. let user: User
  21. }
  22.  
  23. struct User: Codable {
  24. let pk: String
  25. let full_name: String
  26. let username: String
  27. let profile_pic_url: String
  28. enum CodingKeys: String, CodingKey {
  29. case pk, full_name, username, profile_pic_url
  30. }
  31. }
  32.  
  33. //struct Response: Codable {
  34. // let status: String
  35. // let users: [UserWPosition]
  36. // var userNoPositions: [User] {
  37. // users.compactMap { $0.user }
  38. // }
  39. //}
  40. //
  41. //struct UserWPosition: Codable {
  42. // let position: Int
  43. // let user: User
  44. //}
  45. //
  46. //struct User: Codable {
  47. // let pk, full_name, username, profile_pic_url: String
  48. // enum CodingKeys: String, CodingKey {
  49. // case pk
  50. // case full_name
  51. // case username
  52. // case profile_pic_url
  53. // }
  54. //}
  55.  
  56. class Fetch: ObservableObject {
  57. @Published var results = [UserType]()
  58. @Published var resultState = false
  59. @Published var errorState = false
  60. init(url: String) {
  61. self.results = []
  62. let url = URL(string: url)!
  63. URLSession.shared.dataTask(with: url) { data, response, error in
  64. do {
  65. if let data = data {
  66. let results = try JSONDecoder().decode(Response.self, from: data)
  67. DispatchQueue.main.async {
  68. self.results = results.userNoPositions
  69. self.resultState = true
  70. }
  71. print("Widget: Ok.")
  72. } else {
  73. self.results = []
  74. self.resultState = true
  75. print("Widget: No data.")
  76. }
  77. } catch {
  78. self.errorState = true
  79. self.resultState = true
  80. print("Widget: Error", error)
  81. }
  82. }.resume()
  83. }
  84. }
  85.  
  86. struct ContentViewBar: View {
  87. @State private var username: String = "leo"
  88. @ObservedObject var fetch = Fetch(url: "https://www.instagram.com/web/search/topsearch/?context=blended&query=Name&include_reel=true")
  89.  
  90. var body: some View {
  91. VStack(alignment: .leading, spacing: 0) {
  92.  
  93. TextField("Username", text: $username)
  94. .padding(.leading, 20)
  95. .padding(.trailing, 20)
  96. .background(
  97. RoundedRectangle(cornerRadius: 5)
  98. .fill(Color.white.opacity(0.3)
  99. )
  100. .padding(.leading, 20)
  101. .padding(.trailing, 20))
  102. .padding(.top)
  103. .padding(.bottom)
  104.  
  105. List(fetch.results) { user in
  106. UserItem(user: user.user)
  107. }
  108.  
  109. }.padding(0)
  110. .frame(width: 400.0, height: 400.0, alignment: .top)
  111. }
  112. }
  113.  
  114. struct UserItem: View {
  115. var user: User
  116. var body: some View {
  117. HStack(alignment: .top, spacing: 0) {
  118. UrlImageView(urlString: user.profile_pic_url)
  119. VStack(alignment: .leading, spacing: 0) {
  120. Text(user.full_name)
  121. .font(.system(size: 10, weight: .heavy, design: .default))
  122. Text(user.username).font(.system(size: 10, design: .default))
  123. }
  124. .padding(.leading, 20)
  125. .padding(.trailing, 20)
  126. }
  127. .padding(.leading, 20)
  128. .padding(.trailing, 20)
  129. }
  130. }
  131.  
  132.  
  133. struct ContentViewBar_Previews: PreviewProvider {
  134. static var previews: some View {
  135. ContentViewBar()
  136. }
  137. }
  138.  
Add Comment
Please, Sign In to add comment