11import { Form } from "@remix-run/react" ;
22import { useEffect , useState } from "react" ;
33import { Button } from "~/components/primitives/Buttons" ;
4- import { Checkbox } from "~/components/primitives/Checkbox" ;
54import { FormError } from "~/components/primitives/FormError" ;
65import { Header2 } from "~/components/primitives/Headers" ;
76import { Input } from "~/components/primitives/Input" ;
@@ -36,7 +35,6 @@ export function ConcurrencyQuotaSection({
3635 errors && field in errors ? errors [ field ] ?. [ 0 ] : undefined ;
3736
3837 const [ isEditing , setIsEditing ] = useState ( hasFieldErrors || ! ! formError ) ;
39- const [ usePlanDefault , setUsePlanDefault ] = useState ( false ) ;
4038 const [ value , setValue ] = useState ( String ( currentQuota ) ) ;
4139
4240 useEffect ( ( ) => {
@@ -49,10 +47,24 @@ export function ConcurrencyQuotaSection({
4947
5048 const cancelEdit = ( ) => {
5149 setValue ( String ( currentQuota ) ) ;
52- setUsePlanDefault ( false ) ;
5350 setIsEditing ( false ) ;
5451 } ;
5552
53+ const trimmedValue = value . trim ( ) ;
54+ const parsed = Number ( trimmedValue ) ;
55+ const isValidPreview =
56+ trimmedValue . length > 0 &&
57+ Number . isInteger ( parsed ) &&
58+ parsed >= 0 ;
59+ const delta = isValidPreview ? parsed - currentQuota : 0 ;
60+ const deltaLabel =
61+ delta > 0
62+ ? `+${ delta . toLocaleString ( ) } `
63+ : delta < 0
64+ ? delta . toLocaleString ( )
65+ : "no change" ;
66+ const headroomAfter = isValidPreview ? parsed - purchased : 0 ;
67+
5668 return (
5769 < section className = "flex flex-col gap-3 rounded-md border border-charcoal-700 bg-charcoal-800 p-4" >
5870 < div className = "flex items-center justify-between" >
@@ -111,32 +123,41 @@ export function ConcurrencyQuotaSection({
111123 name = "extraConcurrencyQuota"
112124 type = "number"
113125 min = { 0 }
114- value = { usePlanDefault ? "" : value }
126+ value = { value }
115127 onChange = { ( e ) => setValue ( e . target . value ) }
116- disabled = { usePlanDefault }
117- required = { ! usePlanDefault }
128+ required
118129 />
119130 < FormError > { fieldError ( "extraConcurrencyQuota" ) } </ FormError >
120131 </ div >
121132
122- < div className = "flex items-center gap-2" >
123- < Checkbox
124- id = "usePlanDefault"
125- name = "usePlanDefault"
126- value = "true"
127- checked = { usePlanDefault }
128- onChange = { ( e ) => setUsePlanDefault ( e . target . checked ) }
129- />
130- < Label htmlFor = "usePlanDefault" >
131- Use plan default (clears any per-org override)
132- </ Label >
133- </ div >
133+ { isValidPreview && (
134+ < div className = "rounded-md border border-charcoal-700 bg-charcoal-900 px-3 py-2" >
135+ < Paragraph variant = "small" >
136+ Cap: { currentQuota . toLocaleString ( ) } →{ " " }
137+ { parsed . toLocaleString ( ) } ({ deltaLabel } )
138+ </ Paragraph >
139+ < Paragraph variant = "small" className = "text-text-dimmed" >
140+ Already purchased: { purchased . toLocaleString ( ) }
141+ </ Paragraph >
142+ { headroomAfter >= 0 ? (
143+ < Paragraph variant = "small" className = "text-text-dimmed" >
144+ After save: { headroomAfter . toLocaleString ( ) } more buyable.
145+ </ Paragraph >
146+ ) : (
147+ < Paragraph variant = "small" className = "text-amber-500" >
148+ Below already-purchased — org would be{ " " }
149+ { ( - headroomAfter ) . toLocaleString ( ) } over the new cap. They'd
150+ keep what they have but couldn't buy more until you raise it.
151+ </ Paragraph >
152+ ) }
153+ </ div >
154+ ) }
134155
135156 < div className = "flex items-center gap-2" >
136157 < Button
137158 type = "submit"
138159 variant = "primary/medium"
139- disabled = { isSubmitting || ( ! usePlanDefault && ! value . trim ( ) ) }
160+ disabled = { isSubmitting || ! value . trim ( ) }
140161 >
141162 Save
142163 </ Button >
0 commit comments