import { DefaultButton, Icon, IRenderFunction, ITextFieldProps, PrimaryButton, Stack, TextField, TooltipHost, } from "@fluentui/react"; import * as React from "react"; type SchemaAnalyzerHeaderProps = { isKernelIdle: boolean; isKernelBusy: boolean; onSampleSizeUpdated: (sampleSize?: string) => void; onAnalyzeButtonClick: (filter: string, sampleSize: string) => void; }; export const DefaultFilter = ""; export const DefaultSampleSize = "1000"; const FilterPlaceholder = "{ field: 'value' }"; const SampleSizePlaceholder = "1000"; const MinSampleSize = 1; const MaxSampleSize = 5000; export const SchemaAnalyzerHeader = ({ isKernelIdle, isKernelBusy, onSampleSizeUpdated, onAnalyzeButtonClick, }: SchemaAnalyzerHeaderProps): JSX.Element => { const [filter, setFilter] = React.useState(DefaultFilter); const [sampleSize, setSampleSize] = React.useState(DefaultSampleSize); return ( setFilter(newValue)} label="Filter" placeholder={FilterPlaceholder} disabled={!isKernelIdle} /> { const num = Number(newValue); if (!newValue || (num >= MinSampleSize && num <= MaxSampleSize)) { setSampleSize(newValue); onSampleSizeUpdated(newValue); } }} label="Sample size" onRenderLabel={onSampleSizeWrapDefaultLabelRenderer} placeholder={SampleSizePlaceholder} disabled={!isKernelIdle} /> { const sampleSizeToUse = sampleSize || DefaultSampleSize; setSampleSize(sampleSizeToUse); onAnalyzeButtonClick(filter, sampleSizeToUse); }} disabled={!isKernelIdle} styles={{ root: { width: 120 } }} /> { setFilter(DefaultFilter); setSampleSize(DefaultSampleSize); }} /> ); }; const onSampleSizeWrapDefaultLabelRenderer = ( props: ITextFieldProps, defaultRender: IRenderFunction, ): JSX.Element => { return ( {defaultRender(props)} ); };