added selectable flag to match how android validates
This commit is contained in:
parent
9b9b775070
commit
7aab88c5ec
@ -22,7 +22,6 @@ import UIKit
|
|||||||
public var backgroundColor: Color?
|
public var backgroundColor: Color?
|
||||||
public var molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]
|
public var molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]
|
||||||
public var index: Int = 0
|
public var index: Int = 0
|
||||||
public var selectedIndex: Int?
|
|
||||||
public var spacing: CGFloat?
|
public var spacing: CGFloat?
|
||||||
public var border: Bool?
|
public var border: Bool?
|
||||||
public var loop: Bool?
|
public var loop: Bool?
|
||||||
@ -39,17 +38,25 @@ import UIKit
|
|||||||
public var fieldKey: String?
|
public var fieldKey: String?
|
||||||
public var groupName: String = FormValidator.defaultGroupName
|
public var groupName: String = FormValidator.defaultGroupName
|
||||||
|
|
||||||
|
public var selectable = false
|
||||||
|
public var selectedIndex: Int?
|
||||||
|
|
||||||
public init(molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]) {
|
public init(molecules: [MoleculeModelProtocol & CarouselItemModelProtocol]) {
|
||||||
self.molecules = molecules
|
self.molecules = molecules
|
||||||
}
|
}
|
||||||
|
|
||||||
public func formFieldValue() -> AnyHashable? {
|
public func formFieldValue() -> AnyHashable? {
|
||||||
let indexForForm = selectedIndex ?? index
|
guard selectable else {
|
||||||
let item = molecules[indexForForm]
|
// Use visible item value, else index
|
||||||
guard let value = item.formFieldValue() else {
|
if let fieldValue = molecules[index].formFieldValue() {
|
||||||
return indexForForm
|
return fieldValue
|
||||||
|
}
|
||||||
|
return index
|
||||||
}
|
}
|
||||||
return value
|
// Use selected item value, else index
|
||||||
|
guard let selectedIndex = selectedIndex else { return nil }
|
||||||
|
guard let fieldValue = molecules[selectedIndex].formFieldValue() else { return selectedIndex }
|
||||||
|
return fieldValue
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -61,7 +68,6 @@ import UIKit
|
|||||||
case backgroundColor
|
case backgroundColor
|
||||||
case molecules
|
case molecules
|
||||||
case index
|
case index
|
||||||
case selectedIndex
|
|
||||||
case spacing
|
case spacing
|
||||||
case border
|
case border
|
||||||
case loop
|
case loop
|
||||||
@ -76,6 +82,8 @@ import UIKit
|
|||||||
case accessibilityText
|
case accessibilityText
|
||||||
case groupName
|
case groupName
|
||||||
case fieldKey
|
case fieldKey
|
||||||
|
case selectable
|
||||||
|
case selectedIndex
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------
|
//--------------------------------------------------
|
||||||
@ -86,6 +94,7 @@ import UIKit
|
|||||||
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
let typeContainer = try decoder.container(keyedBy: CodingKeys.self)
|
||||||
molecules = try typeContainer.decodeModels(codingKey: .molecules)
|
molecules = try typeContainer.decodeModels(codingKey: .molecules)
|
||||||
index = try typeContainer.decodeIfPresent(Int.self, forKey: .index) ?? 0
|
index = try typeContainer.decodeIfPresent(Int.self, forKey: .index) ?? 0
|
||||||
|
selectable = try typeContainer.decodeIfPresent(Bool.self, forKey: .selectable) ?? false
|
||||||
selectedIndex = try typeContainer.decodeIfPresent(Int.self, forKey: .selectedIndex)
|
selectedIndex = try typeContainer.decodeIfPresent(Int.self, forKey: .selectedIndex)
|
||||||
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
backgroundColor = try typeContainer.decodeIfPresent(Color.self, forKey: .backgroundColor)
|
||||||
spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing)
|
spacing = try typeContainer.decodeIfPresent(CGFloat.self, forKey: .spacing)
|
||||||
@ -108,13 +117,7 @@ import UIKit
|
|||||||
if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) {
|
if let groupName = try typeContainer.decodeIfPresent(String.self, forKey: .groupName) {
|
||||||
self.groupName = groupName
|
self.groupName = groupName
|
||||||
}
|
}
|
||||||
if let value = formFieldValue() {
|
baseValue = formFieldValue()
|
||||||
baseValue = value
|
|
||||||
} else if let value = selectedIndex {
|
|
||||||
baseValue = value
|
|
||||||
} else {
|
|
||||||
baseValue = index
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(to encoder: Encoder) throws {
|
public func encode(to encoder: Encoder) throws {
|
||||||
@ -136,5 +139,8 @@ import UIKit
|
|||||||
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
|
try container.encodeIfPresent(accessibilityText, forKey: .accessibilityText)
|
||||||
try container.encodeIfPresent(fieldKey, forKey: .fieldKey)
|
try container.encodeIfPresent(fieldKey, forKey: .fieldKey)
|
||||||
try container.encode(groupName, forKey: .groupName)
|
try container.encode(groupName, forKey: .groupName)
|
||||||
|
try container.encode(index, forKey: .index)
|
||||||
|
try container.encode(selectable, forKey: .selectable)
|
||||||
|
try container.encode(selectedIndex, forKey: .selectedIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user