Do not allow modification of read only RRs.

beta
Philippe Pittoli 2024-02-21 00:10:40 +01:00
parent 926f461a51
commit 419d68784a
2 changed files with 40 additions and 7 deletions

View File

@ -35,6 +35,7 @@ import Halogen.HTML as HH
import Halogen.HTML.Properties as HP import Halogen.HTML.Properties as HP
import Bulma as Bulma import Bulma as Bulma
import CSSClasses as C
import App.AcceptedRRTypes (AcceptedRRTypes(..)) import App.AcceptedRRTypes (AcceptedRRTypes(..))
import App.ResourceRecord (ResourceRecord) import App.ResourceRecord (ResourceRecord)
@ -729,7 +730,9 @@ render_resources records
emptyline = HH.tr_ [ Bulma.txt_name "", HH.td_ [], HH.td_ [], HH.td_ [], HH.td_ [], HH.td_ [] ] emptyline = HH.tr_ [ Bulma.txt_name "", HH.td_ [], HH.td_ [], HH.td_ [], HH.td_ [], HH.td_ [] ]
table_content records_ = HH.tbody_ $ map rows records_ table_content records_ = HH.tbody_ $ map rows records_
rows rr = HH.tr_ $ render_row rr -- <> error_row rr rows rr = if rr.readonly
then HH.tr [ HP.classes C.has_background_warning_light ] $ render_row rr -- <> error_row rr
else HH.tr_ $ render_row rr -- <> error_row rr
render_row :: ResourceRecord -> Array (HH.HTML w Action) render_row :: ResourceRecord -> Array (HH.HTML w Action)
render_row rr = render_row rr =
@ -743,8 +746,12 @@ render_resources records
, HH.td_ [ Bulma.p $ maybe "" show rr.weight ] , HH.td_ [ Bulma.p $ maybe "" show rr.weight ]
, HH.td_ [ Bulma.p $ maybe "" show rr.port ] , HH.td_ [ Bulma.p $ maybe "" show rr.port ]
, HH.td_ [ Bulma.p rr.target ] , HH.td_ [ Bulma.p rr.target ]
, HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ] , if rr.readonly
, HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ] then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ]
, if rr.readonly
then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ]
] ]
"MX" -> "MX" ->
[ Bulma.txt_name rr.rrtype [ Bulma.txt_name rr.rrtype
@ -752,16 +759,24 @@ render_resources records
, HH.td_ [ Bulma.p $ show rr.ttl ] , HH.td_ [ Bulma.p $ show rr.ttl ]
, HH.td_ [ Bulma.p $ maybe "" show rr.priority ] , HH.td_ [ Bulma.p $ maybe "" show rr.priority ]
, HH.td_ [ Bulma.p rr.target ] , HH.td_ [ Bulma.p rr.target ]
, HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ] , if rr.readonly
, HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ] then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ]
, if rr.readonly
then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ]
] ]
_ -> _ ->
[ Bulma.txt_name rr.rrtype [ Bulma.txt_name rr.rrtype
, HH.td_ [ Bulma.p rr.name] , HH.td_ [ Bulma.p rr.name]
, HH.td_ [ Bulma.p $ show rr.ttl ] , HH.td_ [ Bulma.p $ show rr.ttl ]
, HH.td_ [ Bulma.p rr.target ] , HH.td_ [ Bulma.p rr.target ]
, HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ] , if rr.readonly
, HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ] then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_modify (CreateUpdateRRModal rr.rrid) ]
, if rr.readonly
then HH.td_ [ Bulma.btn_readonly ]
else HH.td_ [ Bulma.btn_delete (DeleteRRModal rr.rrid) ]
] ]
baseRecords :: Array String baseRecords :: Array String

View File

@ -138,6 +138,21 @@ btn_add action = btn_ C.is_info "Add" action
btn_delete :: forall w i. i -> HH.HTML w i btn_delete :: forall w i. i -> HH.HTML w i
btn_delete action = btn_ (C.is_small <> C.is_danger) "remove" action btn_delete action = btn_ (C.is_small <> C.is_danger) "remove" action
btn_modify_ro :: forall w i. HH.HTML w i
btn_modify_ro = btn_ro (C.is_small <> C.is_warning) "modify"
btn_readonly :: forall w i. HH.HTML w i
btn_readonly = btn_ro (C.is_small <> C.is_warning) "read only"
btn_delete_ro :: forall w i. HH.HTML w i
btn_delete_ro = btn_ro (C.is_small <> C.is_warning) "remove"
btn_ro :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
btn_ro classes title
= HH.button
[ HP.classes $ C.button <> classes
] [ HH.text title ]
-- | Create a `level`, different components that should appear on the same horizontal line. -- | Create a `level`, different components that should appear on the same horizontal line.
-- | First argument, elements that should appear on the left, second on the right. -- | First argument, elements that should appear on the left, second on the right.
level :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i level :: forall w i. Array (HH.HTML w i) -> Array (HH.HTML w i) -> HH.HTML w i
@ -174,11 +189,14 @@ render_input password id placeholder action value cond
false -> [] false -> []
true -> [ HP.type_ HP.InputPassword ] true -> [ HP.type_ HP.InputPassword ]
div_field :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
div_field = HH.div [HP.classes (C.field <> C.is_horizontal)] div_field = HH.div [HP.classes (C.field <> C.is_horizontal)]
div_field_label :: forall w i. String -> String -> HH.HTML w i
div_field_label id title = HH.div [HP.classes (C.field_label <> C.normal)] div_field_label id title = HH.div [HP.classes (C.field_label <> C.normal)]
[HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]] [HH.label [ HP.classes C.label, HP.for id ] [ HH.text title ]]
div_field_content :: forall w i. HH.HTML w i -> HH.HTML w i
div_field_content content div_field_content content
= HH.div [ HP.classes C.field_body ] = HH.div [ HP.classes C.field_body ]
[ HH.div [HP.classes C.field ] [ HH.div [HP.classes C.control ] [ content ] ] ] [ HH.div [HP.classes C.field ] [ HH.div [HP.classes C.control ] [ content ] ] ]