Skip to content

Commit 0bb681a

Browse files
committed
min step value
1 parent 40b93d2 commit 0bb681a

File tree

1 file changed

+33
-21
lines changed

1 file changed

+33
-21
lines changed

pcweb/pages/pricing/slider_calculator.py

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111
from pcweb.constants import REFLEX_CLOUD_URL, PRO_TIERS_TABLE
1212

1313

14+
_SORTED_TIERS = sorted(
15+
[{"key": k, **v} for k, v in PRO_TIERS_TABLE.items()], key=lambda x: x["credits"]
16+
)
17+
18+
1419
def format_number(number: int | float) -> str:
1520
"""Format number with locale string, handling non-numeric values"""
1621
return rx.Var(
@@ -85,37 +90,43 @@ class MachineState(rx.State):
8590
def _recalculate_all(self):
8691
"""Recalculate all derived values when state changes"""
8792
# Calculate machines weekly credits using cached values
88-
self.machines_weekly_credits = sum(
89-
machine.weekly_credits for machine in self.machines
90-
)
93+
machines_credits = sum(m.weekly_credits for m in self.machines)
94+
self.machines_weekly_credits = machines_credits
9195

9296
# Calculate current tier based on message credits
9397
msg_credits = get_message_credits(self.messages_tier_index)
9498
is_enterprise = get_is_enterprise_tier(self.messages_tier_index)
9599

100+
# Early return path for enterprise tier
96101
if is_enterprise:
97102
self.current_tier = {
98103
"key": "Enterprise",
99104
"credits": msg_credits,
100105
"price": "custom",
101106
}
102-
else:
103-
tier = self._find_tier_for_credits(msg_credits)
104-
self.current_tier = {
105-
"key": tier["key"] if tier else "Enterprise",
106-
"credits": msg_credits,
107-
"price": tier["price"] if tier else "custom",
107+
self.total_credits = "Custom"
108+
self.recommended_tier_info = {
109+
"price": "Custom",
110+
"needs_enterprise": True,
111+
"name": "Enterprise",
112+
"credits": "Custom",
108113
}
114+
return
109115

110-
# Calculate total credits and find tier once
111-
total = msg_credits + round(self.machines_weekly_credits, 2)
112-
total_tier = None if is_enterprise else self._find_tier_for_credits(total)
116+
# Non-enterprise path - find tiers once
117+
current_tier = self._find_tier_for_credits(msg_credits)
118+
total = msg_credits + machines_credits
119+
total_tier = self._find_tier_for_credits(total)
120+
121+
# Set current tier
122+
self.current_tier = {
123+
"key": current_tier["key"] if current_tier else "Enterprise",
124+
"credits": msg_credits,
125+
"price": current_tier["price"] if current_tier else "custom",
126+
}
113127

114128
# Set total credits display
115-
if is_enterprise or not total_tier:
116-
self.total_credits = "Custom"
117-
else:
118-
self.total_credits = f"{total:,}"
129+
self.total_credits = f"{total:,}" if total_tier else "Custom"
119130

120131
# Set recommended tier info
121132
if total_tier:
@@ -156,11 +167,10 @@ def update_messages_tier(self, new_tier_index: int):
156167
self._recalculate_all()
157168

158169
def _find_tier_for_credits(self, credits: float) -> dict | None:
159-
"""Find Pro tier that fits the given credits, or None if Enterprise needed"""
160-
for tier_key in pro_tier_keys:
161-
tier_data = PRO_TIERS_TABLE[tier_key]
162-
if credits <= tier_data["credits"]:
163-
return {"key": tier_key, **tier_data}
170+
"""Find Pro tier that fits the given credits using binary search"""
171+
for tier in _SORTED_TIERS:
172+
if credits <= tier["credits"]:
173+
return tier
164174
return None
165175

166176
@rx.event(temporal=True)
@@ -342,6 +352,7 @@ def messages_card() -> rx.Component:
342352
MachineState.update_messages_tier(new_tier_index),
343353
rx.noop(),
344354
),
355+
min_steps_between_values=1,
345356
class_name="w-full max-w-full",
346357
),
347358
on_mouse_enter=message_tooltip_open_cs.set_value(True),
@@ -417,6 +428,7 @@ def machine_card(machine: Machine, index: int) -> rx.Component:
417428
max=COMPUTE_TABLE_KEYS.length() - 1,
418429
step=1,
419430
value=machine.index,
431+
min_steps_between_values=1,
420432
on_value_change=lambda new_machine_index: rx.cond(
421433
machine.index != new_machine_index,
422434
MachineState.update_machine(index, new_machine_index),

0 commit comments

Comments
 (0)