step 2 : search with pagination
This commit is contained in:
@@ -13,7 +13,9 @@ import (
|
||||
mastermenuuser "cpone/views/dev/mastermenuuser"
|
||||
mastermenuusergroup "cpone/views/dev/mastermenuusergroup"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"github.com/a-h/templ"
|
||||
"github.com/labstack/echo/v4"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
@@ -27,8 +29,9 @@ type MasterMenuUserService interface {
|
||||
// AddUserGroup(code string, name string) (models.UserGroupV1, error)
|
||||
// EditUserGroup(id string, code string, name string) (models.UserGroupV1, error)
|
||||
// DeleteUserGroup(id string) (models.UserGroupV1, error)
|
||||
GetListMasterUserV2(search string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error)
|
||||
GetListMasterUserV2(search string, usergroup string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error)
|
||||
// GetUserGroupByIDV1(id string) (models.UserGroupV1, error)
|
||||
GetUserGroupData() ([]models.UserGroupV1, error)
|
||||
}
|
||||
|
||||
func NewMasterMenuUserHandler(us MasterMenuUserService) *MasterMenuUserHandler {
|
||||
@@ -41,6 +44,65 @@ type MasterMenuUserHandler struct {
|
||||
MasterMenuUserService MasterMenuUserService
|
||||
}
|
||||
|
||||
// PAGINATION
|
||||
func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserPaginationV1(c echo.Context) error {
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
search := c.QueryParam("search")
|
||||
usergroup := c.QueryParam("usergroup")
|
||||
pageparam := c.QueryParam("page")
|
||||
tableID := c.QueryParam("tableID")
|
||||
searchID := c.QueryParam("searchID")
|
||||
|
||||
dropdownID := c.QueryParam("dropdownID")
|
||||
paginationID := c.QueryParam("paginationID")
|
||||
dialogEditBodyID := c.QueryParam("dialogEditBodyID")
|
||||
// dialogEditID := c.QueryParam("dialogEditID")
|
||||
dialogDeleteBodyID := c.QueryParam("dialogDeleteBodyID")
|
||||
// dialogDeleteID := c.QueryParam("dialogDeleteID")
|
||||
page, err := strconv.Atoi(pageparam)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("ERROR CONVERT PAGE PARAM",
|
||||
zap.Any("page", page),
|
||||
zap.Any("error ", err),
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
dataUserGroup, totalpage, err := lh.MasterMenuUserService.GetListMasterUserV2(search, usergroup, page, 5)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("ERROR GET USER GROUP",
|
||||
zap.Any("error", err),
|
||||
)
|
||||
fmt.Println(dataUserGroup)
|
||||
return err
|
||||
}
|
||||
|
||||
contentUserGroupComponent := mastermenuuser.TableUser(
|
||||
dataUserGroup, tableID, "/dev/usergroupshoweditform",
|
||||
"#"+dialogEditBodyID,
|
||||
"outerHTML",
|
||||
"#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID",
|
||||
"/dev/usergroupshowdeleteform",
|
||||
"#"+dialogDeleteBodyID,
|
||||
"outerHTML",
|
||||
"#dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #dialogEditID")
|
||||
|
||||
userGroupPaginationComponent := pagination.PaginationV2(totalpage,
|
||||
page,
|
||||
"/dev/userv1pagination",
|
||||
paginationID,
|
||||
// "#tableID, #searchID, #"+searchID+", #dropdownID, #"+dropdownID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, [name='search'], [name='usergroup']",
|
||||
"#tableID, #searchID, #"+searchID+", #dropdownID, #"+dropdownID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, [name='search'], [name='usergroup']",
|
||||
"#"+paginationID, "outerHTML", "", "")
|
||||
|
||||
retval := []templ.Component{contentUserGroupComponent, userGroupPaginationComponent}
|
||||
|
||||
return utils.ViewMulti(c, retval)
|
||||
}
|
||||
|
||||
// LISTING FUNCTION INITIAL
|
||||
func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) error {
|
||||
|
||||
@@ -64,7 +126,26 @@ func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) err
|
||||
return err
|
||||
}
|
||||
|
||||
dataUserGroup, totalpage, err := lh.MasterMenuUserService.GetListMasterUserV2("", 1, 5)
|
||||
// dropdownUserGroupInitial :=
|
||||
|
||||
dataUserMasterInitialSelected, err := lh.MasterMenuUserService.GetUserGroupData()
|
||||
fmt.Println(dataUserMasterInitialSelected)
|
||||
fmt.Println(err)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("ERROR LIST USER MASTER Selected DEV",
|
||||
zap.Any("error", err),
|
||||
)
|
||||
fmt.Println(dataUserMasterInitialSelected)
|
||||
return err
|
||||
}
|
||||
|
||||
var initialSelectedUserGroup string = "0"
|
||||
if len(dataUserMasterInitialSelected) > 0 {
|
||||
initialSelectedUserGroup = strconv.Itoa(dataUserMasterInitialSelected[0].M_UserGroupID)
|
||||
}
|
||||
|
||||
dataUserGroup, totalpage, err := lh.MasterMenuUserService.GetListMasterUserV2("", initialSelectedUserGroup, 1, 5)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("ERROR GET USER GROUP",
|
||||
@@ -157,14 +238,15 @@ func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) err
|
||||
//filter user search component
|
||||
// customtextfieldsearch.MainCustomTextFieldSearchV1("#"+contentIDSearch, "q", "Cari Nama Staff / Email", "text", "/dev/searchuserv1?"+link, "input changed delay:500ms, search", "#"+contentID, "#indicator", "", contentIDHtmxExtension, "[name='usergroup']")
|
||||
|
||||
userFilterComp := customtextfieldsearch.MainCustomTextFieldSearchV2(searchID,
|
||||
userFilterComp := customtextfieldsearch.MainCustomTextFieldSearchV2(
|
||||
searchID,
|
||||
"search",
|
||||
"Cari Nama Staff / Email",
|
||||
"text",
|
||||
"/dev/searchusergroupv1",
|
||||
"/dev/searchuserv1",
|
||||
"input changed delay:500ms, search",
|
||||
"#"+paginationID, "", "", "outerHTML",
|
||||
"#tableID, #paginationID, #searchID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, [name='usergroup']")
|
||||
"#tableID, #paginationID, #searchID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, #dropdownID, [name='usergroup']")
|
||||
|
||||
// filter user group dropdown
|
||||
listItemComponent := mastermenuuser.ItemDropdown(dataUserGroupAll)
|
||||
@@ -174,8 +256,8 @@ func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) err
|
||||
"#"+paginationID,
|
||||
"/dev/searchuserv1",
|
||||
"",
|
||||
"change from:select[name='usergroup']",
|
||||
"[name='search']",
|
||||
"change from:select[name='usergroup'], input changed from:input[name='search']",
|
||||
"#tableID, #paginationID, #searchID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, #dropdownID, [name='search']",
|
||||
listItemComponent,
|
||||
)
|
||||
|
||||
@@ -183,9 +265,9 @@ func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) err
|
||||
userGroupPaginationComponent := pagination.PaginationV2(
|
||||
totalpage,
|
||||
1,
|
||||
"/dev/usergroupv1pagination",
|
||||
"/dev/userv1pagination",
|
||||
paginationID,
|
||||
"#tableID, #searchID, #"+searchID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID",
|
||||
"#tableID, #searchID, #"+searchID+", #dropdownID, #"+dropdownID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, [name='search'], [name='usergroup']",
|
||||
"#"+paginationID,
|
||||
"outerHTML", "", "",
|
||||
)
|
||||
@@ -223,3 +305,59 @@ func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserV1(c echo.Context) err
|
||||
|
||||
return utils.View(c, si)
|
||||
}
|
||||
|
||||
// SEARCH PROSES
|
||||
func (lh *MasterMenuUserHandler) HandlerShowMasterMenuUserSearchV1(c echo.Context) error {
|
||||
search := c.QueryParam("search")
|
||||
usergroup := c.QueryParam("usergroup")
|
||||
searchID := c.QueryParam("searchID")
|
||||
dropdownID := c.QueryParam("dropdownID")
|
||||
tableID := c.QueryParam("tableID")
|
||||
paginationID := c.QueryParam("paginationID")
|
||||
dialogEditBodyID := c.QueryParam("dialogEditBodyID")
|
||||
// dialogEditID := c.QueryParam("dialogEditID")
|
||||
dialogDeleteBodyID := c.QueryParam("dialogDeleteBodyID")
|
||||
// dialogDeleteID := c.QueryParam("dialogDeleteID")
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
|
||||
dataUserGroup, totalpage, err := lh.MasterMenuUserService.GetListMasterUserV2(search, usergroup, 1, 5)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Info("ERROR GET USER GROUP",
|
||||
zap.Any("error", err),
|
||||
)
|
||||
fmt.Println(dataUserGroup)
|
||||
return err
|
||||
}
|
||||
|
||||
// totalPages := int(math.Ceil(float64(len(dataUserGroupFiltered)) / float64(rowPerPage)))
|
||||
|
||||
contentUserGroupComponent := mastermenuuser.TableUser(
|
||||
dataUserGroup, tableID, "/dev/usergroupshoweditform",
|
||||
"#"+dialogEditBodyID,
|
||||
"outerHTML",
|
||||
"#dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID",
|
||||
"/dev/usergroupshowdeleteform",
|
||||
"#"+dialogDeleteBodyID,
|
||||
"outerHTML",
|
||||
"#dialogDeleteBodyID, #dialogDeleteID, #dialogEditBodyID, #dialogEditID")
|
||||
|
||||
userGroupPaginationComponent := pagination.PaginationV2(totalpage,
|
||||
1,
|
||||
"/dev/userv1pagination",
|
||||
paginationID,
|
||||
"#tableID, #searchID, #"+searchID+", #dropdownID, #"+dropdownID+", #paginationID, #dialogEditBodyID, #dialogEditID, #dialogDeleteBodyID, #dialogDeleteID, [name='search'], [name='usergroup']",
|
||||
"#"+paginationID,
|
||||
"outerHTML",
|
||||
"",
|
||||
"",
|
||||
)
|
||||
|
||||
// swapTable :=
|
||||
// mastermenuusergroup.SwapTableUserGroup(userGroupPaginationComponent, contentUserGroupComponent)
|
||||
retval := []templ.Component{contentUserGroupComponent, userGroupPaginationComponent}
|
||||
|
||||
return utils.ViewMulti(c, retval)
|
||||
// return utils.View(c, si)
|
||||
}
|
||||
|
||||
@@ -236,5 +236,7 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
|
||||
devUSServices := dev_services.NewServicesMasterMenuUser(appStore)
|
||||
devUShandlers := dev_handlers.NewMasterMenuUserHandler(devUSServices)
|
||||
dev.GET("/userv1", devUShandlers.HandlerShowMasterMenuUserV1)
|
||||
dev.GET("/searchuserv1", devUShandlers.HandlerShowMasterMenuUserSearchV1)
|
||||
dev.GET("/userv1pagination", devUShandlers.HandlerShowMasterMenuUserPaginationV1)
|
||||
// dev.GET("/breadcrumbv1", devUShandlers)
|
||||
}
|
||||
|
||||
@@ -804,27 +804,71 @@ func (su *ServicesMasterMenuUser) GetListMasterUserGroupSearch() ([]models.UserG
|
||||
}
|
||||
|
||||
// versi 2
|
||||
func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error) {
|
||||
func (su *ServicesMasterMenuUser) GetUserGroupData() ([]models.UserGroupV1, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
|
||||
var userList []models.UserGroupV1
|
||||
|
||||
queryList := `
|
||||
SELECT *
|
||||
FROM m_usergroup
|
||||
WHERE M_UserGroupIsActive = 'Y'
|
||||
order by M_UserGroupID ASC
|
||||
LIMIT 0, 1
|
||||
`
|
||||
|
||||
logger.Info("QUERY SEARCH INITIAL DATA USERGROUP",
|
||||
zap.String("query search", queryList),
|
||||
)
|
||||
|
||||
if err := dbx.Handlex.Select(&userList, queryList); err != nil {
|
||||
return nil, fmt.Errorf("error querying database initial USERGROUP: %v", err)
|
||||
}
|
||||
|
||||
return userList, nil
|
||||
}
|
||||
|
||||
func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, usergroup string, currentPage int, rowPerPage int) ([]models.MasterUser, int, error) {
|
||||
|
||||
logger, _ := zap.NewProduction()
|
||||
defer logger.Sync()
|
||||
|
||||
var userList []models.MasterUser
|
||||
var totalData int
|
||||
offset := (currentPage - 1) * rowPerPage
|
||||
var searchUserGroup string = ""
|
||||
if usergroup != "0" {
|
||||
searchUserGroup = usergroup
|
||||
}
|
||||
|
||||
prm := "%" + strings.TrimSpace(search) + "%"
|
||||
querytotal := `
|
||||
|
||||
// search dropdown dan inputan search
|
||||
if usergroup != "0" {
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_user
|
||||
JOIN m_usergroup
|
||||
ON M_UserM_UserGroupID = M_UserGroupID
|
||||
AND M_UserIsActive = 'Y'
|
||||
AND M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
|
||||
AND M_UserGroupID = ?
|
||||
JOIN r_reportgroup
|
||||
ON M_UserR_ReportGroupID = R_ReportGroupID
|
||||
AND R_ReportGroupIsActive = 'Y'
|
||||
`
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
|
||||
logger.Info("QUERY SEARCH INITIAL TOTAL COUNT",
|
||||
zap.String("query search", querytotal),
|
||||
)
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm, searchUserGroup); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserID,
|
||||
@@ -851,7 +895,8 @@ func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage
|
||||
ON M_UserM_UserGroupID = M_UserGroupID
|
||||
AND M_UserIsActive = 'Y'
|
||||
AND M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserGroupCode LIKE ? OR M_UserGroupName LIKE ?)
|
||||
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
|
||||
AND M_UserGroupID = ?
|
||||
JOIN r_reportgroup
|
||||
ON M_UserR_ReportGroupID = R_ReportGroupID
|
||||
AND R_ReportGroupIsActive = 'Y'
|
||||
@@ -859,9 +904,79 @@ func (su *ServicesMasterMenuUser) GetListMasterUserV2(search string, currentPage
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&userList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
logger.Info("QUERY SEARCH INITIAL",
|
||||
zap.String("query search", query),
|
||||
)
|
||||
|
||||
if err := dbx.Handlex.Select(&userList, query, prm, prm, searchUserGroup, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
} else {
|
||||
// search hanya inputan search
|
||||
querytotal := `
|
||||
SELECT COUNT(*)
|
||||
FROM m_user
|
||||
JOIN m_usergroup
|
||||
ON M_UserM_UserGroupID = M_UserGroupID
|
||||
AND M_UserIsActive = 'Y'
|
||||
AND M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
|
||||
JOIN r_reportgroup
|
||||
ON M_UserR_ReportGroupID = R_ReportGroupID
|
||||
AND R_ReportGroupIsActive = 'Y'
|
||||
`
|
||||
|
||||
logger.Info("QUERY SEARCH INITIAL TOTAL COUNT",
|
||||
zap.String("query search", querytotal),
|
||||
)
|
||||
|
||||
if err := dbx.Handlex.Get(&totalData, querytotal, prm, prm); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
query := `
|
||||
SELECT
|
||||
ROW_NUMBER() OVER () AS nomor,
|
||||
M_UserID,
|
||||
IFNULL(M_UserEmail, '') AS M_UserEmail,
|
||||
IFNULL(M_UserFullName, '') AS M_UserFullName,
|
||||
IFNULL(M_UserLastAccess, '') AS M_UserLastAccess,
|
||||
IFNULL(M_UserIsLoggedIn, '') AS M_UserIsLoggedIn,
|
||||
IFNULL(M_UserActiveToken, '') AS M_UserActiveToken,
|
||||
IFNULL(M_UserExpiredToken, '') AS M_UserExpiredToken,
|
||||
IFNULL(M_UserIsActive, '') AS M_UserIsActive,
|
||||
IFNULL(M_UserCreated, '') AS M_UserCreated,
|
||||
IFNULL(M_UserCreatedUserID, '') AS M_UserCreatedUserID,
|
||||
IFNULL(M_UserLastUpdated, '') AS M_UserLastUpdated,
|
||||
IFNULL(M_UserLastUpdatedUserID, '') AS M_UserLastUpdatedUserID,
|
||||
IFNULL(M_UserDeletedUserID, '') AS M_UserDeletedUserID,
|
||||
IFNULL(M_UserDeleted, '') AS M_UserDeleted,
|
||||
IFNULL(M_UserGroupCode, '') AS M_UserGroupCode,
|
||||
IFNULL(M_UserGroupName, '') AS M_UserGroupName,
|
||||
IFNULL(M_UserM_UserGroupID, '') AS M_UserM_UserGroupID,
|
||||
IFNULL(M_UserGroupID, '') AS M_UserGroupID,
|
||||
M_UserIsActive
|
||||
FROM m_user
|
||||
JOIN m_usergroup
|
||||
ON M_UserM_UserGroupID = M_UserGroupID
|
||||
AND M_UserIsActive = 'Y'
|
||||
AND M_UserGroupIsActive = 'Y'
|
||||
AND (M_UserFullName LIKE ? OR M_UserEmail LIKE ?)
|
||||
JOIN r_reportgroup
|
||||
ON M_UserR_ReportGroupID = R_ReportGroupID
|
||||
AND R_ReportGroupIsActive = 'Y'
|
||||
order by M_UserID ASC
|
||||
LIMIT ? OFFSET ?
|
||||
`
|
||||
|
||||
logger.Info("QUERY SEARCH INITIAL",
|
||||
zap.String("query search", query),
|
||||
)
|
||||
|
||||
if err := dbx.Handlex.Select(&userList, query, prm, prm, rowPerPage, offset); err != nil {
|
||||
return nil, 0, fmt.Errorf("error querying database: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
totalPage := int(math.Ceil(float64(totalData) / float64(rowPerPage)))
|
||||
|
||||
return userList, totalPage, nil
|
||||
|
||||
@@ -14,7 +14,7 @@ templ ContentMasterMenuUserV1(
|
||||
tableID string,
|
||||
paginationID string,
|
||||
searchID string,
|
||||
searchIDDropdown string,
|
||||
dropdownID string,
|
||||
dialogAddID string,
|
||||
dialogAddBodyID string,
|
||||
dialogEditID string,
|
||||
@@ -39,10 +39,10 @@ templ ContentMasterMenuUserV1(
|
||||
Name: "paginationID",
|
||||
Type: "hidden",
|
||||
Value: paginationID})
|
||||
@customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "searchIDDropdown",
|
||||
Name: "searchIDDropdown",
|
||||
@customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "dropdownID",
|
||||
Name: "dropdownID",
|
||||
Type: "hidden",
|
||||
Value: searchIDDropdown})
|
||||
Value: dropdownID})
|
||||
@customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "searchID",
|
||||
Name: "searchID",
|
||||
Type: "hidden",
|
||||
|
||||
@@ -24,7 +24,7 @@ func ContentMasterMenuUserV1(
|
||||
tableID string,
|
||||
paginationID string,
|
||||
searchID string,
|
||||
searchIDDropdown string,
|
||||
dropdownID string,
|
||||
dialogAddID string,
|
||||
dialogAddBodyID string,
|
||||
dialogEditID string,
|
||||
@@ -70,10 +70,10 @@ func ContentMasterMenuUserV1(
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "searchIDDropdown",
|
||||
Name: "searchIDDropdown",
|
||||
templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "dropdownID",
|
||||
Name: "dropdownID",
|
||||
Type: "hidden",
|
||||
Value: searchIDDropdown}).Render(ctx, templ_7745c5c3_Buffer)
|
||||
Value: dropdownID}).Render(ctx, templ_7745c5c3_Buffer)
|
||||
if templ_7745c5c3_Err != nil {
|
||||
return templ_7745c5c3_Err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user