Compare commits
8 Commits
ac51310fa7
...
3795c925d8
Author | SHA1 | Date |
---|---|---|
renovate | 3795c925d8 | |
kolaente | 2541733c71 | |
kolaente | 4d6fd9ecc4 | |
kolaente | 818f31c220 | |
kolaente | 34e4862c88 | |
renovate | 0d074113f1 | |
kolaente | 0730955403 | |
kolaente | 75035ec1f8 |
|
@ -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
|
||||
|
|
|
@ -25,7 +25,6 @@ interface ImportMetaEnv {
|
|||
readonly SENTRY_ORG?: string
|
||||
readonly SENTRY_PROJECT?: string
|
||||
|
||||
readonly VITE_WORKBOX_DEBUG?: boolean
|
||||
readonly VITE_IS_ONLINE: boolean
|
||||
}
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@
|
|||
"sass": "1.69.5",
|
||||
"start-server-and-test": "2.0.3",
|
||||
"typescript": "5.3.3",
|
||||
"vite": "5.0.8",
|
||||
"vite": "5.0.9",
|
||||
"vite-plugin-inject-preload": "1.3.3",
|
||||
"vite-plugin-pwa": "0.17.4",
|
||||
"vite-plugin-sentry": "1.3.0",
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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,
|
||||
]
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue