diff --git a/src/app/eiffel/web.go b/src/app/eiffel/web.go index 52fc4383b7ec55a8deb705aa4deedfce4f770285..c1201ca5edb07179503b52aa10cbbc0d7d251e35 100644 --- a/src/app/eiffel/web.go +++ b/src/app/eiffel/web.go @@ -67,7 +67,8 @@ type TemplateFormData struct { // SearchTemplateData contains templates to render as search results and a flag indicating if the query was too short. type SearchTemplateData struct { - Templates []*template.Template + Templates []*template.Template + // Deprecated this is expected to be unnecessary with the current implementation of EIFFEL QueryTooShort bool } @@ -181,8 +182,21 @@ func renderElicitationPage(io web.IO, data TemplateFormData, success []string, e } func searchModal(appCtx *hctx.AppCtx, webCtx *web.Ctx) http.Handler { + templateRepository := util.UnwrapType[template.Repository](appCtx.Repository(template.RepositoryName)) + return web.NewController(appCtx, webCtx, func(io web.IO) error { - return io.Render(nil, "eiffel.template.search.modal", "eiffel/_modal-template-search.go.html") + ctx := io.Context() + templates, err := templateRepository.FindByQueryForTypeAndUser(ctx, "", BasicTemplateType, user.MustCtxUser(ctx)) + if err != nil && !errors.Is(err, persistence.ErrNotFound) { + return io.InlineError(web.ErrInternal, err) + } + + return io.Render( + &SearchTemplateData{Templates: templates}, + "eiffel.template.search.modal", + "eiffel/_modal-template-search.go.html", + "eiffel/_template-search-result.go.html", + ) }) } @@ -197,13 +211,7 @@ func searchTemplate(appCtx *hctx.AppCtx, webCtx *web.Ctx) http.Handler { } query := request.FormValue("search") - if len(query) < 3 { - return io.Render( - &SearchTemplateData{QueryTooShort: true}, - "eiffel.template.search.result", - "eiffel/_template-search-result.go.html", - ) - } + // query too short was removed as it is expected to be unnecessary ctx := io.Context() templates, err := templateRepository.FindByQueryForTypeAndUser(ctx, query, BasicTemplateType, user.MustCtxUser(ctx)) diff --git a/templates/eiffel/_modal-template-search.go.html b/templates/eiffel/_modal-template-search.go.html index 01721d00f8fa3bd48e8f5630f62f838d92f2109a..8cb1526db2bb78b15c5a154776f683a05fb67d97 100644 --- a/templates/eiffel/_modal-template-search.go.html +++ b/templates/eiffel/_modal-template-search.go.html @@ -1,5 +1,5 @@ {{ define "eiffel.template.search.modal" }} - <div class="modal-dialog modal-lg"> + <div class="modal-dialog modal-dialog-scrollable modal-lg"> <div class="modal-content"> <div class="modal-header"> <h1 class="modal-title fs-5" id="eiffelTemplateSearchLabel">{{ t "eiffel.elicitation.template.search.title" }}</h1> @@ -8,7 +8,7 @@ <div class="modal-body"> <div class="mb-3"> <input id="eiffelTemplateSearchInput" - name="search" type="search" class="form-control" + name="search" type="search" class="form-control border-dark-subtle" hx-post="/eiffel/elicitation/templates/search" hx-trigger="input changed delay:300ms, search" hx-target="#eiffelTemplateSearchResults" @@ -26,9 +26,13 @@ </tr> </thead> <tbody id="eiffelTemplateSearchResults"> - <tr> - <td class="text-center" colspan="4">{{ t "eiffel.elicitation.template.search.start" }}</td> - </tr> + {{ if not .Data.Templates }} + <tr> + <td class="text-center" colspan="4">{{ t "eiffel.elicitation.template.search.start" }}</td> + </tr> + {{ else }} + {{ template "eiffel.template.search.result" . }} + {{ end }} </tbody> </table> </div>