()
| 47 | }; |
| 48 | |
| 49 | render() { |
| 50 | const { user: { username, id, default_weight_unit }, updateUser, fetchUser } = this.props; |
| 51 | const { loading, packs } = this.state; |
| 52 | return ( |
| 53 | <DocumentTitle title={`Packstack | My Packs`}> |
| 54 | <> |
| 55 | <PageTitle> |
| 56 | <h1>My Packs</h1> |
| 57 | </PageTitle> |
| 58 | <Grid> |
| 59 | <div className="two-thirds"> |
| 60 | <h3>Packs</h3> |
| 61 | <PackList loading={loading} packs={packs} currentUserId={id} deletePack={this.deletePack}/> |
| 62 | </div> |
| 63 | <div className="third"> |
| 64 | <h3>Settings</h3> |
| 65 | <Box> |
| 66 | <Formik |
| 67 | initialValues={{ username, default_weight_unit }} |
| 68 | validationSchema={Yup.object().shape({ |
| 69 | username: Yup.string().required("Username cannot be empty.") |
| 70 | })} |
| 71 | onSubmit={(values) => { |
| 72 | updateUser(values.username, values.default_weight_unit) |
| 73 | .then(() => { |
| 74 | fetchUser(); |
| 75 | alertSuccess({ message: 'User settings updated!' }); |
| 76 | }) |
| 77 | .catch(() => alertError({ message: 'Unable to update user' })); |
| 78 | }}> |
| 79 | {(props: FormikProps<ProfileSpecs.SettingsForm>) => { |
| 80 | const { values, setFieldValue, submitForm, submitCount, errors } = props; |
| 81 | const wasSubmitted = submitCount > 0; |
| 82 | const saveChanges = username !== values.username || default_weight_unit !== values.default_weight_unit; |
| 83 | |
| 84 | return ( |
| 85 | <> |
| 86 | <Input label="Username" |
| 87 | value={values.username} |
| 88 | error={wasSubmitted && !!errors.username} |
| 89 | errorMsg={errors.username} |
| 90 | onChange={v => setFieldValue('username', v)}/> |
| 91 | |
| 92 | <Select label="Default Weight Unit" |
| 93 | defaultValue={{ |
| 94 | value: values.default_weight_unit, |
| 95 | label: default_weight_unit |
| 96 | }} |
| 97 | options={weightUnitOptions()} |
| 98 | onChange={(option: Option) => setFieldValue('default_weight_unit', option.value)}/> |
| 99 | <Button onClick={submitForm} |
| 100 | block={true} |
| 101 | type="primary" |
| 102 | disabled={!saveChanges}> |
| 103 | Save Changes |
| 104 | </Button> |
| 105 | </> |
| 106 | ) |
nothing calls this directly
no test coverage detected