diff options
author | Yorhel <git@yorhel.nl> | 2022-07-30 07:25:12 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2022-07-30 07:25:12 +0200 |
commit | 23c6278b00e51b1e999c16683e01ba5b05c8c6c2 (patch) | |
tree | b4afcf7c44864ea8649a2de71a4b23d8b99b348f /elm | |
parent | ba4f0b483ef83a2e3c41c506f8f94d5e06dc0baf (diff) |
Add duplicate entry check when creating new staff entry
Diffstat (limited to 'elm')
-rw-r--r-- | elm/Lib/Autocomplete.elm | 2 | ||||
-rw-r--r-- | elm/StaffEdit.elm | 90 |
2 files changed, 65 insertions, 27 deletions
diff --git a/elm/Lib/Autocomplete.elm b/elm/Lib/Autocomplete.elm index 60275c14..866647a8 100644 --- a/elm/Lib/Autocomplete.elm +++ b/elm/Lib/Autocomplete.elm @@ -160,7 +160,7 @@ producerSource = staffSource : SourceConfig m GApi.ApiStaffResult staffSource = - { source = Endpoint (\s -> GS.send { search = s }) + { source = Endpoint (\s -> GS.send { search = [s] }) <| \x -> case x of GApi.StaffResult e -> Just e _ -> Nothing diff --git a/elm/StaffEdit.elm b/elm/StaffEdit.elm index 22b1d328..91e72461 100644 --- a/elm/StaffEdit.elm +++ b/elm/StaffEdit.elm @@ -11,6 +11,7 @@ import Lib.TextPreview as TP import Lib.Api as Api import Lib.Editsum as Editsum import Gen.StaffEdit as GSE +import Gen.Staff as GS import Gen.Types as GT import Gen.Api as GApi @@ -39,6 +40,8 @@ type alias Model = , l_anidb : Maybe Int , l_pixiv : Int , id : Maybe String + , dupCheck : Bool + , dupStaff : List GApi.ApiStaffResult } @@ -58,6 +61,8 @@ init d = , l_anidb = d.l_anidb , l_pixiv = d.l_pixiv , id = d.id + , dupCheck = False + , dupStaff = [] } @@ -103,6 +108,8 @@ type Msg | AliasOrig Int String | AliasMain Int Bool | AliasAdd + | DupSubmit + | DupResults GApi.Response validate : Model -> Model @@ -122,12 +129,22 @@ update msg model = LPixiv s -> ({ model | l_pixiv = Maybe.withDefault 0 (String.toInt s) }, Cmd.none) Desc m -> let (nm,nc) = TP.update m model.desc in ({ model | desc = nm }, Cmd.map Desc nc) - AliasDel i -> (validate { model | alias = delidx i model.alias }, Cmd.none) - AliasName i s -> (validate { model | alias = modidx i (\e -> { e | name = s }) model.alias }, Cmd.none) - AliasOrig i s -> (validate { model | alias = modidx i (\e -> { e | original = s }) model.alias }, Cmd.none) + AliasDel i -> (validate { model | dupStaff = [], alias = delidx i model.alias }, Cmd.none) + AliasName i s -> (validate { model | dupStaff = [], alias = modidx i (\e -> { e | name = s }) model.alias }, Cmd.none) + AliasOrig i s -> (validate { model | dupStaff = [], alias = modidx i (\e -> { e | original = s }) model.alias }, Cmd.none) AliasMain n _ -> ({ model | aid = n }, Cmd.none) AliasAdd -> ({ model | alias = model.alias ++ [{ aid = newAid model, name = "", original = "", inuse = False, wantdel = False }] }, Cmd.none) + DupSubmit -> + if List.isEmpty model.dupStaff + then ({ model | state = Api.Loading }, GS.send { search = List.concatMap (\e -> [e.name, e.original]) model.alias } DupResults) + else ({ model | dupCheck = True, dupStaff = [] }, Cmd.none) + DupResults (GApi.StaffResult staff) -> + if List.isEmpty staff + then ({ model | state = Api.Normal, dupCheck = True, dupStaff = [] }, Cmd.none) + else ({ model | state = Api.Normal, dupStaff = staff }, Cmd.none) + DupResults r -> ({ model | state = Api.Error r }, Cmd.none) + Submit -> ({ model | state = Api.Loading }, GSE.send (encode model) Submitted) Submitted (GApi.Redirect s) -> (model, load s) Submitted r -> ({ model | state = Api.Error r }, Cmd.none) @@ -177,30 +194,51 @@ view model = ] ] - in - form_ "" Submit (model.state == Api.Loading) - [ div [ class "mainbox staffedit" ] - [ h1 [] [ text "General info" ] - , table [ class "formtable" ] - [ formField "Names" [ names, br_ 1 ] - , formField "desc::Biography" [ TP.view "desc" model.desc Desc 500 GSE.valDesc [ b [ class "standout" ] [ text "English please!" ] ] ] - , formField "gender::Gender" [ inputSelect "gender" model.gender Gender [] - [ ("unknown", "Unknown or N/A") - , ("f", "Female") - , ("m", "Male") - ] ] - , formField "lang::Primary Language" [ inputSelect "lang" model.lang Lang [] (List.filter (\(e,_) -> e /= "zh-Hans" && e /= "zh-Hant") GT.languages) ] - , formField "l_site::Official page" [ inputText "l_site" model.l_site Website (style "width" "400px" :: GSE.valL_Site) ] - , formField "l_wikidata::Wikidata ID" [ inputWikidata "l_wikidata" model.l_wikidata LWikidata [] ] - , formField "l_twitter::Twitter username" [ inputText "l_twitter" model.l_twitter LTwitter GSE.valL_Twitter ] - , formField "l_anidb::AniDB Creator ID" [ inputText "l_anidb" (Maybe.withDefault "" (Maybe.map String.fromInt model.l_anidb)) LAnidb GSE.valL_Anidb ] - , formField "l_pixiv::Pixiv ID" [ inputText "l_pixiv" (if model.l_pixiv == 0 then "" else String.fromInt model.l_pixiv) LPixiv GSE.valL_Pixiv ] + newform () = + form_ "" DupSubmit (model.state == Api.Loading) + [ div [ class "mainbox" ] + [ h1 [] [ text "Add new staff" ] + , table [ class "formtable" ] [ formField "Names" [ names, br_ 1 ] ] + ] + , div [ class "mainbox" ] + [ if List.isEmpty model.dupStaff then text "" else + div [] + [ h1 [] [ text "Possible duplicates" ] + , text "The following is a list of staff that match the name(s) you gave. " + , text "Please check this list to avoid creating a duplicate staff entry. " + , ul [] <| List.map (\s -> li [] + [ a [ href <| "/" ++ s.id, title s.original ] [ text s.name ] ] + ) model.dupStaff + ] + , fieldset [ class "submit" ] [ submitButton (if List.isEmpty model.dupStaff then "Continue" else "Continue anyway") model.state (isValid model) ] ] ] - , div [ class "mainbox" ] - [ fieldset [ class "submit" ] - [ Html.map Editsum (Editsum.view model.editsum) - , submitButton "Submit" model.state (isValid model) + + fullform () = + form_ "" Submit (model.state == Api.Loading) + [ div [ class "mainbox staffedit" ] + [ h1 [] [ text "General info" ] + , table [ class "formtable" ] + [ formField "Names" [ names, br_ 1 ] + , formField "desc::Biography" [ TP.view "desc" model.desc Desc 500 GSE.valDesc [ b [ class "standout" ] [ text "English please!" ] ] ] + , formField "gender::Gender" [ inputSelect "gender" model.gender Gender [] + [ ("unknown", "Unknown or N/A") + , ("f", "Female") + , ("m", "Male") + ] ] + , formField "lang::Primary Language" [ inputSelect "lang" model.lang Lang [] (List.filter (\(e,_) -> e /= "zh-Hans" && e /= "zh-Hant") GT.languages) ] + , formField "l_site::Official page" [ inputText "l_site" model.l_site Website (style "width" "400px" :: GSE.valL_Site) ] + , formField "l_wikidata::Wikidata ID" [ inputWikidata "l_wikidata" model.l_wikidata LWikidata [] ] + , formField "l_twitter::Twitter username" [ inputText "l_twitter" model.l_twitter LTwitter GSE.valL_Twitter ] + , formField "l_anidb::AniDB Creator ID" [ inputText "l_anidb" (Maybe.withDefault "" (Maybe.map String.fromInt model.l_anidb)) LAnidb GSE.valL_Anidb ] + , formField "l_pixiv::Pixiv ID" [ inputText "l_pixiv" (if model.l_pixiv == 0 then "" else String.fromInt model.l_pixiv) LPixiv GSE.valL_Pixiv ] + ] + ] + , div [ class "mainbox" ] + [ fieldset [ class "submit" ] + [ Html.map Editsum (Editsum.view model.editsum) + , submitButton "Submit" model.state (isValid model) + ] ] ] - ] + in if model.id == Nothing && not model.dupCheck then newform () else fullform () |