in public/src/components/channelManagement/sidebar.tsx [68:187]
function Sidebar<T extends Test>({
tests,
selectedTestName,
onTestPriorityChange,
onTestSelected,
testNamePrefix,
createTest,
onBatchTestArchive,
onTestListOrderSave,
onTestListLock,
testListLockStatus,
userHasTestListLocked,
savingTestList,
allowEditing,
}: SidebarProps<T>): React.ReactElement<SidebarProps<T>> {
const classes = useStyles();
const [regionFilter, setRegionFilter] = useState<RegionsAndAll>('ALL');
const filterTests = function(testsToFilter: Test[]): Test[] {
if (userHasTestListLocked || 'ALL' === regionFilter) {
return testsToFilter;
}
return testsToFilter.filter(
t =>
t.regionTargeting?.targetedCountryGroups?.indexOf(regionFilter) >= 0 ||
t.locations.indexOf(regionFilter) >= 0,
);
};
return (
<div className={classes.root}>
<div className={classes.buttonsContainer}>
<NewTestButton
existingNames={tests.map(t => t.name)}
existingNicknames={tests.map(t => t.nickname || '')}
testNamePrefix={testNamePrefix}
createTest={createTest}
disabled={userHasTestListLocked || !allowEditing}
/>
<BatchProcessTestButton
// filter out live tests and any test currently being edited
draftTests={tests.filter(t => !(t.status === 'Live' && t.name !== selectedTestName))}
onBatchTestArchive={onBatchTestArchive}
disabled={!allowEditing}
/>
{userHasTestListLocked && (
<>
<Button
variant="outlined"
size="medium"
startIcon={<SaveIcon />}
className={classes.reorderListButton}
onClick={savingTestList ? undefined : onTestListOrderSave}
disabled={savingTestList}
>
<Typography className={classes.buttonText}>
{savingTestList ? 'Saving order...' : 'Save order'}
</Typography>
</Button>
<Typography className={classes.header}>EDITING: tests in priority order</Typography>
</>
)}
{testListLockStatus.locked && !userHasTestListLocked && (
<>
<Button
variant="outlined"
size="medium"
startIcon={<EditIcon />}
className={classes.reorderListButton}
onClick={() => onTestListLock(true)}
disabled={!allowEditing}
>
<Typography className={classes.buttonText}>Take control</Typography>
</Button>
<Typography className={classes.header}>
{testListLockStatus.email} has the test list locked
</Typography>
</>
)}
{!testListLockStatus.locked && (
<Button
variant="outlined"
size="medium"
startIcon={<EditIcon />}
className={classes.reorderListButton}
onClick={() => onTestListLock(false)}
disabled={!allowEditing}
>
<Typography className={classes.buttonText}>Reorder test list</Typography>
</Button>
)}
{!userHasTestListLocked && (
<TestListSidebarFilterSelector
regionFilter={regionFilter as string}
handleRegionFilterChange={setRegionFilter}
/>
)}
</div>
<div className={classes.listsContainer}>
<div className={classes.priorityLabelListContainer}>
<TestPriorityLabelList numTests={tests.length} />
</div>
<TestList
tests={filterTests(tests)}
isInEditMode={userHasTestListLocked}
selectedTestName={selectedTestName}
onTestPriorityChange={onTestPriorityChange}
onTestSelected={onTestSelected}
/>
</div>
</div>
);
}