due date
Gitea Actions Demo / Deploy (push) Successful in 24s

This commit is contained in:
vadim committed 2026-09-29 14:25:36 +03:00
1 parent 9a3c3bb189
commit 17ad52c532
5 files changed
+39 -17

No files matched your search

+1
View File
@@ -31,6 +31,7 @@ export interface CreateIssueInput {
status?: Issue['status'] status?: Issue['status']
priority?: Issue['priority'] priority?: Issue['priority']
assignee?: string assignee?: string
dueDate?: string | null
} }
export type UpdateIssueInput = Partial<CreateIssueInput> export type UpdateIssueInput = Partial<CreateIssueInput>
+2 -2
View File
@@ -46,8 +46,8 @@ const cancel = () => {
<v-textarea autofocus class="mb-1" hide-details v-model="draft" variant="outlined" auto-grow rows="4" /> <v-textarea autofocus class="mb-1" hide-details v-model="draft" variant="outlined" auto-grow rows="4" />
<div class="d-flex justify-end ga-1"> <div class="d-flex justify-end ga-1">
<v-btn density="compact" variant="text" text="Cancel" @click="cancel" /> <v-btn density="compact" prepend-icon="mdi-cancel" variant="text" text="Cancel" @click="cancel" />
<v-btn density="compact" color="primary" variant="flat" text="Save" @click="save" /> <v-btn density="compact" prepend-icon="mdi-check" color="primary" variant="flat" text="Save" @click="save" />
</div> </div>
</template> </template>
</div> </div>
+20 -11
View File
@@ -36,24 +36,33 @@ const cancel = () => {
<template> <template>
<div class="issue-due-date"> <div class="issue-due-date">
<template v-if="!editing"> <template v-if="!editing">
<v-sheet class="pa-4 cursor-pointer due-date-sheet" @click="startEdit"> <v-hover #default="{ isHovering, props }">
{{ formatted() }} <v-sheet v-bind="props" class="cursor-pointer d-flex align-center ga-1" @click="startEdit">
<div>{{ formatted() }}</div>
<v-icon v-if="isHovering" icon="mdi-pencil" size="small" />
</v-sheet> </v-sheet>
</v-hover>
</template> </template>
<template v-else> <template v-else>
<v-date-input autofocus class="mb-1" hide-details v-model="draft" variant="outlined" /> <div class="d-flex ga-1 align-center">
<v-date-input
input-format="dd-mm-yyyy"
autofocus
class="mb-1"
hide-details
prepend-icon=""
v-model="draft"
density="compact"
variant="outlined"
persistent-placeholder
/>
<div class="d-flex justify-end ga-1"> <v-btn density="compact" prepend-icon="mdi-cancel" variant="text" text="Cancel" @click="cancel" />
<v-btn density="compact" variant="text" text="Cancel" @click="cancel" /> <v-btn density="compact" prepend-icon="mdi-check" color="primary" variant="flat" text="Save" @click="save" />
<v-btn density="compact" color="primary" variant="flat" text="Save" @click="save" />
</div> </div>
</template> </template>
</div> </div>
</template> </template>
<style scoped lang="scss"> <style scoped lang="scss"></style>
.due-date-sheet:hover {
background-color: rgba(var(--v-theme-on-surface), 0.06);
}
</style>
+14 -2
View File
@@ -8,6 +8,7 @@ import StatusMenu from '@/components/StatusMenu.vue'
import AssigneeMenu from '@/components/AssigneeMenu.vue' import AssigneeMenu from '@/components/AssigneeMenu.vue'
import ReporterInfo from '@/components/ReporterInfo.vue' import ReporterInfo from '@/components/ReporterInfo.vue'
import IssueTitle from '@/components/IssueTitle.vue' import IssueTitle from '@/components/IssueTitle.vue'
import IssueDate from '@/components/IssueDate.vue'
interface Props { interface Props {
ckey: string ckey: string
@@ -16,6 +17,8 @@ interface Props {
const emit = defineEmits<{ const emit = defineEmits<{
statusChanged: [issue: Issue] statusChanged: [issue: Issue]
assigneeChanged: [issue: Issue] assigneeChanged: [issue: Issue]
titleChanged: [issue: Issue]
dueDateChanged: [issue: Issue]
}>() }>()
const issueStore = useIssueStore() const issueStore = useIssueStore()
@@ -46,7 +49,16 @@ const onTitleChanged = async (title: string) => {
const updated = await issueStore.update(issue.value.id, { title }) const updated = await issueStore.update(issue.value.id, { title })
if (updated) { if (updated) {
issue.value = updated issue.value = updated
emit('assigneeChanged', updated) emit('titleChanged', updated)
}
}
const onDueDateChanged = async (date: string) => {
if (!issue.value) return
const updated = await issueStore.update(issue.value.id, { dueDate: date })
if (updated) {
issue.value = updated
emit('dueDateChanged', updated)
} }
} }
@@ -106,7 +118,7 @@ defineExpose({
<div>{{ createdAtFormatted }}</div> <div>{{ createdAtFormatted }}</div>
<div class="text-medium-emphasis">Due Date:</div> <div class="text-medium-emphasis">Due Date:</div>
<div>{{ issue.dueDate }}</div> <issue-date :date="issue.dueDate" @changed="onDueDateChanged" />
</v-card-text> </v-card-text>
</v-card> </v-card>
+2 -2
View File
@@ -48,8 +48,8 @@ const cancel = () => {
<v-text-field autofocus class="mb-1" hide-details v-model="draft" variant="outlined" /> <v-text-field autofocus class="mb-1" hide-details v-model="draft" variant="outlined" />
<div class="d-flex justify-end ga-1"> <div class="d-flex justify-end ga-1">
<v-btn density="compact" variant="text" text="Cancel" @click="cancel" /> <v-btn density="compact" prepend-icon="mdi-cancel" variant="text" text="Cancel" @click="cancel" />
<v-btn density="compact" color="primary" variant="flat" text="Save" @click="save" /> <v-btn density="compact" prepend-icon="mdi-check" color="primary" variant="flat" text="Save" @click="save" />
</div> </div>
</template> </template>
</div> </div>