Compare commits

..

19 Commits

Author SHA1 Message Date
renovate aaa21ddc72 fix(deps): update dependency vue-i18n to v9.7.0
continuous-integration/drone/pr Build is failing Details
2023-11-16 08:13:20 +00:00
kolaente 75262b716f
fix(kanban): opening a task from the kanban board and then reloading the page should not crash everything when then navigating back
continuous-integration/drone/push Build is passing Details
Before this fix, the following would not work:

1. Open the kanban view of a project
2. Click on a task to open it in a modal
3. Reload the page
4. Using your browser's back button, navigate back

Instead of showing the kanban board with the task modal closed, it would
navigate to `/projects/0/kanban` and crash.
2023-11-15 23:43:39 +01:00
ThatHurleyGuy 7e623d919e fix(filters): infinite loop when creating filters with dates (#3061)
continuous-integration/drone/push Build is passing Details
Rather than putting in a truncated version of the date/time with `startDate.getDate`, use the iso formatted version which includes the timezone data. I have no idea if this has ramifications elsewhere in the app, but it solves the problems I was seeing.

Co-authored-by: Sean Hurley <sean.hurley6@gmail.com>
Reviewed-on: #3061
Reviewed-by: konrad <k@knt.li>
Co-authored-by: ThatHurleyGuy <sean@hurley.io>
Co-committed-by: ThatHurleyGuy <sean@hurley.io>
2023-11-15 12:10:18 +00:00
kolaente 3f42ce2b34
fix(filter): make other filters are not available for project selection
continuous-integration/drone/push Build is passing Details
2023-11-15 12:47:19 +01:00
renovate 8b8da40265 chore(deps): update dev-dependencies (#3821)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3821
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-15 11:23:57 +00:00
Frederick [Bot] 0f23cc2162 [skip ci] Updated translations via Crowdin 2023-11-14 00:13:32 +00:00
Frederick [Bot] adf80d9184 [skip ci] Updated translations via Crowdin 2023-11-11 00:13:51 +00:00
Frederick [Bot] e3dfcafc29 [skip ci] Updated translations via Crowdin 2023-11-10 00:13:52 +00:00
Frederick [Bot] a9df58109f [skip ci] Updated translations via Crowdin 2023-11-09 00:14:14 +00:00
kolaente 59a7360608
feat(migration): proper wording for async migration
continuous-integration/drone/push Build is passing Details
2023-11-09 00:14:37 +01:00
renovate 29e128c64c chore(deps): update dev-dependencies (#3813)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3813
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 19:24:57 +00:00
renovate cec50d912c fix(deps): update dependency vue to v3.3.8 (#3814)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3814
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 19:24:39 +00:00
renovate 53564ec46c fix(deps): update dependency @types/lodash.clonedeep to v4.5.9 (#3817)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3817
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 17:07:48 +00:00
renovate e9cd7aac69 fix(deps): update dependency @intlify/unplugin-vue-i18n to v1.5.0 (#3812)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3812
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 17:06:56 +00:00
renovate a47bfb3ff1 fix(deps): update dependency @types/is-touch-device to v1.0.2 (#3816)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3816
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 15:06:23 +00:00
renovate 86eb4da2e3 fix(deps): update dependency @fortawesome/vue-fontawesome to v3.0.5 (#3815)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3815
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 15:03:14 +00:00
renovate d1882e9c3f fix(deps): update dependency vue-i18n to v9.6.5 (#3807)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3807
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 14:55:42 +00:00
renovate 974755ffc2 fix(deps): update sentry-javascript monorepo to v7.77.0 (#3805)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3805
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-11-07 14:32:45 +00:00
Frederick [Bot] f00d49cada [skip ci] Updated translations via Crowdin 2023-11-06 00:04:12 +00:00
37 changed files with 1007 additions and 902 deletions

View File

@ -48,13 +48,13 @@
"@fortawesome/fontawesome-svg-core": "6.4.2",
"@fortawesome/free-regular-svg-icons": "6.4.2",
"@fortawesome/free-solid-svg-icons": "6.4.2",
"@fortawesome/vue-fontawesome": "3.0.3",
"@fortawesome/vue-fontawesome": "3.0.5",
"@github/hotkey": "2.3.0",
"@infectoone/vue-ganttastic": "2.2.0",
"@intlify/unplugin-vue-i18n": "1.4.0",
"@intlify/unplugin-vue-i18n": "1.5.0",
"@kyvg/vue3-notification": "3.0.2",
"@sentry/tracing": "7.75.1",
"@sentry/vue": "7.75.1",
"@sentry/tracing": "7.77.0",
"@sentry/vue": "7.77.0",
"@tiptap/core": "2.1.12",
"@tiptap/extension-blockquote": "2.1.12",
"@tiptap/extension-bold": "2.1.12",
@ -88,8 +88,8 @@
"@tiptap/pm": "2.1.12",
"@tiptap/suggestion": "2.1.12",
"@tiptap/vue-3": "2.1.12",
"@types/is-touch-device": "1.0.1",
"@types/lodash.clonedeep": "4.5.8",
"@types/is-touch-device": "1.0.2",
"@types/lodash.clonedeep": "4.5.9",
"@types/sortablejs": "1.15.4",
"@vueuse/core": "10.5.0",
"@vueuse/router": "10.5.0",
@ -114,10 +114,10 @@
"sortablejs": "1.15.0",
"tippy.js": "6.3.7",
"ufo": "1.3.1",
"vue": "3.3.7",
"vue": "3.3.8",
"vue-advanced-cropper": "2.8.8",
"vue-flatpickr-component": "11.0.3",
"vue-i18n": "9.6.5",
"vue-i18n": "9.7.0",
"vue-router": "4.2.5",
"workbox-precaching": "7.0.0",
"zhyswan-vuedraggable": "4.1.3"
@ -126,56 +126,56 @@
"@4tw/cypress-drag-drop": "2.2.5",
"@cypress/vite-dev-server": "5.0.6",
"@cypress/vue": "6.0.0",
"@faker-js/faker": "8.2.0",
"@faker-js/faker": "8.3.1",
"@histoire/plugin-screenshot": "0.17.0",
"@histoire/plugin-vue": "0.17.4",
"@histoire/plugin-vue": "0.17.5",
"@rushstack/eslint-patch": "1.5.1",
"@tsconfig/node18": "18.2.2",
"@types/codemirror": "5.60.12",
"@types/dompurify": "3.0.4",
"@types/flexsearch": "0.7.5",
"@types/is-touch-device": "1.0.1",
"@types/lodash.debounce": "4.0.8",
"@types/codemirror": "5.60.13",
"@types/dompurify": "3.0.5",
"@types/flexsearch": "0.7.6",
"@types/is-touch-device": "1.0.2",
"@types/lodash.debounce": "4.0.9",
"@types/marked": "5.0.2",
"@types/node": "20.8.10",
"@types/node": "20.9.0",
"@types/postcss-preset-env": "7.7.0",
"@types/sortablejs": "1.15.4",
"@typescript-eslint/eslint-plugin": "6.9.1",
"@typescript-eslint/parser": "6.9.1",
"@types/sortablejs": "1.15.5",
"@typescript-eslint/eslint-plugin": "6.11.0",
"@typescript-eslint/parser": "6.11.0",
"@vitejs/plugin-legacy": "4.1.1",
"@vitejs/plugin-vue": "4.4.0",
"@vitejs/plugin-vue": "4.4.1",
"@vue/eslint-config-typescript": "12.0.0",
"@vue/test-utils": "2.4.1",
"@vue/test-utils": "2.4.2",
"@vue/tsconfig": "0.4.0",
"autoprefixer": "10.4.16",
"browserslist": "4.22.1",
"caniuse-lite": "1.0.30001559",
"caniuse-lite": "1.0.30001562",
"css-has-pseudo": "6.0.0",
"csstype": "3.1.2",
"cypress": "13.4.0",
"cypress": "13.5.1",
"esbuild": "0.19.5",
"eslint": "8.52.0",
"eslint": "8.53.0",
"eslint-plugin-vue": "9.18.1",
"happy-dom": "12.10.3",
"histoire": "0.17.4",
"histoire": "0.17.5",
"postcss": "8.4.31",
"postcss-easing-gradients": "3.0.1",
"postcss-easings": "4.0.0",
"postcss-focus-within": "8.0.0",
"postcss-preset-env": "9.3.0",
"rollup": "4.2.0",
"rollup": "4.4.1",
"rollup-plugin-visualizer": "5.9.2",
"sass": "1.69.5",
"start-server-and-test": "2.0.1",
"start-server-and-test": "2.0.2",
"typescript": "5.2.2",
"vite": "4.5.0",
"vite-plugin-inject-preload": "1.3.3",
"vite-plugin-pwa": "0.16.6",
"vite-plugin-pwa": "0.16.7",
"vite-plugin-sentry": "1.3.0",
"vite-svg-loader": "4.0.0",
"vitest": "0.34.6",
"vue-tsc": "1.8.22",
"wait-on": "7.1.0",
"wait-on": "7.2.0",
"workbox-cli": "7.0.0"
},
"pnpm": {

File diff suppressed because it is too large Load Diff

View File

@ -39,7 +39,7 @@
</router-view>
<modal
:enabled="Boolean(currentModal)"
:enabled="typeof currentModal !== 'undefined'"
@close="closeModal()"
variant="scrolling"
class="task-detail-view-modal"

View File

@ -20,11 +20,20 @@ import type {IProject} from '@/modelTypes/IProject'
import ProjectService from '@/services/project'
import {includesById} from '@/helpers/utils'
type ProjectFilterFunc = (p: IProject) => boolean
const props = defineProps({
modelValue: {
type: Array as PropType<IProject[]>,
default: () => [],
},
projectFilter: {
type: Function as PropType<ProjectFilterFunc>,
default: () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
return (_: IProject) => true
},
},
})
const emit = defineEmits<{
(e: 'update:modelValue', value: IProject[]): void
@ -58,6 +67,8 @@ async function findProjects(query: string) {
const response = await projectService.getAll({}, {s: query}) as IProject[]
// Filter selected items from the results
foundProjects.value = response.filter(({id}) => !includesById(projects.value, id))
foundProjects.value = response
.filter(({id}) => !includesById(projects.value, id))
.filter(props.projectFilter)
}
</script>

View File

@ -164,6 +164,7 @@
v-model="entities.projects"
@select="changeMultiselectFilter('projects', 'project_id')"
@remove="changeMultiselectFilter('projects', 'project_id')"
:project-filter="p => p.id > 0"
/>
</div>
</div>
@ -411,10 +412,10 @@ function prepareDate(filterName, variableName) {
const endDate = new Date(params.value.filter_value[foundDateEnd])
filters.value[variableName] = {
dateFrom: !isNaN(startDate)
? `${startDate.getFullYear()}-${startDate.getMonth() + 1}-${startDate.getDate()}`
? `${startDate.getUTCFullYear()}-${startDate.getUTCMonth() + 1}-${startDate.getUTCDate()}`
: params.value.filter_value[foundDateStart],
dateTo: !isNaN(endDate)
? `${endDate.getFullYear()}-${endDate.getMonth() + 1}-${endDate.getDate()}`
? `${endDate.getUTCFullYear()}-${endDate.getUTCMonth() + 1}-${endDate.getUTCDate()}`
: params.value.filter_value[foundDateEnd],
}
}

View File

@ -24,13 +24,18 @@ export function useRouteWithModal() {
// this is adapted from vue-router
// https://github.com/vuejs/vue-router-next/blob/798cab0d1e21f9b4d45a2bd12b840d2c7415f38a/src/RouterView.ts#L125
const routePropsOption = route.matched[0]?.props.default
const routeProps = routePropsOption
? routePropsOption === true
? route.params
: typeof routePropsOption === 'function'
? routePropsOption(route)
: routePropsOption
: {}
let routeProps = undefined
if (routePropsOption) {
if (routePropsOption === true) {
routeProps = route.params
} else {
if(typeof routePropsOption === 'function') {
routeProps = routePropsOption(route)
} else {
routeProps = routePropsOption
}
}
}
if (typeof routeProps === 'undefined') {
currentModal.value = undefined

View File

@ -6,6 +6,7 @@
"welcomeEvening": "مساء الخير {username}!",
"lastViewed": "آخر مشاهدة",
"addToHomeScreen": "أضف هذا التطبيق إلى شاشتك الرئيسة من أجل وصول أسرع وتجربة أفضل.",
"goToOverview": "Go to overview",
"project": {
"importText": "استيراد مشاريعك ومهامك من المنصات الأخرى إلى Vikunja:",
"import": "استيراد بياناتك إلى Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "الاستيراد مرة أخرى ممكن، ولكن قد يتسبب هذا بإنشاء بيانات مكررة. هل أنت متأكد؟",
"confirm": "أنا متأكد، الرجاء البدء في عملية الترحيل الآن!",
"importUpload": "لاستيراد البيانات من {name} إلى Vikunja، انقر على الزر أدناه لاختيار الملف.",
"upload": "رفع الملف"
"upload": "رفع الملف",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "التسميات",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Dobrý večer {username}!",
"lastViewed": "Naposledy zobrazeno",
"addToHomeScreen": "Přidejte tuto aplikaci na domovskou obrazovku pro rychlejší přístup a lepší zážitek.",
"goToOverview": "Přejít na přehled",
"project": {
"importText": "Importujte své projekty a úkoly z jiných služeb do Vikunja:",
"import": "Importujte svá data do Vikunja"
@ -85,7 +86,7 @@
"discoverableByName": "Umožnit ostatním uživatelům přidat mě jako člena do týmů nebo projektů, když hledají mé jméno",
"discoverableByEmail": "Umožnit ostatním uživatelům, aby mě přidali jako člena do týmů nebo projektů, když hledají můj úplný e-mail",
"playSoundWhenDone": "Přehrát zvuk při označení úkolů jako hotovo",
"weekStart": "Začátek týdne",
"weekStart": "První den týdne",
"weekStartSunday": "Neděle",
"weekStartMonday": "Pondělí",
"language": "Jazyk",
@ -424,7 +425,9 @@
"alreadyMigrated2": "Import je možný, ale mohl by vytvářet duplicity. Jste si jisti?",
"confirm": "Jsem si jistý, začněte migrovat!",
"importUpload": "Chcete-li importovat data z {name} do Vikunja, klikněte na tlačítko níže pro výběr souboru.",
"upload": "Nahrát soubor"
"upload": "Nahrát soubor",
"migrationStartedWillReciveEmail": "Vikunja nyní importuje vaše seznamy/projekty, úkoly, poznámky, připomenutí a soubory z {service}. Protože to bude chvíli trvat, pošleme vám e-mail až bude hotovo. Toto okno můžete nyní zavřít.",
"migrationInProgress": "Probíhá migrace. Počkejte prosím na její dokončení."
},
"label": {
"title": "Štítky",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Godaften {username}!",
"lastViewed": "Sidst vist",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Du kan godt importere igen, men kan der kan opstå dubletter. Er du sikker?",
"confirm": "Jeg er sikker, start migreringen nu!",
"importUpload": "For at importere data fra {name} til Vikunja, skal du klikke på knappen nedenfor for at vælge en fil.",
"upload": "Upload fil"
"upload": "Upload fil",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etiketter",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Guten Abend, {username}!",
"lastViewed": "Zuletzt angesehen",
"addToHomeScreen": "Füge diese App deinem Startbildschirm hinzu, um schneller darauf zuzugreifen und das Erlebnis zu verbessern.",
"goToOverview": "Zur Übersicht",
"project": {
"importText": "Importiere deine Projekte und Aufgaben aus anderen Diensten in Vikunja:",
"import": "Importiere deine Daten in Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Ein erneutes Importieren ist möglich, kann aber Duplikate erzeugen. Bist du sicher?",
"confirm": "Ich bin sicher, bitte starte mit der Migration!",
"importUpload": "Um Daten von {name} in Vikunja zu importieren, klicke auf die Schaltfläche unten, um eine Datei auszuwählen.",
"upload": "Datei hochladen"
"upload": "Datei hochladen",
"migrationStartedWillReciveEmail": "Vikunja wird nun deine Listen/Projekte, Aufgaben, Notizen, Erinnerungen und Dateien von {service} importieren. Da dies eine Weile dauern wird, senden wir dir eine E-Mail, sobald der Import abgeschlossen ist. Du kannst dieses Fenster jetzt schließen.",
"migrationInProgress": "Ein Import wird gerade durchgeführt. Bitte warte, bis dieser abgeschlossen ist."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Guten Abend, {username}!",
"lastViewed": "Zletscht ahglueget",
"addToHomeScreen": "Füge diese App deinem Startbildschirm hinzu, um schneller darauf zuzugreifen und das Erlebnis zu verbessern.",
"goToOverview": "Zur Übersicht",
"project": {
"importText": "Importiere deine Projekte und Aufgaben aus anderen Diensten in Vikunja:",
"import": "Importiere deine Daten in Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Es erneuts Importiere isch scho mögli, aber chenti Duplikaat erstelle. Bisch der sicher?",
"confirm": "Ich bin sicher, fang mit de Migration ah!",
"importUpload": "Um Daten von {name} in Vikunja zu importieren, klicke auf die Schaltfläche unten, um eine Datei auszuwählen.",
"upload": "Datei hochladen"
"upload": "Datei hochladen",
"migrationStartedWillReciveEmail": "Vikunja wird nun deine Listen/Projekte, Aufgaben, Notizen, Erinnerungen und Dateien von {service} importieren. Da dies eine Weile dauern wird, senden wir dir eine E-Mail, sobald der Import abgeschlossen ist. Du kannst dieses Fenster jetzt schließen.",
"migrationInProgress": "Ein Import wird gerade durchgeführt. Bitte warte, bis dieser abgeschlossen ist."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "¡Buenas Tardes {username}!",
"lastViewed": "Visto por última vez",
"addToHomeScreen": "Añade esta aplicación a tu pantalla de inicio para un acceso más rápido y una experiencia mejorada.",
"goToOverview": "Go to overview",
"project": {
"importText": "Importa tus proyectos y tareas de otros servicios a Vikunja:",
"import": "Importa tus datos a Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importar de nuevo es posible, pero puede crear duplicados. ¿Estás seguro?",
"confirm": "Estoy seguro, ¡por favor empieza a migrar ahora!",
"importUpload": "Para importar datos de {name} a Vikunja, haz clic en el botón de abajo para seleccionar un archivo.",
"upload": "Subir archivo"
"upload": "Subir archivo",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etiquetas",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Bonsoir {username} !",
"lastViewed": "Dernière consultation",
"addToHomeScreen": "Ajoutez cette application à votre écran d'accueil pour un accès plus rapide et une meilleure expérience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Importer vos projets et tâches dautres services dans Vikunja :",
"import": "Importer vos données dans Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importer à nouveau est possible mais peut créer des doublons. Es-tu sûr·e ?",
"confirm": "Je suis sûr·e, commencer à migrer maintenant !",
"importUpload": "Pour importer les données de {name} dans Vikunja, cliquez sur le bouton ci-dessous pour sélectionner un fichier.",
"upload": "Téléverser le fichier"
"upload": "Téléverser le fichier",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Étiquettes",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Jó estét {username}!",
"lastViewed": "Utoljára megtekintve",
"addToHomeScreen": "Adja hozzá ezt az alkalmazást a kezdőképernyőhöz a gyorsabb hozzáférés és a jobb élmény érdekében.",
"goToOverview": "Go to overview",
"project": {
"importText": "Importálja projektjeit és feladatait más szolgáltatásokból a Vikunjába:",
"import": "Importálja adatait a Vikunjába"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Az újbóli importálás lehetséges, de előfordulhat, hogy ismétlődések keletkeznek. Biztos ebben?",
"confirm": "Biztos vagyok benne, kezdje el a migrációt most!",
"importUpload": "Ha adatokat szeretne importálni a(z) {name} webhelyről a Vikunjába, kattintson az alábbi gombra a fájl kiválasztásához.",
"upload": "Fájl feltöltése"
"upload": "Fájl feltöltése",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Címkék",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Buonasera {username}!",
"lastViewed": "Ultima visualizzazione",
"addToHomeScreen": "Aggiungi questa app alla tua schermata iniziale per un accesso più veloce e un'esperienza migliore.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Importa i tuoi dati in Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importare di nuovo è possibile, ma potrebbe creare duplicati. Sei sicuro?",
"confirm": "Sono sicuro, per favore inizia adesso la migrazione!",
"importUpload": "Per importare i dati da {name} in Vikunja, fai clic sul pulsante qui sotto per selezionare un file.",
"upload": "Carica file"
"upload": "Carica file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etichette",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "こんばんは、{username}さん",
"lastViewed": "最近の表示",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "他のサービスからVikunjaにプロジェクトやタスクをインポートします:",
"import": "Vikunjaへのデータのインポート"
@ -424,7 +425,9 @@
"alreadyMigrated2": "再びインポートすることも可能ですが、重複する可能性があります。インポートして本当によろしいですか?",
"confirm": "了解!インポート開始なのだ!",
"importUpload": "{name}からVikunjaにデータをインポートするには、以下のボタンをクリックしてファイルを選択してください。",
"upload": "ファイルのアップロード"
"upload": "ファイルのアップロード",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "ラベル",

View File

@ -6,6 +6,7 @@
"welcomeEvening": " 오늘 하루는 어땠나요? {username} 님!",
"lastViewed": "최근에 본 것",
"addToHomeScreen": "더 빠른 액세스와 향상된 경험을 위해 이 앱을 홈 화면에 추가하세요.",
"goToOverview": "Go to overview",
"project": {
"importText": "다른 서비스의 프로젝트 및 작업을 Vikunja로 가져옵니다.",
"import": "데이터를 Vikunja로 가져오기"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Laatst bekeken",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "Ik weet het zeker, begin nu met migreren!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Bestand uploaden"
"upload": "Bestand uploaden",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "God Morgen {username}!",
"lastViewed": "Sist sett",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Importer dine data til Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importering på nytt er mulig, men kan skape duplikater. Er du sikker?",
"confirm": "Jeg er sikker, vennligst begynn å migrere nå!",
"importUpload": "For å importere data fra {name} til Vikunja, klikk på knappen nedenfor for å velge en fil.",
"upload": "Last opp fil"
"upload": "Last opp fil",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etiketter",

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Boa noite, {username}!",
"lastViewed": "Visto por último",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "Tenho certeza, comece a migrar agora, por favor!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Enviar arquivo"
"upload": "Enviar arquivo",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etiquetas",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Boa Tarde {username}!",
"lastViewed": "Visto recentemente",
"addToHomeScreen": "Adiciona esta aplicação ao ecrã inicial para um acesso mais rápido e uma melhor experiência.",
"goToOverview": "Ir para a vista geral",
"project": {
"importText": "Importa os teus projetos e tarefas de outros serviços para o Vikunja:",
"import": "Importar os teus dados para o Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "É possível importar novamente, mas pode criar duplicados. Tens a certeza?",
"confirm": "Tenho a certeza, por favor comece a migração agora!",
"importUpload": "Para importares dados de {name} para o Vikunja, clica no botão abaixo para selecionar um ficheiro.",
"upload": "Carregar ficheiro"
"upload": "Carregar ficheiro",
"migrationStartedWillReciveEmail": "O Vikunja irá agora importar as tuas listas/projetos, tarefas, lembretes e ficheiros a partir de {service}. Como isso vai demorar algum tempo, vamos enviar-te um e-mail após a importação estar concluída. Podes agora fechar esta janela.",
"migrationInProgress": "Uma migração está atualmente em curso. Por favor, aguarda até ela estar concluída."
},
"label": {
"title": "Etiquetas",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Добрый вечер, {username}!",
"lastViewed": "Последние просмотренные",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Импортировать проекты и задачи из других сервисов в Vikunja:",
"import": "Импорт данных в Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Повторный импорт возможен, но могут возникнуть дубликаты. Продолжить?",
"confirm": "Я уверен, давай начнём миграцию!",
"importUpload": "Чтобы импортировать данные из {name} в Vikunja, нажмите кнопку ниже для выбора файла.",
"upload": "Загрузить файл"
"upload": "Загрузить файл",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Метки",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Godkväll {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Importera din data till Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Ladda upp fil"
"upload": "Ladda upp fil",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Etiketter",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Xem gần đây",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Nhập lại được luôn, nhưng có thể tạo ra các trùng lặp đấy. Bạn chắc chưa?",
"confirm": "Tôi chắc như đinh, hãy bắt đầu di chuyển thôi!",
"importUpload": "Để nhập dữ liệu từ {name} vào Vikunja, hãy nhấp vào nút bên dưới để chọn tệp.",
"upload": "Tải tệp lên"
"upload": "Tải tệp lên",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Nhãn",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "中午好,{username}",
"lastViewed": "最近查看",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "可以再次导入,但这可能会造成数据重复。您确定吗?",
"confirm": "我确定, 请立即开始迁移!",
"importUpload": "请点击下面的按钮选择一个文件,将 {name} 的数据导入到 Vikunja",
"upload": "点击上传文件"
"upload": "点击上传文件",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "标签",

View File

@ -6,6 +6,7 @@
"welcomeEvening": "Good Evening {username}!",
"lastViewed": "Last viewed",
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
"goToOverview": "Go to overview",
"project": {
"importText": "Import your projects and tasks from other services into Vikunja:",
"import": "Import your data into Vikunja"
@ -424,7 +425,9 @@
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
"confirm": "I am sure, please start migrating now!",
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
"upload": "Upload file"
"upload": "Upload file",
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
},
"label": {
"title": "Labels",

View File

@ -37,7 +37,11 @@ const MigrationHandlerComponent = () => import('@/views/migrate/MigrationHandler
const ProjectList = () => import('@/views/project/ProjectList.vue')
const ProjectGantt = () => import('@/views/project/ProjectGantt.vue')
const ProjectTable = () => import('@/views/project/ProjectTable.vue')
const ProjectKanban = () => import('@/views/project/ProjectKanban.vue')
// If we load the component async, using it as a backdrop view will not work. Instead, everything explodes
// with an error from the core saying "Cannot read properties of undefined (reading 'parentNode')"
// Of course, with no clear indicator of where the problem comes from.
// const ProjectKanban = () => import('@/views/project/ProjectKanban.vue')
import ProjectKanban from '@/views/project/ProjectKanban.vue'
const ProjectInfo = () => import('@/views/project/ProjectInfo.vue')
// Project Settings

View File

@ -3,7 +3,7 @@
<h1>{{ $t('migrate.titleService', {name: migrator.name}) }}</h1>
<p>{{ $t('migrate.descriptionDo') }}</p>
<template v-if="message === '' && lastMigrationDate === null">
<template v-if="message === '' && lastMigrationFinishedAt === null">
<template v-if="isMigrating === false">
<template v-if="migrator.isFileMigrator">
<p>{{ $t('migrate.importUpload', {name: migrator.name}) }}</p>
@ -46,21 +46,35 @@
<p>{{ $t('migrate.inProgress') }}</p>
</div>
</template>
<div v-else-if="lastMigrationDate">
<div v-else-if="lastMigrationStartedAt && lastMigrationFinishedAt === null">
<p>
{{ $t('migrate.alreadyMigrated1', {name: migrator.name, date: formatDateLong(lastMigrationDate)}) }}<br/>
{{ $t('migrate.migrationInProgress') }}
</p>
<x-button :to="{name: 'home'}">{{ $t('home.goToOverview') }}</x-button>
</div>
<div v-else-if="lastMigrationFinishedAt">
<p>
{{
$t('migrate.alreadyMigrated1', {name: migrator.name, date: formatDateLong(lastMigrationFinishedAt)})
}}<br/>
{{ $t('migrate.alreadyMigrated2') }}
</p>
<div class="buttons">
<x-button @click="migrate">{{ $t('migrate.confirm') }}</x-button>
<x-button :to="{name: 'home'}" variant="tertiary" class="has-text-danger">{{ $t('misc.cancel') }}</x-button>
<x-button :to="{name: 'home'}" variant="tertiary" class="has-text-danger">
{{ $t('misc.cancel') }}
</x-button>
</div>
</div>
<div v-else>
<Message class="mb-4">
<Message class="mb-4" v-if="migrator.isFileMigrator">
{{ message }}
</Message>
<x-button :to="{name: 'home'}">{{ $t('misc.refresh') }}</x-button>
<Message class="mb-4" v-else>
{{ $t('migrate.migrationStartedWillReciveEmail', {service: migrator.name}) }}
</Message>
<x-button :to="{name: 'home'}">{{ $t('home.goToOverview') }}</x-button>
</div>
</div>
</template>
@ -82,13 +96,13 @@ import {useI18n} from 'vue-i18n'
import Logo from '@/assets/logo.svg?component'
import Message from '@/components/misc/message.vue'
import AbstractMigrationService, { type MigrationConfig } from '@/services/migrator/abstractMigration'
import AbstractMigrationService, {type MigrationConfig} from '@/services/migrator/abstractMigration'
import AbstractMigrationFileService from '@/services/migrator/abstractMigrationFile'
import {formatDateLong} from '@/helpers/time/formatDate'
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
import {MIGRATORS} from './migrators'
import {MIGRATORS, Migrator} from './migrators'
import {useTitle} from '@/composables/useTitle'
import {useProjectStore} from '@/stores/projects'
@ -104,11 +118,12 @@ const {t} = useI18n({useScope: 'global'})
const progressDotsCount = ref(PROGRESS_DOTS_COUNT)
const authUrl = ref('')
const isMigrating = ref(false)
const lastMigrationDate = ref<Date | null>(null)
const lastMigrationFinishedAt = ref<Date | null>(null)
const lastMigrationStartedAt = ref<Date | null>(null)
const message = ref('')
const migratorAuthCode = ref('')
const migrator = computed(() => MIGRATORS[props.service])
const migrator = computed<Migrator>(() => MIGRATORS[props.service])
const migrationService = shallowReactive(new AbstractMigrationService(migrator.value.id))
const migrationFileService = shallowReactive(new AbstractMigrationFileService(migrator.value.id))
@ -130,23 +145,32 @@ async function initMigration() {
if (!migratorAuthCode.value) {
return
}
const {time} = await migrationService.getStatus()
if (time) {
lastMigrationDate.value = parseDateOrNull(time)
if (lastMigrationDate.value) {
const {startedAt, finishedAt} = await migrationService.getStatus()
if (startedAt) {
lastMigrationStartedAt.value = parseDateOrNull(startedAt)
}
if (finishedAt) {
lastMigrationFinishedAt.value = parseDateOrNull(finishedAt)
if (lastMigrationFinishedAt.value) {
return
}
}
if (lastMigrationStartedAt.value && lastMigrationFinishedAt.value === null) {
// Migration already in progress
return
}
await migrate()
}
initMigration()
const uploadInput = ref<HTMLInputElement | null>(null)
async function migrate() {
isMigrating.value = true
lastMigrationDate.value = null
lastMigrationFinishedAt.value = null
message.value = ''
let migrationConfig: MigrationConfig | File = {code: migratorAuthCode.value}

View File

@ -1,7 +1,7 @@
<template>
<ProjectWrapper
class="project-kanban"
:project-id="project.id"
:project-id="projectId"
viewName="kanban"
>
<template #header>
@ -330,9 +330,14 @@ const bucketDraggableComponentData = computed(() => ({
{'dragging-disabled': !canWrite.value},
],
}))
const {
projectId = undefined,
} = defineProps<{
projectId: number,
}>()
const canWrite = computed(() => baseStore.currentProject?.maxRight > Rights.READ)
const project = computed(() => baseStore.currentProject)
const project = computed(() => projectId ? projectStore.projects[projectId]: null)
const buckets = computed(() => kanbanStore.buckets)
const loading = computed(() => kanbanStore.isLoading)
@ -342,10 +347,9 @@ const taskLoading = computed(() => taskStore.isLoading)
watch(
() => ({
params: params.value,
project: project.value,
projectId,
}),
({params, project}) => {
const projectId = project.id
({params}) => {
if (projectId === undefined || Number(projectId) === 0) {
return
}
@ -396,7 +400,7 @@ function updateTasks(bucketId: IBucket['id'], tasks: IBucket['tasks']) {
async function updateTaskPosition(e) {
drag.value = false
// While we could just pass the bucket index in through the function call, this would not give us the
// While we could just pass the bucket index in through the function call, this would not give us the
// new bucket id when a task has been moved between buckets, only the new bucket. Using the data-bucket-id
// of the drop target works all the time.
const bucketIndex = parseInt(e.to.dataset.bucketIndex)
@ -450,7 +454,7 @@ async function updateTaskPosition(e) {
try {
await taskStore.update(newTask)
// Make sure the first and second task don't both get position 0 assigned
if(newTaskIndex === 0 && taskAfter !== null && taskAfter.kanbanPosition === 0) {
const taskAfterAfter = newBucket.tasks[newTaskIndex + 2] ?? null
@ -480,7 +484,7 @@ async function addTaskToBucket(bucketId: IBucket['id']) {
return
}
newTaskError.value[bucketId] = false
const task = await taskStore.createNewTask({
title: newTaskText.value,
bucketId,
@ -619,7 +623,7 @@ async function toggleDoneBucket(bucket: IBucket) {
const doneBucketId = project.value.doneBucketId === bucket.id
? 0
: bucket.id
await projectStore.updateProject({
...project.value,
doneBucketId,
@ -722,7 +726,7 @@ $filter-container-height: '1rem - #{$switch-view-height}';
}
&:last-of-type {
padding-bottom: .5rem;
}
}
}
.no-move {