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 cx from 'classnames'; | |
| import { useState } from 'react'; | |
| import { FilterableMultiSelect, Tag, Tooltip, Button } from '@carbon/react'; | |
| import { ChevronUp, ChevronDown, SubtractAlt } from '@carbon/icons-react'; | |
| import { Metric, Model } from '@/src/types'; | |
| import { extractMetricDisplayName } from '@/src/utilities/metrics'; | |
| import classes from './Hide.module.scss'; | |
| // =================================================================================== | |
| // TYPES | |
| // =================================================================================== | |
| interface Props { | |
| models: Model[]; | |
| metrics: Metric[]; | |
| hiddenModels: Model[]; | |
| hiddenMetrics: Metric[]; | |
| setHiddenModels: Function; | |
| setHiddenMetrics: Function; | |
| } | |
| export default function HidePanel({ | |
| models, | |
| metrics, | |
| hiddenModels: ignoredModels, | |
| hiddenMetrics: ignoredMetrics, | |
| setHiddenModels: setIgnoredModels, | |
| setHiddenMetrics: setIgnoredMetrics, | |
| }: Props) { | |
| // Step 1: Initialize state and necessary variables | |
| const [show, setShow] = useState<boolean>(true); | |
| // Step 2: Render | |
| return ( | |
| <> | |
| <Tooltip | |
| label={'Click to hide certain models & metrics'} | |
| align={'right'} | |
| className={classes.hideBtnTooltip} | |
| > | |
| <Button | |
| id={'PerformanceOverview-hide--Ignore'} | |
| className={classes.hideBtn} | |
| kind={'ghost'} | |
| size={'sm'} | |
| onClick={() => { | |
| setShow(!show); | |
| }} | |
| > | |
| <div className={classes.hideBtnElements}> | |
| {show ? <ChevronUp size={24} /> : <ChevronDown size={24} />} | |
| <div className={classes.hideBtnCaptionElements}> | |
| <h5>Hide Models & Metrics</h5> | |
| <SubtractAlt /> | |
| </div> | |
| </div> | |
| </Button> | |
| </Tooltip> | |
| {show ? ( | |
| <div className={cx(classes.container, show && classes.visible)}> | |
| <div | |
| key={'models-limiter--' + `${ignoredModels === models}`} | |
| className={classes.selector} | |
| > | |
| <FilterableMultiSelect | |
| id={'model--limiter'} | |
| titleText={ | |
| <div className={classes.selectorLabel}> | |
| <span>Models</span> | |
| <Button | |
| kind="ghost" | |
| size="sm" | |
| onClick={() => setIgnoredModels(models)} | |
| > | |
| select all | |
| </Button> | |
| </div> | |
| } | |
| items={models} | |
| initialSelectedItems={ignoredModels} | |
| itemToString={(item) => (item.name ? item.name : item.modelId)} | |
| onChange={(event) => { | |
| setIgnoredModels(event.selectedItems); | |
| }} | |
| ></FilterableMultiSelect> | |
| <div> | |
| {ignoredModels.map((model) => { | |
| return ( | |
| <Tag | |
| type={'cool-gray'} | |
| key={`filtered-model--` + model.modelId} | |
| > | |
| {model.name ? model.name : model.modelId} | |
| </Tag> | |
| ); | |
| })} | |
| </div> | |
| </div> | |
| <div | |
| key={'metrics-limiter--' + `${ignoredMetrics === metrics}`} | |
| className={classes.selector} | |
| > | |
| <FilterableMultiSelect | |
| id={'metrics--limiter'} | |
| titleText={ | |
| <div className={classes.selectorLabel}> | |
| <span>Metrics</span> | |
| <Button | |
| kind="ghost" | |
| size="sm" | |
| onClick={() => setIgnoredMetrics(metrics)} | |
| > | |
| select all | |
| </Button> | |
| </div> | |
| } | |
| items={metrics} | |
| initialSelectedItems={ignoredMetrics} | |
| itemToString={(item) => | |
| item.displayName ? item.displayName : item.name | |
| } | |
| onChange={(event) => { | |
| setIgnoredMetrics(event.selectedItems); | |
| }} | |
| ></FilterableMultiSelect> | |
| <div> | |
| {ignoredMetrics.map((metric) => { | |
| return ( | |
| <Tag | |
| type={'cool-gray'} | |
| key={`filtered-metric--` + metric.name} | |
| > | |
| {extractMetricDisplayName(metric)} | |
| </Tag> | |
| ); | |
| })} | |
| </div> | |
| </div> | |
| </div> | |
| ) : null} | |
| </> | |
| ); | |
| } | |