@material-ui/icons#Clear TypeScript Examples
The following examples show how to use
@material-ui/icons#Clear.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: index.tsx From aqualink-app with MIT License | 5 votes |
MenuDrawer = ({ classes, open, onClose }: MenuDrawerProps) => {
return (
<Drawer
anchor="left"
open={open}
onClose={onClose}
classes={{ paper: classes.paper }}
>
<IconButton
onClick={onClose}
style={{
alignSelf: "flex-end",
marginRight: 5,
marginTop: 5,
color: "white",
}}
>
<Clear />
</IconButton>
{menuRoutes.map(({ text, to, href, gaActionLabel }) => (
<Button
className={classes.menuDrawerButton}
key={text}
component={href ? ExternalLink : Link}
target={href ? "_blank" : undefined}
href={href || undefined}
to={to || ""}
onClick={() =>
trackButtonClick(
GaCategory.BUTTON_CLICK,
GaAction.SIDE_MENU_BUTTON_CLICK,
gaActionLabel
)
}
>
<Typography variant="h6">{text}</Typography>
</Button>
))}
<Box marginTop="auto" padding="25px">
<Typography variant="subtitle1">
{/* eslint-disable-next-line react/no-unescaped-entities */}
Aqualink is open-source (MIT). Join us and contribute!
</Typography>
<ButtonGroup variant="contained" color="default">
<Button
target="_blank"
href="https://github.com/aqualinkorg/aqualink-app"
startIcon={<GitHub />}
className={classes.contributeButton}
>
GitHub
</Button>
<Button
target="_blank"
href="https://ovio.org/project/aqualinkorg/aqualink-app"
className={classes.contributeButton}
>
<img src={ovioLogo} alt="Ovio Logo" />
</Button>
</ButtonGroup>
</Box>
</Drawer>
);
}
Example #2
Source File: import-csv-dialog-each-item.tsx From react-admin-import-csv with MIT License | 5 votes |
ImportCsvDialogEachItem = (props: ImportCsvDialogEachItemProps) => {
const {
disableImportNew,
disableImportOverwrite,
currentValue,
resourceName,
values,
fileName,
openAskDecide,
handleClose,
handleAskDecideReplace,
handleAskDecideAddAsNew,
handleAskDecideSkip,
handleAskDecideSkipAll,
isLoading,
idsConflicting,
} = props;
const translate = translateWrapper();
return (
<SharedDialogWrapper
title={translate("csv.dialogDecide.title", {
id: currentValue && currentValue.id,
resource: resourceName,
})}
subTitle={translate("csv.dialogCommon.subtitle", {
count: values && values.length,
fileName: fileName,
resource: resourceName,
})}
open={openAskDecide}
handleClose={handleClose}
>
{isLoading && <SharedLoader loadingTxt={translate("csv.loading")}></SharedLoader>}
{!isLoading && (
<div>
<p
style={{ fontFamily: "sans-serif", margin: "0" }}
dangerouslySetInnerHTML={{
__html: translate("csv.dialogCommon.conflictCount", {
resource: resourceName,
conflictingCount: idsConflicting && idsConflicting.length,
}),
}}
></p>
<List>
<SharedDialogButton
disabled={disableImportOverwrite}
onClick={handleAskDecideReplace}
icon={<Done htmlColor="#29c130" />}
label={translate("csv.dialogDecide.buttons.replaceRow", {
id: currentValue && currentValue.id,
})}
/>
<SharedDialogButton
disabled={disableImportNew}
onClick={handleAskDecideAddAsNew}
icon={<Add htmlColor="#3a88ca" />}
label={translate("csv.dialogDecide.buttons.addAsNewRow")}
/>
<SharedDialogButton
onClick={handleAskDecideSkip}
icon={<Undo htmlColor="black" />}
label={translate("csv.dialogDecide.buttons.skipDontReplace")}
/>
<SharedDialogButton
onClick={handleAskDecideSkipAll}
icon={<Clear htmlColor="#3a88ca" />}
label={translate("csv.dialogCommon.buttons.cancel")}
/>
</List>
</div>
)}
</SharedDialogWrapper>
);
}
Example #3
Source File: SelectPostageStampModal.tsx From bee-dashboard with BSD 3-Clause "New" or "Revised" License | 5 votes |
export function SelectPostageStampModal({ stamps, onSelect, onClose }: Props): ReactElement {
const [selectedStamp, setSelectedStamp] = useState<EnrichedPostageBatch | null>(null)
const classes = useStyles()
function onChange(stampId: string) {
const stamp = stamps.find(x => x.batchID === stampId)
if (stamp) {
setSelectedStamp(stamp)
}
}
function onFinish() {
if (selectedStamp) {
onSelect(selectedStamp)
onClose()
}
}
return (
<Dialog
open={true}
onClose={onClose}
aria-labelledby="form-dialog-title"
fullWidth
PaperProps={{ className: classes.dialog }}
>
<DialogTitle id="form-dialog-title" className={classes.title}>
Select postage stamp
</DialogTitle>
<DialogContent>
<SwarmSelect
options={stamps.map(x => ({ label: x.batchID, value: x.batchID }))}
onChange={event => onChange(event.target.value as string)}
/>
</DialogContent>
<DialogContent>
<ExpandableListItemActions>
<Button disabled={!selectedStamp} onClick={onFinish} variant="contained" startIcon={<Check />}>
Select
</Button>
<Button onClick={onClose} variant="contained" startIcon={<Clear />}>
Cancel
</Button>
</ExpandableListItemActions>
</DialogContent>
</Dialog>
)
}
Example #4
Source File: Audience.tsx From abacus with GNU General Public License v2.0 | 4 votes |
Audience = ({
indexedSegments,
formikProps,
completionBag,
}: {
indexedSegments: Record<number, Segment>
formikProps: FormikProps<{ experiment: ExperimentFormData }>
completionBag: ExperimentFormCompletionBag
}): JSX.Element => {
const classes = useStyles()
// The segmentExclusion code is currently split between here and SegmentAutocomplete
// An improvement might be to have SegmentAutocomplete only handle Segment[] and for code here
// to translate Segment <-> SegmentAssignment
const [segmentAssignmentsField, _segmentAssignmentsFieldMeta, segmentAssignmentsFieldHelper] = useField(
'experiment.segmentAssignments',
)
const [segmentExclusionState, setSegmentExclusionState] = useState<SegmentExclusionState>(() => {
// We initialize the segmentExclusionState from existing data if there is any
const firstSegmentAssignment = (segmentAssignmentsField.value as SegmentAssignmentNew[])[0]
return firstSegmentAssignment && firstSegmentAssignment.isExcluded
? SegmentExclusionState.Exclude
: SegmentExclusionState.Include
})
const onChangeSegmentExclusionState = (event: React.SyntheticEvent<HTMLInputElement>, value: string) => {
setSegmentExclusionState(value as SegmentExclusionState)
segmentAssignmentsFieldHelper.setValue(
(segmentAssignmentsField.value as SegmentAssignmentNew[]).map((segmentAssignment: SegmentAssignmentNew) => {
return {
...segmentAssignment,
isExcluded: value === SegmentExclusionState.Exclude,
}
}),
)
}
const platformError = formikProps.touched.experiment?.platform && formikProps.errors.experiment?.platform
const variationsError =
formikProps.touched.experiment?.variations && _.isString(formikProps.errors.experiment?.variations)
? formikProps.errors.experiment?.variations
: undefined
return (
<div className={classes.root}>
<Typography variant='h4' gutterBottom>
Define Your Audience
</Typography>
<div className={classes.row}>
<FormControl component='fieldset'>
<FormLabel required>Platform</FormLabel>
<Field component={Select} name='experiment.platform' displayEmpty error={!!platformError}>
<MenuItem value='' disabled>
Select a Platform
</MenuItem>
{Object.values(Platform).map((platform) => (
<MenuItem key={platform} value={platform}>
{platform}: {PlatformToHuman[platform]}
</MenuItem>
))}
</Field>
<FormHelperText error={!!platformError}>
{_.isString(platformError) ? platformError : undefined}
</FormHelperText>
</FormControl>
</div>
<div className={classes.row}>
<FormControl component='fieldset'>
<FormLabel required>User type</FormLabel>
<FormHelperText>Types of users to include in experiment</FormHelperText>
<Field component={FormikMuiRadioGroup} name='experiment.existingUsersAllowed' required>
<FormControlLabel
value='true'
label='All users (new + existing + anonymous)'
control={<Radio disabled={formikProps.isSubmitting} />}
disabled={formikProps.isSubmitting}
/>
<FormControlLabel
value='false'
label='Filter for newly signed up users (they must be also logged in)'
control={<Radio disabled={formikProps.isSubmitting} />}
disabled={formikProps.isSubmitting}
/>
</Field>
</FormControl>
</div>
<div className={classes.row}>
<FormControl component='fieldset' className={classes.segmentationFieldSet}>
<FormLabel htmlFor='segments-select'>Targeting</FormLabel>
<FormHelperText className={classes.segmentationHelperText}>
Who should see this experiment? <br /> Add optional filters to include or exclude specific target audience
segments.
</FormHelperText>
<MuiRadioGroup
aria-label='include-or-exclude-segments'
className={classes.segmentationExclusionState}
value={segmentExclusionState}
onChange={onChangeSegmentExclusionState}
>
<FormControlLabel
value={SegmentExclusionState.Include}
control={<Radio />}
label='Include'
name='non-formik-segment-exclusion-state-include'
/>
<FormControlLabel
value={SegmentExclusionState.Exclude}
control={<Radio />}
label='Exclude'
name='non-formik-segment-exclusion-state-exclude'
/>
</MuiRadioGroup>
<Field
name='experiment.segmentAssignments'
component={SegmentsAutocomplete}
options={Object.values(indexedSegments)}
// TODO: Error state, see https://stackworx.github.io/formik-material-ui/docs/api/material-ui-lab
renderInput={(params: AutocompleteRenderInputParams) => (
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
<MuiTextField
{...params}
variant='outlined'
placeholder={segmentAssignmentsField.value.length === 0 ? 'Search and select to customize' : undefined}
/>
/* eslint-enable @typescript-eslint/no-unsafe-member-access */
)}
segmentExclusionState={segmentExclusionState}
indexedSegments={indexedSegments}
fullWidth
id='segments-select'
/>
</FormControl>
</div>
<div className={classes.row}>
<FormControl component='fieldset' className={classes.segmentationFieldSet}>
<FormLabel htmlFor='variations-select'>Variations</FormLabel>
<FormHelperText className={classes.segmentationHelperText}>
Set the percentage of traffic allocated to each variation. Percentages may sum to less than 100 to avoid
allocating the entire userbase. <br /> Use “control” for the default (fallback) experience.
</FormHelperText>
{variationsError && <FormHelperText error>{variationsError}</FormHelperText>}
<TableContainer>
<Table className={classes.variants}>
<TableHead>
<TableRow>
<TableCell> Name </TableCell>
<TableCell> Allocated Percentage </TableCell>
<TableCell></TableCell>
</TableRow>
</TableHead>
<TableBody>
<FieldArray
name={`experiment.variations`}
render={(arrayHelpers) => {
const onAddVariation = () => {
arrayHelpers.push({
name: ``,
isDefault: false,
allocatedPercentage: '',
})
}
const onRemoveVariation = (index: number) => arrayHelpers.remove(index)
const variations = formikProps.values.experiment.variations
return (
<>
{variations.map((variation, index) => {
return (
// The key here needs to be changed for variable variations
<TableRow key={index}>
<TableCell>
{variation.isDefault ? (
variation.name
) : (
<Field
component={FormikMuiTextField}
name={`experiment.variations[${index}].name`}
size='small'
variant='outlined'
required
inputProps={{
'aria-label': 'Variation Name',
}}
/>
)}
</TableCell>
<TableCell>
<Field
className={classes.variationAllocatedPercentage}
component={FormikMuiTextField}
name={`experiment.variations[${index}].allocatedPercentage`}
type='number'
size='small'
variant='outlined'
inputProps={{ min: 1, max: 99, 'aria-label': 'Allocated Percentage' }}
required
InputProps={{
endAdornment: <InputAdornment position='end'>%</InputAdornment>,
}}
/>
</TableCell>
<TableCell>
{!variation.isDefault && 2 < variations.length && (
<IconButton onClick={() => onRemoveVariation(index)} aria-label='Remove variation'>
<Clear />
</IconButton>
)}
</TableCell>
</TableRow>
)
})}
<TableRow>
<TableCell colSpan={3}>
<Alert severity='warning' className={classes.abnWarning}>
<strong> Manual analysis only A/B/n </strong>
<br />
<p>
Experiments with more than a single treatment variation are in an early alpha stage.
</p>
<p>No results will be displayed.</p>
<p>
Please do not set up such experiments in production without consulting the ExPlat team
first.
</p>
<div className={classes.addVariation}>
<Add className={classes.addVariationIcon} />
<Button
variant='contained'
onClick={onAddVariation}
disableElevation
size='small'
aria-label='Add Variation'
>
Add Variation
</Button>
</div>
</Alert>
</TableCell>
</TableRow>
</>
)
}}
/>
</TableBody>
</Table>
</TableContainer>
</FormControl>
</div>
{isDebugMode() && (
<div className={classes.row}>
<FormControl component='fieldset'>
<FormLabel htmlFor='experiment.exclusionGroupTagIds'>Exclusion Groups</FormLabel>
<FormHelperText>Optionally add this experiment to a mutually exclusive experiment group.</FormHelperText>
<br />
<Field
component={AbacusAutocomplete}
name='experiment.exclusionGroupTagIds'
id='experiment.exclusionGroupTagIds'
fullWidth
options={
// istanbul ignore next; trivial
completionBag.exclusionGroupCompletionDataSource.data ?? []
}
loading={completionBag.exclusionGroupCompletionDataSource.isLoading}
multiple
renderOption={(option: AutocompleteItem) => <Chip label={option.name} />}
renderInput={(params: AutocompleteRenderInputParams) => (
<MuiTextField
{...params}
variant='outlined'
InputProps={{
...autocompleteInputProps(params, completionBag.exclusionGroupCompletionDataSource.isLoading),
}}
InputLabelProps={{
shrink: true,
}}
/>
)}
/>
</FormControl>
</div>
)}
</div>
)
}
Example #5
Source File: Metrics.tsx From abacus with GNU General Public License v2.0 | 4 votes |
EventEditor = ({
index,
completionBag: { eventCompletionDataSource },
exposureEvent: { event: name, props: propList },
onRemoveExposureEvent,
}: {
index: number
completionBag: ExperimentFormCompletionBag
exposureEvent: EventNew
onRemoveExposureEvent: () => void
}) => {
const classes = useEventEditorStyles()
const metricClasses = useMetricEditorStyles()
const { isLoading, data: propCompletions } = useDataSource(async () => name && getPropNameCompletions(name), [name])
return (
<TableRow>
<TableCell>
<div className={classes.exposureEventsEventNameCell}>
<Field
component={AbacusAutocomplete}
name={`experiment.exposureEvents[${index}].event`}
className={classes.exposureEventsEventName}
id={`experiment.exposureEvents[${index}].event`}
options={eventCompletionDataSource.data}
loading={eventCompletionDataSource.isLoading}
renderInput={(params: AutocompleteRenderInputParams) => (
<MuiTextField
{...params}
label='Event Name'
placeholder='event_name'
variant='outlined'
InputLabelProps={{
shrink: true,
}}
InputProps={{
...autocompleteInputProps(params, eventCompletionDataSource.isLoading),
'aria-label': 'Event Name',
}}
/>
)}
/>
<IconButton
className={classes.exposureEventsEventRemoveButton}
onClick={onRemoveExposureEvent}
aria-label='Remove exposure event'
>
<Clear />
</IconButton>
</div>
<FieldArray
name={`experiment.exposureEvents[${index}].props`}
render={(arrayHelpers) => {
const onAddExposureEventProperty = () => {
arrayHelpers.push({
key: '',
value: '',
})
}
return (
<div>
<div>
{propList &&
propList.map((_prop: unknown, propIndex: number) => {
const onRemoveExposureEventProperty = () => {
arrayHelpers.remove(propIndex)
}
return (
<div className={classes.exposureEventsEventPropertiesRow} key={propIndex}>
<Field
component={AbacusAutocomplete}
name={`experiment.exposureEvents[${index}].props[${propIndex}].key`}
id={`experiment.exposureEvents[${index}].props[${propIndex}].key`}
options={propCompletions || []}
loading={isLoading}
freeSolo={true}
className={classes.exposureEventsEventPropertiesKeyAutoComplete}
renderInput={(params: AutocompleteRenderInputParams) => (
<MuiTextField
{...params}
className={classes.exposureEventsEventPropertiesKey}
label='Key'
placeholder='key'
variant='outlined'
size='small'
InputProps={{
...autocompleteInputProps(params, isLoading),
'aria-label': 'Property Key',
}}
InputLabelProps={{
shrink: true,
}}
/>
)}
/>
<Field
component={TextField}
name={`experiment.exposureEvents[${index}].props[${propIndex}].value`}
id={`experiment.exposureEvents[${index}].props[${propIndex}].value`}
type='text'
variant='outlined'
placeholder='value'
label='Value'
size='small'
inputProps={{
'aria-label': 'Property Value',
}}
InputLabelProps={{
shrink: true,
}}
/>
<IconButton
className={classes.exposureEventsEventRemoveButton}
onClick={onRemoveExposureEventProperty}
aria-label='Remove exposure event property'
>
<Clear />
</IconButton>
</div>
)
})}
</div>
<div className={metricClasses.addMetric}>
<Add className={metricClasses.addMetricAddSymbol} />
<Button
variant='contained'
onClick={onAddExposureEventProperty}
disableElevation
size='small'
aria-label='Add Property'
>
Add Property
</Button>
</div>
</div>
)
}}
/>
</TableCell>
</TableRow>
)
}