Compare commits
16 Commits
acaf0e660b
...
6b6d1badab
Author | SHA1 | Date |
---|---|---|
renovate | 6b6d1badab | |
renovate | 5e3616bda3 | |
renovate | 3e5ff77b91 | |
kolaente | 403db6adbf | |
kolaente | fd4312382e | |
kolaente | 2dcf6c6861 | |
kolaente | 8f85af07ca | |
kolaente | 9f89fbe5a6 | |
kolaente | 6ad83c0685 | |
kolaente | 97b7592e7c | |
kolaente | 19c9cd9bc2 | |
Frederick [Bot] | e53fcd3367 | |
kolaente | d635fd2dd3 | |
renovate | b8584301a3 | |
renovate | 2bb4c31f20 | |
Frederick [Bot] | d22ebef0b3 |
|
@ -139,7 +139,7 @@ steps:
|
||||||
event: [ push, tag, pull_request ]
|
event: [ push, tag, pull_request ]
|
||||||
|
|
||||||
- name: api-lint
|
- name: api-lint
|
||||||
image: golangci/golangci-lint:v1.57.0
|
image: golangci/golangci-lint:v1.57.1
|
||||||
pull: always
|
pull: always
|
||||||
environment:
|
environment:
|
||||||
GOPROXY: 'https://goproxy.kolaente.de'
|
GOPROXY: 'https://goproxy.kolaente.de'
|
||||||
|
|
|
@ -5,6 +5,7 @@ WORKDIR /build
|
||||||
|
|
||||||
ENV PNPM_CACHE_FOLDER .cache/pnpm/
|
ENV PNPM_CACHE_FOLDER .cache/pnpm/
|
||||||
ENV PUPPETEER_SKIP_DOWNLOAD true
|
ENV PUPPETEER_SKIP_DOWNLOAD true
|
||||||
|
ENV CYPRESS_INSTALL_BINARY 0
|
||||||
|
|
||||||
COPY frontend/ ./
|
COPY frontend/ ./
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,6 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"connect-history-api-fallback": "2.0.0",
|
"connect-history-api-fallback": "2.0.0",
|
||||||
"express": "4.18.3"
|
"express": "4.19.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -581,10 +581,10 @@ cookie-signature@1.0.6:
|
||||||
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
|
||||||
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
|
integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
|
||||||
|
|
||||||
cookie@0.5.0:
|
cookie@0.6.0:
|
||||||
version "0.5.0"
|
version "0.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
|
||||||
integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
|
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
|
||||||
|
|
||||||
core-util-is@1.0.2:
|
core-util-is@1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
|
@ -830,17 +830,17 @@ etag@~1.8.1:
|
||||||
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
|
||||||
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
|
||||||
|
|
||||||
express@4.18.3:
|
express@4.19.0:
|
||||||
version "4.18.3"
|
version "4.19.0"
|
||||||
resolved "https://registry.yarnpkg.com/express/-/express-4.18.3.tgz#6870746f3ff904dee1819b82e4b51509afffb0d4"
|
resolved "https://registry.yarnpkg.com/express/-/express-4.19.0.tgz#c9f689a62522f3399132d49eacd9af177d8ccb9e"
|
||||||
integrity sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==
|
integrity sha512-/ERliX0l7UuHEgAy7HU2FRsiz3ScIKNl/iwnoYzHTJC0Sqj3ctWDD3MQ9CbUEfjshvxXImWaeukD0Xo7a2lWLA==
|
||||||
dependencies:
|
dependencies:
|
||||||
accepts "~1.3.8"
|
accepts "~1.3.8"
|
||||||
array-flatten "1.1.1"
|
array-flatten "1.1.1"
|
||||||
body-parser "1.20.2"
|
body-parser "1.20.2"
|
||||||
content-disposition "0.5.4"
|
content-disposition "0.5.4"
|
||||||
content-type "~1.0.4"
|
content-type "~1.0.4"
|
||||||
cookie "0.5.0"
|
cookie "0.6.0"
|
||||||
cookie-signature "1.0.6"
|
cookie-signature "1.0.6"
|
||||||
debug "2.6.9"
|
debug "2.6.9"
|
||||||
depd "2.0.0"
|
depd "2.0.0"
|
||||||
|
|
|
@ -20,7 +20,6 @@ function createSingleTaskInBucket(count = 1, attrs = {}) {
|
||||||
})
|
})
|
||||||
const tasks = TaskFactory.create(count, {
|
const tasks = TaskFactory.create(count, {
|
||||||
project_id: projects[0].id,
|
project_id: projects[0].id,
|
||||||
bucket_id: buckets[0].id,
|
|
||||||
...attrs,
|
...attrs,
|
||||||
})
|
})
|
||||||
TaskBucketFactory.create(1, {
|
TaskBucketFactory.create(1, {
|
||||||
|
|
|
@ -467,7 +467,6 @@ describe('Task', () => {
|
||||||
const tasks = TaskFactory.create(1, {
|
const tasks = TaskFactory.create(1, {
|
||||||
id: 1,
|
id: 1,
|
||||||
project_id: projects[0].id,
|
project_id: projects[0].id,
|
||||||
bucket_id: buckets[0].id,
|
|
||||||
})
|
})
|
||||||
const labels = LabelFactory.create(1)
|
const labels = LabelFactory.create(1)
|
||||||
LabelTaskFactory.truncate()
|
LabelTaskFactory.truncate()
|
||||||
|
@ -834,7 +833,6 @@ describe('Task', () => {
|
||||||
const tasks = TaskFactory.create(1, {
|
const tasks = TaskFactory.create(1, {
|
||||||
id: 1,
|
id: 1,
|
||||||
project_id: projects[0].id,
|
project_id: projects[0].id,
|
||||||
bucket_id: buckets[0].id,
|
|
||||||
})
|
})
|
||||||
const labels = LabelFactory.create(1)
|
const labels = LabelFactory.create(1)
|
||||||
LabelTaskFactory.truncate()
|
LabelTaskFactory.truncate()
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
"@fortawesome/free-solid-svg-icons": "6.5.1",
|
"@fortawesome/free-solid-svg-icons": "6.5.1",
|
||||||
"@fortawesome/vue-fontawesome": "3.0.6",
|
"@fortawesome/vue-fontawesome": "3.0.6",
|
||||||
"@github/hotkey": "3.1.0",
|
"@github/hotkey": "3.1.0",
|
||||||
"@infectoone/vue-ganttastic": "2.2.0",
|
"@infectoone/vue-ganttastic": "2.3.1",
|
||||||
"@intlify/unplugin-vue-i18n": "3.0.1",
|
"@intlify/unplugin-vue-i18n": "3.0.1",
|
||||||
"@kyvg/vue3-notification": "3.2.1",
|
"@kyvg/vue3-notification": "3.2.1",
|
||||||
"@sentry/tracing": "7.107.0",
|
"@sentry/tracing": "7.107.0",
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
"snake-case": "3.0.4",
|
"snake-case": "3.0.4",
|
||||||
"sortablejs": "1.15.2",
|
"sortablejs": "1.15.2",
|
||||||
"tippy.js": "6.3.7",
|
"tippy.js": "6.3.7",
|
||||||
"ufo": "1.5.2",
|
"ufo": "1.5.3",
|
||||||
"vue": "3.4.21",
|
"vue": "3.4.21",
|
||||||
"vue-advanced-cropper": "2.8.8",
|
"vue-advanced-cropper": "2.8.8",
|
||||||
"vue-flatpickr-component": "11.0.5",
|
"vue-flatpickr-component": "11.0.5",
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
"@faker-js/faker": "8.4.1",
|
"@faker-js/faker": "8.4.1",
|
||||||
"@histoire/plugin-screenshot": "0.17.14",
|
"@histoire/plugin-screenshot": "0.17.14",
|
||||||
"@histoire/plugin-vue": "0.17.14",
|
"@histoire/plugin-vue": "0.17.14",
|
||||||
"@rushstack/eslint-patch": "1.7.2",
|
"@rushstack/eslint-patch": "1.8.0",
|
||||||
"@tsconfig/node18": "18.2.2",
|
"@tsconfig/node18": "18.2.2",
|
||||||
"@types/codemirror": "5.60.15",
|
"@types/codemirror": "5.60.15",
|
||||||
"@types/dompurify": "3.0.5",
|
"@types/dompurify": "3.0.5",
|
||||||
|
@ -142,7 +142,7 @@
|
||||||
"@types/is-touch-device": "1.0.2",
|
"@types/is-touch-device": "1.0.2",
|
||||||
"@types/lodash.debounce": "4.0.9",
|
"@types/lodash.debounce": "4.0.9",
|
||||||
"@types/marked": "5.0.2",
|
"@types/marked": "5.0.2",
|
||||||
"@types/node": "20.11.29",
|
"@types/node": "20.11.30",
|
||||||
"@types/postcss-preset-env": "7.7.0",
|
"@types/postcss-preset-env": "7.7.0",
|
||||||
"@types/sortablejs": "1.15.8",
|
"@types/sortablejs": "1.15.8",
|
||||||
"@typescript-eslint/eslint-plugin": "7.3.1",
|
"@typescript-eslint/eslint-plugin": "7.3.1",
|
||||||
|
@ -163,7 +163,7 @@
|
||||||
"eslint-plugin-vue": "9.23.0",
|
"eslint-plugin-vue": "9.23.0",
|
||||||
"happy-dom": "14.0.0",
|
"happy-dom": "14.0.0",
|
||||||
"histoire": "0.17.14",
|
"histoire": "0.17.14",
|
||||||
"postcss": "8.4.36",
|
"postcss": "8.4.37",
|
||||||
"postcss-easing-gradients": "3.0.1",
|
"postcss-easing-gradients": "3.0.1",
|
||||||
"postcss-easings": "4.0.0",
|
"postcss-easings": "4.0.0",
|
||||||
"postcss-focus-within": "8.0.1",
|
"postcss-focus-within": "8.0.1",
|
||||||
|
@ -175,7 +175,7 @@
|
||||||
"typescript": "5.4.2",
|
"typescript": "5.4.2",
|
||||||
"vite": "5.1.6",
|
"vite": "5.1.6",
|
||||||
"vite-plugin-inject-preload": "1.3.3",
|
"vite-plugin-inject-preload": "1.3.3",
|
||||||
"vite-plugin-pwa": "0.19.4",
|
"vite-plugin-pwa": "0.19.5",
|
||||||
"vite-plugin-sentry": "1.4.0",
|
"vite-plugin-sentry": "1.4.0",
|
||||||
"vite-svg-loader": "5.1.0",
|
"vite-svg-loader": "5.1.0",
|
||||||
"vitest": "1.4.0",
|
"vitest": "1.4.0",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -47,7 +47,7 @@ import AddToHomeScreen from '@/components/home/AddToHomeScreen.vue'
|
||||||
import DemoMode from '@/components/home/DemoMode.vue'
|
import DemoMode from '@/components/home/DemoMode.vue'
|
||||||
|
|
||||||
const importAccountDeleteService = () => import('@/services/accountDelete')
|
const importAccountDeleteService = () => import('@/services/accountDelete')
|
||||||
const importMessage = () => import('@/message')
|
import {success} from '@/message'
|
||||||
|
|
||||||
const baseStore = useBaseStore()
|
const baseStore = useBaseStore()
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
|
@ -69,11 +69,9 @@ watch(accountDeletionConfirm, async (accountDeletionConfirm) => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const messageP = importMessage()
|
|
||||||
const AccountDeleteService = (await importAccountDeleteService()).default
|
const AccountDeleteService = (await importAccountDeleteService()).default
|
||||||
const accountDeletionService = new AccountDeleteService()
|
const accountDeletionService = new AccountDeleteService()
|
||||||
await accountDeletionService.confirm(accountDeletionConfirm)
|
await accountDeletionService.confirm(accountDeletionConfirm)
|
||||||
const {success} = await messageP
|
|
||||||
success({message: t('user.deletion.confirmSuccess')})
|
success({message: t('user.deletion.confirmSuccess')})
|
||||||
authStore.refreshUserInfo()
|
authStore.refreshUserInfo()
|
||||||
}, { immediate: true })
|
}, { immediate: true })
|
||||||
|
|
|
@ -37,7 +37,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref, computed, watch} from 'vue'
|
import {ref, computed, watch, onBeforeUnmount} from 'vue'
|
||||||
|
|
||||||
import CustomTransition from '@/components/misc/CustomTransition.vue'
|
import CustomTransition from '@/components/misc/CustomTransition.vue'
|
||||||
import Editor from '@/components/input/AsyncEditor'
|
import Editor from '@/components/input/AsyncEditor'
|
||||||
|
@ -88,6 +88,12 @@ async function saveWithDelay() {
|
||||||
}, 5000)
|
}, 5000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onBeforeUnmount(() => {
|
||||||
|
if (changeTimeout.value !== null) {
|
||||||
|
clearTimeout(changeTimeout.value)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
async function save() {
|
async function save() {
|
||||||
if (changeTimeout.value !== null) {
|
if (changeTimeout.value !== null) {
|
||||||
clearTimeout(changeTimeout.value)
|
clearTimeout(changeTimeout.value)
|
||||||
|
|
|
@ -47,7 +47,6 @@
|
||||||
<ReminderPeriod
|
<ReminderPeriod
|
||||||
v-if="activeForm === 'relative'"
|
v-if="activeForm === 'relative'"
|
||||||
v-model="reminder"
|
v-model="reminder"
|
||||||
@update:modelValue="updateDataAndMaybeClose(close)"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<DatepickerInline
|
<DatepickerInline
|
||||||
|
|
|
@ -57,11 +57,11 @@
|
||||||
"logout": "Wyloguj",
|
"logout": "Wyloguj",
|
||||||
"emailInvalid": "Proszę podać poprawny adres e-mail.",
|
"emailInvalid": "Proszę podać poprawny adres e-mail.",
|
||||||
"usernameRequired": "Proszę podać nazwę użytkownika.",
|
"usernameRequired": "Proszę podać nazwę użytkownika.",
|
||||||
"usernameMustNotContainSpace": "The username must not contain spaces.",
|
"usernameMustNotContainSpace": "Nazwa użytkownika nie może zawierać spacji.",
|
||||||
"usernameMustNotLookLikeUrl": "The username must not look like a URL.",
|
"usernameMustNotLookLikeUrl": "Nazwa użytkownika nie może wyglądać jak adres URL.",
|
||||||
"passwordRequired": "Proszę podać hasło.",
|
"passwordRequired": "Proszę podać hasło.",
|
||||||
"passwordNotMin": "Password must have at least 8 characters.",
|
"passwordNotMin": "Hasło musi zawierać co najmniej 8 znaków.",
|
||||||
"passwordNotMax": "Password must have at most 250 characters.",
|
"passwordNotMax": "Hasło musi zawierać co najwyżej 250 znaków.",
|
||||||
"showPassword": "Pokaż hasło",
|
"showPassword": "Pokaż hasło",
|
||||||
"hidePassword": "Ukryj hasło",
|
"hidePassword": "Ukryj hasło",
|
||||||
"noAccountYet": "Nie masz jeszcze konta?",
|
"noAccountYet": "Nie masz jeszcze konta?",
|
||||||
|
@ -248,7 +248,7 @@
|
||||||
"text2": "Dotyczy to wszystkich zadań i tego NIE DA SIĘ COFNĄĆ!",
|
"text2": "Dotyczy to wszystkich zadań i tego NIE DA SIĘ COFNĄĆ!",
|
||||||
"success": "Projekt został pomyślnie usunięty.",
|
"success": "Projekt został pomyślnie usunięty.",
|
||||||
"tasksToDelete": "To nieodwracalnie usunie około {count} zadań.",
|
"tasksToDelete": "To nieodwracalnie usunie około {count} zadań.",
|
||||||
"tasksAndChildProjectsToDelete": "This will irrevocably remove approx. {tasks} tasks and {projects} projects.",
|
"tasksAndChildProjectsToDelete": "To nieodwracalnie usunie ok. {tasks} zadań i {projects} projektów.",
|
||||||
"noTasksToDelete": "Ten projekt nie zawiera żadnych zadań, więc można go bezpiecznie usunąć."
|
"noTasksToDelete": "Ten projekt nie zawiera żadnych zadań, więc można go bezpiecznie usunąć."
|
||||||
},
|
},
|
||||||
"duplicate": {
|
"duplicate": {
|
||||||
|
@ -386,7 +386,7 @@
|
||||||
"filters": {
|
"filters": {
|
||||||
"title": "Filtry",
|
"title": "Filtry",
|
||||||
"clear": "Wyczyść filtry",
|
"clear": "Wyczyść filtry",
|
||||||
"showResults": "Show results",
|
"showResults": "Wyświetl wyniki",
|
||||||
"attributes": {
|
"attributes": {
|
||||||
"title": "Tytuł",
|
"title": "Tytuł",
|
||||||
"titlePlaceholder": "Tu wpisz tytuł filtra stałego…",
|
"titlePlaceholder": "Tu wpisz tytuł filtra stałego…",
|
||||||
|
@ -419,48 +419,48 @@
|
||||||
"success": "Filtr został pomyślnie zapisany."
|
"success": "Filtr został pomyślnie zapisany."
|
||||||
},
|
},
|
||||||
"query": {
|
"query": {
|
||||||
"title": "Query",
|
"title": "Zapytanie",
|
||||||
"placeholder": "Type a search or filter query…",
|
"placeholder": "Wpisz zapytanie wyszukiwania lub filtruj…",
|
||||||
"help": {
|
"help": {
|
||||||
"intro": "To filter tasks, you can use a query syntax similar to SQL. The available fields for filtering include:",
|
"intro": "Aby filtrować zadania, możesz użyć składni zapytań podobnej do SQL. Pola dostępne do filtrowania to:",
|
||||||
"link": "How does this work?",
|
"link": "Jak to działa?",
|
||||||
"canUseDatemath": "You can date math to set relative dates. Click on the date value in a query to find out more.",
|
"canUseDatemath": "Możesz użyć matematyki dat, aby ustawić daty względne. Kliknij wartość daty w zapytaniu, aby dowiedzieć się więcej.",
|
||||||
"fields": {
|
"fields": {
|
||||||
"done": "Whether the task is completed or not",
|
"done": "Czy zadanie zostało zakończone, czy nie",
|
||||||
"priority": "The priority level of the task (1-5)",
|
"priority": "Priorytet zadania (1-5)",
|
||||||
"percentDone": "The percentage of completion for the task (0-100)",
|
"percentDone": "Procent ukończenia zadania (0-100)",
|
||||||
"dueDate": "The due date of the task",
|
"dueDate": "Termin wykonania zadania",
|
||||||
"startDate": "The start date of the task",
|
"startDate": "Data rozpoczęcia zadania",
|
||||||
"endDate": "The end date of the task",
|
"endDate": "Data zakończenia zadania",
|
||||||
"doneAt": "The date and time when the task was completed",
|
"doneAt": "Data i czas ukończenia zadania",
|
||||||
"assignees": "The assignees of the task",
|
"assignees": "Osoby przypisane do zadania",
|
||||||
"labels": "The labels associated with the task",
|
"labels": "Etykiety przypisane do zadania",
|
||||||
"project": "The project the task belongs to (only available for saved filters, not on a project level)"
|
"project": "Projekt, do którego należy zadanie (dostępne tylko dla zapisanych filtrów, nie na poziomie projektu)"
|
||||||
},
|
},
|
||||||
"operators": {
|
"operators": {
|
||||||
"intro": "The available operators for filtering include:",
|
"intro": "Dostępne operatory do filtrowania to:",
|
||||||
"notEqual": "Not equal to",
|
"notEqual": "Nie równa się",
|
||||||
"equal": "Equal to",
|
"equal": "Równa się",
|
||||||
"greaterThan": "Greater than",
|
"greaterThan": "Większe niż",
|
||||||
"greaterThanOrEqual": "Greater than or equal to",
|
"greaterThanOrEqual": "Większe niż lub równe",
|
||||||
"lessThan": "Less than",
|
"lessThan": "Mniejsze niż",
|
||||||
"lessThanOrEqual": "Less than or equal to",
|
"lessThanOrEqual": "Mniejsze niż lub równe",
|
||||||
"like": "Matches a pattern (using wildcard %)",
|
"like": "Pasuje do wzorca (używając symbolu %)",
|
||||||
"in": "Matches any value in a comma-seperated list of values"
|
"in": "Dopasuje dowolną wartość z listy wartości oddzielonych przecinkami"
|
||||||
},
|
},
|
||||||
"logicalOperators": {
|
"logicalOperators": {
|
||||||
"intro": "To combine multiple conditions, you can use the following logical operators:",
|
"intro": "Aby połączyć wiele warunków, możesz użyć następujących operatorów logicznych:",
|
||||||
"and": "AND operator, matches if all conditions are true",
|
"and": "Operator AND, dopasowuje, jeśli wszystkie warunki są prawdziwe",
|
||||||
"or": "OR operator, matches if any of the conditions are true",
|
"or": "Operator OR, dopasowuje, jeśli którykolwiek z warunków jest spełniony",
|
||||||
"parentheses": "Parentheses for grouping conditions"
|
"parentheses": "Nawiasy do grupowania warunków"
|
||||||
},
|
},
|
||||||
"examples": {
|
"examples": {
|
||||||
"intro": "Here are some examples of filter queries:",
|
"intro": "Oto kilka przykładów zapytań filtrujących:",
|
||||||
"priorityEqual": "Matches tasks with priority level 4",
|
"priorityEqual": "Dopasowuje zadania z priorytetem 4",
|
||||||
"dueDatePast": "Matches tasks with a due date in the past",
|
"dueDatePast": "Dopasowuje zadania z terminem wykonania w przeszłości",
|
||||||
"undoneHighPriority": "Matches undone tasks with priority level 3 or higher",
|
"undoneHighPriority": "Dopasowuje niewykonane zadania z poziomem 3 lub wyższym",
|
||||||
"assigneesIn": "Matches tasks assigned to either \"user1\" or \"user2\"",
|
"assigneesIn": "Dopasowuje zadania przypisane do \"user1\" lub \"user2\"",
|
||||||
"priorityOneOrTwoPastDue": "Matches tasks with priority level 1 or 2 and a due date in the past"
|
"priorityOneOrTwoPastDue": "Dopasowuje zadania z poziomem 1 lub 2 i terminem wykonania w przeszłości"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -632,7 +632,7 @@
|
||||||
"to": "Do",
|
"to": "Do",
|
||||||
"from": "Od",
|
"from": "Od",
|
||||||
"fromto": "{from} do {to}",
|
"fromto": "{from} do {to}",
|
||||||
"date": "Date",
|
"date": "Data",
|
||||||
"ranges": {
|
"ranges": {
|
||||||
"today": "Dziś",
|
"today": "Dziś",
|
||||||
"thisWeek": "W tym tygodniu",
|
"thisWeek": "W tym tygodniu",
|
||||||
|
@ -649,25 +649,25 @@
|
||||||
"restOfThisYear": "Reszta tego roku"
|
"restOfThisYear": "Reszta tego roku"
|
||||||
},
|
},
|
||||||
"values": {
|
"values": {
|
||||||
"now": "Now",
|
"now": "Teraz",
|
||||||
"startOfToday": "Start of today",
|
"startOfToday": "Początek dzisiejszego dnia",
|
||||||
"endOfToday": "End of today",
|
"endOfToday": "Koniec dzisiejszego dnia",
|
||||||
"beginningOflastWeek": "Beginning of last week",
|
"beginningOflastWeek": "Początek zeszłego tygodnia",
|
||||||
"endOfLastWeek": "End of last week",
|
"endOfLastWeek": "Koniec zeszłego tygodnia",
|
||||||
"beginningOfThisWeek": "Beginning of this week",
|
"beginningOfThisWeek": "Początek tego tygodnia",
|
||||||
"endOfThisWeek": "End of this week",
|
"endOfThisWeek": "Koniec tego tygodnia",
|
||||||
"startOfNextWeek": "Start of next week",
|
"startOfNextWeek": "Początek następnego tygodnia",
|
||||||
"endOfNextWeek": "End of next week",
|
"endOfNextWeek": "Koniec następnego tygodnia",
|
||||||
"in7Days": "In 7 days",
|
"in7Days": "Za 7 dni",
|
||||||
"beginningOfLastMonth": "Beginning of last month",
|
"beginningOfLastMonth": "Początek zeszłego miesiąca",
|
||||||
"endOfLastMonth": "End of last month",
|
"endOfLastMonth": "Koniec zeszłego miesiąca",
|
||||||
"startOfThisMonth": "Start of this month",
|
"startOfThisMonth": "Początek tego miesiąca",
|
||||||
"endOfThisMonth": "End of this month",
|
"endOfThisMonth": "Koniec tego miesiąca",
|
||||||
"startOfNextMonth": "Start of next month",
|
"startOfNextMonth": "Początek następnego miesiąca",
|
||||||
"endOfNextMonth": "End of next month",
|
"endOfNextMonth": "Koniec następnego miesiąca",
|
||||||
"in30Days": "In 30 days",
|
"in30Days": "Za 30 dni",
|
||||||
"startOfThisYear": "Beginning of this year",
|
"startOfThisYear": "Początek tego roku",
|
||||||
"endOfThisYear": "End of this year"
|
"endOfThisYear": "Koniec tego roku"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"datemathHelp": {
|
"datemathHelp": {
|
||||||
|
@ -783,7 +783,7 @@
|
||||||
"startDate": "Data rozpoczęcia",
|
"startDate": "Data rozpoczęcia",
|
||||||
"title": "Tytuł",
|
"title": "Tytuł",
|
||||||
"updated": "Zaktualizowano",
|
"updated": "Zaktualizowano",
|
||||||
"doneAt": "Done At"
|
"doneAt": "Wykonano"
|
||||||
},
|
},
|
||||||
"subscription": {
|
"subscription": {
|
||||||
"subscribedTaskThroughParentProject": "Nie możesz zrezygnować z subskrypcji, ponieważ subskrybujesz to zadanie poprzez jego projekt.",
|
"subscribedTaskThroughParentProject": "Nie możesz zrezygnować z subskrypcji, ponieważ subskrybujesz to zadanie poprzez jego projekt.",
|
||||||
|
@ -987,8 +987,8 @@
|
||||||
"descriptionPlaceholder": "Opisz tutaj zespół, naciśnij '/' aby uzyskać więcej opcji…",
|
"descriptionPlaceholder": "Opisz tutaj zespół, naciśnij '/' aby uzyskać więcej opcji…",
|
||||||
"admin": "Administrator",
|
"admin": "Administrator",
|
||||||
"member": "Członek",
|
"member": "Członek",
|
||||||
"isPublic": "Public Team",
|
"isPublic": "Publiczny zespół",
|
||||||
"isPublicDescription": "Make the team publicly discoverable. When enabled, anyone can share projects with this team even when not being a direct member."
|
"isPublicDescription": "Udostępnij zespół publicznie. Gdy ta opcja jest włączona, każdy może udostępniać projekty temu zespołowi, nawet nie będąc jego bezpośrednim członkiem."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"keyboardShortcuts": {
|
"keyboardShortcuts": {
|
||||||
|
@ -1047,8 +1047,8 @@
|
||||||
"share": "Udostępnij",
|
"share": "Udostępnij",
|
||||||
"newProject": "Nowy projekt",
|
"newProject": "Nowy projekt",
|
||||||
"createProject": "Utwórz projekt",
|
"createProject": "Utwórz projekt",
|
||||||
"cantArchiveIsDefault": "You cannot archive this because it is your default project.",
|
"cantArchiveIsDefault": "Nie możesz tego zarchiwizować, ponieważ jest to twój domyślny projekt.",
|
||||||
"cantDeleteIsDefault": "You cannot delete this because it is your default project."
|
"cantDeleteIsDefault": "Nie możesz tego usunąć, ponieważ jest to twój domyślny projekt."
|
||||||
},
|
},
|
||||||
"apiConfig": {
|
"apiConfig": {
|
||||||
"url": "URL Vikunji",
|
"url": "URL Vikunji",
|
||||||
|
@ -1096,10 +1096,10 @@
|
||||||
"altFormatShort": "j M Y"
|
"altFormatShort": "j M Y"
|
||||||
},
|
},
|
||||||
"reaction": {
|
"reaction": {
|
||||||
"reactedWith": "{user} reacted with {value}",
|
"reactedWith": "{user} zareagował z {value}",
|
||||||
"reactedWithAnd": "{users} and {lastUser} reacted with {value}",
|
"reactedWithAnd": "{users} i {lastUser} zareagowali z {value}",
|
||||||
"reactedWithAndMany": "{users} and {num} more reacted reacted with {value}",
|
"reactedWithAndMany": "{users} i {num} innych osób zareagowali z {value}",
|
||||||
"add": "Add your reaction"
|
"add": "Dodaj swoją reakcję"
|
||||||
},
|
},
|
||||||
"error": {
|
"error": {
|
||||||
"error": "Błąd",
|
"error": "Błąd",
|
||||||
|
@ -1174,7 +1174,7 @@
|
||||||
},
|
},
|
||||||
"about": {
|
"about": {
|
||||||
"title": "O aplikacji",
|
"title": "O aplikacji",
|
||||||
"version": "Version: {version}"
|
"version": "Wersja: {version}"
|
||||||
},
|
},
|
||||||
"time": {
|
"time": {
|
||||||
"units": {
|
"units": {
|
||||||
|
|
|
@ -348,7 +348,6 @@ const router = createRouter({
|
||||||
name: 'project.index',
|
name: 'project.index',
|
||||||
redirect(to) {
|
redirect(to) {
|
||||||
const viewId = getProjectViewId(Number(to.params.projectId as string))
|
const viewId = getProjectViewId(Number(to.params.projectId as string))
|
||||||
console.log(viewId)
|
|
||||||
|
|
||||||
if (viewId) {
|
if (viewId) {
|
||||||
console.debug('Replaced list view with', viewId)
|
console.debug('Replaced list view with', viewId)
|
||||||
|
|
|
@ -30,15 +30,6 @@ function getTaskIndicesById(buckets: IBucket[], taskId: ITask['id']) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const addTaskToBucketAndSort = (buckets: IBucket[], task: ITask) => {
|
|
||||||
const bucketIndex = findIndexById(buckets, task.bucketId)
|
|
||||||
if (typeof buckets[bucketIndex] === 'undefined') {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
buckets[bucketIndex].tasks.push(task)
|
|
||||||
buckets[bucketIndex].tasks.sort((a, b) => a.kanbanPosition > b.kanbanPosition ? 1 : -1)
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This store is intended to hold the currently active kanban view.
|
* This store is intended to hold the currently active kanban view.
|
||||||
* It should hold only the current buckets.
|
* It should hold only the current buckets.
|
||||||
|
@ -131,11 +122,6 @@ export const useKanbanStore = defineStore('kanban', () => {
|
||||||
const bucket = buckets.value[b]
|
const bucket = buckets.value[b]
|
||||||
bucket.tasks[t] = task
|
bucket.tasks[t] = task
|
||||||
|
|
||||||
if (bucket.id !== task.bucketId) {
|
|
||||||
bucket.tasks.splice(t, 1)
|
|
||||||
addTaskToBucketAndSort(buckets.value, task)
|
|
||||||
}
|
|
||||||
|
|
||||||
buckets.value[b] = bucket
|
buckets.value[b] = bucket
|
||||||
|
|
||||||
found = true
|
found = true
|
||||||
|
@ -144,15 +130,6 @@ export const useKanbanStore = defineStore('kanban', () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const b in buckets.value) {
|
|
||||||
if (buckets.value[b].id === task.bucketId) {
|
|
||||||
findAndUpdate(b)
|
|
||||||
if (found) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const b in buckets.value) {
|
for (const b in buckets.value) {
|
||||||
findAndUpdate(b)
|
findAndUpdate(b)
|
||||||
if (found) {
|
if (found) {
|
||||||
|
@ -198,7 +175,6 @@ export const useKanbanStore = defineStore('kanban', () => {
|
||||||
|
|
||||||
if (
|
if (
|
||||||
bucketIndex === null ||
|
bucketIndex === null ||
|
||||||
buckets.value[bucketIndex]?.id !== task.bucketId ||
|
|
||||||
taskIndex === null ||
|
taskIndex === null ||
|
||||||
(buckets.value[bucketIndex]?.tasks[taskIndex]?.id !== task.id)
|
(buckets.value[bucketIndex]?.tasks[taskIndex]?.id !== task.id)
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -52,9 +52,6 @@ type Project struct {
|
||||||
ParentProjectID int64 `xorm:"bigint INDEX null" json:"parent_project_id"`
|
ParentProjectID int64 `xorm:"bigint INDEX null" json:"parent_project_id"`
|
||||||
ParentProject *Project `xorm:"-" json:"-"`
|
ParentProject *Project `xorm:"-" json:"-"`
|
||||||
|
|
||||||
// Deprecated: If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket.
|
|
||||||
DoneBucketID int64 `xorm:"bigint INDEX null" json:"done_bucket_id"`
|
|
||||||
|
|
||||||
// The user who created this project.
|
// The user who created this project.
|
||||||
Owner *user.User `xorm:"-" json:"owner" valid:"-"`
|
Owner *user.User `xorm:"-" json:"owner" valid:"-"`
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ type Task struct {
|
||||||
|
|
||||||
// The bucket id. Will only be populated when the task is accessed via a view with buckets.
|
// The bucket id. Will only be populated when the task is accessed via a view with buckets.
|
||||||
// Can be used to move a task between buckets. In that case, the new bucket must be in the same view as the old one.
|
// Can be used to move a task between buckets. In that case, the new bucket must be in the same view as the old one.
|
||||||
BucketID int64 `xorm:"<-" json:"bucket_id"`
|
BucketID int64 `xorm:"-" json:"bucket_id"`
|
||||||
|
|
||||||
// The position of the task - any task project can be sorted as usual by this parameter.
|
// The position of the task - any task project can be sorted as usual by this parameter.
|
||||||
// When accessing tasks via views with buckets, this is primarily used to sort them based on a range.
|
// When accessing tasks via views with buckets, this is primarily used to sort them based on a range.
|
||||||
|
|
|
@ -8178,10 +8178,6 @@ const docTemplate = `{
|
||||||
"description": "The description of the project.",
|
"description": "The description of the project.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"done_bucket_id": {
|
|
||||||
"description": "Deprecated: If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket.",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"hex_color": {
|
"hex_color": {
|
||||||
"description": "The hex color of this project",
|
"description": "The hex color of this project",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|
|
@ -8170,10 +8170,6 @@
|
||||||
"description": "The description of the project.",
|
"description": "The description of the project.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"done_bucket_id": {
|
|
||||||
"description": "Deprecated: If tasks are moved to the done bucket, they are marked as done. If they are marked as done individually, they are moved into the done bucket.",
|
|
||||||
"type": "integer"
|
|
||||||
},
|
|
||||||
"hex_color": {
|
"hex_color": {
|
||||||
"description": "The hex color of this project",
|
"description": "The hex color of this project",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
|
|
|
@ -431,11 +431,6 @@ definitions:
|
||||||
description:
|
description:
|
||||||
description: The description of the project.
|
description: The description of the project.
|
||||||
type: string
|
type: string
|
||||||
done_bucket_id:
|
|
||||||
description: 'Deprecated: If tasks are moved to the done bucket, they are
|
|
||||||
marked as done. If they are marked as done individually, they are moved
|
|
||||||
into the done bucket.'
|
|
||||||
type: integer
|
|
||||||
hex_color:
|
hex_color:
|
||||||
description: The hex color of this project
|
description: The hex color of this project
|
||||||
maxLength: 7
|
maxLength: 7
|
||||||
|
|
Loading…
Reference in New Issue