81654c0d33
Add normalized service and template catalogs, scoped administration, migration, validation, and regression coverage. Ref: IT-1601
49 lines
3.8 KiB
Plaintext
49 lines
3.8 KiB
Plaintext
@using HrynCo.NotificationService.Web.Controllers.Admin.ViewModels
|
|
@model NotificationServiceEditViewModel
|
|
@{
|
|
Layout = "~/Views/Shared/_EditorLayout.cshtml";
|
|
ViewData["Title"] = Model.IsNew ? "Create Service" : "Edit Service";
|
|
ViewData["EditorTitle"] = ViewData["Title"];
|
|
}
|
|
@section Breadcrumbs {
|
|
<nav aria-label="Breadcrumb"><ol class="breadcrumb"><li class="breadcrumb-item"><a href="/admin/services">Services</a></li>@if (!Model.IsNew) { <li class="breadcrumb-item"><a href="/admin/services/@Model.Id">@Model.Name</a></li> }<li class="breadcrumb-item active" aria-current="page">@ViewData["Title"]</li></ol></nav>
|
|
}
|
|
<form asp-action="Save" id="serviceForm" method="post">
|
|
@Html.AntiForgeryToken()
|
|
<input asp-for="Id" type="hidden" /><input asp-for="Revision" type="hidden" />
|
|
<div asp-validation-summary="All" class="text-danger mb-3" role="alert"></div>
|
|
<label asp-for="Name" class="form-label fw-semibold">Service name</label>
|
|
<input asp-for="Name" class="form-control mb-3" maxlength="100" />
|
|
<h3 class="h5">Language codes</h3>
|
|
<p class="text-muted">Codes are case-sensitive and belong to this service. Existing template versions use these codes when sending. Renaming a service or code changes sender lookup; align publishers and email channel service names.</p>
|
|
<div class="table-responsive">
|
|
<table class="table service-language-table"><thead><tr><th>Code</th><th>Versions</th><th class="service-language-actions">Actions</th></tr></thead><tbody id="serviceLanguages">
|
|
@for (var i = 0; i < Model.Languages.Count; i++)
|
|
{
|
|
var countUnavailable = ViewData["LanguageCountsUnavailable"] is true && Model.Languages[i].Id != Guid.Empty;
|
|
<tr>
|
|
<td><input asp-for="Languages[i].Id" type="hidden" /><label for="service-code-@i" class="visually-hidden">Language code</label><input asp-for="Languages[i].Code" id="service-code-@i" class="form-control" maxlength="10" /></td>
|
|
<td>@(countUnavailable ? "Unavailable" : Model.Languages[i].VersionCount.ToString())</td>
|
|
<td class="service-language-actions">
|
|
<div class="service-language-action-buttons">
|
|
<button type="button" class="btn btn-outline-secondary remove-service-language" data-count="@Model.Languages[i].VersionCount" disabled="@countUnavailable">Remove</button>
|
|
@if (!Model.IsNew && Model.Languages[i].Id != Guid.Empty)
|
|
{
|
|
<a class="btn btn-outline-danger" href="/admin/services/@Model.Id/languages/@Model.Languages[i].Id/delete">Delete language and versions…</a>
|
|
}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
}
|
|
</tbody></table>
|
|
</div>
|
|
<button type="button" id="addServiceLanguage" class="btn btn-outline-primary">Add language code</button>
|
|
<div id="serviceLanguageAlert" role="alert" class="text-danger mt-3"></div>
|
|
</form>
|
|
<template id="serviceLanguageRow"><tr><td><input type="hidden" name="Languages[__index__].Id" value="00000000-0000-0000-0000-000000000000" /><label for="service-code-__index__" class="visually-hidden">Language code</label><input id="service-code-__index__" name="Languages[__index__].Code" class="form-control" maxlength="10" /></td><td>0</td><td class="service-language-actions"><div class="service-language-action-buttons"><button type="button" class="btn btn-outline-secondary remove-service-language" data-count="0">Remove</button></div></td></tr></template>
|
|
@section FormActions {
|
|
<button type="submit" form="serviceForm" class="btn btn-primary">Save service</button>
|
|
<a href="@(Model.IsNew ? "/admin/services" : $"/admin/services/{Model.Id}")" class="btn btn-secondary">Cancel</a>
|
|
}
|
|
@section Scripts { <script src="~/js/service-editor.js" asp-append-version="true"></script> }
|