Compare commits

..

8 Commits

Author SHA1 Message Date
renovate c92f0c8491 fix(deps): update dependency @github/hotkey to v3
continuous-integration/drone/pr Build is failing Details
2023-12-14 15:21:35 +00:00
kolaente 2541733c71
fix(tasks): prevent endless references
continuous-integration/drone/push Build is passing Details
This would lead to failing attempts when updating the task later on (for example marking it as favorite)
2023-12-13 19:27:35 +01:00
kolaente 4d6fd9ecc4
fix(tasks): favorited sub tasks are not shown in favorites pseudo list
continuous-integration/drone/push Build is passing Details
2023-12-13 19:22:28 +01:00
kolaente 818f31c220
fix(tasks): update sub task relations in list view after they were created
continuous-integration/drone/push Build is passing Details
Resolves #3853
2023-12-13 19:15:48 +01:00
kolaente 34e4862c88
fix(kanban): make sure kanban cards always have text color matching their background
continuous-integration/drone/push Build is passing Details
Resolves https://github.com/go-vikunja/frontend/issues/135
2023-12-13 18:54:48 +01:00
renovate 0d074113f1 chore(deps): update dev-dependencies (#3846)
continuous-integration/drone/push Build is passing Details
Reviewed-on: #3846
Reviewed-by: konrad <k@knt.li>
Co-authored-by: renovate <renovatebot@kolaente.de>
Co-committed-by: renovate <renovatebot@kolaente.de>
2023-12-13 17:45:31 +00:00
kolaente 0730955403
fix(sw): remove debug option via env as it would not be replaced correctly in prod builds
continuous-integration/drone/push Build is passing Details
2023-12-13 18:37:56 +01:00
kolaente 75035ec1f8
fix(navigation): show filter settings dropdown
continuous-integration/drone/push Build is passing Details
Resolves #3851
2023-12-13 18:30:10 +01:00
9 changed files with 365 additions and 340 deletions

View File

@ -6,7 +6,6 @@
# (2) Comment in and adjust the values as needed.
# VITE_IS_ONLINE=true
# VITE_WORKBOX_DEBUG=false
# SENTRY_AUTH_TOKEN=YOUR_TOKEN
# SENTRY_ORG=vikunja
# SENTRY_PROJECT=frontend-oss

1
env.d.ts vendored
View File

@ -25,7 +25,6 @@ interface ImportMetaEnv {
readonly SENTRY_ORG?: string
readonly SENTRY_PROJECT?: string
readonly VITE_WORKBOX_DEBUG?: boolean
readonly VITE_IS_ONLINE: boolean
}

View File

@ -49,7 +49,7 @@
"@fortawesome/free-regular-svg-icons": "6.5.1",
"@fortawesome/free-solid-svg-icons": "6.5.1",
"@fortawesome/vue-fontawesome": "3.0.5",
"@github/hotkey": "3.0.1",
"@github/hotkey": "3.1.0",
"@infectoone/vue-ganttastic": "2.2.0",
"@intlify/unplugin-vue-i18n": "1.5.0",
"@kyvg/vue3-notification": "3.0.2",
@ -136,23 +136,23 @@
"@types/is-touch-device": "1.0.2",
"@types/lodash.debounce": "4.0.9",
"@types/marked": "5.0.2",
"@types/node": "20.10.3",
"@types/node": "20.10.4",
"@types/postcss-preset-env": "7.7.0",
"@types/sortablejs": "1.15.7",
"@typescript-eslint/eslint-plugin": "6.13.2",
"@typescript-eslint/parser": "6.13.2",
"@typescript-eslint/eslint-plugin": "6.14.0",
"@typescript-eslint/parser": "6.14.0",
"@vitejs/plugin-legacy": "5.2.0",
"@vitejs/plugin-vue": "4.5.1",
"@vitejs/plugin-vue": "4.5.2",
"@vue/eslint-config-typescript": "12.0.0",
"@vue/test-utils": "2.4.3",
"@vue/tsconfig": "0.4.0",
"autoprefixer": "10.4.16",
"browserslist": "4.22.2",
"caniuse-lite": "1.0.30001566",
"caniuse-lite": "1.0.30001570",
"css-has-pseudo": "6.0.0",
"csstype": "3.1.2",
"csstype": "3.1.3",
"cypress": "13.6.1",
"esbuild": "0.19.8",
"esbuild": "0.19.9",
"eslint": "8.55.0",
"eslint-plugin-vue": "9.19.2",
"happy-dom": "12.10.3",
@ -162,17 +162,17 @@
"postcss-easings": "4.0.0",
"postcss-focus-within": "8.0.0",
"postcss-preset-env": "9.3.0",
"rollup": "4.6.1",
"rollup-plugin-visualizer": "5.10.0",
"rollup": "4.9.0",
"rollup-plugin-visualizer": "5.11.0",
"sass": "1.69.5",
"start-server-and-test": "2.0.3",
"typescript": "5.3.2",
"vite": "5.0.6",
"typescript": "5.3.3",
"vite": "5.0.8",
"vite-plugin-inject-preload": "1.3.3",
"vite-plugin-pwa": "0.17.3",
"vite-plugin-pwa": "0.17.4",
"vite-plugin-sentry": "1.3.0",
"vite-svg-loader": "5.1.0",
"vitest": "1.0.1",
"vitest": "1.0.4",
"vue-tsc": "1.8.25",
"wait-on": "7.2.0",
"workbox-cli": "7.0.0"

File diff suppressed because it is too large Load Diff

View File

@ -47,7 +47,6 @@
<icon :icon="project.isFavorite ? 'star' : ['far', 'star']"/>
</BaseButton>
<ProjectSettingsDropdown
v-if="project.id > 0"
class="menu-list-dropdown"
:project="project"
:level="level"
@ -58,7 +57,6 @@
</BaseButton>
</template>
</ProjectSettingsDropdown>
<span class="list-setting-spacer" v-else></span>
</div>
<ProjectsNavigation
v-if="canNestDeeper && childProjectsOpen && canCollapse"

View File

@ -149,13 +149,15 @@ async function addTask() {
await Promise.all(newTasks)
const taskRelationService = new TaskRelationService()
const allParentTasks = tasksToCreate.filter(t => t.parent !== null).map(t => t.parent)
const relations = tasksToCreate.map(async t => {
const createdTask = createdTasks[t.title]
if (typeof createdTask === 'undefined') {
return
}
if (t.parent === null) {
const isParent = allParentTasks.includes(t.title)
if (t.parent === null && !isParent) {
emit('taskAdded', createdTask)
return
}
@ -171,10 +173,19 @@ async function addTask() {
relationKind: RELATION_KIND.PARENTTASK,
}))
createdTask.relatedTasks[RELATION_KIND.PARENTTASK] = [createdParentTask]
createdTask.relatedTasks[RELATION_KIND.PARENTTASK] = [{
...createdParentTask,
relatedTasks: {}, // To avoid endless references
}]
// we're only emitting here so that the relation shows up in the project
emit('taskAdded', createdTask)
createdParentTask.relatedTasks[RELATION_KIND.SUBTASK] = [{
...createdTask,
relatedTasks: {}, // To avoid endless references
}]
emit('taskAdded', createdParentTask)
return rel
})
await Promise.all(relations)

View File

@ -5,6 +5,7 @@
'is-loading': loadingInternal || loading,
'draggable': !(loadingInternal || loading),
'has-light-text': color !== TASK_DEFAULT_COLOR && !colorIsDark(color),
'has-custom-background-color': color !== TASK_DEFAULT_COLOR ? color : undefined,
}"
:style="{'background-color': color !== TASK_DEFAULT_COLOR ? color : undefined}"
@click.exact="openTaskDetail()"
@ -48,7 +49,10 @@
</progress>
<div class="footer">
<labels :labels="task.labels"/>
<priority-label :priority="task.priority" :done="task.done" class="is-inline-flex is-align-items-center"/>
<priority-label
:priority="task.priority"
:done="task.done"
class="is-inline-flex is-align-items-center"/>
<assignee-list
v-if="task.assignees.length > 0"
:assignees="task.assignees"
@ -114,7 +118,7 @@ async function toggleTaskDone(task: ITask) {
...task,
done: !task.done,
})
if (updatedTask.done && useAuthStore().settings.frontendSettings.playSoundWhenDone) {
playPopSound()
}
@ -280,6 +284,16 @@ $task-background: var(--white);
width: auto;
}
&.has-custom-background-color {
color: hsl(215, 27.9%, 16.9%); // copied from grey-800 to avoid different values in dark mode
.footer .icon,
.due-date,
.priority-label {
background: hsl(220, 13%, 91%);
}
}
&.has-light-text {
color: var(--white);

View File

@ -11,7 +11,6 @@ const workboxVersion = 'v7.0.0'
importScripts(`${fullBaseUrl}workbox-${workboxVersion}/workbox-sw.js`)
workbox.setConfig({
modulePathPrefix: `${fullBaseUrl}workbox-${workboxVersion}`,
debug: Boolean(import.meta.env.VITE_WORKBOX_DEBUG),
})
import { precacheAndRoute } from 'workbox-precaching'

View File

@ -175,7 +175,11 @@ const tasks = ref<ITask[]>([])
watch(
allTasks,
() => {
tasks.value = [...allTasks.value].filter(t => typeof t.relatedTasks?.parenttask === 'undefined')
tasks.value = [...allTasks.value]
if (projectId < 0) {
return
}
tasks.value = tasks.value.filter(t => typeof t.relatedTasks?.parenttask === 'undefined')
},
)
@ -241,9 +245,9 @@ function updateTaskList(task: ITask) {
loadTasks()
}
else {
tasks.value = [
allTasks.value = [
task,
...tasks.value,
...allTasks.value,
]
}