feat: manage caldav tokens #1186

Closed
konrad wants to merge 20 commits from feature/caldav-tokens into main
Owner

Frontend PR for vikunja/api#1065

Frontend PR for https://kolaente.dev/vikunja/api/pulls/1065
konrad added 4 commits 2021-12-12 17:39:24 +00:00
konrad requested review from dpschen 2021-12-12 17:39:29 +00:00
dpschen requested changes 2021-12-13 13:42:34 +00:00
@ -0,0 +6,4 @@
this.created = new Date(this.created)
}
defaults() {

Why does the defaults function exist instead of using field declarations (maybe even private)?

Asking because if it would be:

export default class CaldavTokenModel extends AbstractModel {
	id: 0;
	created: null;

	constructor(data) {
		super(data)
		this.created = new Date(this.created)
	}
}

typing would be better. But maybe I miss something.

Why does the defaults function exist instead of using [field declarations](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#field_declarations) (maybe even private)? Asking because if it would be: ```ts export default class CaldavTokenModel extends AbstractModel { id: 0; created: null; constructor(data) { super(data) this.created = new Date(this.created) } } ``` typing would be better. But maybe I miss something.
Author
Owner

I think it only exists because of my lack of js knowledge back a few years ago when I created the models and services :) It should be cleaned up at some point, but for all models at once (which is kinda out of scope for this PR).

I'm pretty sure there's a better way to do this with typescript so that we have proper type hints everywhere.

I think it only exists because of my lack of js knowledge back a few years ago when I created the models and services :) It should be cleaned up at some point, but for all models at once (which is kinda out of scope for this PR). I'm pretty sure there's a better way to do this with typescript so that we have proper type hints everywhere.

I think field declarations didn't exist then.
Why I was asking: I'm trying to fix all ts errors that I have while working on a segment. And if creating these props as field declarations helps ts I guess it would be a manageable effort.

Agree with the rest of the stuff =)

I think field declarations didn't exist then. Why I was asking: I'm trying to fix all ts errors that I have while working on a segment. And if creating these props as field declarations helps ts I guess it would be a manageable effort. Agree with the rest of the stuff =)
konrad marked this conversation as resolved
@ -25,3 +66,3 @@
</template>
<script>
<script setup>

use ts

use ts
konrad marked this conversation as resolved
@ -30,1 +74,4 @@
import {CALDAV_DOCS} from '@/urls'
import {useTitle} from '@/composables/useTitle'
import {success} from '@/message'
import Message from '../../../components/misc/message'

use @

use `@`
konrad marked this conversation as resolved
@ -31,0 +87,4 @@
const isLocalUser = computed(() => store.state.auth.info?.isLocalUser)
const username = computed(() => store.state.auth.info?.username)
const service = new CaldavTokenService()

Abstract with new useToken composable (can be local) that returns the tokens ref.
Then the getAll call can also be async (an async init function that is called without await).

Abstract with new `useToken` composable (can be local) that returns the tokens ref. Then the getAll call can also be async (an async init function that is called without await).
Author
Owner

How do I properly type hint this? I tried this:

async function useToken(): Promise<ref<CaldavTokenModel[]>> {
	const tokens = ref<CaldavTokenModel[]>([])
	tokens.value = await service.getAll()
	return tokens
}

but that does not seem to work.

How do I properly type hint this? I tried this: ```ts async function useToken(): Promise<ref<CaldavTokenModel[]>> { const tokens = ref<CaldavTokenModel[]>([]) tokens.value = await service.getAll() return tokens } ``` but that does not seem to work.

What errors do you get?

I guess not all props are defined (because I got those kind of errors all the time with the models).

For this the field declarations might help

What errors do you get? I guess not all props are defined (because I got those kind of errors all the time with the models). For this the [field declarations](https://kolaente.dev/vikunja/frontend/pulls/1186#issuecomment-21746) might help
Author
Owner

Seems like

async function useToken(): ref<CaldavTokenModel[]> {

did the trick.

Seems like ```js async function useToken(): ref<CaldavTokenModel[]> { ``` did the trick.

but that does not seem to work.

Not sure what problem you had here, but I realize now that it might have also been because of the usage of await in a composable.

> but that does not seem to work. Not sure what problem you had here, but I realize now that it might have also been because of the usage of await in a composable.
konrad marked this conversation as resolved
@ -31,0 +95,4 @@
})
const newToken = ref(null)
const createToken = () => {

createToken should be an async function (also defined in useToken composable).

`createToken` should be an async function (also defined in `useToken` composable).
Author
Owner

Done.

Done.

Use function statement.

=> Makes it more clear that these are the "methods" of vue and makes them stand out more against computeds and refs.

Use `function` statement. => Makes it more clear that these are the "methods" of vue and makes them stand out more against computeds and refs.
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -51,3 +106,1 @@
methods: {
copy,
},
const deleteToken = token => {

Should be async function

Should be async function
Author
Owner

Done.

Done.

Picky: Use function statement.

Picky: Use function statement.
konrad marked this conversation as resolved
@ -54,0 +107,4 @@
service.delete(token)
.then(r => {
success(r)
for (const i in tokens.value) {

Use filter

Use filter
Author
Owner

Done.

Done.

Now it's findIndex but this seems to have other problems, because of the @ts-ignore.

With something like:

const filteredTokenEntries = Objects.entries(token.value).filter([...])
token.value = Object.fromEntries(filteredTokenEntries)

It might work =)


On the other hand:
Maybe with that the original solution was nicer / smarter.
I somehow thought tokens is an array and not an object… that's why I proposed using filter in the first place.

Now it's `findIndex` but this seems to have other problems, because of the `@ts-ignore`. With something like: ```js const filteredTokenEntries = Objects.entries(token.value).filter([...]) token.value = Object.fromEntries(filteredTokenEntries) ``` It might work =) ----- On the other hand: Maybe with that the original solution was nicer / smarter. I somehow thought tokens is an array and not an object… that's why I proposed using `filter` in the first place.
Author
Owner

I somehow thought tokens is an array and not an object… that's why I proposed using filter in the first place.

tokens is an array, not an object. But I need the index of the entry I want to feed into splice to remove the entry. AFAIK I can't use find because that would only give me the object in the array, not the index?

Isn't findIndex pretty much the same as a for(const i in ..) with a break?

> I somehow thought tokens is an array and not an object… that's why I proposed using filter in the first place. `tokens` is an array, not an object. But I need the index of the entry I want to feed into `splice` to remove the entry. AFAIK I can't use `find` because that would only give me the object in the array, not the index? Isn't `findIndex` pretty much the same as a `for(const i in ..)` with a `break`?

It is if you add a condition for the case of -1 (which you did now)

It is if you add a condition for the case of `-1` (which you did now)
dpschen marked this conversation as resolved
konrad added 3 commits 2021-12-14 20:31:36 +00:00
konrad added 1 commit 2021-12-14 20:36:57 +00:00
continuous-integration/drone/pr Build is failing Details
e4af8a950a
chore: extract getting all tokens into a composable
konrad added 1 commit 2021-12-14 20:39:27 +00:00
continuous-integration/drone/pr Build is failing Details
2405f958b1
fix: lint
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://1186-featurecaldav-tokens--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://1186-featurecaldav-tokens--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 requested changes 2021-12-15 21:10:26 +00:00
@ -54,0 +108,4 @@
const deleteToken = async (token: CaldavTokenModel) => {
const r = await service.delete(token)
success(r)
// @ts-ignore

Why the @ts-ignore? => Add comment if you need it

Why the `@ts-ignore`? => Add comment if you need it
Author
Owner

I just took another look and think I figured out how to fix the types on the useToken function so the @ts-ignore isn't required anymore. Should be fine now.

I just took another look and think I figured out how to fix the types on the `useToken` function so the `@ts-ignore` isn't required anymore. Should be fine now.

Move success after all state changes

Move `success` after all state changes
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -54,0 +109,4 @@
const r = await service.delete(token)
success(r)
// @ts-ignore
const i = tokens.value.findIndex(v => v.id === token.id)

I think you need to check for -1.

I think you need to check for `-1`.
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -54,0 +110,4 @@
success(r)
// @ts-ignore
const i = tokens.value.findIndex(v => v.id === token.id)
// @ts-ignore

Why the @ts-ignore? => Add comment if you need it

Why the `@ts-ignore`? => Add comment if you need it
konrad marked this conversation as resolved
konrad was assigned by dpschen 2021-12-20 12:30:44 +00:00
Member

@konrad: Did you see my comments?

@konrad: Did you see my comments?
Author
Owner

@dpschen I did, just didn't have the time to act on them. Will do later today.

@dpschen I did, just didn't have the time to act on them. Will do later today.
konrad added 3 commits 2021-12-20 17:33:15 +00:00
konrad added 1 commit 2021-12-20 17:39:05 +00:00
continuous-integration/drone/pr Build is passing Details
2d71897581
chore: use function statements everywhere
konrad requested review from dpschen 2021-12-20 17:39:44 +00:00
konrad removed their assignment 2021-12-20 17:39:53 +00:00
dpschen was assigned by konrad 2021-12-20 17:39:53 +00:00
dpschen requested changes 2021-12-21 11:53:19 +00:00
@ -97,7 +97,14 @@
"caldav": {
"title": "Caldav",

CalDAV – different casing. See: https://devguide.calconnect.org/CalDAV/introduction/

`CalDAV` – different casing. See: https://devguide.calconnect.org/CalDAV/introduction/
Author
Owner

Done!

Done!
konrad marked this conversation as resolved
@ -97,7 +97,14 @@
"caldav": {
"title": "Caldav",
"howTo": "You can connect Vikunja to caldav clients to view and manage all tasks from different clients. Enter this url into your client:",

casing

casing
konrad marked this conversation as resolved
@ -98,3 +98,3 @@
"title": "Caldav",
"howTo": "You can connect Vikunja to caldav clients to view and manage all tasks from different clients. Enter this url into your client:",
"more": "More information about caldav in Vikunja"
"more": "More information about caldav in Vikunja",

casing

casing
konrad marked this conversation as resolved
@ -99,2 +99,3 @@
"howTo": "You can connect Vikunja to caldav clients to view and manage all tasks from different clients. Enter this url into your client:",
"more": "More information about caldav in Vikunja"
"more": "More information about caldav in Vikunja",
"tokens": "Caldav Tokens",

casing

casing
konrad marked this conversation as resolved
@ -100,1 +100,3 @@
"more": "More information about caldav in Vikunja"
"more": "More information about caldav in Vikunja",
"tokens": "Caldav Tokens",
"tokensHowTo": "You can use a caldav token to use instead of a password to log in the above endpoint.",

casing

casing
konrad marked this conversation as resolved
@ -101,0 +103,4 @@
"createToken": "Create a token",
"tokenCreated": "Here is your token: {token}",
"wontSeeItAgain": "Write it down, you won't be able to see it again.",
"mustUseToken": "You need to create a caldav token if you want to use caldav with a third party client. Use the token as the password.",

casing

casing
konrad marked this conversation as resolved
@ -0,0 +12,4 @@
}
processModel(model) {
model.created = formatISO(new Date(model.created))

Return a new model instead of modifying the existing:

return {
	...model,
    created: formatISO(new Date(model.created)),
}
Return a new model instead of modifying the existing: ```ts return { ...model, created: formatISO(new Date(model.created)), } ```
Author
Owner

Done.

Done.
konrad marked this conversation as resolved
@ -17,2 +17,4 @@
</div>
</div>
<p class="my-4 has-text-weight-bold">

This seems to be a headline? => use <hX>

This seems to be a headline? => use `<hX>`
konrad marked this conversation as resolved
@ -31,0 +78,4 @@
import CaldavTokenService from '@/services/caldavToken'
import CaldavTokenModel from '@/models/caldavToken'
const service = new CaldavTokenService()
  • Move service in useTokens function.
  • Make service a shallowReactive. => Will be destroyed when component is unmounted.
  • return a new computed serviceIsLoading from useTokens that computes the isLoading property.

=> isolated abstraction

- Move service in `useTokens` function. - Make service a `shallowReactive`. => Will be destroyed when component is unmounted. - return a new computed `serviceIsLoading` from `useTokens` that computes the isLoading property. => isolated abstraction
Author
Owner

Wouldn't I need to do this for all other functions as well? (deleteToken and createToken) How would I handle loading state from all of them? I'd like to avoid having a bunch of loading variables for each of these functions.

Wouldn't I need to do this for all other functions as well? (`deleteToken` and `createToken`) How would I handle loading state from all of them? I'd like to avoid having a bunch of loading variables for each of these functions.

Solved differently in #1307/

Solved differently in https://kolaente.dev/vikunja/frontend/pulls/1307/
dpschen marked this conversation as resolved
@ -31,0 +80,4 @@
const service = new CaldavTokenService()
async function useToken(): ref<CaldavTokenModel[]> {

We should call this function then useTokens.


Unsure:

I think : ref<CaldavTokenModel[]> is now unnecessary since the type of the return was already defined by the line:

const tokens = ref<CaldavTokenModel[]>([])

Trying to learn: Not sure what the go-to way for ts is in such a case.

We should call this function then `useTokens`. ---- Unsure: I think `: ref<CaldavTokenModel[]>` is now unnecessary since the type of the return was already defined by the line: ```ts const tokens = ref<CaldavTokenModel[]>([]) ``` Trying to learn: Not sure what the go-to way for ts is in such a case.
Author
Owner

Renamed the function.

I'm not quite sure about the other one, since the const token now does not have a type declaration, only the function does. I think that should be fine?

Renamed the function. I'm not quite sure about the other one, since the `const token` now does not have a type declaration, only the function does. I think that should be fine?

I cannot follow you:
In this line the type of the returned value is defined.

I cannot follow you: In [this line](https://kolaente.dev/vikunja/frontend/src/commit/ce479b40769d4a116694b39a4d552e561a84b8d9/src/views/user/settings/Caldav.vue#L85) the type of the returned value is defined.

Regardless this is not important anymore, since the code changed.

Regardless this is not important anymore, since the code changed.
dpschen marked this conversation as resolved
@ -31,0 +82,4 @@
async function useToken(): ref<CaldavTokenModel[]> {
const tokens = ref<CaldavTokenModel[]>([])
tokens.value = await service.getAll()

A composable should usually not return a promise. See https://antfu.me/posts/async-with-composition-api
(only exception as far as I know seems to be when you use the <suspense> component)

Better: create a new function inside the composable that does the async action and call it without await.
Something like:

function init() {
	tokens.value = await service.getAll()
}

// and then call it either directly
init()

// or return it so the user of the composable can call it when he wants (probably not what you want here).
return {
	init,
    [...]
}

EDIT:
There is also: useAsyncState

A composable should *usually* not return a promise. See https://antfu.me/posts/async-with-composition-api (only exception as far as I know seems to be when you use the `<suspense>` component) Better: create a new function inside the composable that does the async action and call it without await. Something like: ```ts function init() { tokens.value = await service.getAll() } // and then call it either directly init() // or return it so the user of the composable can call it when he wants (probably not what you want here). return { init, [...] } ``` **EDIT:** There is also: [useAsyncState](https://vueuse.org/core/useasyncstate/)
Author
Owner

But afaik I need an async function when using await? Or use .then()?

Using the example you sent gives me an error about that.

But afaik I need an `async` function when using `await`? Or use `.then()`? Using the example you sent gives me an error about that.
Author
Owner

Okay so this does not seem to work at all right now.

Okay so this does not seem to work at all right now.
Author
Owner

I think I got it working in ef69fd28b2 but I'm not sure if that's a good way to do it. I think I'm returning the ref before it has data in it, that only gets populated once the callback in .then is done and puts it in tokens.value. Not sure if that's a good way to do it?

I think I got it working in ef69fd28b299ad965a9f68e467cee5d166df9e1d but I'm not sure if that's a good way to do it. I think I'm returning the ref before it has data in it, that only gets populated once the callback in `.then` is done and puts it in `tokens.value`. Not sure if that's a good way to do it?

Continuing this is #1307/

Continuing this is https://kolaente.dev/vikunja/frontend/pulls/1307/
dpschen marked this conversation as resolved
@ -31,0 +101,4 @@
const newToken = ref(null)
async function createToken() {
const r = await service.create({})

Would there be any negative side effect if you would assign to newToken.value directly?

newToken.value = await service.create({})
tokens.value.push(newToken.value)

If yes (picky): I prefere to give api returns a name that makes clear what they contain, e.g. token.

Would there be any negative side effect if you would assign to `newToken.value` directly? ```ts newToken.value = await service.create({}) tokens.value.push(newToken.value) ``` If yes (picky): I prefere to give api returns a name that makes clear what they contain, e.g. `token`.
Author
Owner

That seems to work fine, I've changed it accordingly.

That seems to work fine, I've changed it accordingly.
konrad marked this conversation as resolved
dpschen removed their assignment 2021-12-21 12:56:58 +00:00
konrad was assigned by dpschen 2021-12-21 12:57:04 +00:00
konrad added 3 commits 2021-12-26 10:32:40 +00:00
konrad added 2 commits 2021-12-26 10:38:12 +00:00
konrad added 1 commit 2021-12-26 10:43:20 +00:00
continuous-integration/drone/pr Build is failing Details
6063c03c2f
chore: rename to useTokens
konrad added 1 commit 2021-12-26 10:54:32 +00:00
continuous-integration/drone/pr Build is passing Details
e08c3a3594
chore: directly use newToken.value
konrad added 1 commit 2021-12-26 10:57:03 +00:00
continuous-integration/drone/pr Build is passing Details
ef69fd28b2
chore: use .then instead of await
konrad requested review from dpschen 2021-12-26 10:59:11 +00:00
konrad removed their assignment 2021-12-26 10:59:19 +00:00
dpschen was assigned by konrad 2021-12-26 10:59:19 +00:00
Author
Owner

@dpschen Could you check again?

@dpschen Could you check again?
dpschen added 46 commits 2022-02-06 14:44:19 +00:00
continuous-integration/drone/push Build is passing Details
4694c14760
chore(deps): update dependency vue-tsc to v0.30.1 (#1248)
Reviewed-on: #1248
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
033d97e919
chore(deps): update dependency @vue/eslint-config-typescript to v10 (#1243)
Reviewed-on: #1243
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
f8ffb428d3
chore(deps): update dependency rollup to v2.62.0 (#1246)
Reviewed-on: #1246
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
59889cccf3
chore(deps): update typescript-eslint monorepo to v5.8.1 (#1253)
Reviewed-on: #1253
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
b604d5da75
chore(deps): update dependency vite to v2.7.9 (#1254)
Reviewed-on: #1254
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
076494afa5
chore(deps): update dependency netlify-cli to v8.5.0 (#1255)
Reviewed-on: #1255
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
09b62da2ae
fix(deps): update dependency date-fns to v2.28.0 (#1256)
Reviewed-on: #1256
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
7908a1e657
chore(deps): update dependency caniuse-lite to v1.0.30001294 (#1257)
Reviewed-on: #1257
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is failing Details
8c62c96109
chore(deps): update dependency esbuild to v0.14.9 (#1258)
Reviewed-on: #1258
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
5e889ebe36
chore(deps): update dependency autoprefixer to v10.4.1 (#1260)
Reviewed-on: #1260
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
be427449e4
chore(deps): update dependency netlify-cli to v8.6.0 (#1259)
Reviewed-on: #1259
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
2fb16f9a77
fix(deps): update dependency vue-i18n to v9.2.0-beta.26 (#1263)
Reviewed-on: #1263
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
c6ffe8acab
chore(deps): update dependency vite to v2.7.10 (#1265)
Reviewed-on: #1265
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
f4545fbe2f
fix(deps): update dependency @vueuse/core to v7.4.3 (#1266)
Reviewed-on: #1266
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
cd10bc9d7a
fix(gantt): use function to create default date
continuous-integration/drone/push Build is passing Details
0befa58908
fix: blockquote styling in dark mode
continuous-integration/drone/push Build is passing Details
4a7d2d8414
feat: save and restore the user language on the server (#1181)
Co-authored-by: kolaente <k@knt.li>
Reviewed-on: #1181
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/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
ead3e45a59
chore(deps): update dependency @types/jest to v27.4.0
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
b80de79594
fix(deps): update dependency @vueuse/router to v7.4.3
continuous-integration/drone/push Build is passing Details
b57aa33cae
fix(deps): update dependency @vueuse/router to v7.5.1 (#1273)
Reviewed-on: #1273
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
7f4027cbe8
fix(deps): update dependency @vueuse/core to v7.5.1 (#1272)
Reviewed-on: #1272
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
continuous-integration/drone/push Build is passing Details
12a0099fbf
chore(deps): update dependency sass to v1.45.2 (#1271)
Reviewed-on: #1271
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 failing Details
5668fc7a2c
chore(deps): update dependency esbuild to v0.14.10
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is failing Details
f4db2df37b
chore(deps): update dependency caniuse-lite to v1.0.30001295
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is failing Details
c3845e5690
chore(deps): update dependency netlify-cli to v8.6.1
continuous-integration/drone/push Build is passing Details
5f1d936ca4
fix(deps): update dependency v-tooltip to v4.0.0-beta.5
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build was killed Details
951e511bf9
chore(deps): update dependency postcss-preset-env to v7.2.0
continuous-integration/drone/push Build was killed Details
dc02827a33
chore(deps): update dependency slugify to v1.6.5
continuous-integration/drone/push Build is failing Details
be899c3eb0
chore(deps): update dependency eslint to v8.6.0
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is failing Details
0ae774b95c
chore(deps): update typescript-eslint monorepo to v5.9.0
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
f7bd5f13ac
fix(deps): update dependency v-tooltip to v4.0.0-beta.6
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
8b639fd4af
chore(deps): update dependency rollup to v2.63.0
continuous-integration/drone/push Build is passing Details
2c395c720a
chore(deps): update dependency vue-tsc to v0.30.2
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is failing Details
cd97cfe612
chore(deps): update dependency netlify-cli to v8.6.3
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is failing Details
bc4ea82639
chore(deps): update dependency netlify-cli to v8.6.4
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
8114012997
feat: replace jest with vitest
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
d8106dcb73
chore(deps): update dependency vitest to v0.0.131
continuous-integration/drone/pr Build is passing Details
continuous-integration/drone/push Build is passing Details
dd450263fb
chore(deps): pin dependency happy-dom to 2.25.1
continuous-integration/drone/push Build is passing Details
cb37fd773d
feat: convert to composable useDateTimeSalutation
continuous-integration/drone/push Build is running Details
cdbd1c2ac4
feat: create BaseButton component (#1123)
Co-authored-by: Dominik Pschenitschni <mail@celement.de>
Reviewed-on: #1123
Reviewed-by: konrad <k@knt.li>
Co-authored-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
Co-committed-by: Dominik Pschenitschni <dpschen@noreply.kolaente.de>
dpschen force-pushed feature/caldav-tokens from f867195af5 to ce479b4076 2022-02-06 16:53:27 +00:00 Compare
Member

@konrad Can we close this in favour of #1307/ ?

I went through all the issues. Then we just have to merge one pull-request.

@konrad Can we close this in favour of https://kolaente.dev/vikunja/frontend/pulls/1307/ ? I went through all the issues. Then we just have to merge one pull-request.
Author
Owner

Can we close this in favour of #1307/ ?
I went through all the issues. Then we just have to merge one pull-request.

I think we could do that.

Who should continue in #1307?

> Can we close this in favour of #1307/ ? > I went through all the issues. Then we just have to merge one pull-request. I think we could do that. Who should continue in #1307?
konrad closed this pull request 2022-02-20 20:36:32 +00:00
This repo is archived. You cannot comment on pull requests.
No description provided.