Untitled
unknown
swift
2 years ago
13 kB
9
Indexable
//
// ChatListVC.swift
// JILLII
//
// Created by Prismetric on 05/10/21.
//
import UIKit
class ChatListVC: UIViewController {
@IBOutlet weak var tblChatList: UITableView!
@IBOutlet weak var viewSearch:UIView!
@IBOutlet weak var firstMessageUpperVw : UIView!
@IBOutlet weak var lblCounts: UILabel!
var arrChatConversation : [ChatConversation]?
var filteredarrChatConversation : [ChatConversation]?
var objUserProfile:UserData?
@IBOutlet weak var lblNavHeader: UILabel!
@IBOutlet weak var btnIimgHeaderProfile: UIButton!
@IBOutlet weak var imgUserProfile: UIImageView!
@IBOutlet weak var txtFieldSearch: UITextField!
var operationAPI = OperationQueue()
var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
self.tblChatList.register(UINib(nibName: "chatlistCell", bundle: nil), forCellReuseIdentifier: "chatlistCell")
self.viewSearch.setCornerRadius_Extension(18.0)
self.firstMessageUpperVw.btnGradiantBorderToview(5.0)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
self.imgUserProfile.setCornerRaduisToRound()
self.lblNavHeader.text = objUserData.first_name + " \(objUserData.last_name)"
if objUserData.image != ""{
self.imgUserProfile.setImage(strUrl: objUserData.image, placeholder: UIImage(named: "user_images_login")!)
}
}
self.refreshControl = UIRefreshControl()
self.refreshControl.addTarget(self, action: #selector(self.refresh(_:)), for: .valueChanged)
self.refreshControl.transform = CGAffineTransform(scaleX: 0.75, y: 0.75)
self.refreshControl.tintColor = .gray
self.tblChatList.refreshControl = self.refreshControl
NotificationCenter.default.addObserver(self, selector: #selector(receivedMessage(notification:)), name: .ChatReceiveMessage, object: nil)
}
@IBAction func onTapEventMessage(_ sender: UIButton) {
let vc = StoryBoard.Activity.instantiateViewController(withIdentifier: "ChatEventMessages") as! ChatEventMessages
self.navigationController?.pushViewController(vc, animated: true)
}
//MARK: Received Message
@objc func receivedMessage(notification: Notification) {
self.JSONGetAllGroupUserList()
}
@objc func refresh(_ sender: AnyObject) {
self.JSONGetAllGroupUserList()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.JSONGetAllGroupUserList()
}
@IBAction func Act_Back(_ sender: Any) {
navigationController?.popViewController(animated: true)
}
@IBAction func Act_createGroup(_ sender: Any) {
let vc = StoryBoard.Activity.instantiateViewController(withIdentifier: "CreateChatGroupVC") as! CreateChatGroupVC
self.navigationController?.pushViewController(vc, animated: true)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
//MARK: JSONGetAllGroupUserList
func JSONGetAllGroupUserList() {
let param = [String:String]()
self.refreshControl.beginRefreshing()
WebService.shared.RequesURL(ServerURL.get_chat_list , Perameters: param, showProgress: false, completion: { (response, status) in
self.refreshControl.endRefreshing()
if let dicPostData = response.object(forKey: "data") as? [String:Any] {
if let arrChatsList = dicPostData["chats_list"] as? [[String:Any]] {
self.arrChatConversation = arrChatsList.map({ChatConversation.init($0)})
DispatchQueue.main.async {
self.filteredarrChatConversation = self.arrChatConversation
self.tblChatList.reloadData()
}
}
if let unread_msg_count = dicPostData["unread_msg_count"] as? Int {
self.lblCounts.text = ToString(unread_msg_count)
DispatchQueue.main.async {
self.tblChatList.reloadData()
}
}
}
else {
ShowAlert(title: enumAlert.Alert.rawValue, message: ToString(response["message"]), buttonTitle: "Ok", handlerCB: nil)
}
// self.strOffset = ToString(response.object(forKey: "offset"))
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.tblChatList.reloadData()
}
}) { (err) in
self.refreshControl.endRefreshing()
debugPrint(err.localizedDescription)
ShowAlert(title: enumAlert.Alert.rawValue, message: ToString(err.localizedDescription), buttonTitle: "Ok", handlerCB: nil)
}
}
@IBAction func clickOnProfileBtn(_ sender : UIButton){
let vc = StoryBoard.ProfileAll.instantiateViewController(withIdentifier: "MyProfileVC") as! MyProfileVC
self.navigationController?.pushViewController(vc, animated: true)
}
}
extension ChatListVC:UITableViewDelegate,UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.filteredarrChatConversation?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "chatlistCell", for: indexPath) as! chatlistCell
let dicConv = self.filteredarrChatConversation?[indexPath.row]
if dicConv?.is_group == "1"
{
if let imgPro = dicConv?.group_image {
cell.viewProfilePic.setImage(strUrl: imgPro, placeholder: UIImage(named: "Group_PlaceHolder")!)
}
else{
cell.viewProfilePic.image = UIImage(named: "Group_PlaceHolder")!
}
cell.lblName.text = dicConv?.group_name
switch dicConv?.last_message?.is_send {
case "1":
cell.lblTicDoubleTic.isHidden = false
default:
cell.lblTicDoubleTic.isHidden = true
}
switch dicConv?.last_message?.status {
case "2":
cell.lblTicDoubleTic.image = UIImage().imgMessageRead
default:
cell.lblTicDoubleTic.image = UIImage().imgMessageDelivered
}
if dicConv?.last_message?.is_send == "0" && dicConv?.last_message?.status != "2"{
cell.imgChatDit.isHidden = false
cell.lblLastMessage.textColor = UIColor.black
}else{
cell.imgChatDit.isHidden = true
cell.lblLastMessage.textColor = #colorLiteral(red: 0.5019999743, green: 0.5099999905, blue: 0.5220000148, alpha: 1)
}
}
else
{
if let imgPro = dicConv?.user_image {
cell.viewProfilePic.setImage(strUrl: imgPro, placeholder: UIImage(named: "User_PlaceHolder")!)
}
else{
cell.viewProfilePic.image = UIImage(named: "User_PlaceHolder")!
}
let nameF = dicConv?.first_name ?? ""
let nameL = dicConv?.last_name ?? ""
cell.lblName.text = nameF + " \(nameL)"
switch dicConv?.last_message?.status {
case "2":
cell.lblTicDoubleTic.image = UIImage().imgMessageRead
default:
cell.lblTicDoubleTic.image = UIImage().imgMessageDelivered
}
switch dicConv?.last_message?.is_send {
case "1":
cell.lblTicDoubleTic.isHidden = false
default:
cell.lblTicDoubleTic.isHidden = true
}
if dicConv?.last_message?.is_send == "0" && dicConv?.last_message?.status != "2"{
cell.imgChatDit.isHidden = false
cell.lblLastMessage.textColor = UIColor.black
}else{
cell.imgChatDit.isHidden = true
cell.lblLastMessage.textColor = #colorLiteral(red: 0.5019999743, green: 0.5099999905, blue: 0.5220000148, alpha: 1)
}
}
debugPrint("F \(dicConv?.first_name ?? "")")
debugPrint("L \(dicConv?.last_name ?? "")")
if dicConv?.last_message?.chat_type == "0"{
cell.lblLastMessage.text = dicConv?.last_message?.chat_message
cell.imgMediaType.isHidden = true
}else if dicConv?.last_message?.chat_type == "1"{
cell.lblLastMessage.text = "photo"
cell.imgMediaType.isHidden = false
cell.imgMediaType.image = UIImage(systemName: "photo")
cell.imgMediaType.tintColor = #colorLiteral(red: 0.4269999862, green: 0.4309999943, blue: 0.4390000105, alpha: 1)
}else if dicConv?.last_message?.chat_type == "2"{
cell.lblLastMessage.text = "video"
cell.imgMediaType.isHidden = false
cell.imgMediaType.image = UIImage(named: "video_camera_android")
cell.imgMediaType.tintColor = #colorLiteral(red: 0.4269999862, green: 0.4309999943, blue: 0.4390000105, alpha: 1)
}else{
cell.lblLastMessage.text = dicConv?.last_message?.chat_message
}
let dateChat = dicConv?.created_at ?? ""
if dateChat != "" {
cell.lblTimeAgo.text = timeAgo(strDate: dateChat, secondString: "Now", "")//dateConvert_GlobalUTCToLocal(date: dateChat, FromFormate: AppDateFormatNotification, ToGetFormate: "dd MMM YYYY")
}
else{
cell.lblTimeAgo.text = ""
}
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension;
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if let dicData = self.filteredarrChatConversation?[indexPath.row] {
let vc = StoryBoard.Activity.instantiateViewController(withIdentifier: "ChatDetailVC") as! ChatDetailVC
vc.siGroup = dicData.is_group == "1" ? true:false
vc.objChatConversation = dicData
UserDefaults.standard.set(dicData.user_id, forKey: "ChatId")
vc.theme_color = ToString(dicData.chat_settings?.theme_colors)
vc.isThemeYellow = true
vc.leftVal = dicData.is_left
let ThemeModel = ["theme_id":ToString(dicData.chat_settings?.theme_id),"theme_colors":ToString(dicData.chat_settings?.theme_colors)]
UserDefaults.standard.set(ThemeModel, forKey: "ChatTheme")
self.navigationController?.pushViewController(vc, animated: true)
}
}
}
extension UIRefreshControl {
func programaticallyBeginRefreshing(in tableView: UITableView) {
beginRefreshing()
let offsetPoint = CGPoint.init(x: 0, y: -frame.size.height)
tableView.setContentOffset(offsetPoint, animated: true)
}
}
extension ChatListVC : UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let searchText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
filterContentForSearchText(searchText)
return true
}
func filterContentForSearchText(_ searchText: String) {
if searchText.isEmpty {
// If search text is empty, show all contacts
self.filteredarrChatConversation = self.arrChatConversation
} else {
// Filter contacts based on search text
filteredarrChatConversation = self.arrChatConversation?.filter { contact in
return contact.first_name.lowercased().contains(searchText.lowercased()) ||
contact.last_name.lowercased().contains(searchText.lowercased()) || contact.group_name.lowercased().contains(searchText.lowercased())
}
}
// Reload table view
self.tblChatList.reloadData()
}
}
Editor is loading...
Leave a Comment