Digital ACT-191 ONEAPP-7016 story: changes for calendar base view with header and footer.
This commit is contained in:
parent
2e99210dfe
commit
440f516522
@ -17,6 +17,8 @@
|
|||||||
186D13CF2BBC36EF00986B53 /* DropdownSelectChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 186D13CE2BBC36EE00986B53 /* DropdownSelectChangeLog.txt */; };
|
186D13CF2BBC36EF00986B53 /* DropdownSelectChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 186D13CE2BBC36EE00986B53 /* DropdownSelectChangeLog.txt */; };
|
||||||
18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */; };
|
18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */; };
|
||||||
18A3F12A2BD9298900498E4A /* Calendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F1292BD9298900498E4A /* Calendar.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 */; };
|
18A65A022B96E848006602CC /* Breadcrumbs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A012B96E848006602CC /* Breadcrumbs.swift */; };
|
||||||
18A65A042B96F050006602CC /* BreadcrumbItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A032B96F050006602CC /* BreadcrumbItem.swift */; };
|
18A65A042B96F050006602CC /* BreadcrumbItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A032B96F050006602CC /* BreadcrumbItem.swift */; };
|
||||||
18B463A42BBD3C46005C4528 /* DropdownOptionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B463A32BBD3C46005C4528 /* DropdownOptionModel.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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
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>"; };
|
18B463A32BBD3C46005C4528 /* DropdownOptionModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DropdownOptionModel.swift; sourceTree = "<group>"; };
|
||||||
@ -421,6 +425,8 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
18A3F1292BD9298900498E4A /* Calendar.swift */,
|
18A3F1292BD9298900498E4A /* Calendar.swift */,
|
||||||
|
18A3F1312BD944E800498E4A /* CalendarDateCollectionViewCell.swift */,
|
||||||
|
18A3F1372BDA693000498E4A /* CalendarHeaderReusableView.swift */,
|
||||||
);
|
);
|
||||||
path = Calendar;
|
path = Calendar;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -1144,6 +1150,7 @@
|
|||||||
71ACE89C2BA0451200FB6ADC /* PaginationContainer.swift in Sources */,
|
71ACE89C2BA0451200FB6ADC /* PaginationContainer.swift in Sources */,
|
||||||
EAC71A1F2A2E173D00E47A9F /* RadioButton.swift in Sources */,
|
EAC71A1F2A2E173D00E47A9F /* RadioButton.swift in Sources */,
|
||||||
EA33622C2891E73B0071C351 /* FontProtocol.swift in Sources */,
|
EA33622C2891E73B0071C351 /* FontProtocol.swift in Sources */,
|
||||||
|
18A3F1322BD944E800498E4A /* CalendarDateCollectionViewCell.swift in Sources */,
|
||||||
EA596ABD2A16B4EC00300C4B /* Tab.swift in Sources */,
|
EA596ABD2A16B4EC00300C4B /* Tab.swift in Sources */,
|
||||||
71ACE89E2BA1CC1700FB6ADC /* TiletEyebrowModel.swift in Sources */,
|
71ACE89E2BA1CC1700FB6ADC /* TiletEyebrowModel.swift in Sources */,
|
||||||
EAF7F11728A1475A00B287F5 /* RadioButtonItem.swift in Sources */,
|
EAF7F11728A1475A00B287F5 /* RadioButtonItem.swift in Sources */,
|
||||||
@ -1153,6 +1160,7 @@
|
|||||||
71FC86DC2B96F4C800700965 /* PaginationCellItem.swift in Sources */,
|
71FC86DC2B96F4C800700965 /* PaginationCellItem.swift in Sources */,
|
||||||
EAC846F3294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift in Sources */,
|
EAC846F3294B95CE00F685BA /* ButtonGroupCollectionViewCell.swift in Sources */,
|
||||||
EAF7F0952899861000B287F5 /* CheckboxItem.swift in Sources */,
|
EAF7F0952899861000B287F5 /* CheckboxItem.swift in Sources */,
|
||||||
|
18A3F1382BDA693000498E4A /* CalendarHeaderReusableView.swift in Sources */,
|
||||||
EA985BE82968951C00F2FF2E /* TileletTitleModel.swift in Sources */,
|
EA985BE82968951C00F2FF2E /* TileletTitleModel.swift in Sources */,
|
||||||
71FC86DE2B9738B900700965 /* SurfaceConfigurationValue.swift in Sources */,
|
71FC86DE2B9738B900700965 /* SurfaceConfigurationValue.swift in Sources */,
|
||||||
EA297A5529FB07760031ED56 /* TooltipLabelAttribute.swift in Sources */,
|
EA297A5529FB07760031ED56 /* TooltipLabelAttribute.swift in Sources */,
|
||||||
|
|||||||
@ -32,12 +32,35 @@ open class CalendarBase: View {
|
|||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
// MARK: - Private Properties
|
// 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 {
|
internal var containerView = View().with {
|
||||||
$0.clipsToBounds = true
|
$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
|
// MARK: - Lifecycle
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -48,9 +71,84 @@ open class CalendarBase: View {
|
|||||||
open override func setup() {
|
open override func setup() {
|
||||||
super.setup()
|
super.setup()
|
||||||
isAccessibilityElement = false
|
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() {
|
open override func reset() {
|
||||||
super.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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
54
VDS/Components/Calendar/CalendarDateCollectionViewCell.swift
Normal file
54
VDS/Components/Calendar/CalendarDateCollectionViewCell.swift
Normal 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")
|
||||||
|
}
|
||||||
|
}
|
||||||
57
VDS/Components/Calendar/CalendarHeaderReusableView.swift
Normal file
57
VDS/Components/Calendar/CalendarHeaderReusableView.swift
Normal 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user