Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
RaphaelGauthier committed Dec 21, 2023
1 parent 6fbe00e commit 68097e7
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 4 deletions.
Expand Up @@ -9,7 +9,7 @@ import Time.ZonedDateTime exposing (ZonedDateTime)
import Url
import Url.Builder exposing (QueryParameter, int, string)

import ChangeRequest exposing (changeRequestParameters, decodeGetChangeRequestSettings)
import ChangeRequest exposing (changeRequestParameters, decodeGetChangeRequestSettings, decodePendingChangeRequests)

--
-- This files contains all API calls for the Rules UI
Expand Down Expand Up @@ -111,6 +111,21 @@ getCrSettings model =
in
req

getPendingChangeRequests : Model -> RuleId -> Cmd Msg
getPendingChangeRequests model ruleId =
let
req =
request
{ method = "GET"
, headers = []
, url = getUrl model [ "changeRequests" ] [string "status" "open"] -- string "ruleId" ruleId
, body = emptyBody
, expect = expectJson GetPendingChangeRequests decodePendingChangeRequests
, timeout = Nothing
, tracker = Nothing
}
in
req

getGroupsTree : Model -> Cmd Msg
getGroupsTree model =
Expand Down
Expand Up @@ -7,6 +7,14 @@ import Url.Builder
--
-- Module to handle change request settings
--
type Status = Unknown | Cancelled | Open | PendingValidation | PendingDeployment | Deployed

type alias ChangeRequest =
{ id : Int
, name : String
, description : String
, status : Status
}

type alias ChangeRequestSettings =
{ enableChangeMessage : Bool
Expand All @@ -16,6 +24,7 @@ type alias ChangeRequestSettings =
, changeRequestName : String
, message : String
, displayMessagePrompt : Bool
, pendingChangeRequests : List ChangeRequest
}

decodeGetChangeRequestSettings : Decoder ChangeRequestSettings
Expand All @@ -32,6 +41,30 @@ decodeChangeRequestSettings =
|> hardcoded ""
|> hardcoded ""
|> hardcoded False
|> hardcoded []

decodePendingChangeRequests : Decoder (List ChangeRequest)
decodePendingChangeRequests =
at [ "data" ] (list decodeChangeRequest)

decodeChangeRequest : Decoder ChangeRequest
decodeChangeRequest =
succeed ChangeRequest
|> required "id" int
|> required "displayName" string
|> required "description" string
|> required "status" ( string |> andThen (\s -> toStatus s) )

toStatus : String -> Decoder Status
toStatus str =
succeed ( case str of
"Deployed" -> Deployed
"Pending deployment" -> PendingDeployment
"Cancelled" -> Cancelled
"Pending validation" -> PendingValidation
"Open" -> Open
_ -> Unknown
)

changeRequestParameters: Maybe ChangeRequestSettings -> List Url.Builder.QueryParameter
changeRequestParameters changeRequestSettings =
Expand Down
Expand Up @@ -4,7 +4,7 @@ import Dict exposing (Dict)
import Http exposing (Error)
import Time.ZonedDateTime exposing (ZonedDateTime)

import ChangeRequest exposing (ChangeRequestSettings)
import ChangeRequest exposing (ChangeRequestSettings, ChangeRequest)
--
-- All our data types
--
Expand Down Expand Up @@ -320,6 +320,7 @@ type Msg
| GetRuleDetailsResult (Result Error Rule)
| GetPolicyModeResult (Result Error String)
| GetChangeRequestSettings (Result Error ChangeRequestSettings)
| GetPendingChangeRequests (Result Error (List ChangeRequest))
| GetCategoryDetailsResult (Result Error (Category Rule))
| GetRulesComplianceResult (Result Error (List RuleComplianceGlobal))
| GetRuleNodesDirectivesResult RuleId (Result Error RuleNodesDirectives)
Expand Down
Expand Up @@ -104,6 +104,19 @@ update msg model =
Err err ->
processApiError "Getting change request settings" err model

GetPendingChangeRequests res ->
case res of
Ok cr ->
let
ui = model.ui
newUi = case ui.crSettings of
Just settings -> { ui | crSettings = Just { settings | pendingChangeRequests = cr } }
Nothing -> ui
in
( { model | ui = newUi } , Cmd.none )
Err err ->
processApiError "Getting pending change requests" err model

GetGroupsTreeResult res ->
case res of
Ok t ->
Expand All @@ -130,14 +143,17 @@ update msg model =
Ok r ->
let
newModel = {model | mode = RuleForm (RuleDetails (Just r) r Information defaultRulesUI Nothing Nothing Nothing []) }
getPendingCR = case model.ui.crSettings of
Nothing -> Cmd.none
Just settings -> if settings.enableChangeRequest then (getPendingChangeRequests newModel r.id) else Cmd.none
getChanges = case Dict.get r.id.value model.changes of
Nothing -> []
Just changes ->
case List.Extra.last changes of
Nothing -> []
Just lastChanges -> [ getRepairedReports newModel r.id lastChanges.start lastChanges.end ]
in
(newModel, Cmd.batch (getRulesComplianceDetails r.id newModel :: getRuleNodesDirectives r.id newModel :: getChanges) )
(newModel, Cmd.batch (getRulesComplianceDetails r.id newModel :: getRuleNodesDirectives r.id newModel :: getPendingCR :: getChanges ) )
Err err ->
processApiError "Getting Rule details" err model

Expand Down
Expand Up @@ -68,7 +68,6 @@ buildTagsContainer rule editMode details =

informationTab: Model -> RuleDetails -> Html Msg
informationTab model details =

let
isNewRule = Maybe.Extra.isNothing details.originRule
rule = details.rule
Expand Down

0 comments on commit 68097e7

Please sign in to comment.