src/routes/Main/ApisList/FirstRow.tsx (46 lines of code) (raw):

/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See LICENSE.md in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { FC, useEffect } from "react"; import { Dropdown, Option } from "@fluentui/react-components"; import { SortingOptions, TableColumns } from "../../../constants"; import { Api } from "../../../contracts/api"; import { LocalStorageKey, useLocalStorage } from "../../../util/useLocalStorage"; import LayoutSwitch from "./LayoutSwitch"; import css from "./index.module.scss"; const FirstRow: FC<{ apis: Api[] | null }> = ({ apis }) => { const localStorageSortBy = useLocalStorage(LocalStorageKey.apiListSortBy); const sortBy = localStorageSortBy.get(); const apisCount = apis?.length ?? 0; useEffect(() => { if (!sortBy) { localStorageSortBy.set(TableColumns[0].value); } }); return ( <div className={css.firstRow}> {apisCount === 0 ? ( <p> Displaying <b>0</b> items </p> ) : ( <p> Displaying <b>1</b> to <b>{apisCount}</b> of <b>{apisCount}</b> items </p> )} <div className={css.controls}> <div className={css.sortBy}> <label htmlFor={"sortBy"}>Sort by</label> <Dropdown id={"sortBy"} value={sortBy ? SortingOptions.find(o => o.value === sortBy)?.label : ""} selectedOptions={sortBy ? [sortBy] : []} onOptionSelect={(_, { optionValue }) => localStorageSortBy.set(optionValue)} > {SortingOptions.map(option => ( <Option key={option.value} value={option.value}> {option.label} </Option> ))} </Dropdown> </div> <LayoutSwitch /> </div> </div> ); }; export default FirstRow;