feat: improve login and register ux #1104

Merged
dpschen merged 23 commits from feature/login-improvements into main 2022-02-05 17:22:43 +00:00
Owner

This PR adds error messages beneath the input fields they correspond to and removes the need for entering the password twice.

Depends on #1103

This PR adds error messages beneath the input fields they correspond to and removes the need for entering the password twice. Depends on https://kolaente.dev/vikunja/frontend/pulls/1103
konrad added 6 commits 2021-11-28 16:09:10 +00:00
konrad changed title from feat: improve login and register ux to WIP: feat: improve login and register ux 2021-11-28 16:09:18 +00:00
konrad requested review from dpschen 2021-11-28 16:09:24 +00:00
dpschen requested changes 2021-12-10 11:50:06 +00:00
@ -0,0 +1,12 @@
export function isValidEmail(email: string): Boolean {

As far as I know it's not possible to validate emails using regex.

Last time I checked best practise was: check if there is a @ symbol somewhere (!) and if yes:
see it as valid, but don't use it until the user clicks on a email verification link.

As far as I know it's [not possible to validate emails using regex](http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx/). Last time I checked best practise was: check if there is a `@` symbol somewhere (!) and if yes: see it as valid, but don't use it until the user clicks on a email verification link.
Author
Owner

Changed it so the validation only looks for an @. There's additional validation on the api anyway, this is only used for frontend niceties.

Changed it so the validation only looks for an `@`. There's additional validation on the api anyway, this is only used for frontend niceties.

What kind of validation do you use then on the api side?
Because there obviously the same applies.

What kind of validation do you use then on the api side? Because there obviously the same applies.
Author
Owner

This one: f21760c49a/patterns.go (L7) (with a package)

Looks slightly more complex than what I'm doing in the frontend.

This one: https://github.com/asaskevich/govalidator/blob/f21760c49a8d602d863493de796926d2a5c1138d/patterns.go#L7 (with a package) Looks slightly more complex than what I'm doing in the frontend.

Pretty sure this has the same issues.

Pretty sure this has the same issues.
Author
Owner

Probably yeah. Since it is quite a popular package I'd assume it will validate 99.999% of correct email as correct which should be enough for Vikunja's use case.

Probably yeah. Since it is quite a popular package I'd assume it will validate 99.999% of correct email as correct which should be enough for Vikunja's use case.
konrad marked this conversation as resolved
@ -0,0 +2,4 @@
const format = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/
const match = email.match(format)
console.log(match)

Remove console.log

Remove `console.log`
konrad marked this conversation as resolved
@ -45,3 +45,3 @@
"totpPlaceholder": "e.g. 123456",
"login": "Login",
"register": "Register",
"createAccount": "Create account",

This is much better! =)

This is much better! =)
konrad marked this conversation as resolved
@ -51,2 +51,3 @@
"openIdGeneralError": "An error occured while authenticating against the third party.",
"logout": "Logout"
"logout": "Logout",
"emailInvalid": "Please enter a valid email address.",

Email is written inconsistent in English: sometimes it's "E-mail" sometimes "Email".
The more common one seems to be "Email" (more google results and wiki article's main spelling).

Email is written inconsistent in English: sometimes it's "E-mail" sometimes "Email". The more common one seems to be "Email" (more google results and wiki article's main spelling).
Author
Owner

Changed it so that it's consistent everywhere.

Changed it so that it's consistent everywhere.
konrad marked this conversation as resolved
@ -23,2 +3,2 @@
/>
</div>
<h2 class="title">Login</h2>
<message variant="success" class="has-text-centered" v-if="confirmedEmailSuccess">

has-text-centered should be a prop: e.g. text-align="center"

`has-text-centered` should be a prop: e.g. `text-align="center"`
Author
Owner

What's the advatage of a prop when I could use a css class of the same length and readability?

What's the advatage of a prop when I could use a css class of the same length and readability?

Mostly: no unwanted side effects:

When you edit the component will you remember in half a year that you added a has-text-centered class with side effects from the outside somewhere in the app?

When you then change the inner layout of the component in a way that would just work with left-aligned text, that you assume, it will break.

By contrast:

If you do have a prop you do know exactly what different modes this component can have.

When you use something like storybook you can then also see and test a component in all different configurations (I don't mean automated tests, but that's also somehow possible).

Usually when I add classes to components I try to limit myself to change only CSS properties that change the outer alignment (stuff like margin, width, height, position of the component but not the inner apperance.

This article explains this in detail:

https://markus.oberlehner.net/blog/multiple-root-nodes-and-attribute-inheritance-in-vue-3/

(I also forgot the stuff with multiple root nodes)

Mostly: no unwanted side effects: When you edit the component will you remember in half a year that you added a has-text-centered class with side effects from the outside somewhere in the app? When you then change the inner layout of the component in a way that would just work with left-aligned text, that you assume, it will break. By contrast: If you do have a prop you do know exactly what different modes this component can have. When you use something like storybook you can then also see and test a component in all different configurations (I don't mean automated tests, but that's also somehow possible). Usually when I add classes to components I try to limit myself to change only CSS properties that change the outer alignment (stuff like margin, width, height, position of the component but not the inner apperance. This article explains this in detail: https://markus.oberlehner.net/blog/multiple-root-nodes-and-attribute-inheritance-in-vue-3/ (I also forgot the stuff with multiple root nodes)
Author
Owner

That seems like a very good reason. I've added a prop.

That seems like a very good reason. I've added a prop.
konrad marked this conversation as resolved
@ -25,0 +19,4 @@
autocomplete="username"
v-focus
@keyup.enter="submit"
tabindex="1"

AFAIK it's a tabindex with a higher index than 0 is usually not what you want.
I think that in this case you also probably don't want to assign a tabindex at all (since the input has one by default already).

Good writeup: https://developers.google.com/web/fundamentals/accessibility/focus/using-tabindex

Reminds me off: I always wanted to try:

EDIT:
Just saw that the reason for the numbering was the passwort reset link.
Nice! Seems like I learn something here =)

~~AFAIK it's a tabindex with a higher index than 0 is usually not what you want. I think that in this case you also probably don't want to assign a tabindex at all (since the input has one by default already).~~ ~~Good writeup: https://developers.google.com/web/fundamentals/accessibility/focus/using-tabindex~~ Reminds me off: I always wanted to try: - https://github.com/dequelabs/axe-core/ or - https://github.com/vue-a11y/vue-axe-next ...but I'm unsure if it's worth the effort and is even maintained (the latter). **EDIT:** Just saw that the reason for the numbering was the passwort reset link. Nice! Seems like I learn something here =)
Author
Owner

Reminds me off: I always wanted to try:

https://github.com/dequelabs/axe-core/ or
https://github.com/vue-a11y/vue-axe-next
...but I'm unsure if it's worth the effort and is even maintained (the latter).

Yeah a11y is definitely something we should improve in Vikunja overall.

> Reminds me off: I always wanted to try: > > https://github.com/dequelabs/axe-core/ or > https://github.com/vue-a11y/vue-axe-next > ...but I'm unsure if it's worth the effort and is even maintained (the latter). Yeah a11y is definitely something we should improve in Vikunja overall.
konrad marked this conversation as resolved
@ -56,1 +41,3 @@
</div>
<div class="control">
<input
class="input is-relative"

Why is the input relative? Asking because the <a> is not inside the input. But might also miss something here.

Why is the input relative? Asking because the `<a>` is not inside the input. But might also miss something here.
Author
Owner

That's a good catch. Removed it, wasn't actually used.

That's a good catch. Removed it, wasn't actually used.
konrad marked this conversation as resolved
@ -57,0 +52,4 @@
tabindex="2"
@focusout="validateField('password')"
/>
<a @click="togglePasswordFieldType" class="password-field-type-toggle">

Add aria-label and tooltip

Add aria-label and tooltip
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -99,2 +104,3 @@
<legal/>
<div
v-if="hasOpenIdProviders"

What happens if neither hasApiUrl && localAuthEnabled nor hasOpenIdProviders is true?

What happens if neither `hasApiUrl && localAuthEnabled` nor `hasOpenIdProviders` is true?
Author
Owner

The <ready> component wrapper will prompt the user to set an api url.

The `<ready>` component wrapper will prompt the user to set an api url.

Ahh for sure. Makes sense =)

Ahh for sure. Makes sense =)
konrad marked this conversation as resolved
@ -210,3 +238,3 @@
this.$store.commit('auth/needsTotpPasscode', false)
} catch (e) {
if (e.response && e.response.data.code === 1017 && !credentials.totpPasscode) {
if (e.response && e.response.data.code === 1017 && !this.credentials.totpPasscode) {

e.response?.data.code === 1017 && !this.credentials.totpPasscode
null can never be 1017

`e.response?.data.code === 1017 && !this.credentials.totpPasscode` `null` can never be `1017`
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -246,0 +284,4 @@
.password-field-type-toggle {
position: absolute;
top: .5rem;

Seems error prone, because vertical center is estimated. Maybe better:

top: 50%;
right: 1rem;
translateY: -50%;

Better: abstract this as a component. Then you don't have to repeat this.

Seems error prone, because vertical center is estimated. Maybe better: ```scss top: 50%; right: 1rem; translateY: -50%; ``` Better: abstract this as a component. Then you don't have to repeat this.
Author
Owner

I've moved this to a style tag in a new scss file instead. While still not ideal, it avoids repeating the css class.

I'd need to move the input in a new combined component as well. But because we're not using v-model to get the actual password here this would involve rebuilding quite a few events. Not sure if that's worth it? Open for ideas.

I've moved this to a style tag in a new scss file instead. While still not ideal, it avoids repeating the css class. I'd need to move the input in a new combined component as well. But because we're not using `v-model` to get the actual password here this would involve rebuilding quite a few events. Not sure if that's worth it? Open for ideas.

Might be worth it:

We can use the same field for the password settings.
Also you don't have to repeat the logic for the password label for the password hide and show that is now repeated in two components (and should probably be the same in password settings).

Might be worth it: We can use the same field for the password settings. Also you don't have to repeat the logic for the password label for the password hide and show that is now repeated in two components (and should probably be the same in password settings).
Author
Owner

Moved it to a new component, probably not a perfect implementation though (see other comment).

Moved it to a new component, probably not a perfect implementation though (see other comment).
konrad marked this conversation as resolved
@ -115,3 +113,3 @@
const {t} = useI18n()
useTitle(() => t('user.auth.register'))
useTitle(() => t('user.auth.createAccount'))

I want to get rid of my useTitle function. The vueuse version seems much better.
There you can write:

import {useTitle} from '@vueuse/core'
useTitle(t('user.auth.createAccount'))
I want to get rid of my `useTitle` function. The vueuse version seems much better. There you can write: ```ts import {useTitle} from '@vueuse/core' useTitle(t('user.auth.createAccount')) ```
Author
Owner

But Vikunja's setTitle also appends the | Vikunja part to the page title. vueuse does not do that.

Maybe we could change our useTitle wrapper to use Vikunja's setTitle function? I think this would be out of scope for this PR though.

But Vikunja's `setTitle` also appends the ` | Vikunja` part to the page title. vueuse does not do that. Maybe we could change our `useTitle` wrapper to use Vikunja's `setTitle` function? I think this would be out of scope for this PR though.
It does already: https://kolaente.dev/vikunja/frontend/src/branch/main/src/composables/useTitle.ts#L2 ?
Author
Owner

But vueuse's useTitle does not.

But vueuse's `useTitle` does not.

Ahh yes. So you mean we create a wrapper for vueuse useTitle that does the same as setTitle?

Ahh yes. So you mean we create a wrapper for vueuse useTitle that does the same as setTitle?
Author
Owner

yeah exactly.

yeah exactly.
konrad marked this conversation as resolved
@ -127,2 +124,4 @@
const errorMessage = ref('')
const emailValid = ref(true)
const validateEmail = useDebounceFn(() => { // debouncing to prevent error messages when clicking on the log in button

I did not get this.

I did not get this.
konrad marked this conversation as resolved
@ -129,0 +139,4 @@
}, 100)
const passwordFieldType = ref('password')
const togglePasswordFieldType = () => {
if (passwordFieldType.value === 'password') {
passwordFieldType.value = passwordFieldType.value === 'password'
    ? 'text'
    : 'password'
```ts passwordFieldType.value = passwordFieldType.value === 'password' ? 'text' : 'password' ```
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -129,0 +146,4 @@
}
}
const everythingValid = computed(() => {

For this limited usecase this seems fine, but in case we do something similar again we should probably abstract this a bit nicer.

This seems like a nice usecase for a reactive.
If all the form fields would store there validation value there you could do something like:


const fieldsStatus = reactive({
	username: false,
    // [...]
})

const everythingValid = computed(() => Object.values(fieldsStatus).every(Boolean))
For this limited usecase this seems fine, but in case we do something similar again we should probably abstract this a bit nicer. This seems like a nice usecase for a `reactive`. If all the form fields would store there validation value there you could do something like: ```ts const fieldsStatus = reactive({ username: false, // [...] }) const everythingValid = computed(() => Object.values(fieldsStatus).every(Boolean)) ```
@ -131,3 +160,2 @@
if (credentials.password !== passwordValidation.value) {
errorMessage.value = t('user.auth.passwordsDontMatch')
if (!everythingValid) {

everythingValid.value

`everythingValid.value`
konrad marked this conversation as resolved
@ -145,0 +173,4 @@
<style scoped>
.password-field-type-toggle {
position: absolute;
top: .5rem;

See comment for other .password-field-type-toggle

See comment for other `.password-field-type-toggle`
konrad marked this conversation as resolved
@ -61,3 +56,3 @@
const { t } = useI18n()
const {t} = useI18n()
useTitle(() => t('user.auth.resetPassword'))

Use useTitle from vueuse

Use `useTitle` from vueuse
konrad marked this conversation as resolved
konrad was assigned by dpschen 2021-12-10 11:55:18 +00:00
Author
Owner

Relevant: #1103 (comment)

Relevant: https://kolaente.dev/vikunja/frontend/pulls/1103#issuecomment-21250
Author
Owner

About the debounce: Check out the screen recording in the attachment to see what it does without that.

About the debounce: Check out the screen recording in the attachment to see what it does without that.
konrad added 81 commits 2021-12-11 20:29:11 +00:00
continuous-integration/drone/push Build is passing Details
8f6c0f3738
chore(deps): update dependency vite-plugin-pwa to v0.11.8 (#1102)
Reviewed-on: #1102
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
384037c694
chore(deps): update dependency vue-tsc to v0.29.7 (#1106)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [vue-tsc](https://github.com/johnsoncodehk/volar) | devDependencies | patch | [`0.29.6` -> `0.29.7`](https://renovatebot.com/diffs/npm/vue-tsc/0.29.6/0.29.7) |

---

### Release Notes

<details>
<summary>johnsoncodehk/volar</summary>

### [`v0.29.7`](https://github.com/johnsoncodehk/volar/blob/master/CHANGELOG.md#&#8203;0297)

[Compare Source](https://github.com/johnsoncodehk/volar/compare/v0.29.6...v0.29.7)

-   feat: support html, css custom data ([#&#8203;707](https://github.com/johnsoncodehk/volar/issues/707))
-   feat: support extends tsconfig `vueCompilerOptions` ([#&#8203;731](https://github.com/johnsoncodehk/volar/issues/731))
-   fix: cannot config project reference by directory path ([#&#8203;712](https://github.com/johnsoncodehk/volar/issues/712))
-   fix: pug attrs type-check borken by nested tags ([#&#8203;721](https://github.com/johnsoncodehk/volar/issues/721))
-   fix: import path rename result incorrect ([#&#8203;723](https://github.com/johnsoncodehk/volar/issues/723))
-   fix: `editor.codeActionsOnSave: ["source.organizeImports"]` not working ([#&#8203;726](https://github.com/johnsoncodehk/volar/issues/726))
-   fix: goto definition not working with some component import statement ([#&#8203;728](https://github.com/johnsoncodehk/volar/issues/728))
-   fix: don't show volar commands in non-vue document ([#&#8203;733](https://github.com/johnsoncodehk/volar/issues/733))
-   fix: vue-tsc not working with symlink ([#&#8203;738](https://github.com/johnsoncodehk/volar/issues/738))

</details>

---

### Configuration

📅 **Schedule**: At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).

Reviewed-on: #1106
Reviewed-by: dpschen <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
03f3c52548
chore(deps): update dependency netlify-cli to v8.0.5 (#1108)
Reviewed-on: #1108
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
c07288dd8b
chore(deps): update dependency jest to v27.4.0 (#1107)
Reviewed-on: #1107
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
03afbfc6c8
chore(deps): update dependency sass to v1.44.0 (#1110)
Reviewed-on: #1110
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
f69111c105
chore(deps): update dependency vue-tsc to v0.29.8 (#1111)
Reviewed-on: #1111
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
8c945b049a
chore(deps): update dependency jest to v27.4.2 (#1115)
Reviewed-on: #1115
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build encountered an error Details
f3cf79fa65
chore(deps): update dependency rollup to v2.60.2 (#1112)
Reviewed-on: #1112
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
306bd1c179
chore(deps): update dependency esbuild to v0.14.1
continuous-integration/drone/push Build is passing Details
aeb886e4c5
chore(deps): update typescript-eslint monorepo to v5.5.0
continuous-integration/drone/push Build is passing Details
7613afbf27
fix(deps): update dependency date-fns to v2.27.0
continuous-integration/drone/push Build is passing Details
baa86530c8
fix: useColorScheme (#1117)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1117
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is failing Details
769d94e879
fix:cleanup some scss vars (#1118)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1118
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is passing Details
716de2c99c
feat: convert home view to script setup and ts (#1119)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1119
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is passing Details
84284a6211
feat: harden textarea auto height algorithm (#985)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #985
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build encountered an error Details
bc8b04fc7a
fix: add import url suffix for vite svg loader (#1122)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1122
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build encountered an error Details
e45bc83132
fix: duplicate filter in gantt-component (#1121)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1121
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build encountered an error Details
c5b9e2a1ff
chore(deps): update dependency netlify-cli to v8.0.6 (#1125)
Reviewed-on: #1125
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
e535584412
chore(deps): update dependency vite-plugin-pwa to v0.11.9 (#1124)
Reviewed-on: #1124
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
20f0496fa5
fix: unit test for "should recognize dates of the month in the past but next month" (#1131)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1131
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is passing Details
b96e89ca8c
fix: remove unused variable
continuous-integration/drone/push Build is passing Details
144e7bd10c
fix(deps): update dependency marked to v4.0.6
continuous-integration/drone/push Build is passing Details
f58e114947
chore(deps): update dependency netlify-cli to v8.0.13
continuous-integration/drone/push Build is failing Details
648b947a05
chore(deps): update dependency netlify-cli to v8.0.14 (#1132)
Reviewed-on: #1132
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build encountered an error Details
2041722b8a
chore(deps): update dependency jest to v27.4.3
continuous-integration/drone/push Build is failing Details
fe5770082a
chore(deps): update dependency netlify-cli to v8.0.15 (#1135)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [netlify-cli](https://github.com/netlify/cli) | devDependencies | patch | [`8.0.14` -> `8.0.15`](https://renovatebot.com/diffs/npm/netlify-cli/8.0.14/8.0.15) |

---

### Release Notes

<details>
<summary>netlify/cli</summary>

### [`v8.0.15`](https://github.com/netlify/cli/blob/master/CHANGELOG.md#&#8203;8015-httpswwwgithubcomnetlifyclicomparev8014v8015-2021-12-03)

[Compare Source](https://github.com/netlify/cli/compare/v8.0.14...v8.0.15)

</details>

---

### Configuration

📅 **Schedule**: At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box.

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).

Reviewed-on: #1135
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
d253d2e743
chore(deps): update dependency eslint to v8.4.0 (#1136)
Reviewed-on: #1136
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
4137bab7fc
fix: Home view (#1129)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1129
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is failing Details
f758eefa88
fix(deps): update dependency vue-i18n to v9.2.0-beta.23 (#1138)
Reviewed-on: #1138
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
ac630ac775
feat: convert simple components to script setup and use typescript (#1120)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1120
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is passing Details
bd19234041
chore(deps): update workbox monorepo to v6.4.2 (#1133)
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #1133
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
1c3f655323
chore(deps): update dependency esbuild to v0.14.2 (#1139)
Reviewed-on: #1139
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
c65bb4e93b
chore(deps): update dependency vite-plugin-pwa to v0.11.10 (#1140)
Reviewed-on: #1140
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
852d71e8b7
chore(deps): update dependency ts-jest to v27.1.0 (#1141)
Reviewed-on: #1141
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build encountered an error Details
bba9a8e008
fix: checklist update not working
Resolves #1114
continuous-integration/drone/push Build is passing Details
3218cf60f0
chore(deps): update dependency eslint-plugin-vue to v8.2.0 (#1145)
Reviewed-on: #1145
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
684acc01bd
fix(deps): update vue monorepo to v3.2.24
continuous-integration/drone/push Build is passing Details
150b847638
chore(deps): update dependency eslint to v8.4.1 (#1149)
Reviewed-on: #1149
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
f4df628e47
chore(deps): update typescript-eslint monorepo to v5.6.0 (#1148)
Reviewed-on: #1148
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
028ad3dc14
chore(deps): update dependency vite to v2.7.0 (#1151)
Reviewed-on: #1151
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
8d1d60ba80
chore(deps): update dependency @vitejs/plugin-vue to v1.10.2 (#1150)
Reviewed-on: #1150
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
470022899f
chore(deps): update dependency netlify-cli to v8.0.16 (#1147)
Reviewed-on: #1147
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
809e876091
chore(deps): update dependency @vitejs/plugin-legacy to v1.6.4 (#1152)
Reviewed-on: #1152
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
6225c54447
fix(deps): update dependency dompurify to v2.3.4
continuous-integration/drone/push Build is passing Details
c8029ec3c4
chore(deps): update dependency vite to v2.7.1 (#1154)
Reviewed-on: #1154
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
8b8e413af0
feat: recurring for quick add magic (#1105)
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #1105
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: konrad <k@knt.li>
Co-committed-by: konrad <k@knt.li>
continuous-integration/drone/push Build is passing Details
b4cbe1e1fd
fix(deps): update sentry-javascript monorepo to v6.16.0 (#1155)
Reviewed-on: #1155
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
10fe38cef6
fix: default sentry dsn in docker
continuous-integration/drone/push Build is passing Details
1a119f97c5
feat: add support to set the marble avatar in user settings (#1156)
Frontend for vikunja/api#1060

Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #1156
Co-authored-by: konrad <k@knt.li>
Co-committed-by: konrad <k@knt.li>
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
e684e9a90b
chore(deps): update dependency ts-jest to v27.1.1
continuous-integration/drone/push Build is passing Details
d0c6576efa
fix(deps): update dependency @vueuse/core to v7.2.1 (#1158)
Reviewed-on: #1158
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
4b8a7e1556
fix(deps): update dependency @vueuse/core to v7.2.2
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
92c89d145c
chore(deps): update dependency netlify-cli to v8.0.17
continuous-integration/drone/push Build is passing Details
22e62a2cea
chore(deps): update dependency vite-svg-loader to v3.1.1
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
2de523f2e0
chore(deps): update dependency netlify-cli to v8.0.18
continuous-integration/drone/push Build is passing Details
89d8c9d639
chore(deps): update dependency vite-plugin-pwa to v0.11.11
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
3f4bcbcecd
chore(deps): update dependency rollup to v2.61.0
continuous-integration/drone/push Build is running Details
f530d4763e
chore(deps): update dependency jest to v27.4.4 (#1171)
Reviewed-on: #1171
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
9acc9039a6
chore(deps): update dependency typescript to v4.5.3 (#1169)
Reviewed-on: #1169
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
41c0594bd2
fix(deps): update dependency marked to v4.0.7 (#1170)
Reviewed-on: #1170
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
cb9e1e891d
fix: unindent styles in pagination (#1172)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1172
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
continuous-integration/drone/push Build is passing Details
9584ef127a
chore(deps): update dependency netlify-cli to v8.0.20 (#1168)
Reviewed-on: #1168
Reviewed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/pr Build is failing Details
1ff667e598
chore: show llama background only on fullhd and up
continuous-integration/drone/pr Build is passing Details
8ba8be103a
Merge branch 'main' into feature/login-pages
# Conflicts:
#	src/components/misc/no-auth-wrapper.vue
#	src/i18n/lang/en.json
continuous-integration/drone/pr Build is passing Details
d37fc06c2f
feat: use a success notification instead of a message
continuous-integration/drone/pr Build is passing Details
70ba20a66e
chore: remove overflow
continuous-integration/drone/pr Build is passing Details
6fff15518d
chore: use place-items
continuous-integration/drone/pr Build is passing Details
613c2bd374
chore: use background-color
continuous-integration/drone/pr Build is passing Details
498ecc7505
chore: mobile first
continuous-integration/drone/pr Build is passing Details
9b58c5fb6b
fix: make sure image + content are always 50% width
continuous-integration/drone/pr Build is passing Details
fc8321df6b
chore: cleanup double color definition
continuous-integration/drone/pr Build is passing Details
be8f93c50b
chore: remove unused class
continuous-integration/drone/pr Build is passing Details
97945f3f42
feat: move messages to the top
continuous-integration/drone/pr Build is passing Details
334c5610d9
chore: use after instead of new element for overlay
continuous-integration/drone/pr Build is passing Details
7969daa341
chore: use background-color
continuous-integration/drone/pr Build is passing Details
babfd24739
chore: use flex-end
continuous-integration/drone/pr Build is failing Details
1c339a7fe0
feat: move title and api config to no auth wrapper
Member

Hi konrad!

Thank you for creating a PR!

I've deployed the changes of this PR on a preview environment under this URL: https://1104-featurelogin-improvements--vikunja-frontend-preview.netlify.app

You can use this url to view the changes live and test them out.
You will need to manually connect this to an api running somehwere. The easiest to use is https://try.vikunja.io/.

Have a nice day!

Beep boop, I'm a bot.

Hi konrad! Thank you for creating a PR! I've deployed the changes of this PR on a preview environment under this URL: https://1104-featurelogin-improvements--vikunja-frontend-preview.netlify.app You can use this url to view the changes live and test them out. You will need to manually connect this to an api running somehwere. The easiest to use is https://try.vikunja.io/. Have a nice day! > Beep boop, I'm a bot.
dpschen reviewed 2021-12-12 16:42:39 +00:00
@ -7,2 +5,2 @@
</Message>
<slot/>
<section class="image" :class="{'has-message': motd !== ''}">
<Message v-if="motd !== ''">

I just realized that this is not shown on mobile. Is that intended?

I just realized that this is not shown on mobile. Is that intended?
Author
Owner

It was not. I've added it back in on mobile.

It was not. I've added it back in on mobile.
dpschen marked this conversation as resolved
konrad force-pushed feature/login-improvements from 201ec53fcc to 507ef8a7ef 2021-12-12 19:21:11 +00:00 Compare
konrad changed title from WIP: feat: improve login and register ux to feat: improve login and register ux 2021-12-12 19:22:07 +00:00
konrad requested review from dpschen 2021-12-12 19:37:36 +00:00
dpschen force-pushed feature/login-improvements from bd579565b7 to 22d209b289 2021-12-21 14:19:30 +00:00 Compare
dpschen force-pushed feature/login-improvements from 22d209b289 to a4ec41e937 2021-12-21 14:21:35 +00:00 Compare
dpschen approved these changes 2021-12-21 14:24:41 +00:00
@ -29,3 +31,4 @@
import Legal from '@/components/misc/legal.vue'
import ApiConfig from '@/components/misc/api-config.vue'
import {useStore} from 'vuex'
import {computed} from 'vue'

Regarding (not allowed to comment in unchanged lines in Gitea):

// @ts-ignore
const title = computed(() => t(route.meta.title ?? ''))

Why @ts-ignore?

Regarding (not allowed to comment in unchanged lines in Gitea): ```ts // @ts-ignore const title = computed(() => t(route.meta.title ?? '')) ```` Why `@ts-ignore`?

Fixed

Fixed
dpschen marked this conversation as resolved
dpschen added 2 commits 2021-12-21 14:54:42 +00:00
dpschen added 1 commit 2021-12-22 12:04:42 +00:00
continuous-integration/drone/pr Build is failing Details
9a3069c20d
fix: propType validation in message.vue
konrad added 2 commits 2021-12-26 12:37:44 +00:00
konrad reviewed 2021-12-26 12:40:13 +00:00
@ -0,0 +34,4 @@
tabindex: String,
modelValue: String,
// This prop is a workaround to trigger validation from the outside when the user never had focus in the input.
validateInitially: Boolean,
Author
Owner

I'm not quite sure if this is the best way to do it. Feels a lot like a hack.

I'm not quite sure if this is the best way to do it. Feels a lot like a hack.
konrad added 1 commit 2021-12-26 12:42:25 +00:00
continuous-integration/drone/pr Build is failing Details
9c5613ad98
fix: lint
konrad added 1 commit 2022-01-08 12:48:11 +00:00
continuous-integration/drone/pr Build was killed Details
310578d349
Merge branch 'main' into feature/login-improvements
# Conflicts:
#	src/components/misc/no-auth-wrapper.vue
#	src/styles/components/_index.scss
#	src/views/user/Login.vue
#	src/views/user/Register.vue
konrad added 1 commit 2022-01-08 12:49:11 +00:00
continuous-integration/drone/pr Build is passing Details
19a161ff78
fix: password validation field in test
konrad added 1 commit 2022-01-23 17:06:51 +00:00
continuous-integration/drone/pr Build is passing Details
cd92d224a2
Merge branch 'main' into feature/login-improvements
dpschen added 1 commit 2022-02-05 17:05:07 +00:00
continuous-integration/drone/pr Build is passing Details
a8ac2fc2dd
Merge branch 'main' into feature/login-improvements
dpschen merged commit 8058790f9a into main 2022-02-05 17:22:43 +00:00
dpschen deleted branch feature/login-improvements 2022-02-05 17:22:43 +00:00
This repo is archived. You cannot comment on pull requests.
No description provided.