diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala index 2fd5fc0..0b4187f 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala @@ -1,10 +1,18 @@ package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailParametru: - type ViewModel = SeznamParametru.Parametr - def render($m: Signal[ViewModel]): HtmlElement = + case class ViewModel( + id: String, + nazev: String, + popis: String, + status: String, + statusColor: Color, + a: Anchor + ) + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "pb-5 border-b border-gray-200", h2( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala index 2fd5fc0..0b4187f 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala @@ -1,10 +1,18 @@ package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailParametru: - type ViewModel = SeznamParametru.Parametr - def render($m: Signal[ViewModel]): HtmlElement = + case class ViewModel( + id: String, + nazev: String, + popis: String, + status: String, + statusColor: Color, + a: Anchor + ) + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "pb-5 border-b border-gray-200", h2( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala new file mode 100644 index 0000000..64ae492 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala @@ -0,0 +1,177 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs + +object DukazKriteria: + case class Osoba(osobniCislo: String, jmeno: String) + case class Udalost(osoba: Osoba, datum: LocalDate) + case class Dokument( + url: String, + nazev: String, + pridal: Udalost, + odebral: Option[Udalost] + ) + case class ViewModel( + dokumenty: List[Dokument], + autorizoval: Option[Udalost], + platiDo: Option[LocalDate], + poznámka: Option[String] + ) + def apply($m: Signal[ViewModel]): HtmlElement = + div( + cls := "bg-white shadow overflow-hidden sm:rounded-lg", + div( + cls := "px-4 py-5 sm:px-6", + h3( + cls := "text-lg leading-6 font-medium text-gray-900", + """Applicant Information""" + ), + p( + cls := "mt-1 max-w-2xl text-sm text-gray-500", + """Personal details and application.""" + ) + ), + div( + cls := "border-t border-gray-200 px-4 py-5 sm:px-6", + dl( + cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Full name""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Margot Foster""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Application for""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Backend Developer""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Email address""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """margotfoster@example.com""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Salary expectation""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """$120,000""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """About""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """Attachments""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + ul( + role := "list", + cls := "border border-gray-200 rounded-md divide-y divide-gray-200", + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """resume_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ), + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """coverletter_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ) + ) + ) + ) + ) + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala index 2fd5fc0..0b4187f 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala @@ -1,10 +1,18 @@ package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailParametru: - type ViewModel = SeznamParametru.Parametr - def render($m: Signal[ViewModel]): HtmlElement = + case class ViewModel( + id: String, + nazev: String, + popis: String, + status: String, + statusColor: Color, + a: Anchor + ) + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "pb-5 border-b border-gray-200", h2( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala new file mode 100644 index 0000000..64ae492 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala @@ -0,0 +1,177 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs + +object DukazKriteria: + case class Osoba(osobniCislo: String, jmeno: String) + case class Udalost(osoba: Osoba, datum: LocalDate) + case class Dokument( + url: String, + nazev: String, + pridal: Udalost, + odebral: Option[Udalost] + ) + case class ViewModel( + dokumenty: List[Dokument], + autorizoval: Option[Udalost], + platiDo: Option[LocalDate], + poznámka: Option[String] + ) + def apply($m: Signal[ViewModel]): HtmlElement = + div( + cls := "bg-white shadow overflow-hidden sm:rounded-lg", + div( + cls := "px-4 py-5 sm:px-6", + h3( + cls := "text-lg leading-6 font-medium text-gray-900", + """Applicant Information""" + ), + p( + cls := "mt-1 max-w-2xl text-sm text-gray-500", + """Personal details and application.""" + ) + ), + div( + cls := "border-t border-gray-200 px-4 py-5 sm:px-6", + dl( + cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Full name""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Margot Foster""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Application for""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Backend Developer""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Email address""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """margotfoster@example.com""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Salary expectation""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """$120,000""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """About""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """Attachments""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + ul( + role := "list", + cls := "border border-gray-200 rounded-md divide-y divide-gray-200", + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """resume_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ), + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """coverletter_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ) + ) + ) + ) + ) + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala new file mode 100644 index 0000000..a20bbcd --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala @@ -0,0 +1,29 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Icons + +object DukazyKriterii: + type ViewModel = List[DukazKriteria.ViewModel] + def apply($m: Signal[ViewModel]): HtmlElement = + div( + child.maybe <-- $m.map(m => + if (m.isEmpty) then Some(prazdnyDukaz) else None + ), + children <-- $m.map(_.zipWithIndex).split(_._2)((_, _, $s) => + DukazKriteria($s.map(_._1)) + ) + ) + + private def prazdnyDukaz: HtmlElement = + button( + tpe := "button", + cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", + Icons.outline + .`document-add`(12) + .amend(svg.cls := "mx-auto text-gray-400"), + span( + cls := "mt-2 block text-sm font-medium text-gray-900", + "Přidat důkaz" + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala index 2fd5fc0..0b4187f 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala @@ -1,10 +1,18 @@ package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailParametru: - type ViewModel = SeznamParametru.Parametr - def render($m: Signal[ViewModel]): HtmlElement = + case class ViewModel( + id: String, + nazev: String, + popis: String, + status: String, + statusColor: Color, + a: Anchor + ) + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "pb-5 border-b border-gray-200", h2( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala new file mode 100644 index 0000000..64ae492 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala @@ -0,0 +1,177 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs + +object DukazKriteria: + case class Osoba(osobniCislo: String, jmeno: String) + case class Udalost(osoba: Osoba, datum: LocalDate) + case class Dokument( + url: String, + nazev: String, + pridal: Udalost, + odebral: Option[Udalost] + ) + case class ViewModel( + dokumenty: List[Dokument], + autorizoval: Option[Udalost], + platiDo: Option[LocalDate], + poznámka: Option[String] + ) + def apply($m: Signal[ViewModel]): HtmlElement = + div( + cls := "bg-white shadow overflow-hidden sm:rounded-lg", + div( + cls := "px-4 py-5 sm:px-6", + h3( + cls := "text-lg leading-6 font-medium text-gray-900", + """Applicant Information""" + ), + p( + cls := "mt-1 max-w-2xl text-sm text-gray-500", + """Personal details and application.""" + ) + ), + div( + cls := "border-t border-gray-200 px-4 py-5 sm:px-6", + dl( + cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Full name""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Margot Foster""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Application for""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Backend Developer""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Email address""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """margotfoster@example.com""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Salary expectation""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """$120,000""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """About""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """Attachments""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + ul( + role := "list", + cls := "border border-gray-200 rounded-md divide-y divide-gray-200", + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """resume_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ), + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """coverletter_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ) + ) + ) + ) + ) + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala new file mode 100644 index 0000000..a20bbcd --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala @@ -0,0 +1,29 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Icons + +object DukazyKriterii: + type ViewModel = List[DukazKriteria.ViewModel] + def apply($m: Signal[ViewModel]): HtmlElement = + div( + child.maybe <-- $m.map(m => + if (m.isEmpty) then Some(prazdnyDukaz) else None + ), + children <-- $m.map(_.zipWithIndex).split(_._2)((_, _, $s) => + DukazKriteria($s.map(_._1)) + ) + ) + + private def prazdnyDukaz: HtmlElement = + button( + tpe := "button", + cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", + Icons.outline + .`document-add`(12) + .amend(svg.cls := "mx-auto text-gray-400"), + span( + cls := "mt-2 block text-sm font-medium text-gray-900", + "Přidat důkaz" + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala index 4a08fb2..6eb385c 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala @@ -9,31 +9,11 @@ import java.time.LocalDate object SeznamKriterii: - case class Dokument(nazev: String, url: String) - case class Osoba(osobniCislo: String, jmeno: String) - case class Dukaz( - dokumenty: List[Dokument], - autorizoval: Option[Osoba], - autorizovano: Option[LocalDate], - poznámka: Option[String] - ) - case class Kriterium( - nazev: String, - kapitola: String, - bod: String, - status: String, - statusColor: Color, - splneno: Boolean, - dukaz: Option[Dukaz], - container: HtmlElement = div() - ) { - val id = s"${kapitola}${bod}" - } - type ViewModel = List[Kriterium] + type ViewModel = List[DetailKriteria.ViewModel] - private val kritList = new StackedList[Kriterium] + private val kritList = new StackedList[DetailKriteria.ViewModel] - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "bg-white shadow overflow-hidden sm:rounded-md", kritList($m, _.id) { $i => diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala index f700b30..d2eef62 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/DetailKriteriaPageConnector.scala @@ -46,7 +46,7 @@ def apply: HtmlElement = AppPage(state.actionBus)( $merged.map(_.map(buildModel)) - .split(_ => ())((_, _, s) => DetailKriteriaPage.render(s)), + .split(_ => ())((_, _, s) => DetailKriteriaPage(s)), $pageChangeSignal --> state.actionBus ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala index de2ad4d..b100914 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/connectors/conversions.scala @@ -9,6 +9,8 @@ import cz.e_bs.cmi.mdr.pdb.ParameterCriteria import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.SeznamKriterii import cz.e_bs.cmi.mdr.pdb.app.pages.directory.components.UserRow +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailParametru +import cz.e_bs.cmi.mdr.pdb.app.pages.detail.components.DetailKriteria extension (o: UserInfo) def toDetailOsoby: DetailOsoby.ViewModel = @@ -27,8 +29,8 @@ ) extension (param: Parameter) - def toParametr(container: Parameter => Anchor): SeznamParametru.Parametr = - SeznamParametru.Parametr( + def toParametr(container: Parameter => Anchor): DetailParametru.ViewModel = + DetailParametru.ViewModel( id = param.id, nazev = param.name, popis = param.description, @@ -40,15 +42,15 @@ extension (crit: ParameterCriteria) def toKriterium( container: ParameterCriteria => Anchor - ): SeznamKriterii.Kriterium = - SeznamKriterii.Kriterium( + ): DetailKriteria.ViewModel = + DetailKriteria.ViewModel( nazev = crit.criteriumText, kapitola = crit.chapterId, bod = crit.itemId, status = "Nesplněno", statusColor = Color.red, splneno = false, - dukaz = None, + dukazy = Nil, container = container(crit) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala index 48d338b..6f43792 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailKriteriaPage.scala @@ -8,17 +8,17 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, - kriterium: SeznamKriterii.Kriterium + parametr: DetailParametru.ViewModel, + kriterium: DetailKriteria.ViewModel ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), DetailKriteria($m.map(_.kriterium)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala index c840fe2..15ca387 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailPage.scala @@ -19,7 +19,7 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), + DetailOsoby($m.map(_.osoba)), SeznamParametru($m.map(_.parametry)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala index ae7a965..b414140 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/DetailParametruPage.scala @@ -8,7 +8,7 @@ case class ViewModel( osoba: DetailOsoby.ViewModel, - parametr: SeznamParametru.Parametr, + parametr: DetailParametru.ViewModel, kriteria: SeznamKriterii.ViewModel ) @@ -17,8 +17,8 @@ cls := "max-w-7xl mx-auto px-4 py-6 sm:px-6 lg:px-8", div( cls := "flex flex-col space-y-4", - DetailOsoby.render($m.map(_.osoba)), - DetailParametru.render($m.map(_.parametr)), - SeznamKriterii.render($m.map(_.kriteria)) + DetailOsoby($m.map(_.osoba)), + DetailParametru($m.map(_.parametr)), + SeznamKriterii($m.map(_.kriteria)) ) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala index 20ada23..c67bb24 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailKriteria.scala @@ -3,185 +3,28 @@ import com.raquo.laminar.api.L.{*, given} import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs import cz.e_bs.cmi.mdr.pdb.app.components.Icons +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailKriteria: - type ViewModel = SeznamKriterii.Kriterium + case class ViewModel( + nazev: String, + kapitola: String, + bod: String, + status: String, + statusColor: Color, + splneno: Boolean, + dukazy: List[DukazKriteria.ViewModel], + container: HtmlElement = div() + ) { + val id = s"${kapitola}${bod}" + } + def apply($m: Signal[ViewModel]): HtmlElement = div( h3( cls := "text-l font-bold text-gray-900", child.text <-- $m.map(_.nazev) ), - child <-- $m.map(_.dukaz) - .split(_ => ())((_, _, $d) => - div( - cls := "bg-white shadow overflow-hidden sm:rounded-lg", - div( - cls := "px-4 py-5 sm:px-6", - h3( - cls := "text-lg leading-6 font-medium text-gray-900", - """Applicant Information""" - ), - p( - cls := "mt-1 max-w-2xl text-sm text-gray-500", - """Personal details and application.""" - ) - ), - div( - cls := "border-t border-gray-200 px-4 py-5 sm:px-6", - dl( - cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Full name""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Margot Foster""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Application for""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Backend Developer""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Email address""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """margotfoster@example.com""" - ) - ), - div( - cls := "sm:col-span-1", - dt( - cls := "text-sm font-medium text-gray-500", - """Salary expectation""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """$120,000""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """About""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" - ) - ), - div( - cls := "sm:col-span-2", - dt( - cls := "text-sm font-medium text-gray-500", - """Attachments""" - ), - dd( - cls := "mt-1 text-sm text-gray-900", - ul( - role := "list", - cls := "border border-gray-200 rounded-md divide-y divide-gray-200", - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """resume_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ), - li( - cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", - div( - cls := "w-0 flex-1 flex items-center", { - import svg.* - import CustomAttrs.svg.ariaHidden - svg( - cls := "flex-shrink-0 h-5 w-5 text-gray-400", - xmlns := "http://www.w3.org/2000/svg", - viewBox := "0 0 20 20", - fill := "currentColor", - ariaHidden := true, - path( - fillRule := "evenodd", - d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", - clipRule := "evenodd" - ) - ) - }, - span( - cls := "ml-2 flex-1 w-0 truncate", - """coverletter_back_end_developer.pdf""" - ) - ), - div( - cls := "ml-4 flex-shrink-0", - a( - href := "#", - cls := "font-medium text-indigo-600 hover:text-indigo-500", - """Download""" - ) - ) - ) - ) - ) - ) - ) - ) - ) - ) - .map(_.getOrElse(prazdnyDukaz)) - ) - - private def prazdnyDukaz: HtmlElement = - button( - tpe := "button", - cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", - Icons.outline - .`document-add`(12) - .amend(svg.cls := "mx-auto text-gray-400"), - span( - cls := "mt-2 block text-sm font-medium text-gray-900", - "Přidat důkaz" - ) + DukazyKriterii($m.map(_.dukazy)) ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala index 4d90453..4855717 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailOsoby.scala @@ -57,7 +57,7 @@ pracovniPomer: Option[PracovniPomer.ViewModel] ) - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "md:flex md:items-center md:justify-between md:space-x-5", div( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala index 2fd5fc0..0b4187f 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DetailParametru.scala @@ -1,10 +1,18 @@ package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Color object DetailParametru: - type ViewModel = SeznamParametru.Parametr - def render($m: Signal[ViewModel]): HtmlElement = + case class ViewModel( + id: String, + nazev: String, + popis: String, + status: String, + statusColor: Color, + a: Anchor + ) + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "pb-5 border-b border-gray-200", h2( diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala new file mode 100644 index 0000000..64ae492 --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazKriteria.scala @@ -0,0 +1,177 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import java.time.LocalDate +import cz.e_bs.cmi.mdr.pdb.app.components.CustomAttrs + +object DukazKriteria: + case class Osoba(osobniCislo: String, jmeno: String) + case class Udalost(osoba: Osoba, datum: LocalDate) + case class Dokument( + url: String, + nazev: String, + pridal: Udalost, + odebral: Option[Udalost] + ) + case class ViewModel( + dokumenty: List[Dokument], + autorizoval: Option[Udalost], + platiDo: Option[LocalDate], + poznámka: Option[String] + ) + def apply($m: Signal[ViewModel]): HtmlElement = + div( + cls := "bg-white shadow overflow-hidden sm:rounded-lg", + div( + cls := "px-4 py-5 sm:px-6", + h3( + cls := "text-lg leading-6 font-medium text-gray-900", + """Applicant Information""" + ), + p( + cls := "mt-1 max-w-2xl text-sm text-gray-500", + """Personal details and application.""" + ) + ), + div( + cls := "border-t border-gray-200 px-4 py-5 sm:px-6", + dl( + cls := "grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2", + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Full name""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Margot Foster""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Application for""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Backend Developer""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Email address""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """margotfoster@example.com""" + ) + ), + div( + cls := "sm:col-span-1", + dt( + cls := "text-sm font-medium text-gray-500", + """Salary expectation""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """$120,000""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """About""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + """Fugiat ipsum ipsum deserunt culpa aute sint do nostrud anim incididunt cillum culpa consequat. Excepteur qui ipsum aliquip consequat sint. Sit id mollit nulla mollit nostrud in ea officia proident. Irure nostrud pariatur mollit ad adipisicing reprehenderit deserunt qui eu.""" + ) + ), + div( + cls := "sm:col-span-2", + dt( + cls := "text-sm font-medium text-gray-500", + """Attachments""" + ), + dd( + cls := "mt-1 text-sm text-gray-900", + ul( + role := "list", + cls := "border border-gray-200 rounded-md divide-y divide-gray-200", + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """resume_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ), + li( + cls := "pl-3 pr-4 py-3 flex items-center justify-between text-sm", + div( + cls := "w-0 flex-1 flex items-center", { + import svg.* + import CustomAttrs.svg.ariaHidden + svg( + cls := "flex-shrink-0 h-5 w-5 text-gray-400", + xmlns := "http://www.w3.org/2000/svg", + viewBox := "0 0 20 20", + fill := "currentColor", + ariaHidden := true, + path( + fillRule := "evenodd", + d := "M8 4a3 3 0 00-3 3v4a5 5 0 0010 0V7a1 1 0 112 0v4a7 7 0 11-14 0V7a5 5 0 0110 0v4a3 3 0 11-6 0V7a1 1 0 012 0v4a1 1 0 102 0V7a3 3 0 00-3-3z", + clipRule := "evenodd" + ) + ) + }, + span( + cls := "ml-2 flex-1 w-0 truncate", + """coverletter_back_end_developer.pdf""" + ) + ), + div( + cls := "ml-4 flex-shrink-0", + a( + href := "#", + cls := "font-medium text-indigo-600 hover:text-indigo-500", + """Download""" + ) + ) + ) + ) + ) + ) + ) + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala new file mode 100644 index 0000000..a20bbcd --- /dev/null +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/DukazyKriterii.scala @@ -0,0 +1,29 @@ +package cz.e_bs.cmi.mdr.pdb.app.pages.detail.components + +import com.raquo.laminar.api.L.{*, given} +import cz.e_bs.cmi.mdr.pdb.app.components.Icons + +object DukazyKriterii: + type ViewModel = List[DukazKriteria.ViewModel] + def apply($m: Signal[ViewModel]): HtmlElement = + div( + child.maybe <-- $m.map(m => + if (m.isEmpty) then Some(prazdnyDukaz) else None + ), + children <-- $m.map(_.zipWithIndex).split(_._2)((_, _, $s) => + DukazKriteria($s.map(_._1)) + ) + ) + + private def prazdnyDukaz: HtmlElement = + button( + tpe := "button", + cls := "relative block w-full border-2 border-gray-300 border-dashed rounded-lg p-12 text-center hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500", + Icons.outline + .`document-add`(12) + .amend(svg.cls := "mx-auto text-gray-400"), + span( + cls := "mt-2 block text-sm font-medium text-gray-900", + "Přidat důkaz" + ) + ) diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala index 4a08fb2..6eb385c 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamKriterii.scala @@ -9,31 +9,11 @@ import java.time.LocalDate object SeznamKriterii: - case class Dokument(nazev: String, url: String) - case class Osoba(osobniCislo: String, jmeno: String) - case class Dukaz( - dokumenty: List[Dokument], - autorizoval: Option[Osoba], - autorizovano: Option[LocalDate], - poznámka: Option[String] - ) - case class Kriterium( - nazev: String, - kapitola: String, - bod: String, - status: String, - statusColor: Color, - splneno: Boolean, - dukaz: Option[Dukaz], - container: HtmlElement = div() - ) { - val id = s"${kapitola}${bod}" - } - type ViewModel = List[Kriterium] + type ViewModel = List[DetailKriteria.ViewModel] - private val kritList = new StackedList[Kriterium] + private val kritList = new StackedList[DetailKriteria.ViewModel] - def render($m: Signal[ViewModel]): HtmlElement = + def apply($m: Signal[ViewModel]): HtmlElement = div( cls := "bg-white shadow overflow-hidden sm:rounded-md", kritList($m, _.id) { $i => diff --git a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamParametru.scala b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamParametru.scala index 51fb8d8..f9e8390 100644 --- a/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamParametru.scala +++ b/app/src/main/scala/cz/e_bs/cmi/mdr/pdb/app/pages/detail/components/SeznamParametru.scala @@ -13,17 +13,9 @@ import cz.e_bs.cmi.mdr.pdb.app.components.LinkSupport.* object SeznamParametru: - case class Parametr( - id: String, - nazev: String, - popis: String, - status: String, - statusColor: Color, - a: Anchor - ) - type ViewModel = List[Parametr] + type ViewModel = List[DetailParametru.ViewModel] - private val parametrList = new StackedList[Parametr] + private val parametrList = new StackedList[DetailParametru.ViewModel] def apply($m: Signal[ViewModel]): HtmlElement = div(