@material-ui/icons#Edit TypeScript Examples
The following examples show how to use
@material-ui/icons#Edit.
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 frontegg-react with MIT License | 6 votes |
iconMap: { [K in IconNames]: any } = {
'down-arrow': KeyboardArrowDownRounded,
'left-arrow': KeyboardArrowLeftRounded,
'person-add': PersonAddRounded,
'right-arrow': KeyboardArrowRightRounded,
'sort-arrows-asc': ArrowUpward,
'sort-arrows-desc': ArrowDownward,
'sort-arrows': DeleteRounded,
'up-arrow': KeyboardArrowUpRounded,
'vertical-dots': MoreVertRounded,
'visibility-off': VisibilityOff,
back: ArrowBackRounded,
checkmark: CheckRounded,
copy: FileCopyRounded,
delete: DeleteRounded,
edit: Edit,
filters: FilterList,
image: ImageRounded,
indeterminate: IndeterminateCheckBoxRounded,
search: Search,
send: SendRounded,
refresh: Cached,
'calendar-today': CalendarToday,
flash: FlashOn,
pdf: PictureAsPdf,
csv: GridOn,
visibility: Visibility,
warning: WarningRounded,
list: Subject,
exit: ExitToAppRounded,
swap: CachedRounded,
profile: FaceRounded,
globe: Language,
close: Close,
}
Example #2
Source File: FormContainer.tsx From UsTaxes with GNU Affero General Public License v3.0 | 5 votes |
MutableListItem = ({
icon,
primary,
secondary,
remove,
onEdit,
editing = false,
disableEdit = false
}: MutableListItemProps): ReactElement => {
const canEdit = !editing && !disableEdit && onEdit !== undefined
const canDelete = remove !== undefined && !editing
const editAction = (() => {
if (canEdit) {
return (
<ListItemIcon>
<IconButton onClick={onEdit} edge="end" aria-label="edit">
<Edit />
</IconButton>
</ListItemIcon>
)
}
})()
const deleteAction = (() => {
if (canDelete) {
return (
<ListItemSecondaryAction>
<IconButton onClick={remove} edge="end" aria-label="delete">
<Delete />
</IconButton>
</ListItemSecondaryAction>
)
}
})()
const status = editing ? 'editing' : undefined
return (
<ListItem>
<ListItemIcon>{icon}</ListItemIcon>
<ListItemText
primary={<strong>{primary}</strong>}
secondary={secondary}
/>
{editAction}
{deleteAction}
{status}
</ListItem>
)
}
Example #3
Source File: ConclusionsPanel.tsx From abacus with GNU General Public License v2.0 | 4 votes |
/**
* Renders the conclusion information of an experiment in a panel component.
*
* @param experiment - The experiment with the conclusion information.
* @param experimentReloadRef - A ref for reloading the experiment.
*/
function ConclusionsPanel({
className,
experiment,
experimentReloadRef,
}: {
className?: string
experiment: ExperimentFull
experimentReloadRef: React.MutableRefObject<() => void>
}): JSX.Element {
const classes = useStyles()
const deployedVariation = Experiments.getDeployedVariation(experiment)
const data = [
{ label: 'Reason the experiment ended', value: experiment.endReason },
{
label: 'Conclusion URL',
value: !!experiment.conclusionUrl && (
<a href={experiment.conclusionUrl} rel='noopener noreferrer' target='_blank'>
{experiment.conclusionUrl}
</a>
),
},
{ label: 'Deployed variation', value: deployedVariation?.name },
]
// Edit Modal
const { enqueueSnackbar } = useSnackbar()
const [isEditing, setIsEditing] = useState<boolean>(false)
const editInitialValues = {
endReason: experiment.endReason ?? '',
conclusionUrl: experiment.conclusionUrl ?? '',
deployedVariationId: String(experiment.deployedVariationId ?? ''),
}
const onEdit = () => setIsEditing(true)
const onCancelEdit = () => setIsEditing(false)
const onSubmitEdit = async ({ experiment: formValues }: { experiment: typeof editInitialValues }) => {
try {
await ExperimentsApi.patch(experiment.experimentId, {
endReason: formValues.endReason,
conclusionUrl: formValues.conclusionUrl === '' ? undefined : formValues.conclusionUrl,
deployedVariationId: formValues.deployedVariationId ? Number(formValues.deployedVariationId) : undefined,
})
enqueueSnackbar('Experiment Updated!', { variant: 'success' })
experimentReloadRef.current()
setIsEditing(false)
} catch (e) {
// istanbul ignore next; shouldn't happen
enqueueSnackbar(`Oops! Something went wrong while trying to update your experiment. ${serverErrorMessage(e)}`, {
variant: 'error',
})
}
}
return (
<Paper className={className}>
<Toolbar>
<Typography className={classes.title} color='textPrimary' variant='h3'>
Conclusions
</Typography>
<Button onClick={onEdit} variant='outlined' aria-label='Edit Conclusion'>
<Edit />
Edit
</Button>
</Toolbar>
<LabelValueTable data={data} />
<Dialog open={isEditing} fullWidth aria-labelledby='edit-experiment-conclusions-dialog-title'>
<DialogTitle id='edit-experiment-conclusions-dialog-title'>Edit Experiment: Conclusions</DialogTitle>
<Formik
initialValues={{ experiment: editInitialValues }}
validationSchema={yup.object({ experiment: yupPick(experimentFullSchema, Object.keys(editInitialValues)) })}
onSubmit={onSubmitEdit}
>
{(formikProps) => (
<form onSubmit={formikProps.handleSubmit}>
<DialogContent>
<div className={classes.row}>
<Field
component={TextField}
name='experiment.endReason'
id='experiment.endReason'
label='Reason the experiment ended'
placeholder='Completed successfully'
variant='outlined'
fullWidth
required
multiline
rows={2}
InputLabelProps={{
shrink: true,
}}
/>
</div>
<div className={classes.row}>
<Field
component={TextField}
id='experiment.conclusionUrl'
name='experiment.conclusionUrl'
placeholder='https://your-p2-post-here/#conclusion-comment'
label='Conclusion URL'
variant='outlined'
fullWidth
InputLabelProps={{
shrink: true,
}}
/>
</div>
<div className={classes.row}>
<FormControl component='fieldset'>
<FormLabel component='legend'>Deployed variation</FormLabel>
<Field component={FormikMuiRadioGroup} name='experiment.deployedVariationId'>
{experiment.variations.map((variation) => (
<FormControlLabel
key={variation.variationId}
value={String(variation.variationId)}
control={<Radio />}
label={variation.name}
/>
))}
</Field>
</FormControl>
</div>
</DialogContent>
<DialogActions>
<Button onClick={onCancelEdit} color='primary'>
Cancel
</Button>
<LoadingButtonContainer isLoading={formikProps.isSubmitting}>
<Button
type='submit'
variant='contained'
color='secondary'
disabled={formikProps.isSubmitting || !formikProps.isValid}
>
Save
</Button>
</LoadingButtonContainer>
</DialogActions>
</form>
)}
</Formik>
</Dialog>
</Paper>
)
}
Example #4
Source File: GeneralPanel.tsx From abacus with GNU General Public License v2.0 | 4 votes |
/**
* Renders the general information of an experiment in a panel component.
*
* @param experiment - The experiment with the general information.
* @param experimentReloadRef - Ref to reload the experiment.
*/
function GeneralPanel({
className,
experiment,
experimentReloadRef,
}: {
className?: string
experiment: ExperimentFull
experimentReloadRef: React.MutableRefObject<() => void>
}): JSX.Element {
const classes = useStyles()
const data = [
{
label: 'Status',
value: <ExperimentStatus status={experiment.status} />,
},
{
label: 'Dates',
value: (
<>
<DatetimeText datetime={experiment.startDatetime} excludeTime />
<span className={classes.to}>to</span>
<DatetimeText datetime={experiment.endDatetime} excludeTime />
</>
),
},
{ label: 'Description', value: <span className={classes.monospace}>{experiment.description}</span> },
{ label: 'Owner', value: <span className={classes.monospace}>{experiment.ownerLogin}</span> },
{
label: 'P2 Link',
value: (
<Link href={experiment.p2Url} rel='noopener noreferrer' target='_blank' className={classes.monospace}>
{experiment.p2Url}
</Link>
),
},
{
label: 'Assignment Cache Entry',
value: (
<span className={classes.monospace}>
{AssignmentCacheStatusToHuman[experiment.assignmentCacheStatus]} (
<Link
href="https://github.com/Automattic/experimentation-platform/wiki/Experimenter's-Guide#the-file-system-cache"
rel='noopener noreferrer'
target='_blank'
underline='always'
>
learn more
</Link>
)
</span>
),
},
]
// Edit Modal
const { enqueueSnackbar } = useSnackbar()
const [isEditing, setIsEditing] = useState<boolean>(false)
const generalEditInitialExperiment = {
..._.pick(experiment, ['description', 'ownerLogin']),
endDatetime: formatIsoDate(experiment.endDatetime),
// Needed for endDatetime validation
startDatetime: experiment.startDatetime,
}
const canEdit = experiment.status !== Status.Staging
const canEditEndDate = experiment.status === Status.Running
const generalEditValidationSchema = yupPick(experimentFullSchema, ['description', 'ownerLogin']).shape({
...(canEditEndDate && {
// We need to ensure the end date is in the future
endDatetime: (yup.reach(experimentFullSchema, 'endDatetime') as unknown as yup.MixedSchema).test(
'future-end-date',
'End date (UTC) must be in the future.',
// We need to refer to new Date() instead of using dateFns.isFuture so MockDate works with this in the tests.
(date) => dateFns.isBefore(new Date(), date),
),
}),
})
const onEdit = () => setIsEditing(true)
const onCancelEdit = () => setIsEditing(false)
const onSubmitEdit = async (formData: { experiment: typeof generalEditInitialExperiment }) => {
try {
const experimentPatch = _.pick(
formData.experiment,
canEditEndDate ? ['description', 'ownerLogin', 'endDatetime'] : ['description', 'ownerLogin'],
)
await ExperimentsApi.patch(experiment.experimentId, experimentPatch as unknown as Partial<ExperimentFull>)
enqueueSnackbar('Experiment Updated!', { variant: 'success' })
experimentReloadRef.current()
setIsEditing(false)
} catch (e) /* istanbul ignore next; Shouldn't happen */ {
console.error(e)
enqueueSnackbar(`Oops! Something went wrong while trying to update your experiment. ${serverErrorMessage(e)}`, {
variant: 'error',
})
}
}
return (
<Paper className={className}>
<Toolbar>
<Typography className={classes.title} color='textPrimary' variant='h3'>
General
</Typography>
<Tooltip title={canEdit ? '' : 'Use "Edit in Wizard" for staging experiments.'}>
<div>
<Button onClick={onEdit} variant='outlined' disabled={!canEdit} aria-label='Edit Experiment General Data'>
<Edit />
Edit
</Button>
</div>
</Tooltip>
</Toolbar>
<LabelValueTable data={data} />
<Dialog open={isEditing} fullWidth aria-labelledby='edit-experiment-general-form-dialog-title'>
<DialogTitle id='edit-experiment-general-form-dialog-title'>Edit Experiment: General</DialogTitle>
<Formik
initialValues={{ experiment: generalEditInitialExperiment }}
validationSchema={yup.object({ experiment: generalEditValidationSchema })}
onSubmit={onSubmitEdit}
>
{(formikProps) => (
<form onSubmit={formikProps.handleSubmit} noValidate>
<DialogContent>
<div className={classes.row}>
<Field
component={TextField}
name='experiment.description'
id='experiment.description'
label='Experiment description'
placeholder='Monthly vs. yearly pricing'
helperText='State your hypothesis.'
variant='outlined'
fullWidth
required
multiline
rows={4}
InputLabelProps={{
shrink: true,
}}
/>
</div>
<div className={classes.row}>
<Field
component={TextField}
className={classes.datePicker}
name='experiment.endDatetime'
id='experiment.endDatetime'
label='End date'
disabled={!canEditEndDate}
helperText={
canEditEndDate ? 'Use the UTC timezone.' : `Cannot be changed as the experiment has finished.`
}
type='date'
variant='outlined'
fullWidth
required
InputLabelProps={{
shrink: true,
}}
/>
</div>
<div className={classes.row}>
<Field
component={TextField}
name='experiment.ownerLogin'
id='experiment.ownerLogin'
label='Owner'
placeholder='wp_username'
helperText='Use WordPress.com username.'
variant='outlined'
fullWidth
required
InputProps={{
startAdornment: <InputAdornment position='start'>@</InputAdornment>,
}}
InputLabelProps={{
shrink: true,
}}
/>
</div>
</DialogContent>
<DialogActions>
<Button onClick={onCancelEdit} color='primary'>
Cancel
</Button>
<LoadingButtonContainer isLoading={formikProps.isSubmitting}>
<Button
type='submit'
variant='contained'
color='secondary'
disabled={formikProps.isSubmitting || !formikProps.isValid}
>
Save
</Button>
</LoadingButtonContainer>
</DialogActions>
</form>
)}
</Formik>
</Dialog>
</Paper>
)
}
Example #5
Source File: ProjectListPage.tsx From frontend with Apache License 2.0 | 4 votes |
ProjectsListPage = () => {
const { enqueueSnackbar } = useSnackbar();
const projectState = useProjectState();
const projectDispatch = useProjectDispatch();
const helpDispatch = useHelpDispatch();
const [createDialogOpen, setCreateDialogOpen] = React.useState(false);
const [updateDialogOpen, setUpdateDialogOpen] = React.useState(false);
const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false);
useEffect(() => {
setHelpSteps(helpDispatch, PROJECT_LIST_PAGE_STEPS);
});
const toggleCreateDialogOpen = () => {
setCreateDialogOpen(!createDialogOpen);
};
const toggleUpdateDialogOpen = () => {
setUpdateDialogOpen(!updateDialogOpen);
};
const toggleDeleteDialogOpen = () => {
setDeleteDialogOpen(!deleteDialogOpen);
};
return (
<Box mt={2}>
<Grid container spacing={2}>
<Grid item xs={4}>
<Box
height="100%"
alignItems="center"
justifyContent="center"
display="flex"
>
<Fab
color="primary"
aria-label="add"
onClick={() => {
toggleCreateDialogOpen();
setProjectEditState(projectDispatch);
}}
>
<Add />
</Fab>
</Box>
<BaseModal
open={createDialogOpen}
title={"Create Project"}
submitButtonText={"Create"}
onCancel={toggleCreateDialogOpen}
content={<ProjectForm />}
onSubmit={() =>
createProject(projectDispatch, projectState.projectEditState)
.then((project) => {
toggleCreateDialogOpen();
enqueueSnackbar(`${project.name} created`, {
variant: "success",
});
})
.catch((err) =>
enqueueSnackbar(err, {
variant: "error",
})
)
}
/>
<BaseModal
open={updateDialogOpen}
title={"Update Project"}
submitButtonText={"Update"}
onCancel={toggleUpdateDialogOpen}
content={<ProjectForm />}
onSubmit={() =>
updateProject(projectDispatch, projectState.projectEditState)
.then((project) => {
toggleUpdateDialogOpen();
enqueueSnackbar(`${project.name} updated`, {
variant: "success",
});
})
.catch((err) =>
enqueueSnackbar(err, {
variant: "error",
})
)
}
/>
<BaseModal
open={deleteDialogOpen}
title={"Delete Project"}
submitButtonText={"Delete"}
onCancel={toggleDeleteDialogOpen}
content={
<Typography>{`Are you sure you want to delete: ${projectState.projectEditState.name}?`}</Typography>
}
onSubmit={() =>
deleteProject(projectDispatch, projectState.projectEditState.id)
.then((project) => {
toggleDeleteDialogOpen();
enqueueSnackbar(`${project.name} deleted`, {
variant: "success",
});
})
.catch((err) =>
enqueueSnackbar(err, {
variant: "error",
})
)
}
/>
</Grid>
{projectState.projectList.map((project) => (
<Grid item xs={4} key={project.id}>
<Card id={LOCATOR_PROJECT_LIST_PAGE_PROJECT_LIST}>
<CardContent>
<Typography>Id: {project.id}</Typography>
<Typography>Name: {project.name}</Typography>
<Typography>Main branch: {project.mainBranchName}</Typography>
<Typography>
Created: {formatDateTime(project.createdAt)}
</Typography>
</CardContent>
<CardActions>
<Button color="primary" href={project.id}>
Builds
</Button>
<Button
color="primary"
href={`${routes.VARIATION_LIST_PAGE}/${project.id}`}
>
Variations
</Button>
<IconButton
onClick={(event: React.MouseEvent<HTMLElement>) => {
toggleUpdateDialogOpen();
setProjectEditState(projectDispatch, project);
}}
>
<Edit />
</IconButton>
<IconButton
onClick={(event: React.MouseEvent<HTMLElement>) => {
toggleDeleteDialogOpen();
setProjectEditState(projectDispatch, project);
}}
>
<Delete />
</IconButton>
</CardActions>
</Card>
</Grid>
))}
</Grid>
</Box>
);
}