Digital ACT-191 ONEAPP-7016 story: changes for calendar base view with header and footer.

This commit is contained in:
vasavk 2024-04-26 17:02:18 +05:30
parent 2e99210dfe
commit 440f516522
4 changed files with 218 additions and 1 deletions

View File

@ -17,6 +17,8 @@
186D13CF2BBC36EF00986B53 /* DropdownSelectChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 186D13CE2BBC36EE00986B53 /* DropdownSelectChangeLog.txt */; };
18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */; };
18A3F12A2BD9298900498E4A /* Calendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F1292BD9298900498E4A /* Calendar.swift */; };
18A3F1322BD944E800498E4A /* CalendarDateCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F1312BD944E800498E4A /* CalendarDateCollectionViewCell.swift */; };
18A3F1382BDA693000498E4A /* CalendarHeaderReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F1372BDA693000498E4A /* CalendarHeaderReusableView.swift */; };
18A65A022B96E848006602CC /* Breadcrumbs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A012B96E848006602CC /* Breadcrumbs.swift */; };
18A65A042B96F050006602CC /* BreadcrumbItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A032B96F050006602CC /* BreadcrumbItem.swift */; };
18B463A42BBD3C46005C4528 /* DropdownOptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B463A32BBD3C46005C4528 /* DropdownOptionModel.swift */; };
@ -207,6 +209,8 @@
186D13CE2BBC36EE00986B53 /* DropdownSelectChangeLog.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = DropdownSelectChangeLog.txt; sourceTree = "<group>"; };
18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIconBadgeIndicatorModel.swift; sourceTree = "<group>"; };
18A3F1292BD9298900498E4A /* Calendar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Calendar.swift; sourceTree = "<group>"; };
18A3F1312BD944E800498E4A /* CalendarDateCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarDateCollectionViewCell.swift; sourceTree = "<group>"; };
18A3F1372BDA693000498E4A /* CalendarHeaderReusableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarHeaderReusableView.swift; sourceTree = "<group>"; };
18A65A012B96E848006602CC /* Breadcrumbs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Breadcrumbs.swift; sourceTree = "<group>"; };
18A65A032B96F050006602CC /* BreadcrumbItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BreadcrumbItem.swift; sourceTree = "<group>"; };
18B463A32BBD3C46005C4528 /* DropdownOptionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropdownOptionModel.swift; sourceTree = "<group>"; };
@ -421,6 +425,8 @@
isa = PBXGroup;
children = (
18A3F1292BD9298900498E4A /* Calendar.swift */,
18A3F1312BD944E800498E4A /* CalendarDateCollectionViewCell.swift */,
18A3F1372BDA693000498E4A /* CalendarHeaderReusableView.swift */,
);
path = Calendar;
sourceTree = "<group>";
@ -1144,6 +1150,7 @@
71ACE89C2BA0451200FB6ADC /* PaginationContainer.swift in Sources */,
EAC71A1F2A2E173D00E47A9F /* RadioButton.swift in Sources */,
EA33622C2891E73B0071C351 /* FontProtocol.swift in Sources */,
18A3F1322BD944E800498E4A /* CalendarDateCollectionViewCell.swift in Sources */,
EA596ABD2A16B4EC00300C4B /* Tab.swift in Sources */,
71ACE89E2BA1CC1700FB6ADC /* TiletEyebrowModel.swift in Sources */,
EAF7F11728A1475A00B287F5 /* RadioButtonItem.swift in Sources */,
@ -1153,6 +1160,7 @@
71FC86DC2B96F4C800700965 /* PaginationCellItem.swift in Sources */,
EAC846F3294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift in Sources */,
EAF7F0952899861000B287F5 /* CheckboxItem.swift in Sources */,
18A3F1382BDA693000498E4A /* CalendarHeaderReusableView.swift in Sources */,
EA985BE82968951C00F2FF2E /* TileletTitleModel.swift in Sources */,
71FC86DE2B9738B900700965 /* SurfaceConfigurationValue.swift in Sources */,
EA297A5529FB07760031ED56 /* TooltipLabelAttribute.swift in Sources */,

View File

@ -32,12 +32,35 @@ open class CalendarBase: View {
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var containerSize: CGSize { CGSize(width: 290, height: 300) }
internal var containerSize: CGSize { CGSize(width: 320, height: 376) } //width:320/328
private let cellItemSize = CGSize(width: 40, height: 40)
private let headerHeight = 104.0
private let footerHeight = 56.0
private let items = 35
internal var containerView = View().with {
$0.clipsToBounds = true
}
///Collectionview to render Breadcrumb Items
private lazy var collectionView: UICollectionView = {
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
collectionView.isScrollEnabled = false
collectionView.translatesAutoresizingMaskIntoConstraints = false
collectionView.delegate = self
collectionView.dataSource = self
collectionView.showsHorizontalScrollIndicator = false
collectionView.showsVerticalScrollIndicator = false
collectionView.register(CalendarDateCollectionViewCell.self, forCellWithReuseIdentifier: CalendarDateCollectionViewCell.identifier)
collectionView.register(CalendarHeaderReusableView.self,
forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader,
withReuseIdentifier: CalendarHeaderReusableView.identifier)
collectionView.register(CalendarFooterReusableView.self,
forSupplementaryViewOfKind: UICollectionView.elementKindSectionFooter,
withReuseIdentifier: CalendarFooterReusableView.identifier)
return collectionView
}()
//--------------------------------------------------
// MARK: - Lifecycle
//--------------------------------------------------
@ -48,9 +71,84 @@ open class CalendarBase: View {
open override func setup() {
super.setup()
isAccessibilityElement = false
addSubview(containerView)
containerView
.pinTop()
.pinBottom()
.pinLeadingGreaterThanOrEqualTo()
.pinTrailingLessThanOrEqualTo()
.height(containerSize.height)
.width(containerSize.width)
containerView.centerXAnchor.constraint(equalTo: centerXAnchor).activate()
// Calendar View
containerView.addSubview(collectionView)
collectionView.pinToSuperView()
}
override open func layoutSubviews() {
super.layoutSubviews()
}
open override func reset() {
super.reset()
}
}
extension CalendarBase: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
//--------------------------------------------------
// MARK: - UICollectionView Delegate & Datasource
//--------------------------------------------------
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
items
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CalendarDateCollectionViewCell.identifier, for: indexPath) as? CalendarDateCollectionViewCell else { return UICollectionViewCell() }
return cell
}
public func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
if kind == UICollectionView.elementKindSectionHeader {
// Header
guard let header = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CalendarHeaderReusableView.identifier, for: indexPath) as? CalendarHeaderReusableView else {
return UICollectionReusableView()
}
header.configure(with: true)
return header
} else {
// Footer
if kind == UICollectionView.elementKindSectionFooter {
guard let footer = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CalendarFooterReusableView.identifier, for: indexPath) as? CalendarFooterReusableView else {
return UICollectionReusableView()
}
footer.configure(with: true)
return footer
}
}
return UICollectionReusableView()
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.size.width, height: headerHeight)
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForFooterInSection section: Int) -> CGSize {
return CGSize(width: collectionView.frame.size.width, height: footerHeight)
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return VDSLayout.space1X
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return VDSLayout.space1X
}
public func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return cellItemSize
}
}

View File

@ -0,0 +1,54 @@
//
// CalendarDateCollectionViewCell.swift
// VDS
//
// Created by Kanamarlapudi, Vasavi on 24/04/24.
//
import Foundation
import UIKit
import VDSTokens
///This is customised view for Calendar cell item
final class CalendarDateCollectionViewCell: UICollectionViewCell {
///Identifier for the Calendar Date Cell
static let identifier: String = String(describing: CalendarDateCollectionViewCell.self)
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
// internal var stackView: UIStackView = {
// return UIStackView().with {
// $0.translatesAutoresizingMaskIntoConstraints = false
// $0.axis = .horizontal
// $0.distribution = .fill
// $0.alignment = .center
// $0.spacing = VDSLayout.space2X
// $0.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
// $0.setContentHuggingPriority(.defaultHigh, for: .horizontal)
// }
// }()
//
// private lazy var selectionBackgroundView = View().with {
// $0.translatesAutoresizingMaskIntoConstraints = false
// $0.clipsToBounds = true
// $0.backgroundColor = .systemRed
// }
//
// private lazy var numberLabel = Label().with {
// $0.translatesAutoresizingMaskIntoConstraints = false
// $0.textAlignment = .center
// // $0.font
// // $0.textColor
// }
override init(frame:CGRect) {
super.init(frame: frame)
contentView.backgroundColor = .link
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

View File

@ -0,0 +1,57 @@
//
// CalendarHeaderReusableView.swift
// VDS
//
// Created by Kanamarlapudi, Vasavi on 24/04/24.
//
import UIKit
/// Custom header view
class CalendarHeaderReusableView: UICollectionReusableView {
///Identifier for the Calendar Header Reusable View
static let identifier: String = String(describing: CalendarHeaderReusableView.self)
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configure(with color: Bool) {
// Make a view and make in generic and dynamic
self.backgroundColor = .orange
}
override func layoutSubviews() {
super.layoutSubviews()
}
}
/// Custom footer view
class CalendarFooterReusableView: UICollectionReusableView {
///Identifier for the Calendar Footer Reusable View
static let identifier: String = String(describing: CalendarFooterReusableView.self)
override init(frame: CGRect) {
super.init(frame: frame)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configure(with color: Bool) {
// Make a view and make in generic and dynamic
self.backgroundColor = .green
}
override func layoutSubviews() {
super.layoutSubviews()
}
}