Merged in feat/loy-513-update-edit-profile-button-positions (pull request #3447)

feat(LOY-513): Update button positions and simplify css

* Update button positions and simplify css


Approved-by: Matilda Landström
This commit is contained in:
Anton Gunnarsson
2026-01-16 09:03:44 +00:00
parent 7639daf792
commit 8f7c1d80ab
4 changed files with 83 additions and 104 deletions

View File

@@ -1,3 +1,13 @@
.container {
display: grid;
grid-template-columns: 1fr;
gap: var(--Space-x4);
@media (min-width: 768px) {
grid-template-columns: 1fr 1fr;
}
}
.password, .password,
.user { .user {
align-self: flex-start; align-self: flex-start;
@@ -7,7 +17,7 @@
container-type: inline-size; container-type: inline-size;
} }
.container { .sharedRow {
display: grid; display: grid;
gap: var(--Space-x2); gap: var(--Space-x2);
grid-template-columns: minmax(100px, 164px) 1fr; grid-template-columns: minmax(100px, 164px) 1fr;
@@ -20,7 +30,7 @@
} }
@container addressContainer (max-width: 350px) { @container addressContainer (max-width: 350px) {
.container { .sharedRow {
grid-template-columns: 1fr; grid-template-columns: 1fr;
} }
} }

View File

@@ -31,7 +31,7 @@ export default function FormContent({ errors }: { errors: FieldErrors }) {
const languageOptions = getLocalizedLanguageOptions(lang) const languageOptions = getLocalizedLanguageOptions(lang)
return ( return (
<> <div className={styles.container}>
<section className={styles.user}> <section className={styles.user}>
<header> <header>
<Typography variant="Body/Paragraph/mdBold"> <Typography variant="Body/Paragraph/mdBold">
@@ -82,7 +82,7 @@ export default function FormContent({ errors }: { errors: FieldErrors }) {
})} })}
name="address.city" name="address.city"
/> />
<div className={styles.container}> <div className={styles.sharedRow}>
<FormInput <FormInput
data-hj-suppress data-hj-suppress
label={intl.formatMessage({ label={intl.formatMessage({
@@ -183,6 +183,6 @@ export default function FormContent({ errors }: { errors: FieldErrors }) {
errorFormatter={formatFormErrorMessage} errorFormatter={formatFormErrorMessage}
/> />
</section> </section>
</> </div>
) )
} }

View File

@@ -1,14 +1,7 @@
.container { .container {
display: grid; display: flex;
flex-direction: column;
gap: var(--Space-x3); gap: var(--Space-x3);
grid-template-areas:
"title"
"form"
"buttons";
}
.title {
grid-area: title;
} }
.welcome { .welcome {
@@ -19,34 +12,16 @@
color: var(--Text-Interactive-Default); color: var(--Text-Interactive-Default);
} }
.form {
display: grid;
gap: var(--Space-x5);
grid-area: form;
}
.btnContainer { .btnContainer {
display: flex; display: flex;
flex-direction: column-reverse; flex-direction: column;
gap: var(--Space-x1); gap: var(--Space-x1);
grid-area: buttons;
} }
@media screen and (min-width: 768px) { @media screen and (min-width: 768px) {
.container {
grid-template-areas:
"title buttons"
"form form";
}
.form {
grid-template-columns: 1fr 1fr;
}
.btnContainer { .btnContainer {
align-self: center; align-self: center;
flex-direction: row; flex-direction: row;
gap: var(--Space-x2); gap: var(--Space-x2);
justify-self: flex-end;
} }
} }

View File

@@ -122,79 +122,73 @@ export default function Form({ user }: EditFormProps) {
}, [trigger]) }, [trigger])
return ( return (
<> <section className={styles.container}>
<section className={styles.container}> <Typography variant="Title/sm">
<div className={styles.title}> <span>
<Typography variant="Title/sm"> <h1 className={styles.welcome}>
<span>
<h1 className={styles.welcome}>
{intl.formatMessage({
id: "common.welcome",
defaultMessage: "Welcome",
})}
</h1>
<h2 data-hj-suppress className={styles.name}>
{user.name}
</h2>
</span>
</Typography>
</div>
<div className={styles.btnContainer}>
<Dialog
bodyText={intl.formatMessage({
id: "editProfile.discardChangesDescription",
defaultMessage: "Any changes you've made will be lost.",
})}
cancelButtonText={intl.formatMessage({
id: "editProfile.goBackToEdit",
defaultMessage: "Go back to edit",
})}
proceedHref={profile[lang]}
proceedText={intl.formatMessage({
id: "editProfile.yesDiscardChanges",
defaultMessage: "Yes, discard changes",
})}
titleText={intl.formatMessage({
id: "editProfile.discardChangesTitle",
defaultMessage: "Discard unsaved changes?",
})}
trigger={
<Button variant="Secondary" size="sm" color="Primary">
{intl.formatMessage({
id: "editProfile.discardChanges",
defaultMessage: "Discard changes",
})}
</Button>
}
/>
<Button
isDisabled={!isValid || methods.formState.isSubmitting}
form={formId}
variant="Primary"
size="sm"
color="Primary"
type="submit"
>
{intl.formatMessage({ {intl.formatMessage({
id: "common.save", id: "common.welcome",
defaultMessage: "Save", defaultMessage: "Welcome",
})} })}
</Button> </h1>
</div> <h2 data-hj-suppress className={styles.name}>
<form {user.name}
/* @ts-expect-error Ignoring since ts doesn't recognize that tRPC parses FormData before reaching the route */ </h2>
action={editProfile} </span>
className={styles.form} </Typography>
id={formId} <form
onSubmit={methods.handleSubmit(handleSubmit)} /* @ts-expect-error Ignoring since ts doesn't recognize that tRPC parses FormData before reaching the route */
> action={editProfile}
<FormProvider {...methods}> id={formId}
<FormContent errors={methods.formState.errors} /> onSubmit={methods.handleSubmit(handleSubmit)}
</FormProvider> >
</form> <FormProvider {...methods}>
</section> <FormContent errors={methods.formState.errors} />
</FormProvider>
</form>
<ChangeNameDisclaimer /> <ChangeNameDisclaimer />
</> <div className={styles.btnContainer}>
<Dialog
bodyText={intl.formatMessage({
id: "editProfile.discardChangesDescription",
defaultMessage: "Any changes you've made will be lost.",
})}
cancelButtonText={intl.formatMessage({
id: "editProfile.goBackToEdit",
defaultMessage: "Go back to edit",
})}
proceedHref={profile[lang]}
proceedText={intl.formatMessage({
id: "editProfile.yesDiscardChanges",
defaultMessage: "Yes, discard changes",
})}
titleText={intl.formatMessage({
id: "editProfile.discardChangesTitle",
defaultMessage: "Discard unsaved changes?",
})}
trigger={
<Button variant="Secondary" size="sm" color="Primary">
{intl.formatMessage({
id: "editProfile.discardChanges",
defaultMessage: "Discard changes",
})}
</Button>
}
/>
<Button
isDisabled={!isValid || methods.formState.isSubmitting}
form={formId}
variant="Primary"
size="sm"
color="Primary"
type="submit"
>
{intl.formatMessage({
id: "common.save",
defaultMessage: "Save",
})}
</Button>
</div>
</section>
) )
} }