Skip to content

Commit d093acc

Browse files
committed
clean up slider
1 parent c561407 commit d093acc

File tree

1 file changed

+63
-58
lines changed

1 file changed

+63
-58
lines changed

pcweb/pages/pricing/slider_calculator.py

Lines changed: 63 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,16 @@ def calculate_weekly_credits(vcpu: int, ram: float) -> float:
4444
MESSAGES_VALUES = [0] + [50 * (2**i) for i in range(9)] + [20000, 0]
4545

4646

47+
def get_is_enterprise_tier(messages_tier_index: int) -> bool:
48+
"""Check if slider is at Enterprise position"""
49+
return messages_tier_index == len(MESSAGES_VALUES) - 1
50+
51+
52+
def get_message_credits(messages_tier_index: int) -> int:
53+
"""Get credits from message tier slider"""
54+
return MESSAGES_VALUES[messages_tier_index]
55+
56+
4757
class MachineState(rx.State):
4858
machines: rx.Field[list[Machine]] = rx.field(default_factory=list)
4959
messages_tier_index: rx.Field[int] = rx.field(default=0)
@@ -62,12 +72,10 @@ def update_machine(self, index: int, new_machine_index: int):
6272

6373
@rx.event(temporal=True)
6474
def update_messages_tier(self, new_tier_index: int):
75+
if new_tier_index == self.messages_tier_index:
76+
return
6577
self.messages_tier_index = new_tier_index
6678

67-
def _get_message_credits(self) -> int:
68-
"""Get credits from message tier slider"""
69-
return MESSAGES_VALUES[self.messages_tier_index]
70-
7179
def _get_machines_credits(self) -> float:
7280
"""Calculate total weekly credits of all machines"""
7381
return sum(
@@ -77,7 +85,9 @@ def _get_machines_credits(self) -> float:
7785

7886
def _get_total_credits(self) -> float:
7987
"""Calculate total credits as numeric value"""
80-
return self._get_message_credits() + round(self._get_machines_credits(), 2)
88+
return get_message_credits(self.messages_tier_index) + round(
89+
self._get_machines_credits(), 2
90+
)
8191

8292
def _find_tier_for_credits(self, credits: float) -> dict | None:
8393
"""Find Pro tier that fits the given credits, or None if Enterprise needed"""
@@ -92,37 +102,32 @@ def machines_weekly_credits(self) -> float:
92102
"""For UI display of machine credits"""
93103
return self._get_machines_credits()
94104

95-
@rx.var
96-
def is_enterprise_tier(self) -> bool:
97-
"""Check if slider is at Enterprise position"""
98-
return self.messages_tier_index == len(MESSAGES_VALUES) - 1
99-
100105
@rx.var
101106
def current_tier(self) -> dict:
102107
"""Current tier info based on message credits only"""
103-
msg_credits = self._get_message_credits()
108+
msg_credits = get_message_credits(self.messages_tier_index)
104109

105-
if self.is_enterprise_tier:
110+
if get_is_enterprise_tier(self.messages_tier_index):
106111
return {
107112
"key": "Enterprise",
108113
"credits": msg_credits,
109114
"price": "custom",
110-
"messages": "custom",
111115
}
112116

113117
tier = self._find_tier_for_credits(msg_credits)
114118
return {
115119
"key": tier["key"] if tier else "Enterprise",
116120
"credits": msg_credits,
117121
"price": tier["price"] if tier else "custom",
118-
"messages": msg_credits,
119122
}
120123

121124
@rx.var
122125
def total_credits(self) -> str:
123126
"""Total credits display string"""
124127
total = self._get_total_credits()
125-
if self.is_enterprise_tier or not self._find_tier_for_credits(total):
128+
if get_is_enterprise_tier(
129+
self.messages_tier_index
130+
) or not self._find_tier_for_credits(total):
126131
return "Custom"
127132
return f"{total:,}"
128133

@@ -137,15 +142,13 @@ def recommended_tier_info(self) -> dict:
137142
"needs_enterprise": False,
138143
"name": f"{tier['key']} Plan",
139144
"credits": tier["credits"],
140-
"messages": round(tier["credits"] / 10, 1),
141145
}
142146

143147
return {
144148
"price": "Custom",
145149
"needs_enterprise": True,
146150
"name": "Enterprise",
147151
"credits": "Custom",
148-
"messages": "custom",
149152
}
150153

151154
@rx.event
@@ -162,18 +165,18 @@ def total_credits_card() -> rx.Component:
162165
rx.el.div(
163166
rx.el.div(
164167
rx.cond(
165-
MachineState.is_enterprise_tier,
168+
get_is_enterprise_tier(MachineState.messages_tier_index),
166169
rx.el.span(
167170
"Reflex Build Credits (Custom)",
168171
class_name="text-secondary-11 text-sm font-medium",
169172
),
170173
rx.el.span(
171-
f"Reflex Build Credits ({format_number(MachineState.current_tier['messages'])})",
174+
f"Reflex Build Credits ({format_number(MachineState.current_tier['credits'])})",
172175
class_name="text-secondary-11 text-sm font-medium",
173176
),
174177
),
175178
rx.cond(
176-
MachineState.is_enterprise_tier,
179+
get_is_enterprise_tier(MachineState.messages_tier_index),
177180
rx.el.span(
178181
"Custom",
179182
class_name="text-secondary-12 text-sm font-medium ml-auto font-mono",
@@ -211,9 +214,9 @@ def total_credits_card() -> rx.Component:
211214
class_name="flex flex-row gap-2 items-center justify-between",
212215
),
213216
rx.el.div(
214-
rx.el.span(
217+
rx.el.span(
215218
rx.cond(
216-
MachineState.recommended_tier_info["needs_enterprise"],
219+
get_is_enterprise_tier(MachineState.messages_tier_index),
217220
rx.el.span(
218221
"Get a custom quote for your needs",
219222
class_name="text-secondary-12 text-sm font-medium",
@@ -236,27 +239,27 @@ def total_credits_card() -> rx.Component:
236239
),
237240
),
238241
class_name="text-center",
239-
),
242+
),
240243
class_name="flex flex-col gap-2 mt-4 pt-2 justify-center",
241244
),
242245
rx.cond(
243-
MachineState.recommended_tier_info["needs_enterprise"],
244-
lemcal_dialog(
245-
ui.button(
246-
"Contact Sales",
247-
size="sm",
248-
class_name="font-semibold w-full",
249-
),
250-
),
251-
ui.link(
252-
render_=ui.button(
253-
"Upgrade Now",
254-
size="sm",
255-
class_name="font-semibold w-full",
256-
),
257-
to=f"{REFLEX_CLOUD_URL.rstrip('/')}/?redirect_url={REFLEX_CLOUD_URL.rstrip('/')}/billing/",
258-
target="_blank",
259-
),
246+
get_is_enterprise_tier(MachineState.messages_tier_index),
247+
lemcal_dialog(
248+
ui.button(
249+
"Contact Sales",
250+
size="sm",
251+
class_name="font-semibold w-full",
252+
),
253+
),
254+
ui.link(
255+
render_=ui.button(
256+
"Upgrade Now",
257+
size="sm",
258+
class_name="font-semibold w-full",
259+
),
260+
to=f"{REFLEX_CLOUD_URL.rstrip('/')}/?redirect_url={REFLEX_CLOUD_URL.rstrip('/')}/billing/",
261+
target="_blank",
262+
),
260263
),
261264
class_name="flex flex-col gap-2",
262265
),
@@ -270,31 +273,31 @@ def messages_card() -> rx.Component:
270273
rx.el.div(
271274
ui.icon("StarCircleIcon", class_name="text-secondary-11 size-5"),
272275
rx.cond(
273-
MachineState.is_enterprise_tier,
276+
get_is_enterprise_tier(MachineState.messages_tier_index),
274277
rx.el.span(
275278
"Custom Reflex Build Credits / Month",
276279
class_name="text-secondary-12 lg:text-lg text-base font-medium",
277280
),
278281
rx.el.span(
279-
f"{format_number(MachineState.current_tier['messages'])} Reflex Build Credits / Month",
282+
f"{format_number(MachineState.current_tier['credits'])} Reflex Build Credits / Month",
280283
class_name="text-secondary-12 lg:text-lg text-base font-medium",
281284
),
282285
),
283286
class_name="flex flex-row gap-2 items-center",
284287
),
285288
rx.el.div(
286-
rx.cond(
287-
MachineState.is_enterprise_tier,
288-
rx.el.span(
289-
"Custom",
290-
class_name="text-secondary-12 lg:text-lg text-base font-medium",
291-
),
292-
rx.el.span(
293-
format_number(MachineState.current_tier["credits"]),
294-
" Credits",
295-
class_name="text-secondary-12 lg:text-lg text-base font-medium font-mono",
296-
),
297-
),
289+
rx.cond(
290+
get_is_enterprise_tier(MachineState.messages_tier_index),
291+
rx.el.span(
292+
"Custom",
293+
class_name="text-secondary-12 lg:text-lg text-base font-medium",
294+
),
295+
rx.el.span(
296+
format_number(MachineState.current_tier["credits"]),
297+
" Credits",
298+
class_name="text-secondary-12 lg:text-lg text-base font-medium font-mono",
299+
),
300+
),
298301
class_name="flex flex-row gap-1.5 items-center",
299302
),
300303
class_name="flex flex-row gap-2 items-center justify-between",
@@ -306,13 +309,15 @@ def messages_card() -> rx.Component:
306309
ui.tooltip(
307310
trigger=ui.slider.thumb(),
308311
content=rx.cond(
309-
MachineState.is_enterprise_tier,
312+
get_is_enterprise_tier(MachineState.messages_tier_index),
310313
"Custom",
311314
rx.cond(
312-
MachineState.is_enterprise_tier,
315+
get_is_enterprise_tier(
316+
MachineState.messages_tier_index
317+
),
313318
"Custom Messages",
314-
f"{format_number(MachineState.current_tier['messages'])} Messages",
315-
),
319+
f"{format_number(MachineState.current_tier['credits'])} Messages",
320+
),
316321
),
317322
open=message_tooltip_open_cs.value,
318323
side="bottom",

0 commit comments

Comments
 (0)