Ver Fonte

Improve meetings-style filter row layout for wide cards.

Share one helper for Meetings and Ai Companion: a spacer and hugging
priorities keep the preset near intrinsic width, date pickers stay at
least 170pt, and Apply/Reset/Refresh stay right-aligned.

Co-authored-by: Cursor <cursoragent@cursor.com>
huzaifahayat12 há 2 meses atrás
pai
commit
400d0b3a0c
1 ficheiros alterados com 66 adições e 20 exclusões
  1. 66 20
      zoom_app/ViewController.swift

+ 66 - 20
zoom_app/ViewController.swift

@@ -7109,6 +7109,15 @@ class ViewController: NSViewController {
         filterBar.spacing = 10
         filterBar.alignment = .centerY
         filterBar.translatesAutoresizingMaskIntoConstraints = false
+        configureResponsiveMeetingsStyleFilterRow(
+            filterRow: filterBar,
+            categoryFilter: categoryFilter,
+            fromDatePicker: fromDatePicker,
+            toDatePicker: toDatePicker,
+            applyFiltersButton: applyFiltersButton,
+            resetFiltersButton: resetFiltersButton,
+            refreshButton: refreshButton
+        )
         container.addSubview(filterBar)
 
         // Hint text below filters (recording help — not Zoom API status).
@@ -7189,16 +7198,6 @@ class ViewController: NSViewController {
             filterBar.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 18),
             filterBar.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -18),
 
-            categoryFilter.widthAnchor.constraint(equalToConstant: 170),
-            fromDatePicker.widthAnchor.constraint(equalToConstant: 170),
-            toDatePicker.widthAnchor.constraint(equalToConstant: 170),
-            applyFiltersButton.widthAnchor.constraint(equalToConstant: 96),
-            resetFiltersButton.widthAnchor.constraint(equalToConstant: 96),
-            refreshButton.widthAnchor.constraint(equalToConstant: 44),
-            applyFiltersButton.heightAnchor.constraint(equalToConstant: 34),
-            resetFiltersButton.heightAnchor.constraint(equalToConstant: 34),
-            refreshButton.heightAnchor.constraint(equalToConstant: 34),
-
             status.topAnchor.constraint(equalTo: filterBar.bottomAnchor, constant: 12),
             status.leadingAnchor.constraint(equalTo: filterBar.leadingAnchor),
             status.trailingAnchor.constraint(equalTo: filterBar.trailingAnchor),
@@ -8472,6 +8471,54 @@ class ViewController: NSViewController {
         }
     }
 
+    /// Meetings + Ai Companion filter rows: preset + dates stay near intrinsic width; flexible gap before Apply/Reset/Refresh.
+    private func configureResponsiveMeetingsStyleFilterRow(
+        filterRow: NSStackView,
+        categoryFilter: NSPopUpButton,
+        fromDatePicker: NSDatePicker,
+        toDatePicker: NSDatePicker,
+        applyFiltersButton: NSButton,
+        resetFiltersButton: NSButton,
+        refreshButton: NSButton
+    ) {
+        filterRow.distribution = .fill
+        filterRow.setContentHuggingPriority(.defaultLow, for: .horizontal)
+
+        let spacer = NSView()
+        spacer.translatesAutoresizingMaskIntoConstraints = false
+        spacer.setContentHuggingPriority(.defaultLow, for: .horizontal)
+        spacer.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
+        filterRow.insertArrangedSubview(spacer, at: 3)
+
+        categoryFilter.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+        categoryFilter.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
+
+        fromDatePicker.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+        fromDatePicker.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
+        toDatePicker.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+        toDatePicker.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
+
+        applyFiltersButton.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+        applyFiltersButton.setContentCompressionResistancePriority(.required, for: .horizontal)
+        resetFiltersButton.setContentHuggingPriority(.defaultHigh, for: .horizontal)
+        resetFiltersButton.setContentCompressionResistancePriority(.required, for: .horizontal)
+        refreshButton.setContentHuggingPriority(.required, for: .horizontal)
+        refreshButton.setContentCompressionResistancePriority(.required, for: .horizontal)
+
+        NSLayoutConstraint.activate([
+            categoryFilter.widthAnchor.constraint(greaterThanOrEqualToConstant: 120),
+            fromDatePicker.widthAnchor.constraint(greaterThanOrEqualToConstant: 170),
+            toDatePicker.widthAnchor.constraint(greaterThanOrEqualToConstant: 170),
+            fromDatePicker.widthAnchor.constraint(equalTo: toDatePicker.widthAnchor),
+            applyFiltersButton.widthAnchor.constraint(greaterThanOrEqualToConstant: 76),
+            resetFiltersButton.widthAnchor.constraint(greaterThanOrEqualToConstant: 76),
+            refreshButton.widthAnchor.constraint(equalToConstant: 44),
+            applyFiltersButton.heightAnchor.constraint(equalToConstant: 34),
+            resetFiltersButton.heightAnchor.constraint(equalToConstant: 34),
+            refreshButton.heightAnchor.constraint(equalToConstant: 34)
+        ])
+    }
+
     private func makeMeetingsPageView() -> NSView {
         let root = NSView()
         root.wantsLayer = true
@@ -8558,6 +8605,15 @@ class ViewController: NSViewController {
         filterRow.spacing = 10
         filterRow.alignment = .centerY
         filterRow.translatesAutoresizingMaskIntoConstraints = false
+        configureResponsiveMeetingsStyleFilterRow(
+            filterRow: filterRow,
+            categoryFilter: categoryFilter,
+            fromDatePicker: fromDatePicker,
+            toDatePicker: toDatePicker,
+            applyFiltersButton: applyFiltersButton,
+            resetFiltersButton: resetFiltersButton,
+            refreshButton: refreshButton
+        )
 
         let statusLabel = makeLabel("Showing 0 meetings", size: 12, color: secondaryText, weight: .medium, centered: false)
         statusLabel.translatesAutoresizingMaskIntoConstraints = false
@@ -8613,16 +8669,6 @@ class ViewController: NSViewController {
             filterRow.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 18),
             filterRow.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -18),
 
-            categoryFilter.widthAnchor.constraint(equalToConstant: 170),
-            fromDatePicker.widthAnchor.constraint(equalToConstant: 170),
-            toDatePicker.widthAnchor.constraint(equalToConstant: 170),
-            applyFiltersButton.widthAnchor.constraint(equalToConstant: 96),
-            resetFiltersButton.widthAnchor.constraint(equalToConstant: 96),
-            refreshButton.widthAnchor.constraint(equalToConstant: 44),
-            applyFiltersButton.heightAnchor.constraint(equalToConstant: 34),
-            resetFiltersButton.heightAnchor.constraint(equalToConstant: 34),
-            refreshButton.heightAnchor.constraint(equalToConstant: 34),
-
             statusLabel.topAnchor.constraint(equalTo: filterRow.bottomAnchor, constant: 12),
             statusLabel.leadingAnchor.constraint(equalTo: filterRow.leadingAnchor),
             statusLabel.trailingAnchor.constraint(equalTo: filterRow.trailingAnchor),