From d12deee97724b7cfd9baa04fcdc6f2a8d54eeafe Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 18 Jun 2024 16:39:52 +0200 Subject: [PATCH] feat(views): allow reordering views Resolves https://community.vikunja.io/t/reordering-views/2394 --- frontend/src/i18n/lang/en.json | 5 +- frontend/src/stores/projects.ts | 2 + .../project/settings/ProjectSettingsViews.vue | 135 ++++++++++++------ pkg/models/project.go | 5 +- pkg/models/project_view.go | 1 + 5 files changed, 101 insertions(+), 47 deletions(-) diff --git a/frontend/src/i18n/lang/en.json b/frontend/src/i18n/lang/en.json index 5082cace6..a6cde6be9 100644 --- a/frontend/src/i18n/lang/en.json +++ b/frontend/src/i18n/lang/en.json @@ -401,8 +401,9 @@ "titleRequired": "Please provide a title.", "delete": "Delete this view", "deleteText": "Are you sure you want to remove this view? It will no longer be possible to use it to view tasks in this project. This action won't delete any tasks. This cannot be undone!", - "deleteSuccess": "The view was successfully deleted", - "onlyAdminsCanEdit": "Only project admins can edit views." + "deleteSuccess": "The view was deleted successfully.", + "onlyAdminsCanEdit": "Only project admins can edit views.", + "updateSuccess": "The view was updated successfully." } }, "filters": { diff --git a/frontend/src/stores/projects.ts b/frontend/src/stores/projects.ts index 2fd76e6bb..7592f2e7a 100644 --- a/frontend/src/stores/projects.ts +++ b/frontend/src/stores/projects.ts @@ -224,11 +224,13 @@ export const useProjectStore = defineStore('project', () => { const viewPos = projects.value[view.projectId].views.findIndex(v => v.id === view.id) if (viewPos !== -1) { projects.value[view.projectId].views[viewPos] = view + projects.value[view.projectId].views.sort((a, b) => a.position < b.position ? -1 : 1) setProject(projects.value[view.projectId]) return } projects.value[view.projectId].views.push(view) + projects.value[view.projectId].views.sort((a, b) => a.position < b.position ? -1 : 1) setProject(projects.value[view.projectId]) } diff --git a/frontend/src/views/project/settings/ProjectSettingsViews.vue b/frontend/src/views/project/settings/ProjectSettingsViews.vue index 6745b540c..1e62b66aa 100644 --- a/frontend/src/views/project/settings/ProjectSettingsViews.vue +++ b/frontend/src/views/project/settings/ProjectSettingsViews.vue @@ -1,6 +1,6 @@ @@ -117,7 +146,7 @@ async function saveView() { {{ $t('project.views.create') }} - + {{ $t('project.views.onlyAdminsCanEdit') }} @@ -135,45 +164,54 @@ async function saveView() { - - - - - - + + + @@ -191,3 +229,16 @@ async function saveView() { + + \ No newline at end of file diff --git a/pkg/models/project.go b/pkg/models/project.go index 0d3450dce..ecd0c936e 100644 --- a/pkg/models/project.go +++ b/pkg/models/project.go @@ -302,9 +302,7 @@ func (p *Project) ReadOne(s *xorm.Session, a web.Auth) (err error) { return nil } - err = s. - Where("project_id = ?", p.ID). - Find(&p.Views) + p.Views, err = getViewsForProject(s, p.ID) return } @@ -640,6 +638,7 @@ func addProjectDetails(s *xorm.Session, projects []*Project, a web.Auth) (err er views := []*ProjectView{} err = s. In("project_id", projectIDs). + OrderBy("position asc"). Find(&views) if err != nil { return diff --git a/pkg/models/project_view.go b/pkg/models/project_view.go index b2b3781d9..96d0d7adf 100644 --- a/pkg/models/project_view.go +++ b/pkg/models/project_view.go @@ -160,6 +160,7 @@ func getViewsForProject(s *xorm.Session, projectID int64) (views []*ProjectView, views = []*ProjectView{} err = s. Where("project_id = ?", projectID). + OrderBy("position asc"). Find(&views) return }