fix(KB): guardrail bypass during estimate load + Transition sibling (PR #901 review)
- Disable TierSelectionModal Submit while the embed-estimate query is in flight, so a fast click can't slip past the guardrail with an undefined estimate. - Move KbGuardrailModal out of the outer <Transition> and render it as a Fragment sibling — Headless UI's Transition expects Transition.Child descendants, not raw conditional siblings.
This commit is contained in:
parent
21d9929926
commit
47e6c134e8
|
|
@ -74,7 +74,7 @@ const TierSelectionModal: React.FC<TierSelectionModalProps> = ({
|
||||||
[selectedTierResources]
|
[selectedTierResources]
|
||||||
)
|
)
|
||||||
|
|
||||||
const { data: embedEstimate } = useQuery({
|
const { data: embedEstimate, isLoading: isEstimating } = useQuery({
|
||||||
queryKey: ['embedEstimateBatch', embedEstimateRequest],
|
queryKey: ['embedEstimateBatch', embedEstimateRequest],
|
||||||
queryFn: () => api.estimateEmbeddingBatch(embedEstimateRequest),
|
queryFn: () => api.estimateEmbeddingBatch(embedEstimateRequest),
|
||||||
enabled: embedEstimateRequest.length > 0,
|
enabled: embedEstimateRequest.length > 0,
|
||||||
|
|
@ -158,6 +158,7 @@ const TierSelectionModal: React.FC<TierSelectionModalProps> = ({
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
<Transition appear show={isOpen} as={Fragment}>
|
<Transition appear show={isOpen} as={Fragment}>
|
||||||
<Dialog as="div" className="relative z-50" onClose={onClose}>
|
<Dialog as="div" className="relative z-50" onClose={onClose}>
|
||||||
<Transition.Child
|
<Transition.Child
|
||||||
|
|
@ -345,7 +346,7 @@ const TierSelectionModal: React.FC<TierSelectionModalProps> = ({
|
||||||
variant='primary'
|
variant='primary'
|
||||||
size='lg'
|
size='lg'
|
||||||
onClick={handleSubmit}
|
onClick={handleSubmit}
|
||||||
disabled={!localSelectedSlug}
|
disabled={!localSelectedSlug || (embedEstimateRequest.length > 0 && isEstimating)}
|
||||||
>
|
>
|
||||||
Submit
|
Submit
|
||||||
</StyledButton>
|
</StyledButton>
|
||||||
|
|
@ -355,18 +356,19 @@ const TierSelectionModal: React.FC<TierSelectionModalProps> = ({
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
{guardrailVerdict && (
|
|
||||||
<KbGuardrailModal
|
|
||||||
isOpen={true}
|
|
||||||
verdict={guardrailVerdict}
|
|
||||||
onConfirm={() => {
|
|
||||||
setGuardrailVerdict(null)
|
|
||||||
finalizeSubmit()
|
|
||||||
}}
|
|
||||||
onCancel={() => setGuardrailVerdict(null)}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Transition>
|
</Transition>
|
||||||
|
{guardrailVerdict && (
|
||||||
|
<KbGuardrailModal
|
||||||
|
isOpen={true}
|
||||||
|
verdict={guardrailVerdict}
|
||||||
|
onConfirm={() => {
|
||||||
|
setGuardrailVerdict(null)
|
||||||
|
finalizeSubmit()
|
||||||
|
}}
|
||||||
|
onCancel={() => setGuardrailVerdict(null)}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue