Initial version.

Features:

- Upload PDF files let them analyze

- Manage meta data and items

- See processing in webapp
This commit is contained in:
Eike Kettner
2019-07-23 00:53:30 +02:00
parent 6154e6a387
commit 831cd8b655
341 changed files with 23634 additions and 484 deletions

View File

@ -0,0 +1,45 @@
module Page.CollectiveSettings.Data exposing (..)
import Http
import Comp.SourceManage
import Comp.UserManage
import Comp.Settings
import Data.Language
import Api.Model.BasicResult exposing (BasicResult)
import Api.Model.CollectiveSettings exposing (CollectiveSettings)
import Api.Model.ItemInsights exposing (ItemInsights)
type alias Model =
{ currentTab: Maybe Tab
, sourceModel: Comp.SourceManage.Model
, userModel: Comp.UserManage.Model
, settingsModel: Comp.Settings.Model
, insights: ItemInsights
, submitResult: Maybe BasicResult
}
emptyModel: Model
emptyModel =
{ currentTab = Just InsightsTab
, sourceModel = Comp.SourceManage.emptyModel
, userModel = Comp.UserManage.emptyModel
, settingsModel = Comp.Settings.init Api.Model.CollectiveSettings.empty
, insights = Api.Model.ItemInsights.empty
, submitResult = Nothing
}
type Tab
= SourceTab
| UserTab
| InsightsTab
| SettingsTab
type Msg
= SetTab Tab
| SourceMsg Comp.SourceManage.Msg
| UserMsg Comp.UserManage.Msg
| SettingsMsg Comp.Settings.Msg
| Init
| GetInsightsResp (Result Http.Error ItemInsights)
| CollectiveSettingsResp (Result Http.Error CollectiveSettings)
| SubmitResp (Result Http.Error BasicResult)

View File

@ -0,0 +1,82 @@
module Page.CollectiveSettings.Update exposing (update)
import Api
import Api.Model.BasicResult exposing (BasicResult)
import Page.CollectiveSettings.Data exposing (..)
import Data.Flags exposing (Flags)
import Data.Language
import Comp.SourceManage
import Comp.UserManage
import Comp.Settings
import Util.Http
update: Flags -> Msg -> Model -> (Model, Cmd Msg)
update flags msg model =
case msg of
SetTab t ->
let
m = { model | currentTab = Just t }
in
case t of
SourceTab ->
update flags (SourceMsg Comp.SourceManage.LoadSources) m
UserTab ->
update flags (UserMsg Comp.UserManage.LoadUsers) m
InsightsTab ->
update flags Init m
SettingsTab ->
update flags Init m
SourceMsg m ->
let
(m2, c2) = Comp.SourceManage.update flags m model.sourceModel
in
({model | sourceModel = m2}, Cmd.map SourceMsg c2)
UserMsg m ->
let
(m2, c2) = Comp.UserManage.update flags m model.userModel
in
({model | userModel = m2}, Cmd.map UserMsg c2)
SettingsMsg m ->
let
(m2, c2, msett) = Comp.Settings.update flags m model.settingsModel
cmd = case msett of
Nothing -> Cmd.none
Just sett ->
Api.setCollectiveSettings flags sett SubmitResp
in
({model | settingsModel = m2, submitResult = Nothing}, Cmd.batch [cmd, Cmd.map SettingsMsg c2])
Init ->
({model|submitResult = Nothing}
,Cmd.batch
[ Api.getInsights flags GetInsightsResp
, Api.getCollectiveSettings flags CollectiveSettingsResp
]
)
GetInsightsResp (Ok data) ->
({model|insights = data}, Cmd.none)
GetInsightsResp (Err err) ->
(model, Cmd.none)
CollectiveSettingsResp (Ok data) ->
({model | settingsModel = Comp.Settings.init data }, Cmd.none)
CollectiveSettingsResp (Err err) ->
(model, Cmd.none)
SubmitResp (Ok res) ->
({model | submitResult = Just res}, Cmd.none)
SubmitResp (Err err) ->
let
res = BasicResult False (Util.Http.errorToString err)
in
({model | submitResult = Just res}, Cmd.none)

View File

@ -0,0 +1,197 @@
module Page.CollectiveSettings.View exposing (view)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (onClick)
import Api.Model.NameCount exposing (NameCount)
import Util.Html exposing (classActive)
import Data.Flags exposing (Flags)
import Page.CollectiveSettings.Data exposing (..)
import Comp.SourceManage
import Comp.UserManage
import Comp.Settings
import Util.Size
import Util.Maybe
view: Flags -> Model -> Html Msg
view flags model =
div [class "collectivesetting-page ui padded grid"]
[div [class "four wide column"]
[h4 [class "ui top attached ablue-comp header"]
[text "Collective"
]
,div [class "ui attached fluid segment"]
[div [class "ui fluid vertical secondary menu"]
[div [classActive (model.currentTab == Just InsightsTab) "link icon item"
,onClick (SetTab InsightsTab)
]
[i [class "chart bar outline icon"][]
,text "Insights"
]
,div [classActive (model.currentTab == Just SourceTab) "link icon item"
,onClick (SetTab SourceTab)
]
[i [class "upload icon"][]
,text "Sources"
]
, div [classActive (model.currentTab == Just SettingsTab) "link icon item"
,onClick (SetTab SettingsTab)
]
[i [class "language icon"][]
,text "Document Language"
]
,div [classActive (model.currentTab == Just UserTab) "link icon item"
,onClick (SetTab UserTab)
]
[i [class "user icon"][]
,text "Users"
]
]
]
]
,div [class "twelve wide column"]
[div [class ""]
(case model.currentTab of
Just SourceTab -> viewSources flags model
Just UserTab -> viewUsers model
Just InsightsTab -> viewInsights model
Just SettingsTab -> viewSettings model
Nothing -> []
)
]
]
viewInsights: Model -> List (Html Msg)
viewInsights model =
[h1 [class "ui header"]
[i [class "chart bar outline icon"][]
,div [class "content"]
[text "Insights"
]
]
,div [class "ui basic blue segment"]
[h4 [class "ui header"]
[text "Items"
]
,div [class "ui statistics"]
[div [class "ui statistic"]
[div [class "value"]
[String.fromInt (model.insights.incomingCount + model.insights.outgoingCount) |> text
]
,div [class "label"]
[text "Items"
]
]
,div [class "ui statistic"]
[div [class "value"]
[String.fromInt model.insights.incomingCount |> text
]
,div [class "label"]
[text "Incoming"
]
]
,div [class "ui statistic"]
[div [class "value"]
[String.fromInt model.insights.outgoingCount |> text
]
,div [class "label"]
[text "Outgoing"
]
]
]
]
,div [class "ui basic blue segment"]
[h4 [class "ui header"]
[text "Size"
]
,div [class "ui statistics"]
[div [class "ui statistic"]
[div [class "value"]
[toFloat model.insights.itemSize |> Util.Size.bytesReadable Util.Size.B |> text
]
,div [class "label"]
[text "Size"
]
]
]
]
,div [class "ui basic blue segment"]
[h4 [class "ui header"]
[text "Tags"
]
,div [class "ui statistics"]
(List.map makeTagStats model.insights.tagCloud.items)
]
]
makeTagStats: NameCount -> Html Msg
makeTagStats nc =
div [class "ui statistic"]
[div [class "value"]
[String.fromInt nc.count |> text
]
,div [class "label"]
[text nc.name
]
]
viewSources: Flags -> Model -> List (Html Msg)
viewSources flags model =
[h2 [class "ui header"]
[i [class "ui upload icon"][]
,div [class "content"]
[text "Sources"
]
]
,Html.map SourceMsg (Comp.SourceManage.view flags model.sourceModel)
]
viewUsers: Model -> List (Html Msg)
viewUsers model =
[h2 [class "ui header"]
[i [class "ui user icon"][]
,div [class "content"]
[text "Users"
]
]
,Html.map UserMsg (Comp.UserManage.view model.userModel)
]
viewSettings: Model -> List (Html Msg)
viewSettings model =
[div [class "ui grid"]
[div [class "row"]
[div [class "sixteen wide colum"]
[h2 [class "ui header"]
[i [class "ui language icon"][]
,div [class "content"]
[text "Document Language"
]
]
]
]
,div [class "row"]
[div [class "six wide column"]
[div [class "ui basic segment"]
[text "The language of your documents. This helps text recognition (OCR) and text analysis."
]
]
]
,div [class "row"]
[div [class "six wide column"]
[Html.map SettingsMsg (Comp.Settings.view model.settingsModel)
,div [classList [("ui message", True)
,("hidden", Util.Maybe.isEmpty model.submitResult)
,("success", Maybe.map .success model.submitResult |> Maybe.withDefault False)
,("error", Maybe.map .success model.submitResult |> Maybe.map not |> Maybe.withDefault False)
]]
[Maybe.map .message model.submitResult
|> Maybe.withDefault ""
|> text
]
]
]
]
]