frontend/app/common/SortSelector.tsx (55 lines of code) (raw):
import React, { ChangeEventHandler, ReactEventHandler } from "react";
import { Grid, MenuItem, Select } from "@material-ui/core";
import { SelectInputProps } from "@material-ui/core/Select/SelectInput";
interface SortSelectorProps {
selectedField: string;
sortOrder: string;
onChange: (fieldName: string, sortOrder: string) => void;
}
const SortSelector: React.FC<SortSelectorProps> = (props) => {
const sortSelectorChanged: SelectInputProps["onChange"] = (evt) => {
props.onChange(evt.target.value as string, props.sortOrder);
};
const directionSelectorChanged: SelectInputProps["onChange"] = (evt) => {
props.onChange(props.selectedField, evt.target.value as string);
};
return (
<Grid container direction="row">
<Grid item>
<label htmlFor="sort-field-selector">Sort:</label>
<Select
id="sort-field-selector"
value={props.selectedField}
onChange={sortSelectorChanged}
>
//see FileListController
<MenuItem value="MXFS_ARCHIVE_TIME">Archive time</MenuItem>
<MenuItem value="MXFS_CREATION_TIME">Created time</MenuItem>
<MenuItem value="MXFS_MODIFICATION_TIME">Modified time</MenuItem>
<MenuItem value="MXFS_FILEEXT">File type</MenuItem>
<MenuItem value="MXFS_FILENAME">File name</MenuItem>
<MenuItem value="DPSP_SIZE">File size</MenuItem>
</Select>
</Grid>
<Grid item>
<Select
id="sort-dir-selector"
value={props.sortOrder}
onChange={directionSelectorChanged}
>
<MenuItem value="Descending">
{props.selectedField?.includes("TIME")
? "Most recent first"
: "Descending"}
</MenuItem>
<MenuItem value="Ascending">
{props.selectedField?.includes("TIME")
? "Oldest first"
: "Ascending"}
</MenuItem>
</Select>
</Grid>
</Grid>
);
};
export default SortSelector;