Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import SwiftUI
- import AppKit
- import Foundation
- import Combine
- extension NSTextField {
- open override var focusRingType: NSFocusRingType {
- get { .none }
- set { }
- }
- }
- struct Response: Codable {
- let status: String
- let users: [UserType]?
- }
- struct UserType: Codable {
- let position: Int
- let user: User
- }
- struct User: Codable {
- let pk: String
- let full_name: String
- let username: String
- let profile_pic_url: String
- enum CodingKeys: String, CodingKey {
- case pk, full_name, username, profile_pic_url
- }
- }
- //struct Response: Codable {
- // let status: String
- // let users: [UserWPosition]
- // var userNoPositions: [User] {
- // users.compactMap { $0.user }
- // }
- //}
- //
- //struct UserWPosition: Codable {
- // let position: Int
- // let user: User
- //}
- //
- //struct User: Codable {
- // let pk, full_name, username, profile_pic_url: String
- // enum CodingKeys: String, CodingKey {
- // case pk
- // case full_name
- // case username
- // case profile_pic_url
- // }
- //}
- class Fetch: ObservableObject {
- @Published var results = [UserType]()
- @Published var resultState = false
- @Published var errorState = false
- init(url: String) {
- self.results = []
- let url = URL(string: url)!
- URLSession.shared.dataTask(with: url) { data, response, error in
- do {
- if let data = data {
- let results = try JSONDecoder().decode(Response.self, from: data)
- DispatchQueue.main.async {
- self.results = results.userNoPositions
- self.resultState = true
- }
- print("Widget: Ok.")
- } else {
- self.results = []
- self.resultState = true
- print("Widget: No data.")
- }
- } catch {
- self.errorState = true
- self.resultState = true
- print("Widget: Error", error)
- }
- }.resume()
- }
- }
- struct ContentViewBar: View {
- @State private var username: String = "leo"
- @ObservedObject var fetch = Fetch(url: "https://www.instagram.com/web/search/topsearch/?context=blended&query=Name&include_reel=true")
- var body: some View {
- VStack(alignment: .leading, spacing: 0) {
- TextField("Username", text: $username)
- .padding(.leading, 20)
- .padding(.trailing, 20)
- .background(
- RoundedRectangle(cornerRadius: 5)
- .fill(Color.white.opacity(0.3)
- )
- .padding(.leading, 20)
- .padding(.trailing, 20))
- .padding(.top)
- .padding(.bottom)
- List(fetch.results) { user in
- UserItem(user: user.user)
- }
- }.padding(0)
- .frame(width: 400.0, height: 400.0, alignment: .top)
- }
- }
- struct UserItem: View {
- var user: User
- var body: some View {
- HStack(alignment: .top, spacing: 0) {
- UrlImageView(urlString: user.profile_pic_url)
- VStack(alignment: .leading, spacing: 0) {
- Text(user.full_name)
- .font(.system(size: 10, weight: .heavy, design: .default))
- Text(user.username).font(.system(size: 10, design: .default))
- }
- .padding(.leading, 20)
- .padding(.trailing, 20)
- }
- .padding(.leading, 20)
- .padding(.trailing, 20)
- }
- }
- struct ContentViewBar_Previews: PreviewProvider {
- static var previews: some View {
- ContentViewBar()
- }
- }
Add Comment
Please, Sign In to add comment