Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
RaphaelGauthier committed Sep 28, 2021
1 parent 3c048dd commit da16f12
Show file tree
Hide file tree
Showing 8 changed files with 132 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -162,16 +162,27 @@ type SortBy
| Status
| Compliance

type alias RuleFilters =
type alias TableFilters =
{ sortBy : SortBy
, sortOrder : Bool
, filter : String
}


type alias TreeFilters =
{ filter : String
, folded : List String
}

type alias TabFilters =
{ tableFilters : TableFilters
, treeFilters : TreeFilters
}

type alias UI =
{ ruleFilters : RuleFilters
, modal : ModalState
, hasWriteRights: Bool
{ ruleFilters : TableFilters
, directiveFilters : TabFilters
, modal : ModalState
, hasWriteRights : Bool
}

type alias Model =
Expand Down Expand Up @@ -217,3 +228,4 @@ type Msg
| ClosePopup Msg
| Ignore
| UpdateRuleFilters SortBy
| UpdateDirTableFilters TableFilters
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ init : { contextPath : String, hasWriteRights : Bool } -> ( Model, Cmd Msg )
init flags =
let

initCategory = Category "" "" "" (SubCategories []) []
initRuleFilters = RuleFilters Name True ""
initUI = UI initRuleFilters NoModal flags.hasWriteRights
initCategory = Category "" "" "" (SubCategories []) []
initRuleFilters = TableFilters Name True ""
initDirectiveFilters = TabFilters (TableFilters Name True "") (TreeFilters "" [])
initUI = UI initRuleFilters initDirectiveFilters NoModal flags.hasWriteRights
initModel = Model flags.contextPath Loading "" initCategory initCategory initCategory [] [] initUI

listInitActions =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -321,6 +321,12 @@ update msg model =
in
({model | ui = { ui | ruleFilters = filters}}, Cmd.none)

UpdateDirTableFilters tableFilters ->
let
ui = model.ui
directiveFilters = ui.directiveFilters
in
({model | ui = { ui | directiveFilters = {directiveFilters | tableFilters = tableFilters}}}, Cmd.none)

processApiError : String -> Error -> Model -> ( Model, Cmd Msg )
processApiError apiName err model =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import ViewRulesTable exposing (..)
import ViewRuleDetails exposing (..)
import ViewCategoryDetails exposing (..)


view : Model -> Html Msg
view model =
let
Expand All @@ -39,13 +40,13 @@ view model =
ruleTreeCategory item =
let
categories = getSubElems item
|> List.sortBy .name
|> List.map ruleTreeCategory
|> List.sortBy .name
|> List.map ruleTreeCategory
rules = item.elems
|> List.sortBy .name
|> List.map ruleTreeElem
|> List.sortBy .name
|> List.map ruleTreeElem

childsList = ul[class "jstree-children"] (List.concat [ categories, rules] )
childsList = ul[class "jstree-children"] (List.concat [ categories, rules] )

in
li[class "jstree-node jstree-open"]
Expand Down Expand Up @@ -84,9 +85,9 @@ view model =
]
]
, tbody [] (buildRulesTable model)
]
]
]
]

RuleForm details ->
(editionTemplate model details)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import Html.Events exposing (onClick)
import List.Extra
import List
import String
import ViewUtilsCompliance exposing (buildComplianceBar, getAllComplianceValues)
import ViewUtilsCompliance exposing (buildComplianceBar, getAllComplianceValues, getRuleCompliance)

--
-- This file contains all methods to display the Rules table
Expand All @@ -28,10 +28,6 @@ getCategoryName model id =
Just c -> c.name
Nothing -> id

getRuleCompliance : Model -> RuleId -> Maybe RuleCompliance
getRuleCompliance model rId =
List.Extra.find (\c -> c.ruleId == rId) model.rulesCompliance

getSortFunction : Model -> Rule -> Rule -> Order
getSortFunction model r1 r2 =
let
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import Maybe.Extra
import String exposing ( fromFloat)
import NaturalOrdering exposing (compareOn)
import ApiCalls exposing (..)
import ViewUtilsCompliance exposing (buildComplianceBar)

import ViewUtilsCompliance exposing (getRuleCompliance, buildComplianceBar)
import ViewUtils exposing (thClass, sortTable, getDirectivesSortFunction)
--
-- This file contains all methods to display the details of the selected rule.
--
Expand Down Expand Up @@ -178,6 +178,17 @@ tabContent model details =
let
buildTableRow : DirectiveId -> Html Msg
buildTableRow id =
{--
case getRuleCompliance model rule.id of
Just rc ->
let
ruleCompliance = getRuleCompliance model rule.id
directives = List.filter (\d -> List.member d.directiveId rule.directives) rc.directives
sortedDirectivesList = List.sortWith (getDirectivesSortFunction model) directives
in
List.map buildTableRow sortedDirectivesList
Nothing -> []
--}
let
directive = List.Extra.find (.id >> (==) id) model.directives
rowDirective = case directive of
Expand Down Expand Up @@ -238,6 +249,7 @@ tabContent model details =
]
in
List.map rowDirective directives

in

if not details.ui.editDirectives then
Expand All @@ -251,15 +263,21 @@ tabContent model details =
)
]
, div [class "table-header"]
[ input [type_ "text", placeholder "Filter", class "input-sm form-control"][]
[ input [type_ "text", placeholder "Filter", class "input-sm form-control", value model.ui.directiveFilters.tableFilters.filter
, onInput (\s ->
let
tableFilters = model.ui.directiveFilters.tableFilters
in
UpdateDirTableFilters {tableFilters | filter = s}
)][]
, button [class "btn btn-primary btn-sm"][text "Refresh"]
]
, div[class "table-container"]
[ table [class "dataTable"]
[ thead[]
[ tr[class "head"]
[ th [class "sorting_asc"][text "Directive" ]
, th [class "sorting" ][text "Compliance"]
[ th [class (thClass model.ui.directiveFilters.tableFilters Name ), onClick (UpdateDirTableFilters (sortTable model Name ))][text "Directive" ]
, th [class (thClass model.ui.directiveFilters.tableFilters Compliance), onClick (UpdateDirTableFilters (sortTable model Compliance ))][text "Compliance"]
]
]
, tbody[]
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
module ViewUtils exposing (..)

import DataTypes exposing (..)
import Html exposing (Html, button, div, i, span, text, h1, h3, h4, ul, li, table, thead, tbody, tr, th, td)
import Html.Attributes exposing (id, class, type_, placeholder, value, for, href, colspan, rowspan, style, selected, disabled, attribute, tabindex)
import Html.Events exposing (onClick, onInput)
import List.Extra
import List
import String exposing ( fromFloat)
import NaturalOrdering exposing (compareOn)
import ApiCalls exposing (..)

-- import ViewUtils exposing (sortTable, thClass, getDirectivesSortFunction)
thClass : TableFilters -> SortBy -> String
thClass tableFilters sortBy =
if sortBy == tableFilters.sortBy then
if (tableFilters.sortOrder == True) then
"sorting_asc"
else
"sorting_desc"
else
"sorting"

sortTable : Model -> SortBy -> TableFilters
sortTable model sortBy =
let
tableFilters = model.ui.directiveFilters.tableFilters
filters =
if sortBy == tableFilters.sortBy then
{tableFilters | sortOrder = not tableFilters.sortOrder}
else
{tableFilters | sortBy = sortBy, sortOrder = True}
in
filters

getDirectivesSortFunction : Model -> Directive -> Directive -> Order
getDirectivesSortFunction model d1 d2 =
let
order = case model.ui.ruleFilters.sortBy of
Name -> compare d1.displayName d2.displayName
Compliance -> LT
{--
let
getCompliance : Maybe RuleCompliance -> Float
getCompliance rc =
case rc of
Just c ->
let
allComplianceValues = getAllComplianceValues c.complianceDetails
in
if ( allComplianceValues.okStatus + allComplianceValues.nonCompliant + allComplianceValues.error + allComplianceValues.unexpected + allComplianceValues.pending + allComplianceValues.reportsDisabled + allComplianceValues.noReport == 0 ) then
-1.0
else
c.compliance
Nothing -> -2.0
d1Compliance = getCompliance (getRuleCompliance model d1.id)
d2Compliance = getCompliance (getRuleCompliance model d2.id)
in
compare d1Compliance d2Compliance
--}
_ -> LT
in
if model.ui.ruleFilters.sortOrder == True then
order
else
case order of
LT -> GT
EQ -> EQ
GT -> LT
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ getValueCompliance f =
Just v -> v
Nothing -> 0


getRuleCompliance : Model -> RuleId -> Maybe RuleCompliance
getRuleCompliance model rId =
List.Extra.find (\c -> c.ruleId == rId) model.rulesCompliance

getAllComplianceValues : ComplianceDetails -> {okStatus : Float, nonCompliant : Float, error : Float, unexpected : Float, pending : Float, reportsDisabled : Float, noReport : Float}
getAllComplianceValues complianceDetails =
let
Expand Down

0 comments on commit da16f12

Please sign in to comment.