| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- using Astralis;
- using Inversion;
- namespace Spry.Authentication {
- public class UserEditComponent : Component {
- public int user_id { get; set; }
- public string username { get; set; }
- public UserProjection user { get; set; }
- public override string markup { get { return """
- <spry-context property="user_id" />
- <spry-context property="username" />
- <form
- spry-action=":save"
- spry-method="post"
- hx-disabled-elt="find input, find button"
- hx-indicator="find button"
- hx-swap="outerHTML"
- style="display: grid; grid-template-columns: max-content auto; column-gap: 3em; row-gap: 1em;">
- <label for="username">Username</label>
- <input type="text" name="username" value-expr="this.user.username" disabled>
- <label for="forename">Forename</label>
- <input type="text" name="forename" value-expr="this.user.forename" required>
- <label for="surname">Surname</label>
- <input type="text" name="surname" value-expr="this.user.surname" required>
- <label for="email">Email Address</label>
- <input type="text" name="email" value-expr="this.user.email" required>
- <label for="date_of_birth">Date of Birth</label>
- <input type="date" name="date_of_birth" value-expr='this.user.date_of_birth.format("%Y-%m-%d")' required>
- <label for="new_password">Password</label>
- <input type="password" name="new_password" placeholder="Leave blank to keep unchanged">
- <button style="grid-column: span 2;" type="submit">Save</button>
- </form>
- """; }}
- private UserService user_service = inject<UserService>();
- private HttpContext http_context = inject<HttpContext>();
- public async override void handle_action (string action) throws Error {
- var form = yield Astralis.FormDataParser.parse (http_context.request.request_body, http_context.request.content_type);
- var dob_strs = form.get_field ("date_of_birth").split("-");
- var dob = new DateTime(new TimeZone.utc (), int.parse(dob_strs[0]), int.parse(dob_strs[1]), int.parse(dob_strs[2]), 0, 0, 0);
- yield user_service.alter_user (user_id, username, form.get_field ("email"), form.get_field ("forename"), form.get_field ("surname"), dob, true);
-
- var new_password = form.get_field ("new_password");
- if(new_password != null && new_password != "") {
- yield user_service.set_password (user_id, new_password);
- }
- response.set_header ("HX-Refresh", "true");
- response.skip_content ();
- }
- }
- }
|