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