Spaces:
Running
Running
| /** | |
| * | |
| * Copyright 2023-2025 InspectorRAGet Team | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| * | |
| **/ | |
| 'use client'; | |
| import { memo } from 'react'; | |
| import { Select, SelectItem, SelectItemGroup } from '@carbon/react'; | |
| import { Metric } from '@/src/types'; | |
| import { extractMetricDisplayName } from '@/src/utilities/metrics'; | |
| interface Props { | |
| metrics: Metric[]; | |
| onSelect: Function; | |
| warn: boolean; | |
| warnText?: string; | |
| defaultValue?: string; | |
| disableDefaultValue?: boolean; | |
| disabledMetrics?: Metric[]; | |
| disabled?: boolean; | |
| } | |
| export default memo(function MetricSelector({ | |
| metrics, | |
| onSelect, | |
| warn = false, | |
| warnText = 'You must select a single metric to view tasks.', | |
| defaultValue = 'all', | |
| disableDefaultValue = false, | |
| disabledMetrics, | |
| disabled = false, | |
| }: Props) { | |
| const metricTypes = new Set(metrics.map((metric) => metric.type)); | |
| return ( | |
| <Select | |
| id={'metric-selector'} | |
| labelText="Choose metric" | |
| disabled={disabled} | |
| defaultValue={defaultValue} | |
| warn={warn} | |
| warnText={warnText} | |
| onChange={(event) => { | |
| onSelect( | |
| event.target.value !== defaultValue | |
| ? metrics.find((metric) => metric.name === event.target.value) | |
| : undefined, | |
| ); | |
| }} | |
| > | |
| <SelectItem | |
| key={'default-selector'} | |
| text={ | |
| defaultValue.charAt(0).toUpperCase() + | |
| defaultValue.slice(1).toLowerCase() | |
| } | |
| value={defaultValue} | |
| disabled={disableDefaultValue} | |
| /> | |
| {metricTypes.size > 1 ? ( | |
| <> | |
| <SelectItemGroup key={'human-metric-selectors'} label={'Human'}> | |
| {metrics | |
| .filter((metric) => metric.author === 'human') | |
| .map((metric) => { | |
| return ( | |
| <SelectItem | |
| key={`${metric.name}-selector`} | |
| value={metric.name} | |
| text={extractMetricDisplayName(metric)} | |
| disabled={ | |
| disabledMetrics && | |
| disabledMetrics | |
| .map((entry) => entry.name) | |
| .includes(metric.name) | |
| } | |
| ></SelectItem> | |
| ); | |
| })} | |
| </SelectItemGroup> | |
| <SelectItemGroup | |
| key={'algorithmic-metric-selectors'} | |
| label={'Algorithmic'} | |
| > | |
| {metrics | |
| .filter((metric) => metric.author === 'algorithm') | |
| .map((metric) => { | |
| return ( | |
| <SelectItem | |
| key={`${metric.name}-selector`} | |
| value={metric.name} | |
| text={extractMetricDisplayName(metric)} | |
| disabled={ | |
| disabledMetrics && | |
| disabledMetrics | |
| .map((entry) => entry.name) | |
| .includes(metric.name) | |
| } | |
| ></SelectItem> | |
| ); | |
| })} | |
| </SelectItemGroup> | |
| </> | |
| ) : ( | |
| metrics.map((metric) => { | |
| return ( | |
| <SelectItem | |
| key={`${metric.name}-selector`} | |
| value={metric.name} | |
| text={extractMetricDisplayName(metric)} | |
| disabled={ | |
| disabledMetrics && | |
| disabledMetrics.map((entry) => entry.name).includes(metric.name) | |
| } | |
| ></SelectItem> | |
| ); | |
| }) | |
| )} | |
| </Select> | |
| ); | |
| }); | |