diff --git a/handlers/dev/detailmcu.handlers.go b/handlers/dev/detailmcu.handlers.go
new file mode 100644
index 0000000..384dbb9
--- /dev/null
+++ b/handlers/dev/detailmcu.handlers.go
@@ -0,0 +1,68 @@
+package dev_handlers
+
+import (
+ breadcrumadmin "cpone/component/breadcrumbadmin"
+ navbarmenu "cpone/component/navbar"
+ sidebaruserprofile "cpone/component/sidebar_user_profile"
+ "cpone/models"
+ "cpone/services"
+ "cpone/utils"
+ dev_detailmcu "cpone/views/dev/mcu"
+
+ "github.com/labstack/echo/v4"
+ "go.uber.org/zap"
+)
+
+type DetailMcuServices interface {
+ GetBreadcrumb(title string) (models.BreadCrumbV1, error)
+}
+
+type DetailMcuHandler struct {
+ DetailMcuServices DetailMcuServices
+}
+
+func NewDetailMcuHandler(dmcu DetailMcuServices) *DetailMcuHandler {
+ return &DetailMcuHandler{
+ DetailMcuServices: dmcu,
+ }
+}
+
+func (dmcu *DetailMcuHandler) HandleShowDetailMcuScreen(c echo.Context) error {
+ logger, _ := zap.NewProduction()
+ title := "PT. Sadhana Abiyasa Sampoerna"
+
+ user, err := services.GetUserLogin()
+ if err != nil {
+ defer logger.Sync()
+ logger.Info("Error get user dev", zap.Any("error", err))
+ return err
+ }
+
+ dataBreadcrumb, err := dmcu.DetailMcuServices.GetBreadcrumb(title)
+ if err != nil {
+ defer logger.Sync()
+ logger.Info("Error breadcrumb dev", zap.Any("error", err))
+ return err
+ }
+
+ breadcrumb := breadcrumadmin.MainBreadcrumbAdminV1(dataBreadcrumb)
+ navbaruser := navbarmenu.NavbarWithLogo(user)
+ sidbaruser := sidebaruserprofile.Navbaruserprofile(user)
+
+ content := dev_detailmcu.DetailMcuScreen(
+ breadcrumb,
+ )
+ css := dev_detailmcu.CSSDetailMcu()
+ js := dev_detailmcu.JSDetailMcu()
+
+ view := dev_detailmcu.ShowDetailMcu(
+ title,
+ content,
+ css,
+ js,
+ navbaruser,
+ sidbaruser,
+ )
+
+ return utils.View(c, view)
+}
diff --git a/handlers/routes.go b/handlers/routes.go
index 9327160..454ea45 100644
--- a/handlers/routes.go
+++ b/handlers/routes.go
@@ -240,6 +240,10 @@ func SetupRoutesDev(app *echo.Echo, appStore db.AppStore) {
dev.GET("/employeeanalytic/changepage", devEmplAnaHandler.HandlePagination)
dev.GET("/employeeanalytic/filter", devEmplAnaHandler.HandleFilter)
+ devDetailMcuService := dev_services.NewDetailMcuServices(appStore)
+ devDetailMcuHandler := dev_handlers.NewDetailMcuHandler(devDetailMcuService)
+ dev.GET("/detailmcu", devDetailMcuHandler.HandleShowDetailMcuScreen)
+
// group result
devGRServices := dev_services.NewServicesGroupResult(appStore)
devGRhandlers := dev_handlers.NewGroupResultHandler(devGRServices)
diff --git a/services/dev/detailmcu.services.go b/services/dev/detailmcu.services.go
new file mode 100644
index 0000000..f28684c
--- /dev/null
+++ b/services/dev/detailmcu.services.go
@@ -0,0 +1,37 @@
+package dev_services
+
+import (
+ "cpone/db"
+ "cpone/models"
+)
+
+type DetailMcuServices struct {
+ DetailMcuStore db.AppStore
+}
+
+func NewDetailMcuServices(uStore db.AppStore) *DetailMcuServices {
+ return &DetailMcuServices{
+ DetailMcuStore: uStore,
+ }
+}
+
+func (dmcu *DetailMcuServices) GetBreadcrumb(title string) (models.BreadCrumbV1, error) {
+ breadcrumb := models.BreadCrumbV1{
+ Title: title,
+ Item: []models.ItemBreadCrumbV1{
+ {
+ Item: "Dashboard",
+ Url: "/dev/dashboard",
+ },
+ {
+ Item: "Employee Health Medical Analytic",
+ Url: "/dev/employeeanalytic/",
+ },
+ {
+ Item: title,
+ Url: "",
+ },
+ },
+ }
+ return breadcrumb, nil
+}
diff --git a/views/dev/mcu/mcudetail.templ b/views/dev/mcu/mcudetail.templ
new file mode 100644
index 0000000..f1652a0
--- /dev/null
+++ b/views/dev/mcu/mcudetail.templ
@@ -0,0 +1,141 @@
+package dev_detailmcu
+
+import "cpone/layout"
+
+templ DetailMcuScreen(
+ breadcrumb templ.Component,
+) {
+
+}
+
+templ CSSDetailMcu() {
+
+
+
+
+}
+
+templ JSDetailMcu() {
+
+}
+
+templ ShowDetailMcu(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js templ.Component,
+ navbaruser templ.Component,
+ userprofile templ.Component,
+) {
+ @layout.EmployeeAnalyticLayout(title, css, js, navbaruser, userprofile) {
+ @cmp
+ }
+}
\ No newline at end of file
diff --git a/views/dev/mcu/mcudetail_templ.go b/views/dev/mcu/mcudetail_templ.go
new file mode 100644
index 0000000..c6ffeec
--- /dev/null
+++ b/views/dev/mcu/mcudetail_templ.go
@@ -0,0 +1,141 @@
+// Code generated by templ - DO NOT EDIT.
+
+// templ: version: v0.2.663
+package dev_detailmcu
+
+//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/layout"
+
+func DetailMcuScreen(
+ 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 = breadcrumb.Render(ctx, templ_7745c5c3_Buffer)
+ if templ_7745c5c3_Err != nil {
+ return templ_7745c5c3_Err
+ }
+ _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
Tab content 1
Tab content 2
Tab content 4
Tab content 5
")
+ 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 CSSDetailMcu() 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 JSDetailMcu() 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 ShowDetailMcu(
+ title string,
+ cmp templ.Component,
+ css templ.Component,
+ js 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.EmployeeAnalyticLayout(title, css, js, 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
+ })
+}
diff --git a/views/dev/mcu/tabviewdetailmcu.templ b/views/dev/mcu/tabviewdetailmcu.templ
new file mode 100644
index 0000000..435e83e
--- /dev/null
+++ b/views/dev/mcu/tabviewdetailmcu.templ
@@ -0,0 +1,37 @@
+package dev_detailmcu
+
+templ TabViewDetailMcu(
+
+) {
+
+
+
Tab content 1
+
Tab content 2
+
Tab content 4
+
Tab content 5
+
+}
\ No newline at end of file