A React component that provides delay logic for loading states to prevent UI flashing for quick operations and ensure minimum display duration.
import DelayWrapper from '../flowbot/components/delay-wrapper'function MyComponent ({ loading }) {return (<DelayWrapper loading={loading}><Spinner size={16} /></DelayWrapper>)}
<DelayWrapper loading={loading} delay={150} minDuration={300}><div className='loading-indicator'>Loading...</div></DelayWrapper>
<DelayWrapperloading={loading}fallback={<div className='placeholder'>Ready to load...</div>}><Spinner size={16} /></DelayWrapper>
The PositionedSpinner component in lookup-controls.jsx uses DelayWrapper internally:
<PositionedSpinner loading={loading} gridded={props.gridded} size={16} />
| Prop | Type | Default | Description |
|---|---|---|---|
loading | boolean | - | The loading state |
delay | number | 100 | Delay before showing the loading UI (in milliseconds) |
minDuration | number | 200 | Minimum duration to show the loading UI (in milliseconds) |
children | React.ReactNode | - | The loading UI component to render |
fallback | React.ReactNode | null | Optional fallback UI to show while delayed |
delay milliseconds before showing loading UIminDurationLoading starts → Wait 100ms → Loading stops → UI never shows
Loading starts → Wait 100ms → Show UI → Loading stops at 150ms → Wait 50ms → Hide UI
Loading starts → Wait 100ms → Show UI → Loading stops at 500ms → Hide UI immediately
The key insight is that minDuration only applies when loading stops before the minimum time has elapsed. If loading continues beyond the minimum duration, the loading UI disappears immediately when loading stops.