feat: pull request generation
This commit is contained in:
@ -40,7 +40,7 @@ func NewIssueSummaryForm() *form.Form {
|
||||
form.NewField(
|
||||
"project",
|
||||
form.Attrs{},
|
||||
form.NonEmpty("Ce champs ne doit pas être vide."),
|
||||
form.NonEmpty("Ce champ ne doit pas être vide."),
|
||||
),
|
||||
form.NewField(
|
||||
"summary",
|
||||
@ -85,31 +85,21 @@ func NewIssueForm() *form.Form {
|
||||
}
|
||||
|
||||
templ IssuePage(vmodel IssuePageVModel) {
|
||||
@common.Page(common.WithTitle("Nouvelle demande")) {
|
||||
<div class="container is-fluid">
|
||||
<section class="section">
|
||||
<div class="level is-mobile">
|
||||
<div class="level-left">
|
||||
<h1 class="title is-size-1"><span class="has-text-info-light">Clear</span><span>Case</span></h1>
|
||||
</div>
|
||||
<div class="level-right">
|
||||
<div class="buttons is-right level-item">
|
||||
<a class="button is-medium" href={ common.BaseURL(ctx, common.WithPath("/auth/logout")) }><span class="icon"><i class="fa fa-sign-out-alt"></i></span></a>
|
||||
</div>
|
||||
</div>
|
||||
@common.AppPage(common.WithPageOptions(
|
||||
common.WithTitle("Nouvelle demande"),
|
||||
)) {
|
||||
if vmodel.IssueURL != "" {
|
||||
<article class="message is-primary">
|
||||
<div class="message-header">
|
||||
<p>Demande créée !</p>
|
||||
<button class="delete" aria-label="delete" hx-on:click="onCloseMessage(this)"></button>
|
||||
</div>
|
||||
if vmodel.IssueURL != "" {
|
||||
<article class="message is-primary">
|
||||
<div class="message-header">
|
||||
<p>Demande créée !</p>
|
||||
<button class="delete" aria-label="delete" hx-on:click="onCloseMessage(this)"></button>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
Votre demande a été créée et est disponible à l'adresse suivante:
|
||||
<a href={ templ.SafeURL(vmodel.IssueURL) } target="_blank"><code>{ vmodel.IssueURL }</code></a>.
|
||||
</div>
|
||||
</article>
|
||||
<script type="text/javascript">
|
||||
<div class="message-body">
|
||||
Votre demande a été créée et est disponible à l'adresse suivante:
|
||||
<a href={ templ.SafeURL(vmodel.IssueURL) } target="_blank"><code>{ vmodel.IssueURL }</code></a>.
|
||||
</div>
|
||||
</article>
|
||||
<script type="text/javascript">
|
||||
function clearSummary(projectId) {
|
||||
sessionStorage.removeItem(`summary-${projectId}`)
|
||||
}
|
||||
@ -117,83 +107,81 @@ templ IssuePage(vmodel IssuePageVModel) {
|
||||
window.open(issueUrl, "_blank");
|
||||
}
|
||||
</script>
|
||||
@templ.JSFuncCall("clearSummary", vmodel.SelectedProjectID)
|
||||
@templ.JSFuncCall("openIssue", vmodel.IssueURL)
|
||||
}
|
||||
<div class="columns">
|
||||
<div class="column is-4">
|
||||
<form id="summary-form" action={ common.CurrentURL(ctx) } method="put" hx-disabled-elt="textarea, input, select, button" hx-on:htmx:before-send="savePreferredProject()" hx-indicator="#generation-progress">
|
||||
<h2 class="title is-size-3">Résumé de la demande</h2>
|
||||
@common.FormSelect(
|
||||
vmodel.SummaryForm, "issue-project", "project", "Projet",
|
||||
common.WithOptions(projectsToOptions(vmodel.Projects)...),
|
||||
common.WithAttrs(
|
||||
"hx-get", string(common.CurrentURL(ctx, common.WithoutValues("project", "*"))),
|
||||
"hx-target", "body",
|
||||
"hx-push-url", "true",
|
||||
),
|
||||
)
|
||||
@common.FormTextarea(
|
||||
vmodel.SummaryForm, "issue-summary", "summary", "Résumé",
|
||||
common.WithTextareaAttrs(
|
||||
"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">
|
||||
<i class="fa fa-robot"></i>
|
||||
</span>
|
||||
<span>Générer</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
@templ.JSFuncCall("clearSummary", vmodel.SelectedProjectID)
|
||||
@templ.JSFuncCall("openIssue", vmodel.IssueURL)
|
||||
}
|
||||
<div class="columns">
|
||||
<div class="column is-4">
|
||||
<form id="summary-form" action={ common.CurrentURL(ctx) } method="put" hx-disabled-elt="textarea, input, select, button" hx-on:htmx:before-send="savePreferredProject()" hx-indicator="#generation-progress">
|
||||
<h2 class="title is-size-3">Résumé de la demande</h2>
|
||||
@common.FormSelect(
|
||||
vmodel.SummaryForm, "issue-project", "project", "Projet",
|
||||
common.WithOptions(projectsToOptions(vmodel.Projects)...),
|
||||
common.WithAttrs(
|
||||
"hx-get", string(common.CurrentURL(ctx, common.WithoutValues("project", "*"))),
|
||||
"hx-target", "body",
|
||||
"hx-push-url", "true",
|
||||
),
|
||||
)
|
||||
@common.FormTextarea(
|
||||
vmodel.SummaryForm, "issue-summary", "summary", "Résumé",
|
||||
common.WithTextareaAttrs(
|
||||
"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">
|
||||
<i class="fa fa-robot"></i>
|
||||
</span>
|
||||
<span>Générer</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h2 class="title is-size-3">Votre demande</h2>
|
||||
<form action={ common.CurrentURL(ctx) } method="post" hx-disabled-elt="textarea, input, select, button" hx-indicator="#generation-progress">
|
||||
@common.FormField(vmodel.IssueForm, "issue-title", "title", "Titre")
|
||||
@common.FormTextarea(vmodel.IssueForm, "issue-body", "body", "Corps")
|
||||
<div class="buttons is-right">
|
||||
<button type="submit" class="button is-info is-large">
|
||||
<span class="icon">
|
||||
<i class="fa fa-rocket"></i>
|
||||
</span>
|
||||
<span>Créer</span>
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
</div>
|
||||
<div class="column">
|
||||
<h2 class="title is-size-3">Votre demande</h2>
|
||||
<form action={ common.CurrentURL(ctx) } method="post" hx-disabled-elt="textarea, input, select, button" hx-indicator="#generation-progress">
|
||||
@common.FormField(vmodel.IssueForm, "issue-title", "title", "Titre")
|
||||
@common.FormTextarea(vmodel.IssueForm, "issue-body", "body", "Corps")
|
||||
<div class="buttons is-right">
|
||||
<button type="submit" class="button is-info is-large">
|
||||
<span class="icon">
|
||||
<i class="fa fa-rocket"></i>
|
||||
</span>
|
||||
<span>Créer</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<progress id="generation-progress" class="htmx-indicator progress"></progress>
|
||||
if vmodel.IssueTips != "" {
|
||||
{{ html := markdownToHTML(ctx, vmodel.IssueTips) }}
|
||||
if html != "" {
|
||||
<article class="message is-info mt-5">
|
||||
<div class="message-header">
|
||||
<p><span class="icon"><i class="fa fa-lightbulb"></i></span>Questionnements</p>
|
||||
<button class="delete" aria-label="delete" hx-on:click="onCloseMessage(this)"></button>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
<div class="content">
|
||||
<p>Utilisez ces quelques questions pour réfléchir aux éléments d'informations nécessaire à la bonne rédaction de votre demande:</p>
|
||||
@templ.Raw(html)
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
}
|
||||
}
|
||||
</section>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<progress id="generation-progress" class="htmx-indicator progress"></progress>
|
||||
if vmodel.IssueTips != "" {
|
||||
{{ html := markdownToHTML(ctx, vmodel.IssueTips) }}
|
||||
if html != "" {
|
||||
<article class="message is-info mt-5">
|
||||
<div class="message-header">
|
||||
<p><span class="icon"><i class="fa fa-lightbulb"></i></span>Questionnements</p>
|
||||
<button class="delete" aria-label="delete" hx-on:click="onCloseMessage(this)"></button>
|
||||
</div>
|
||||
<div class="message-body">
|
||||
<div class="content">
|
||||
<p>Utilisez ces quelques questions pour réfléchir aux éléments d'informations nécessaire à la bonne rédaction de votre demande:</p>
|
||||
@templ.Raw(html)
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
||||
}
|
||||
}
|
||||
<script type="text/javascript">
|
||||
function onCloseMessage(closeElement) {
|
||||
closeElement.closest('.message').style.display = 'none';
|
||||
|
Reference in New Issue
Block a user