Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add unset default project column #23531

Merged
merged 14 commits into from
Apr 19, 2023
2 changes: 2 additions & 0 deletions options/locale/locale_en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -1261,6 +1261,8 @@ projects.column.new_submit = "Create Column"
projects.column.new = "New Column"
projects.column.set_default = "Set Default"
projects.column.set_default_desc = "Set this column as default for uncategorized issues and pulls"
projects.column.unset_default = "Unset Default"
projects.column.unset_default_desc = "Unset this column as default"
projects.column.delete = "Delete Column"
projects.column.deletion_desc = "Deleting a project column moves all related issues to 'Uncategorized'. Continue?"
projects.column.color = "Color"
Expand Down
17 changes: 17 additions & 0 deletions routers/web/org/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,23 @@ func SetDefaultProjectBoard(ctx *context.Context) {
})
}

// UnsetDefaultProjectBoard unset default board for uncategorized issues/pulls
func UnsetDefaultProjectBoard(ctx *context.Context) {
project, _ := CheckProjectBoardChangePermissions(ctx)
if ctx.Written() {
return
}

if err := project_model.SetDefaultBoard(project.ID, 0); err != nil {
ctx.ServerError("SetDefaultBoard", err)
return
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"ok": true,
})
}

// MoveIssues moves or keeps issues in a column and sorts them inside that column
func MoveIssues(ctx *context.Context) {
if ctx.Doer == nil {
Expand Down
17 changes: 17 additions & 0 deletions routers/web/repo/projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,23 @@ func SetDefaultProjectBoard(ctx *context.Context) {
})
}

// UnSetDefaultProjectBoard unset default board for uncategorized issues/pulls
func UnSetDefaultProjectBoard(ctx *context.Context) {
project, _ := checkProjectBoardChangePermissions(ctx)
if ctx.Written() {
return
}

if err := project_model.SetDefaultBoard(project.ID, 0); err != nil {
ctx.ServerError("SetDefaultBoard", err)
return
}

ctx.JSON(http.StatusOK, map[string]interface{}{
"ok": true,
})
}

// MoveIssues moves or keeps issues in a column and sorts them inside that column
func MoveIssues(ctx *context.Context) {
if ctx.Doer == nil {
Expand Down
2 changes: 2 additions & 0 deletions routers/web/web.go
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,7 @@ func RegisterRoutes(m *web.Route) {
m.Put("", web.Bind(forms.EditProjectBoardForm{}), org.EditProjectBoard)
m.Delete("", org.DeleteProjectBoard)
m.Post("/default", org.SetDefaultProjectBoard)
m.Post("/unsetdefault", org.UnsetDefaultProjectBoard)

m.Post("/move", org.MoveIssues)
})
Expand Down Expand Up @@ -1292,6 +1293,7 @@ func RegisterRoutes(m *web.Route) {
m.Put("", web.Bind(forms.EditProjectBoardForm{}), repo.EditProjectBoard)
m.Delete("", repo.DeleteProjectBoard)
m.Post("/default", repo.SetDefaultProjectBoard)
m.Post("/unsetdefault", repo.UnSetDefaultProjectBoard)

m.Post("/move", repo.MoveIssues)
})
Expand Down
27 changes: 20 additions & 7 deletions templates/projects/view.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,25 @@
{{$.locale.Tr "repo.projects.column.edit"}}
</a>
{{if not .Default}}
<a class="item show-modal button" data-modal="#set-default-project-board-modal-{{.ID}}">
<a class="item show-modal button default-project-board-show"
data-modal="#default-project-board-modal-{{.ID}}"
data-modal-default-project-board-header="{{$.locale.Tr "repo.projects.column.set_default"}}"
data-modal-default-project-board-content="{{$.locale.Tr "repo.projects.column.set_default_desc"}}"
data-modal-default-project-board-submit="{{$.locale.Tr "repo.projects.column.set_default"}}"
data-url="{{$.Link}}/{{.ID}}/default">
{{svg "octicon-pin"}}
{{$.locale.Tr "repo.projects.column.set_default"}}
</a>
{{else}}
<a class="item show-modal button default-project-board-show"
data-modal="#default-project-board-modal-{{.ID}}"
data-modal-default-project-board-header="{{$.locale.Tr "repo.projects.column.unset_default"}}"
data-modal-default-project-board-content="{{$.locale.Tr "repo.projects.column.unset_default_desc"}}"
data-modal-default-project-board-submit="{{$.locale.Tr "repo.projects.column.unset_default"}}"
data-url="{{$.Link}}/{{.ID}}/unsetdefault">
{{svg "octicon-pin"}}
{{$.locale.Tr "repo.projects.column.unset_default"}}
</a>
{{end}}
<a class="item show-modal button" data-modal="#delete-board-modal-{{.ID}}">
{{svg "octicon-trash"}}
Expand Down Expand Up @@ -134,18 +149,16 @@
</div>
</div>

<div class="ui basic modal" id="set-default-project-board-modal-{{.ID}}">
<div class="ui basic modal default-project-board-modal" id="default-project-board-modal-{{.ID}}">
<div class="ui icon header">
{{$.locale.Tr "repo.projects.column.set_default"}}
<span id="default-project-board-header"></span>
</div>
<div class="content center">
<label>
{{$.locale.Tr "repo.projects.column.set_default_desc"}}
</label>
<label id="default-project-board-content"></label>
</div>
<div class="text right actions">
<button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button>
<button class="ui primary button set-default-project-board" data-url="{{$.Link}}/{{.ID}}/default">{{$.locale.Tr "repo.projects.column.set_default"}}</button>
<button class="ui primary button default-project-board-button" id="default-project-board-submit"></button>
</div>
</div>

Expand Down
29 changes: 22 additions & 7 deletions templates/repo/projects/view.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,27 @@
{{$.locale.Tr "repo.projects.column.edit"}}
</a>
{{if not .Default}}
<a class="item show-modal button" data-modal="#set-default-project-board-modal-{{.ID}}">
<a class="item show-modal button default-project-board-show"
data-modal="#default-project-board-modal-{{.ID}}"
data-modal-default-project-board-header="{{$.locale.Tr "repo.projects.column.set_default"}}"
data-modal-default-project-board-content="{{$.locale.Tr "repo.projects.column.set_default_desc"}}"
data-modal-default-project-board-submit="{{$.locale.Tr "repo.projects.column.set_default"}}"
data-type="set_default"
data-url="{{$.Link}}/{{.ID}}/default">
{{svg "octicon-pin"}}
{{$.locale.Tr "repo.projects.column.set_default"}}
</a>
{{else}}
<a class="item show-modal button default-project-board-show"
data-modal="#default-project-board-modal-{{.ID}}"
data-modal-default-project-board-header="{{$.locale.Tr "repo.projects.column.unset_default"}}"
data-modal-default-project-board-content="{{$.locale.Tr "repo.projects.column.unset_default_desc"}}"
data-modal-default-project-board-submit="{{$.locale.Tr "repo.projects.column.unset_default"}}"
data-type="unset_default"
data-url="{{$.Link}}/{{.ID}}/unsetdefault">
{{svg "octicon-pin"}}
{{$.locale.Tr "repo.projects.column.unset_default"}}
</a>
{{end}}
<a class="item show-modal button" data-modal="#delete-board-modal-{{.ID}}">
{{svg "octicon-trash"}}
Expand Down Expand Up @@ -138,18 +155,16 @@
</div>
</div>

<div class="ui basic modal" id="set-default-project-board-modal-{{.ID}}">
<div class="ui basic modal default-project-board-modal" id="default-project-board-modal-{{.ID}}">
<div class="ui icon header">
{{$.locale.Tr "repo.projects.column.set_default"}}
<span id="default-project-board-header"></span>
</div>
<div class="content center">
<label>
{{$.locale.Tr "repo.projects.column.set_default_desc"}}
</label>
<label id="default-project-board-content"></label>
</div>
<div class="text right actions">
<button class="ui cancel button">{{$.locale.Tr "settings.cancel"}}</button>
<button class="ui primary button set-default-project-board" data-url="{{$.RepoLink}}/projects/{{$.Project.ID}}/{{.ID}}/default">{{$.locale.Tr "repo.projects.column.set_default"}}</button>
<button class="ui primary button default-project-board-button" id="default-project-board-submit"></button>
</div>
</div>

Expand Down
33 changes: 22 additions & 11 deletions web_src/js/features/repo-projects.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,19 +126,30 @@ export function initRepoProject() {
});
});

$(document).on('click', '.set-default-project-board', async function (e) {
e.preventDefault();
$('.default-project-board-modal').each(function () {
const boardColumn = $(this).closest('.board-column');
const showButton = $(boardColumn).find('.default-project-board-show');
const commitButton = $(this).find('.default-project-board-button');

await $.ajax({
method: 'POST',
url: $(this).data('url'),
headers: {
'X-Csrf-Token': csrfToken,
},
contentType: 'application/json',
});
if ($(showButton).data('type') === 'unset_default') {
$(commitButton).removeClass('primary');
$(commitButton).addClass('red');
}

window.location.reload();
$(commitButton).on('click', (e) => {
e.preventDefault();

$.ajax({
method: 'POST',
url: $(showButton).data('url'),
headers: {
'X-Csrf-Token': csrfToken,
},
contentType: 'application/json',
}).done(() => {
window.location.reload();
});
});
});

$('.delete-project-board').each(function () {
Expand Down