feat: overwrite project issue template

This commit is contained in:
2025-02-27 22:20:40 +01:00
parent 08cdb44490
commit 406aa46a5a
7 changed files with 112 additions and 27 deletions

View File

@ -31,6 +31,10 @@ const bodyPlaceholder = `
Une fois votre demande générée, vous pourrez l'éditer puis la créer directement en cliquant sur le bouton 'Créer' ci-dessous.
`
const issueTemplatePlaceholder = `
Vous pouvez surcharger le modèle de demande fourni par le projet en remplissant ce champ.
`
func NewIssueSummaryForm() *form.Form {
return form.New(
form.NewField(
@ -47,6 +51,14 @@ func NewIssueSummaryForm() *form.Form {
},
form.NonEmpty("Ce champ ne doit pas être vide."),
),
form.NewField(
"template",
form.Attrs{
"type": "textarea",
"rows": "20",
"placeholder": strings.TrimSpace(issueTemplatePlaceholder),
},
),
)
}
@ -127,6 +139,15 @@ templ IssuePage(vmodel IssuePageVModel) {
"hx-on:change", "onSummaryChange(event)",
),
)
<details class="my-3">
<summary class="is-clickable">Paramètres avancés</summary>
@common.FormTextarea(
vmodel.SummaryForm, "issue-template", "template", "Surcharger le modèle de demande",
common.WithTextareaAttrs(
"hx-on:change", "onIssueTemplateChange(event)",
),
)
</details>
<div class="buttons is-right">
<button type="submit" class="button is-info is-large">
<span class="icon">
@ -184,6 +205,12 @@ templ IssuePage(vmodel IssuePageVModel) {
sessionStorage.setItem(`summary-${projectId}`, summary);
}
function onIssueTemplateChange(evt) {
const issueTemplate = evt.currentTarget.value;
const projectId = document.getElementById("issue-project").value;
localStorage.setItem(`issue-template-${projectId}`, issueTemplate);
}
function savePreferredProject() {
const projectId = document.getElementById("issue-project").value;
localStorage.setItem(`preferred-project`, projectId);
@ -211,9 +238,22 @@ templ IssuePage(vmodel IssuePageVModel) {
summaryTextarea.value = savedSummary;
}
function restoreIssueTemplate() {
const issueTemplateTextarea = document.getElementById("issue-template");
if (!issueTemplateTextarea) return;
const issueTemplate = issueTemplateTextarea.value;
if (issueTemplate !== "") return;
const projectId = document.getElementById("issue-project").value;
if (!projectId) return;
const savedIssueTemplate = localStorage.getItem(`issue-template-${projectId}`);
if (!savedIssueTemplate) return;
issueTemplateTextarea.value = savedIssueTemplate;
}
htmx.onLoad(function(){
restoreLastSummary();
restorePreferredProject();
restoreIssueTemplate();
})
</script>
}