diff --git a/handlers/dev/masterpolakelainan.handlers.go b/handlers/dev/masterpolakelainan.handlers.go
new file mode 100644
index 0000000..374801d
--- /dev/null
+++ b/handlers/dev/masterpolakelainan.handlers.go
@@ -0,0 +1,107 @@
+package dev_handlers
+
+import (
+ breadcrumadmin "cpone/component/breadcrumbadmin"
+ navbarmenu "cpone/component/navbar"
+ sidebaruserprofile "cpone/component/sidebar_user_profile"
+ "cpone/models"
+ globalservices "cpone/services"
+ "cpone/utils"
+ "cpone/views/dev/masterkelainan"
+ "fmt"
+
+ "github.com/a-h/templ"
+ "github.com/labstack/echo/v4"
+ "go.uber.org/zap"
+)
+
+type MasterKelainanService interface {
+ GetListBreadCrumb(title string) (models.BreadCrumbV1, error)
+}
+
+func NewMasterKelainanHandler(us MasterKelainanService) *MasterKelainanHandler {
+ return &MasterKelainanHandler{
+ MasterKelainanService: us,
+ }
+}
+
+type MasterKelainanHandler struct {
+ MasterKelainanService MasterKelainanService
+}
+
+func (uh *MasterKelainanHandler) View(c echo.Context, cmp templ.Component) error {
+ c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML)
+
+ return cmp.Render(c.Request().Context(), c.Response().Writer)
+}
+
+func (lh *MasterKelainanHandler) HandlerShowMasterKelainan(c echo.Context) error {
+
+ logger, _ := zap.NewProduction()
+ //get sidebarmenu
+
+ dataMenu, err := globalservices.GetMenu()
+ fmt.Println(dataMenu)
+ fmt.Println(err)
+ if err != nil {
+ fmt.Println(dataMenu)
+ return err
+ }
+
+ //get user login
+ dataUser, err := globalservices.GetUserLogin()
+ fmt.Println(dataUser)
+ fmt.Println(err)
+ if err != nil {
+ fmt.Println(dataUser)
+ return err
+ }
+
+ tableID := utils.GenerateRandomID("tablebody")
+ paginationID := utils.GenerateRandomID("paginationid")
+ searchID := utils.GenerateRandomID("searchid")
+
+ paramTitleBreadcrumbConvert := "Master Kelainan"
+
+ dataBreadCrumb, err := lh.MasterKelainanService.GetListBreadCrumb(paramTitleBreadcrumbConvert)
+ fmt.Println(dataBreadCrumb)
+ fmt.Println(err)
+ if err != nil {
+ defer logger.Sync()
+ logger.Info("ERROR BREADCRUMB DEV",
+ zap.Any("error", err),
+ )
+ fmt.Println(dataBreadCrumb)
+ return err
+ }
+
+ defer logger.Sync()
+ logger.Info("LOAD BREADCRUMB DEV",
+ zap.Any("data", dataBreadCrumb),
+ )
+
+ // navbar menu
+ navbarmenuComponent := navbarmenu.NavbarMenu(dataMenu)
+
+ // navbar user
+ navbaruserComponent := navbarmenu.Navbar(dataUser)
+
+ // sidebar
+ sidebaruserprofileComponent := sidebaruserprofile.Navbaruserprofile(dataUser)
+
+ si := masterkelainan.ShowKelainan(
+ "Master Kelainan",
+ masterkelainan.ContentMasterKelainan(
+ tableID, paginationID, searchID,
+ breadcrumadmin.MainBreadcrumbAdminV1(dataBreadCrumb),
+ ),
+
+ masterkelainan.CssKelainan(),
+ masterkelainan.JSku(),
+ navbarmenuComponent,
+ navbaruserComponent,
+ sidebaruserprofileComponent,
+ )
+
+ return utils.View(c, si)
+}
diff --git a/handlers/routes.go b/handlers/routes.go
index 4a6b965..65f2541 100644
--- a/handlers/routes.go
+++ b/handlers/routes.go
@@ -208,4 +208,9 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
// clientgroup.GET("/usergroup/edit", mastermenuusergroupHandler.ChangeFormEdit)
// clientgroup.GET("/usergroup/pagination", mastermenuusergroupHandler.HandleChangePage)
+
+ // master kelainan
+ devKLServices := dev_services.NewServicesMasterKelainan(appStore)
+ devKLhandlers := dev_handlers.NewMasterKelainanHandler(devKLServices)
+ dev.GET("/kelainan", devKLhandlers.HandlerShowMasterKelainan)
}
diff --git a/services/dev/masterkelainan.services.go b/services/dev/masterkelainan.services.go
new file mode 100644
index 0000000..062e5e5
--- /dev/null
+++ b/services/dev/masterkelainan.services.go
@@ -0,0 +1,73 @@
+package dev_services
+
+import (
+ "cpone/db"
+ "cpone/models"
+)
+
+func NewServicesMasterKelainan(uStore db.AppStore) *ServicesMasterKelainan {
+
+ return &ServicesMasterKelainan{
+
+ MasterKelainanStore: uStore,
+ }
+}
+
+type ServicesMasterKelainan struct {
+ MasterKelainanStore db.AppStore
+}
+
+func (su *ServicesMasterKelainan) GetListBreadCrumb(title string) (models.BreadCrumbV1, error) {
+ var ret models.BreadCrumbV1
+
+ dummyBreadcrumb := []models.BreadCrumbV1{
+ {
+ Title: "Master Kelainan",
+ Item: []models.ItemBreadCrumbV1{
+ {
+ Item: "Dashboard",
+ Url: "/dev/dashboard",
+ },
+ {
+ Item: "Master",
+ Url: "/dev/master",
+ },
+ {
+ Item: "Kelainan",
+ Url: "",
+ },
+ },
+ },
+
+ {
+ Title: "Master User",
+ Item: []models.ItemBreadCrumbV1{
+ {
+ Item: "Dashboard",
+ Url: "/dev/dashboard",
+ },
+ {
+ Item: "Master",
+ Url: "/dev/master",
+ },
+ {
+ Item: "User",
+ Url: "",
+ },
+ },
+ },
+ }
+
+ for _, breadcrumb := range dummyBreadcrumb {
+ // if utils.Contains(breadcrumb.Title, title) {
+ // ret = breadcrumb
+ // return ret, nil
+ // }
+ if breadcrumb.Title == title {
+ ret = breadcrumb
+ return ret, nil
+ }
+ }
+
+ return ret, nil
+}
diff --git a/views/dev/masterkelainan/masterkelainan.templ b/views/dev/masterkelainan/masterkelainan.templ
new file mode 100644
index 0000000..7f7d79c
--- /dev/null
+++ b/views/dev/masterkelainan/masterkelainan.templ
@@ -0,0 +1,122 @@
+package masterkelainan
+
+import (
+ "cpone/layout"
+ "cpone/models"
+ "cpone/component/customtextfield"
+)
+
+templ ContentMasterKelainan(
+ tableID string,
+ paginationID string,
+ searchID string,
+ breadcrumb templ.Component,
+) {
+
+ @customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "tableID",
+ Name: "tableID",
+ Type: "hidden",
+ Value: tableID})
+ @customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "paginationID",
+ Name: "paginationID",
+ Type: "hidden",
+ Value: paginationID})
+ @customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "searchID",
+ Name: "searchID",
+ Type: "hidden",
+ Value: searchID})
+
+
+ @breadcrumb
+
+
+
+
+
+
+
+ @JSku()
+
+}
+
+templ JSku() {
+
+}
+
+templ CssKelainan() {
+
+
+
+
+}
+
+templ ShowKelainan(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js templ.Component,
+ navbarmenu templ.Component,
+ navbaruser templ.Component,
+ userprofile templ.Component) {
+ @layout.CorporateLayout(title, css, js, navbarmenu, navbaruser, userprofile) {
+ @cmp
+ }
+}
diff --git a/views/dev/masterkelainan/masterkelainan_templ.go b/views/dev/masterkelainan/masterkelainan_templ.go
new file mode 100644
index 0000000..03a4620
--- /dev/null
+++ b/views/dev/masterkelainan/masterkelainan_templ.go
@@ -0,0 +1,181 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.2.663
+package masterkelainan
+
+//lint:file-ignore SA4006 This context is only used if a nested component is present.
+
+import "github.com/a-h/templ"
+import "context"
+import "io"
+import "bytes"
+
+import (
+ "cpone/component/customtextfield"
+ "cpone/layout"
+ "cpone/models"
+)
+
+func ContentMasterKelainan(
+ tableID string,
+ paginationID string,
+ searchID string,
+ breadcrumb templ.Component,
+) templ.Component {
+ return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
+ if !templ_7745c5c3_IsBuffer {
+ templ_7745c5c3_Buffer = templ.GetBuffer()
+ defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var1 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var1 == nil {
+ templ_7745c5c3_Var1 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "tableID",
+ Name: "tableID",
+ Type: "hidden",
+ Value: tableID}).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "paginationID",
+ Name: "paginationID",
+ Type: "hidden",
+ Value: paginationID}).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = customtextfield.CustomTextFieldv2(models.CustomTextFieldv2Prm{ID: "searchID",
+ Name: "searchID",
+ Type: "hidden",
+ Value: searchID}).Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = breadcrumb.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ templ_7745c5c3_Err = JSku().Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func JSku() templ.Component {
+ return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
+ if !templ_7745c5c3_IsBuffer {
+ templ_7745c5c3_Buffer = templ.GetBuffer()
+ defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var2 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var2 == nil {
+ templ_7745c5c3_Var2 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func CssKelainan() templ.Component {
+ return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
+ if !templ_7745c5c3_IsBuffer {
+ templ_7745c5c3_Buffer = templ.GetBuffer()
+ defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var3 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var3 == nil {
+ templ_7745c5c3_Var3 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
+ }
+ return templ_7745c5c3_Err
+ })
+}
+
+func ShowKelainan(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js templ.Component,
+ navbarmenu templ.Component,
+ navbaruser templ.Component,
+ userprofile templ.Component) templ.Component {
+ return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
+ if !templ_7745c5c3_IsBuffer {
+ templ_7745c5c3_Buffer = templ.GetBuffer()
+ defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
+ }
+ ctx = templ.InitializeContext(ctx)
+ templ_7745c5c3_Var4 := templ.GetChildren(ctx)
+ if templ_7745c5c3_Var4 == nil {
+ templ_7745c5c3_Var4 = templ.NopComponent
+ }
+ ctx = templ.ClearChildren(ctx)
+ templ_7745c5c3_Var5 := templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
+ templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
+ if !templ_7745c5c3_IsBuffer {
+ templ_7745c5c3_Buffer = templ.GetBuffer()
+ defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
+ }
+ templ_7745c5c3_Err = cmp.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
+ }
+ return templ_7745c5c3_Err
+ })
+ templ_7745c5c3_Err = layout.CorporateLayout(title, css, js, navbarmenu, navbaruser, userprofile).Render(templ.WithChildren(ctx, templ_7745c5c3_Var5), templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ if !templ_7745c5c3_IsBuffer {
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
+ }
+ return templ_7745c5c3_Err
+ })
+}