Skip to content

Commit 699140f

Browse files
committed
Add plugin support
1 parent a92e136 commit 699140f

File tree

93 files changed

+3287
-214
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+3287
-214
lines changed

app-wizard/elm/Wizard/Api/Models/BootstrapConfig.elm

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ module Wizard.Api.Models.BootstrapConfig exposing
66
)
77

88
import Common.Api.Models.AppSwitcherItem as AppSwitcherItem exposing (AppSwitcherItem)
9-
import Common.Api.Models.UserInfo as UserInfo exposing (UserInfo)
9+
import Dict exposing (Dict)
1010
import Json.Decode as D exposing (Decoder)
11+
import Json.Decode.Extensions as D
1112
import Json.Decode.Pipeline as D
1213
import Wizard.Api.Models.BootstrapConfig.Admin as AdminConfig exposing (Admin)
1314
import Wizard.Api.Models.BootstrapConfig.AuthenticationConfig as AuthenticationConfig exposing (AuthenticationConfig)
@@ -17,11 +18,13 @@ import Wizard.Api.Models.BootstrapConfig.FeaturesConfig as FeaturesConfig exposi
1718
import Wizard.Api.Models.BootstrapConfig.LookAndFeelConfig as LookAndFeelConfig exposing (LookAndFeelConfig)
1819
import Wizard.Api.Models.BootstrapConfig.OrganizationConfig as OrganizationConfig exposing (OrganizationConfig)
1920
import Wizard.Api.Models.BootstrapConfig.OwlConfig as OwlConfig exposing (OwlConfig)
21+
import Wizard.Api.Models.BootstrapConfig.PluginInfo as PluginInfo exposing (PluginInfo)
2022
import Wizard.Api.Models.BootstrapConfig.PrivacyAndSupportConfig as PrivacyAndSupportConfig exposing (PrivacyAndSupportConfig)
2123
import Wizard.Api.Models.BootstrapConfig.ProjectConfig as ProjectConfig exposing (ProjectConfig)
2224
import Wizard.Api.Models.BootstrapConfig.RegistryConfig as RegistryConfig exposing (RegistryConfig)
2325
import Wizard.Api.Models.BootstrapConfig.SignalBridgeConfig as SignalBridgeConfig exposing (SignalBridgeConfig)
2426
import Wizard.Api.Models.BootstrapConfig.SubmissionConfig as SubmissionConfig exposing (SubmissionConfig)
27+
import Wizard.Api.Models.BootstrapConfig.UserConfig as UserConfig exposing (UserConfig)
2528

2629

2730
type alias BootstrapConfig =
@@ -32,6 +35,8 @@ type alias BootstrapConfig =
3235
, registry : RegistryConfig
3336
, lookAndFeel : LookAndFeelConfig
3437
, organization : OrganizationConfig
38+
, pluginSettings : Dict String String
39+
, plugins : List PluginInfo
3540
, privacyAndSupport : PrivacyAndSupportConfig
3641
, project : ProjectConfig
3742
, submission : SubmissionConfig
@@ -40,7 +45,7 @@ type alias BootstrapConfig =
4045
, modules : List AppSwitcherItem
4146
, signalBridge : SignalBridgeConfig
4247
, tours : List String
43-
, user : Maybe UserInfo
48+
, user : Maybe UserConfig
4449
}
4550

4651

@@ -53,6 +58,8 @@ default =
5358
, registry = RegistryConfig.default
5459
, lookAndFeel = LookAndFeelConfig.default
5560
, organization = OrganizationConfig.default
61+
, pluginSettings = Dict.empty
62+
, plugins = []
5663
, privacyAndSupport = PrivacyAndSupportConfig.default
5764
, project = ProjectConfig.default
5865
, submission = SubmissionConfig.default
@@ -75,6 +82,8 @@ decoder =
7582
|> D.required "registry" RegistryConfig.decoder
7683
|> D.required "lookAndFeel" LookAndFeelConfig.decoder
7784
|> D.required "organization" OrganizationConfig.decoder
85+
|> D.required "pluginSettings" (D.dict D.valueAsString)
86+
|> D.required "plugins" (D.list PluginInfo.decoder)
7887
|> D.required "privacyAndSupport" PrivacyAndSupportConfig.decoder
7988
|> D.required "project" ProjectConfig.decoder
8089
|> D.required "submission" SubmissionConfig.decoder
@@ -83,7 +92,7 @@ decoder =
8392
|> D.required "modules" (D.list AppSwitcherItem.decoder)
8493
|> D.required "signalBridge" SignalBridgeConfig.decoder
8594
|> D.required "tours" (D.list D.string)
86-
|> D.required "user" (D.maybe UserInfo.decoder)
95+
|> D.required "user" (D.maybe UserConfig.decoder)
8796

8897

8998
addTour : String -> BootstrapConfig -> BootstrapConfig
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
module Wizard.Api.Models.BootstrapConfig.PluginInfo exposing (PluginInfo, decoder, toTuple)
2+
3+
import Json.Decode as D exposing (Decoder)
4+
import Json.Decode.Pipeline as D
5+
import Uuid exposing (Uuid)
6+
7+
8+
type alias PluginInfo =
9+
{ enabled : Bool
10+
, url : String
11+
, uuid : Uuid
12+
}
13+
14+
15+
decoder : Decoder PluginInfo
16+
decoder =
17+
D.succeed PluginInfo
18+
|> D.required "enabled" D.bool
19+
|> D.required "url" D.string
20+
|> D.required "uuid" Uuid.decoder
21+
22+
23+
toTuple : PluginInfo -> ( String, Bool )
24+
toTuple pluginInfo =
25+
( Uuid.toString pluginInfo.uuid, pluginInfo.enabled )
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
module Wizard.Api.Models.BootstrapConfig.UserConfig exposing
2+
( UserConfig
3+
, decoder
4+
, toUserSuggestion
5+
)
6+
7+
import Common.Api.Models.UserSuggestion exposing (UserSuggestion)
8+
import Common.Data.Role as Role exposing (Role)
9+
import Dict exposing (Dict)
10+
import Gravatar
11+
import Json.Decode as D exposing (Decoder)
12+
import Json.Decode.Extensions as D
13+
import Json.Decode.Pipeline as D
14+
import Uuid exposing (Uuid)
15+
16+
17+
type alias UserConfig =
18+
{ uuid : Uuid
19+
, email : String
20+
, firstName : String
21+
, lastName : String
22+
, role : Role
23+
, permissions : List String
24+
, imageUrl : Maybe String
25+
, userGroupUuids : List Uuid
26+
, lastSeenNewsId : Maybe String
27+
, pluginSettings : Dict String String
28+
}
29+
30+
31+
decoder : Decoder UserConfig
32+
decoder =
33+
D.succeed UserConfig
34+
|> D.required "uuid" Uuid.decoder
35+
|> D.required "email" D.string
36+
|> D.required "firstName" D.string
37+
|> D.required "lastName" D.string
38+
|> D.required "role" Role.decoder
39+
|> D.required "permissions" (D.list D.string)
40+
|> D.required "imageUrl" (D.maybe D.string)
41+
|> D.required "userGroupUuids" (D.list Uuid.decoder)
42+
|> D.required "lastSeenNewsId" (D.maybe D.string)
43+
|> D.required "pluginSettings" (D.dict D.valueAsString)
44+
45+
46+
toUserSuggestion : UserConfig -> UserSuggestion
47+
toUserSuggestion userInfo =
48+
{ uuid = userInfo.uuid
49+
, firstName = userInfo.firstName
50+
, lastName = userInfo.lastName
51+
, gravatarHash = Gravatar.hashEmail userInfo.email
52+
, imageUrl = userInfo.imageUrl
53+
}

app-wizard/elm/Wizard/Api/Models/Document.elm

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
module Wizard.Api.Models.Document exposing
22
( Document
33
, decoder
4+
, encode
45
, isOwner
56
)
67

8+
import Iso8601
79
import Json.Decode as D exposing (Decoder)
810
import Json.Decode.Extra as D
911
import Json.Decode.Pipeline as D
12+
import Json.Encode as E
13+
import Json.Encode.Extra as E
1014
import Time
1115
import Uuid exposing (Uuid)
16+
import Wizard.Api.Models.BootstrapConfig exposing (BootstrapConfig)
1217
import Wizard.Api.Models.Document.DocumentState as DocumentState exposing (DocumentState)
1318
import Wizard.Api.Models.DocumentTemplate.DocumentTemplateFormat as DocumentTemplateFormat exposing (DocumentTemplateFormat)
1419
import Wizard.Api.Models.ProjectInfo as ProjectInfo exposing (ProjectInfo)
1520
import Wizard.Api.Models.Submission as Submission exposing (Submission)
16-
import Wizard.Data.AppState exposing (AppState)
1721

1822

1923
type alias Document =
@@ -25,7 +29,7 @@ type alias Document =
2529
, projectVersion : Maybe String
2630
, documentTemplateId : String
2731
, documentTemplateName : String
28-
, format : Maybe DocumentTemplateFormat
32+
, format : DocumentTemplateFormat
2933
, state : DocumentState
3034
, submissions : List Submission
3135
, createdBy : Maybe Uuid
@@ -34,7 +38,7 @@ type alias Document =
3438
}
3539

3640

37-
isOwner : AppState -> Document -> Bool
41+
isOwner : { a | config : BootstrapConfig } -> Document -> Bool
3842
isOwner appState document =
3943
appState.config.user
4044
|> Maybe.map (.uuid >> Just >> (==) document.createdBy)
@@ -52,9 +56,28 @@ decoder =
5256
|> D.required "projectVersion" (D.maybe D.string)
5357
|> D.required "documentTemplateId" D.string
5458
|> D.required "documentTemplateName" D.string
55-
|> D.required "format" (D.maybe DocumentTemplateFormat.decoder)
59+
|> D.required "format" DocumentTemplateFormat.decoder
5660
|> D.required "state" DocumentState.decoder
5761
|> D.required "submissions" (D.list Submission.decoder)
5862
|> D.required "createdBy" (D.maybe Uuid.decoder)
5963
|> D.required "fileSize" (D.maybe D.int)
6064
|> D.required "workerLog" (D.maybe D.string)
65+
66+
67+
encode : Document -> E.Value
68+
encode document =
69+
E.object
70+
[ ( "uuid", Uuid.encode document.uuid )
71+
, ( "name", E.string document.name )
72+
, ( "createdAt", Iso8601.encode document.createdAt )
73+
, ( "project", E.maybe ProjectInfo.encode document.project )
74+
, ( "projectEventUuid", E.maybe Uuid.encode document.projectEventUuid )
75+
, ( "projectVersion", E.maybe E.string document.projectVersion )
76+
, ( "documentTemplateId", E.string document.documentTemplateId )
77+
, ( "documentTemplateName", E.string document.documentTemplateName )
78+
, ( "format", DocumentTemplateFormat.encode document.format )
79+
, ( "state", DocumentState.encode document.state )
80+
, ( "createdBy", E.maybe Uuid.encode document.createdBy )
81+
, ( "fileSize", E.maybe E.int document.fileSize )
82+
, ( "workerLog", E.maybe E.string document.workerLog )
83+
]

app-wizard/elm/Wizard/Api/Models/Document/DocumentState.elm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
module Wizard.Api.Models.Document.DocumentState exposing
22
( DocumentState(..)
33
, decoder
4+
, encode
45
)
56

67
import Json.Decode as D exposing (Decoder)
8+
import Json.Encode as E
79

810

911
type DocumentState
@@ -34,3 +36,19 @@ decoder =
3436
unknownState ->
3537
D.fail <| "Unknown document state " ++ unknownState
3638
)
39+
40+
41+
encode : DocumentState -> E.Value
42+
encode documentState =
43+
case documentState of
44+
QueuedDocumentState ->
45+
E.string "QueuedDocumentState"
46+
47+
InProgressDocumentState ->
48+
E.string "InProgressDocumentState"
49+
50+
DoneDocumentState ->
51+
E.string "DoneDocumentState"
52+
53+
ErrorDocumentState ->
54+
E.string "ErrorDocumentState"

app-wizard/elm/Wizard/Api/Models/DocumentTemplate/DocumentTemplateFormat.elm

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
module Wizard.Api.Models.DocumentTemplate.DocumentTemplateFormat exposing
22
( DocumentTemplateFormat
33
, decoder
4+
, encode
45
)
56

67
import Json.Decode as D exposing (Decoder)
78
import Json.Decode.Pipeline as D
9+
import Json.Encode as E
810
import Uuid exposing (Uuid)
911

1012

@@ -21,3 +23,12 @@ decoder =
2123
|> D.required "uuid" Uuid.decoder
2224
|> D.required "name" D.string
2325
|> D.required "icon" D.string
26+
27+
28+
encode : DocumentTemplateFormat -> E.Value
29+
encode format =
30+
E.object
31+
[ ( "uuid", Uuid.encode format.uuid )
32+
, ( "name", E.string format.name )
33+
, ( "icon", E.string format.icon )
34+
]

app-wizard/elm/Wizard/Api/Models/KnowledgeModel/Question.elm

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module Wizard.Api.Models.KnowledgeModel.Question exposing
66
, addItemTemplateQuestionUuids
77
, addReferenceUuid
88
, decoder
9+
, encode
910
, getAnnotations
1011
, getAnswerUuids
1112
, getChoiceUuids
@@ -40,6 +41,7 @@ module Wizard.Api.Models.KnowledgeModel.Question exposing
4041
import Dict exposing (Dict)
4142
import Json.Decode as D exposing (Decoder)
4243
import Json.Decode.Extra as D
44+
import Json.Encode as E
4345
import List.Extra as List
4446
import Wizard.Api.Models.KnowledgeModel.Annotation exposing (Annotation)
4547
import Wizard.Api.Models.KnowledgeModel.Question.CommonQuestionData as CommonQuestionData exposing (CommonQuestionData)
@@ -118,6 +120,63 @@ fileQuestionDecoder =
118120

119121

120122

123+
-- Encoders
124+
125+
126+
encode : Question -> E.Value
127+
encode question =
128+
case question of
129+
OptionsQuestion commonQuestionData optionQuestionData ->
130+
E.object
131+
(( "questionType", E.string (QuestionType.toString OptionsQuestionType) )
132+
:: CommonQuestionData.encodeValues commonQuestionData
133+
++ OptionsQuestionData.encodeValues optionQuestionData
134+
)
135+
136+
ListQuestion commonQuestionData listQuestionData ->
137+
E.object
138+
(( "questionType", E.string (QuestionType.toString ListQuestionType) )
139+
:: CommonQuestionData.encodeValues commonQuestionData
140+
++ ListQuestionData.encodeValues listQuestionData
141+
)
142+
143+
ValueQuestion commonQuestionData valueQuestionData ->
144+
E.object
145+
(( "questionType", E.string (QuestionType.toString ValueQuestionType) )
146+
:: CommonQuestionData.encodeValues commonQuestionData
147+
++ ValueQuestionData.encodeValues valueQuestionData
148+
)
149+
150+
IntegrationQuestion commonQuestionData integrationQuestionData ->
151+
E.object
152+
(( "questionType", E.string (QuestionType.toString IntegrationQuestionType) )
153+
:: CommonQuestionData.encodeValues commonQuestionData
154+
++ IntegrationQuestionData.encodeValues integrationQuestionData
155+
)
156+
157+
MultiChoiceQuestion commonQuestionData multiChoiceQuestionData ->
158+
E.object
159+
(( "questionType", E.string (QuestionType.toString MultiChoiceQuestionType) )
160+
:: CommonQuestionData.encodeValues commonQuestionData
161+
++ MultiChoiceQuestionData.encodeValues multiChoiceQuestionData
162+
)
163+
164+
ItemSelectQuestion commonQuestionData itemSelectQuestionData ->
165+
E.object
166+
(( "questionType", E.string (QuestionType.toString ItemSelectQuestionType) )
167+
:: CommonQuestionData.encodeValues commonQuestionData
168+
++ ItemSelectQuestionData.encodeValues itemSelectQuestionData
169+
)
170+
171+
FileQuestion commonQuestionData fileQuestionData ->
172+
E.object
173+
(( "questionType", E.string (QuestionType.toString FileQuestionType) )
174+
:: CommonQuestionData.encodeValues commonQuestionData
175+
++ FileQuestionData.encodeValues fileQuestionData
176+
)
177+
178+
179+
121180
-- Helpers
122181

123182

app-wizard/elm/Wizard/Api/Models/KnowledgeModel/Question/CommonQuestionData.elm

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
module Wizard.Api.Models.KnowledgeModel.Question.CommonQuestionData exposing
22
( CommonQuestionData
33
, decoder
4+
, encodeValues
45
)
56

67
import Json.Decode as D exposing (Decoder)
78
import Json.Decode.Pipeline as D
9+
import Json.Encode as E
10+
import Json.Encode.Extra as E
811
import Wizard.Api.Models.KnowledgeModel.Annotation as Annotation exposing (Annotation)
912

1013

@@ -31,3 +34,16 @@ decoder =
3134
|> D.required "referenceUuids" (D.list D.string)
3235
|> D.required "expertUuids" (D.list D.string)
3336
|> D.required "annotations" (D.list Annotation.decoder)
37+
38+
39+
encodeValues : CommonQuestionData -> List ( String, E.Value )
40+
encodeValues commonData =
41+
[ ( "uuid", E.string commonData.uuid )
42+
, ( "title", E.string commonData.title )
43+
, ( "text", E.maybe E.string commonData.text )
44+
, ( "requiredPhaseUuid", E.maybe E.string commonData.requiredPhaseUuid )
45+
, ( "tagUuids", E.list E.string commonData.tagUuids )
46+
, ( "referenceUuids", E.list E.string commonData.referenceUuids )
47+
, ( "expertUuids", E.list E.string commonData.expertUuids )
48+
, ( "annotations", E.list Annotation.encode commonData.annotations )
49+
]

0 commit comments

Comments
 (0)