Skip to content

Commit 985c608

Browse files
committed
Adds 4 more alert thresholds for runnaway usage
1 parent edf5b14 commit 985c608

File tree

1 file changed

+37
-1
lines changed
  • apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.billing-alerts

1 file changed

+37
-1
lines changed

apps/webapp/app/routes/_app.orgs.$organizationSlug.settings.billing-alerts/route.tsx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,13 @@ import { Label } from "~/components/primitives/Label";
2424
import { NavBar, PageAccessories, PageTitle } from "~/components/primitives/PageHeader";
2525
import { Paragraph } from "~/components/primitives/Paragraph";
2626
import { TextLink } from "~/components/primitives/TextLink";
27+
import { InfoIconTooltip } from "~/components/primitives/Tooltip";
2728
import { prisma } from "~/db.server";
2829
import { featuresForRequest } from "~/features.server";
2930
import { redirectWithErrorMessage, redirectWithSuccessMessage } from "~/models/message.server";
3031
import { getBillingAlerts, setBillingAlert } from "~/services/platform.v3.server";
3132
import { requireUserId } from "~/services/session.server";
32-
import { formatCurrency } from "~/utils/numberFormatter";
33+
import { formatCurrency, formatNumber } from "~/utils/numberFormatter";
3334
import {
3435
docsPath,
3536
OrganizationParamsSchema,
@@ -183,6 +184,8 @@ export default function Page() {
183184

184185
const checkboxLevels = [0.75, 0.9, 1.0, 2.0, 5.0];
185186

187+
const spikeAlertLevels = [10.0, 20.0, 50.0, 100.0];
188+
186189
useEffect(() => {
187190
if (alerts.emails.length > 0) {
188191
requestIntent(form.ref.current ?? undefined, list.append(emails.name));
@@ -272,6 +275,39 @@ export default function Page() {
272275
))}
273276
<FormError id={alertLevels.errorId}>{alertLevels.error}</FormError>
274277
</InputGroup>
278+
<InputGroup fullWidth>
279+
<div className="flex items-center gap-1">
280+
<Label>Spike alerts</Label>
281+
<InfoIconTooltip
282+
content={
283+
"Catch runaway usage from bugs or errors. We recommend keeping these enabled as a safety net."
284+
}
285+
disableHoverableContent
286+
/>
287+
</div>
288+
{spikeAlertLevels.map((level) => (
289+
<CheckboxWithLabel
290+
name={alertLevels.name}
291+
id={`level_${level}`}
292+
key={level}
293+
value={level.toString()}
294+
variant="simple/small"
295+
label={
296+
<span>
297+
{formatNumber(level * 100)}%{" "}
298+
<span className="text-text-dimmed">
299+
({formatCurrency(Number(dollarAmount) * level, false)})
300+
</span>
301+
</span>
302+
}
303+
defaultChecked={
304+
alerts.alertLevels.includes(level) ||
305+
!spikeAlertLevels.some((l) => alerts.alertLevels.includes(l))
306+
}
307+
className="pr-0"
308+
/>
309+
))}
310+
</InputGroup>
275311
<InputGroup fullWidth>
276312
<Label htmlFor={emails.id}>Email addresses</Label>
277313
{emailFields.map((email, index) => (

0 commit comments

Comments
 (0)