// // CheckListSheet.swift // APITestApp // // Created by Mohammad Tahreem Qadri on 19/04/21. // import SwiftUI struct CheckListCard: View { @Binding var checkListData : ChecklistModel @State var statusList: [String] = [] @State var currentStatus : String = "" @State var currentRemark: String = "" @Binding var enableButtonBool: Bool var body: some View { VStack{ Text("Description").padding() .onAppear(){ addData() } if checkListData.description != nil{ Text(checkListData.description!) .padding() } Text("Status").padding() if checkListData.status != nil { Picker("Status", selection: $currentStatus ) { ForEach(GeneralMethods().uniqueElementsFrom(array: statusList), id: \.self){ status in Text(status) } }.pickerStyle(SegmentedPickerStyle()) .padding() .disabled(!enableButtonBool) } Text("Remarks") if checkListData.remarks != nil{ TextField("Remarks", text: $currentRemark) .disabled(!enableButtonBool) .padding() .background(Color(.white)) .cornerRadius(8) .accentColor(.gray) }else{ TextField("Remarks", text: $currentRemark) .disabled(!enableButtonBool) .padding() .background(Color(.white)) .cornerRadius(8) } } .padding() .background(Color("light_gray")) .foregroundColor(.black) .cornerRadius(8) .shadow(radius: 10) .padding() } func addData() { statusList.append("Yes") statusList.append("No") statusList.append("NA") if checkListData.status != nil { statusList.append(checkListData.status!) currentStatus = checkListData.status! } if checkListData.remarks != nil { currentRemark = checkListData.remarks! } } } struct CheckListSheet: View { @State var taskId: Int @State var pmTaskResponse : PmTaskResponse @State var checklistResponse: [ChecklistModel] = [ChecklistModel()] @State var enableButtonBool: Bool = false @State var currentRemarks = "" @State var currentStatus = "" @State var statusList : [String] = [] var body: some View { Text("Checklist Items") .padding() .font(.title) ScrollView{ ForEach(checklistResponse, id:\.self){ checklist in CheckListCard(checkListData: Binding(get: { return checklist }, set: { (newValue) in print("this is the new value \(newValue)") checklistResponse.append(newValue) }) , enableButtonBool: $enableButtonBool) } if enableButtonBool{ Button("Update"){ updateCheckList() }.buttonStyle(MainButton()) } } .onAppear(){ getChecklists() } } func updateCheckList() { print("this is the checklistresponse \(checklistResponse)") } func addItems(checkList: ChecklistModel) { statusList.append("Yes") statusList.append("No") statusList.append("NA") if checkList.status != nil { statusList.append(checkList.status!) currentStatus = checkList.status! } if checkList.remarks != nil { currentRemarks = checkList.remarks! } } func createCard(checkList: ChecklistModel) -> some View { return VStack{ if checkList.description != nil{ Text(checkList.description!) .padding() } Picker("Status", selection: $currentStatus) { ForEach(statusList, id: \.self) { status in Text(status) } }.pickerStyle(SegmentedPickerStyle()) TextField("Remarks", text: $currentRemarks) }.padding() } func getChecklists() { guard let url = URL(string: "\(CommonStrings().apiURL)task/\(taskId)/checklist") else { return } var urlRequest = URLRequest(url: url) if (UserDefaults.standard.string(forKey: "role") == CommonStrings().usernameTech && pmTaskResponse.status! == "Open") { enableButtonBool = true } urlRequest.httpMethod = "GET" urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") urlRequest.setValue(UserDefaults.standard.string(forKey: "token"), forHTTPHeaderField: "Authorization") urlRequest.setValue(UserDefaults.standard.string(forKey: "role"), forHTTPHeaderField: "role") urlRequest.setValue( UserDefaults.standard.string(forKey: "workspace"), forHTTPHeaderField: "workspace") print(urlRequest) URLSession.shared.dataTask(with: urlRequest){ data, _, _ in if let checklistResponse = try? JSONDecoder().decode([ChecklistModel].self, from: data!){ DispatchQueue.main.async { self.checklistResponse = checklistResponse print(checklistResponse) } }else{ print("something wrong") } }.resume() } } /*struct CheckListSheet_Previews: PreviewProvider { static var previews: some View { CheckListSheet(taskId: 1, pmTaskResponse: PmTaskResponse()) } }*/