Skip to content

Commit

Permalink
Converted min max for fractional grid column widths to closures
Browse files Browse the repository at this point in the history
  • Loading branch information
rajdeep committed Mar 9, 2024
1 parent 77ec474 commit be56944
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 10 deletions.
27 changes: 23 additions & 4 deletions Proton/Sources/Swift/Grid/Core/GridConfiguration.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,17 @@
import Foundation
import UIKit

/// Defines configuration for Columns
class GridColumnDimension {
var isCollapsed: Bool
var width: GridColumnWidth
let collapsedWidth: CGFloat

/// Instantiates dimension for Grid Columns
/// - Parameters:
/// - width: Default column width
/// - isCollapsed: Determines if column is collapsed
/// - collapsedWidth: Default width for collapsed column.
init(width: GridColumnWidth, isCollapsed: Bool = false, collapsedWidth: CGFloat) {
self.isCollapsed = isCollapsed
self.width = width
Expand All @@ -38,23 +44,36 @@ class GridColumnDimension {
}
}

/// Defines how Grid Column width should be calculated
public enum GridColumnWidth {
/// Defines a fixed with for column
/// - Parameter : `CGFloat` value for width.
case fixed(CGFloat)
case fractional(CGFloat, min: CGFloat? = nil, max: CGFloat? = nil)
/// Defines a fixed with for column
/// - Parameters :
/// - : `CGFloat` value for percentage of available width.
/// - min: Closure providing minimum value for column. If computed fractional value is less than min, min is used.
/// - max: Closure providing maximum value for column. If computed fractional value is more than max, max is used.
/// - Note: Percentage is calculated based on total available width for GridView, typically, width of containing `EditorView`
case fractional(CGFloat, min: (() -> CGFloat)? = nil, max: (() -> CGFloat)? = nil)

/// Defines width based on available viewport.
/// - Parameter padding: Padding for adjusting width with respect to viewport. Positive values decreases column width from viewport width and negative
/// increases column width by padding over viewport width,
case viewport(padding: CGFloat)

public func value(basedOn total: CGFloat, viewportWidth: CGFloat) -> CGFloat {
func value(basedOn total: CGFloat, viewportWidth: CGFloat) -> CGFloat {
let cellOverlapPixels: CGFloat = 1
switch self {
case let .fixed(value):
return value
case let .fractional(value, min, max):
let fractionalValue = value * total
if let min,
if let min = min?(),
fractionalValue < min {
return min - cellOverlapPixels
}
if let max,
if let max = max?(),
fractionalValue > max {
return max - cellOverlapPixels
}
Expand Down
12 changes: 6 additions & 6 deletions Proton/Tests/Grid/GridViewAttachmentSnapshotTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ class GridViewAttachmentSnapshotTests: SnapshotTestCase {
let editor = viewController.editor
let config = GridConfiguration(
columnsConfiguration: [
GridColumnConfiguration(width: .fractional(0.15, min: 30)),
GridColumnConfiguration(width: .fractional(0.15, min: 45)),
GridColumnConfiguration(width: .fractional(0.15, min: 60)),
GridColumnConfiguration(width: .fractional(0.15, min: { 30 })),
GridColumnConfiguration(width: .fractional(0.15, min: { 45 })),
GridColumnConfiguration(width: .fractional(0.15, min: { 60 })),
GridColumnConfiguration(width: .fixed(20))
],
rowsConfiguration: [
Expand Down Expand Up @@ -177,9 +177,9 @@ class GridViewAttachmentSnapshotTests: SnapshotTestCase {
let editor = viewController.editor
let config = GridConfiguration(
columnsConfiguration: [
GridColumnConfiguration(width: .fractional(0.30, max: 50)),
GridColumnConfiguration(width: .fractional(0.30, max: 75)),
GridColumnConfiguration(width: .fractional(0.30, max: 100)),
GridColumnConfiguration(width: .fractional(0.30, max: { 50 })),
GridColumnConfiguration(width: .fractional(0.30, max: { 75 })),
GridColumnConfiguration(width: .fractional(0.30, max: { 100 })),
GridColumnConfiguration(width: .fixed(40))
],
rowsConfiguration: [
Expand Down

0 comments on commit be56944

Please sign in to comment.