mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-02 13:32:51 +00:00
Update source form to specify folder
This commit is contained in:
parent
5b01c93711
commit
ca5b7b999f
@ -60,6 +60,9 @@ init key url flags settings =
|
|||||||
|
|
||||||
( mdm, mdc ) =
|
( mdm, mdc ) =
|
||||||
Page.ManageData.Data.init flags
|
Page.ManageData.Data.init flags
|
||||||
|
|
||||||
|
( csm, csc ) =
|
||||||
|
Page.CollectiveSettings.Data.init flags
|
||||||
in
|
in
|
||||||
( { flags = flags
|
( { flags = flags
|
||||||
, key = key
|
, key = key
|
||||||
@ -68,7 +71,7 @@ init key url flags settings =
|
|||||||
, homeModel = Page.Home.Data.init flags
|
, homeModel = Page.Home.Data.init flags
|
||||||
, loginModel = Page.Login.Data.emptyModel
|
, loginModel = Page.Login.Data.emptyModel
|
||||||
, manageDataModel = mdm
|
, manageDataModel = mdm
|
||||||
, collSettingsModel = Page.CollectiveSettings.Data.emptyModel
|
, collSettingsModel = csm
|
||||||
, userSettingsModel = um
|
, userSettingsModel = um
|
||||||
, queueModel = Page.Queue.Data.emptyModel
|
, queueModel = Page.Queue.Data.emptyModel
|
||||||
, registerModel = Page.Register.Data.emptyModel
|
, registerModel = Page.Register.Data.emptyModel
|
||||||
@ -82,6 +85,7 @@ init key url flags settings =
|
|||||||
, Cmd.batch
|
, Cmd.batch
|
||||||
[ Cmd.map UserSettingsMsg uc
|
[ Cmd.map UserSettingsMsg uc
|
||||||
, Cmd.map ManageDataMsg mdc
|
, Cmd.map ManageDataMsg mdc
|
||||||
|
, Cmd.map CollSettingsMsg csc
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ import Page exposing (Page(..))
|
|||||||
import Ports
|
import Ports
|
||||||
import Set exposing (Set)
|
import Set exposing (Set)
|
||||||
import Util.File exposing (makeFileId)
|
import Util.File exposing (makeFileId)
|
||||||
|
import Util.Folder exposing (mkFolderOption)
|
||||||
import Util.Http
|
import Util.Http
|
||||||
import Util.List
|
import Util.List
|
||||||
import Util.Maybe
|
import Util.Maybe
|
||||||
@ -131,36 +132,6 @@ isEditNotes field =
|
|||||||
False
|
False
|
||||||
|
|
||||||
|
|
||||||
mkFolderOption : Flags -> List FolderItem -> IdName -> Comp.Dropdown.Option
|
|
||||||
mkFolderOption flags allFolders idref =
|
|
||||||
let
|
|
||||||
folder =
|
|
||||||
List.filter (\e -> e.id == idref.id) allFolders
|
|
||||||
|> List.head
|
|
||||||
|
|
||||||
isMember =
|
|
||||||
folder
|
|
||||||
|> Maybe.map .isMember
|
|
||||||
|> Maybe.withDefault False
|
|
||||||
|
|
||||||
isOwner =
|
|
||||||
Maybe.map .owner folder
|
|
||||||
|> Maybe.map .name
|
|
||||||
|> (==) (Maybe.map .user flags.account)
|
|
||||||
|
|
||||||
adds =
|
|
||||||
if isOwner then
|
|
||||||
"owner"
|
|
||||||
|
|
||||||
else if isMember then
|
|
||||||
"member"
|
|
||||||
|
|
||||||
else
|
|
||||||
""
|
|
||||||
in
|
|
||||||
{ value = idref.id, text = idref.name, additional = adds }
|
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
emptyModel : Model
|
||||||
emptyModel =
|
emptyModel =
|
||||||
{ item = Api.Model.ItemDetail.empty
|
{ item = Api.Model.ItemDetail.empty
|
||||||
@ -2552,13 +2523,5 @@ isFolderMember model =
|
|||||||
Comp.Dropdown.getSelected model.folderModel
|
Comp.Dropdown.getSelected model.folderModel
|
||||||
|> List.head
|
|> List.head
|
||||||
|> Maybe.map .id
|
|> Maybe.map .id
|
||||||
|
|
||||||
findFolder id =
|
|
||||||
List.filter (\e -> e.id == id) model.allFolders
|
|
||||||
|> List.head
|
|
||||||
|
|
||||||
folder =
|
|
||||||
Maybe.andThen findFolder selected
|
|
||||||
in
|
in
|
||||||
Maybe.map .isMember folder
|
Util.Folder.isFolderMember model.allFolders selected
|
||||||
|> Maybe.withDefault True
|
|
||||||
|
@ -1,20 +1,29 @@
|
|||||||
module Comp.SourceForm exposing
|
module Comp.SourceForm exposing
|
||||||
( Model
|
( Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, emptyModel
|
|
||||||
, getSource
|
, getSource
|
||||||
|
, init
|
||||||
, isValid
|
, isValid
|
||||||
, update
|
, update
|
||||||
, view
|
, view
|
||||||
)
|
)
|
||||||
|
|
||||||
|
import Api
|
||||||
|
import Api.Model.FolderItem exposing (FolderItem)
|
||||||
|
import Api.Model.FolderList exposing (FolderList)
|
||||||
|
import Api.Model.IdName exposing (IdName)
|
||||||
import Api.Model.Source exposing (Source)
|
import Api.Model.Source exposing (Source)
|
||||||
|
import Comp.Dropdown exposing (isDropdownChangeMsg)
|
||||||
import Comp.FixedDropdown
|
import Comp.FixedDropdown
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
import Data.Priority exposing (Priority)
|
import Data.Priority exposing (Priority)
|
||||||
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (onCheck, onInput)
|
import Html.Events exposing (onCheck, onInput)
|
||||||
|
import Http
|
||||||
|
import Markdown
|
||||||
|
import Util.Folder exposing (mkFolderOption)
|
||||||
|
|
||||||
|
|
||||||
type alias Model =
|
type alias Model =
|
||||||
@ -24,6 +33,9 @@ type alias Model =
|
|||||||
, priorityModel : Comp.FixedDropdown.Model Priority
|
, priorityModel : Comp.FixedDropdown.Model Priority
|
||||||
, priority : Priority
|
, priority : Priority
|
||||||
, enabled : Bool
|
, enabled : Bool
|
||||||
|
, folderModel : Comp.Dropdown.Model IdName
|
||||||
|
, allFolders : List FolderItem
|
||||||
|
, folderId : Maybe String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -38,9 +50,23 @@ emptyModel =
|
|||||||
Data.Priority.all
|
Data.Priority.all
|
||||||
, priority = Data.Priority.Low
|
, priority = Data.Priority.Low
|
||||||
, enabled = False
|
, enabled = False
|
||||||
|
, folderModel =
|
||||||
|
Comp.Dropdown.makeSingle
|
||||||
|
{ makeOption = \e -> { value = e.id, text = e.name, additional = "" }
|
||||||
|
, placeholder = ""
|
||||||
|
}
|
||||||
|
, allFolders = []
|
||||||
|
, folderId = Nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
init : Flags -> ( Model, Cmd Msg )
|
||||||
|
init flags =
|
||||||
|
( emptyModel
|
||||||
|
, Api.getFolders flags "" False GetFolderResp
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
isValid : Model -> Bool
|
isValid : Model -> Bool
|
||||||
isValid model =
|
isValid model =
|
||||||
model.abbrev /= ""
|
model.abbrev /= ""
|
||||||
@ -57,6 +83,7 @@ getSource model =
|
|||||||
, description = model.description
|
, description = model.description
|
||||||
, enabled = model.enabled
|
, enabled = model.enabled
|
||||||
, priority = Data.Priority.toName model.priority
|
, priority = Data.Priority.toName model.priority
|
||||||
|
, folder = model.folderId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -66,10 +93,12 @@ type Msg
|
|||||||
| SetDescr String
|
| SetDescr String
|
||||||
| ToggleEnabled
|
| ToggleEnabled
|
||||||
| PrioDropdownMsg (Comp.FixedDropdown.Msg Priority)
|
| PrioDropdownMsg (Comp.FixedDropdown.Msg Priority)
|
||||||
|
| GetFolderResp (Result Http.Error FolderList)
|
||||||
|
| FolderDropdownMsg (Comp.Dropdown.Msg IdName)
|
||||||
|
|
||||||
|
|
||||||
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
update : Flags -> Msg -> Model -> ( Model, Cmd Msg )
|
||||||
update _ msg model =
|
update flags msg model =
|
||||||
case msg of
|
case msg of
|
||||||
SetSource t ->
|
SetSource t ->
|
||||||
let
|
let
|
||||||
@ -83,19 +112,41 @@ update _ msg model =
|
|||||||
, description = t.description
|
, description = t.description
|
||||||
, priority = t.priority
|
, priority = t.priority
|
||||||
, enabled = t.enabled
|
, enabled = t.enabled
|
||||||
|
, folder = t.folder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newModel =
|
||||||
|
{ model
|
||||||
|
| source = np
|
||||||
|
, abbrev = t.abbrev
|
||||||
|
, description = t.description
|
||||||
|
, priority =
|
||||||
|
Data.Priority.fromString t.priority
|
||||||
|
|> Maybe.withDefault Data.Priority.Low
|
||||||
|
, enabled = t.enabled
|
||||||
|
, folderId = t.folder
|
||||||
|
}
|
||||||
|
|
||||||
|
mkIdName id =
|
||||||
|
List.filterMap
|
||||||
|
(\f ->
|
||||||
|
if f.id == id then
|
||||||
|
Just (IdName id f.name)
|
||||||
|
|
||||||
|
else
|
||||||
|
Nothing
|
||||||
|
)
|
||||||
|
model.allFolders
|
||||||
|
|
||||||
|
sel =
|
||||||
|
case Maybe.map mkIdName t.folder of
|
||||||
|
Just idref ->
|
||||||
|
idref
|
||||||
|
|
||||||
|
Nothing ->
|
||||||
|
[]
|
||||||
in
|
in
|
||||||
( { model
|
update flags (FolderDropdownMsg (Comp.Dropdown.SetSelection sel)) newModel
|
||||||
| source = np
|
|
||||||
, abbrev = t.abbrev
|
|
||||||
, description = t.description
|
|
||||||
, priority =
|
|
||||||
Data.Priority.fromString t.priority
|
|
||||||
|> Maybe.withDefault Data.Priority.Low
|
|
||||||
, enabled = t.enabled
|
|
||||||
}
|
|
||||||
, Cmd.none
|
|
||||||
)
|
|
||||||
|
|
||||||
ToggleEnabled ->
|
ToggleEnabled ->
|
||||||
( { model | enabled = not model.enabled }, Cmd.none )
|
( { model | enabled = not model.enabled }, Cmd.none )
|
||||||
@ -127,16 +178,60 @@ update _ msg model =
|
|||||||
, Cmd.none
|
, Cmd.none
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GetFolderResp (Ok fs) ->
|
||||||
|
let
|
||||||
|
model_ =
|
||||||
|
{ model
|
||||||
|
| allFolders = fs.items
|
||||||
|
, folderModel =
|
||||||
|
Comp.Dropdown.setMkOption
|
||||||
|
(mkFolderOption flags fs.items)
|
||||||
|
model.folderModel
|
||||||
|
}
|
||||||
|
|
||||||
view : Flags -> Model -> Html Msg
|
mkIdName fitem =
|
||||||
view flags model =
|
IdName fitem.id fitem.name
|
||||||
|
|
||||||
|
opts =
|
||||||
|
fs.items
|
||||||
|
|> List.map mkIdName
|
||||||
|
|> Comp.Dropdown.SetOptions
|
||||||
|
in
|
||||||
|
update flags (FolderDropdownMsg opts) model_
|
||||||
|
|
||||||
|
GetFolderResp (Err _) ->
|
||||||
|
( model, Cmd.none )
|
||||||
|
|
||||||
|
FolderDropdownMsg m ->
|
||||||
|
let
|
||||||
|
( m2, c2 ) =
|
||||||
|
Comp.Dropdown.update m model.folderModel
|
||||||
|
|
||||||
|
newModel =
|
||||||
|
{ model | folderModel = m2 }
|
||||||
|
|
||||||
|
idref =
|
||||||
|
Comp.Dropdown.getSelected m2 |> List.head
|
||||||
|
|
||||||
|
model_ =
|
||||||
|
if isDropdownChangeMsg m then
|
||||||
|
{ newModel | folderId = Maybe.map .id idref }
|
||||||
|
|
||||||
|
else
|
||||||
|
newModel
|
||||||
|
in
|
||||||
|
( model_, Cmd.map FolderDropdownMsg c2 )
|
||||||
|
|
||||||
|
|
||||||
|
view : Flags -> UiSettings -> Model -> Html Msg
|
||||||
|
view flags settings model =
|
||||||
let
|
let
|
||||||
priorityItem =
|
priorityItem =
|
||||||
Comp.FixedDropdown.Item
|
Comp.FixedDropdown.Item
|
||||||
model.priority
|
model.priority
|
||||||
(Data.Priority.toName model.priority)
|
(Data.Priority.toName model.priority)
|
||||||
in
|
in
|
||||||
div [ class "ui form" ]
|
div [ class "ui warning form" ]
|
||||||
[ div
|
[ div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "field", True )
|
[ ( "field", True )
|
||||||
@ -179,6 +274,25 @@ view flags model =
|
|||||||
model.priorityModel
|
model.priorityModel
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
|
, div [ class "field" ]
|
||||||
|
[ label []
|
||||||
|
[ text "Folder"
|
||||||
|
]
|
||||||
|
, Html.map FolderDropdownMsg (Comp.Dropdown.view settings model.folderModel)
|
||||||
|
, div
|
||||||
|
[ classList
|
||||||
|
[ ( "ui warning message", True )
|
||||||
|
, ( "hidden", isFolderMember model )
|
||||||
|
]
|
||||||
|
]
|
||||||
|
[ Markdown.toHtml [] """
|
||||||
|
You are **not a member** of this folder. Items created through this
|
||||||
|
link will be **hidden** from any search results. Use a folder where
|
||||||
|
you are a member of to make items visible. This message will
|
||||||
|
disappear then.
|
||||||
|
"""
|
||||||
|
]
|
||||||
|
]
|
||||||
, urlInfoMessage flags model
|
, urlInfoMessage flags model
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -217,3 +331,14 @@ urlInfoMessage flags model =
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
isFolderMember : Model -> Bool
|
||||||
|
isFolderMember model =
|
||||||
|
let
|
||||||
|
selected =
|
||||||
|
Comp.Dropdown.getSelected model.folderModel
|
||||||
|
|> List.head
|
||||||
|
|> Maybe.map .id
|
||||||
|
in
|
||||||
|
Util.Folder.isFolderMember model.allFolders selected
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
module Comp.SourceManage exposing
|
module Comp.SourceManage exposing
|
||||||
( Model
|
( Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, emptyModel
|
, init
|
||||||
, update
|
, update
|
||||||
, view
|
, view
|
||||||
)
|
)
|
||||||
@ -14,6 +14,7 @@ import Comp.SourceForm
|
|||||||
import Comp.SourceTable
|
import Comp.SourceTable
|
||||||
import Comp.YesNoDimmer
|
import Comp.YesNoDimmer
|
||||||
import Data.Flags exposing (Flags)
|
import Data.Flags exposing (Flags)
|
||||||
|
import Data.UiSettings exposing (UiSettings)
|
||||||
import Html exposing (..)
|
import Html exposing (..)
|
||||||
import Html.Attributes exposing (..)
|
import Html.Attributes exposing (..)
|
||||||
import Html.Events exposing (onClick, onSubmit)
|
import Html.Events exposing (onClick, onSubmit)
|
||||||
@ -37,15 +38,21 @@ type ViewMode
|
|||||||
| Form
|
| Form
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
init : Flags -> ( Model, Cmd Msg )
|
||||||
emptyModel =
|
init flags =
|
||||||
{ tableModel = Comp.SourceTable.emptyModel
|
let
|
||||||
, formModel = Comp.SourceForm.emptyModel
|
( fm, fc ) =
|
||||||
, viewMode = Table
|
Comp.SourceForm.init flags
|
||||||
, formError = Nothing
|
in
|
||||||
, loading = False
|
( { tableModel = Comp.SourceTable.emptyModel
|
||||||
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
, formModel = fm
|
||||||
}
|
, viewMode = Table
|
||||||
|
, formError = Nothing
|
||||||
|
, loading = False
|
||||||
|
, deleteConfirm = Comp.YesNoDimmer.emptyModel
|
||||||
|
}
|
||||||
|
, Cmd.map FormMsg fc
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
type Msg
|
type Msg
|
||||||
@ -187,13 +194,13 @@ update flags msg model =
|
|||||||
( { model | deleteConfirm = cm }, cmd )
|
( { model | deleteConfirm = cm }, cmd )
|
||||||
|
|
||||||
|
|
||||||
view : Flags -> Model -> Html Msg
|
view : Flags -> UiSettings -> Model -> Html Msg
|
||||||
view flags model =
|
view flags settings model =
|
||||||
if model.viewMode == Table then
|
if model.viewMode == Table then
|
||||||
viewTable model
|
viewTable model
|
||||||
|
|
||||||
else
|
else
|
||||||
div [] (viewForm flags model)
|
div [] (viewForm flags settings model)
|
||||||
|
|
||||||
|
|
||||||
viewTable : Model -> Html Msg
|
viewTable : Model -> Html Msg
|
||||||
@ -215,8 +222,8 @@ viewTable model =
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewForm : Flags -> Model -> List (Html Msg)
|
viewForm : Flags -> UiSettings -> Model -> List (Html Msg)
|
||||||
viewForm flags model =
|
viewForm flags settings model =
|
||||||
let
|
let
|
||||||
newSource =
|
newSource =
|
||||||
model.formModel.source.id == ""
|
model.formModel.source.id == ""
|
||||||
@ -236,7 +243,7 @@ viewForm flags model =
|
|||||||
]
|
]
|
||||||
, Html.form [ class "ui attached segment", onSubmit Submit ]
|
, Html.form [ class "ui attached segment", onSubmit Submit ]
|
||||||
[ Html.map YesNoMsg (Comp.YesNoDimmer.view model.deleteConfirm)
|
[ Html.map YesNoMsg (Comp.YesNoDimmer.view model.deleteConfirm)
|
||||||
, Html.map FormMsg (Comp.SourceForm.view flags model.formModel)
|
, Html.map FormMsg (Comp.SourceForm.view flags settings model.formModel)
|
||||||
, div
|
, div
|
||||||
[ classList
|
[ classList
|
||||||
[ ( "ui error message", True )
|
[ ( "ui error message", True )
|
||||||
|
@ -2,7 +2,7 @@ module Page.CollectiveSettings.Data exposing
|
|||||||
( Model
|
( Model
|
||||||
, Msg(..)
|
, Msg(..)
|
||||||
, Tab(..)
|
, Tab(..)
|
||||||
, emptyModel
|
, init
|
||||||
)
|
)
|
||||||
|
|
||||||
import Api.Model.BasicResult exposing (BasicResult)
|
import Api.Model.BasicResult exposing (BasicResult)
|
||||||
@ -11,6 +11,7 @@ import Api.Model.ItemInsights exposing (ItemInsights)
|
|||||||
import Comp.CollectiveSettingsForm
|
import Comp.CollectiveSettingsForm
|
||||||
import Comp.SourceManage
|
import Comp.SourceManage
|
||||||
import Comp.UserManage
|
import Comp.UserManage
|
||||||
|
import Data.Flags exposing (Flags)
|
||||||
import Http
|
import Http
|
||||||
|
|
||||||
|
|
||||||
@ -24,15 +25,21 @@ type alias Model =
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
emptyModel : Model
|
init : Flags -> ( Model, Cmd Msg )
|
||||||
emptyModel =
|
init flags =
|
||||||
{ currentTab = Just InsightsTab
|
let
|
||||||
, sourceModel = Comp.SourceManage.emptyModel
|
( sm, sc ) =
|
||||||
, userModel = Comp.UserManage.emptyModel
|
Comp.SourceManage.init flags
|
||||||
, settingsModel = Comp.CollectiveSettingsForm.init Api.Model.CollectiveSettings.empty
|
in
|
||||||
, insights = Api.Model.ItemInsights.empty
|
( { currentTab = Just InsightsTab
|
||||||
, submitResult = Nothing
|
, sourceModel = sm
|
||||||
}
|
, userModel = Comp.UserManage.emptyModel
|
||||||
|
, settingsModel = Comp.CollectiveSettingsForm.init Api.Model.CollectiveSettings.empty
|
||||||
|
, insights = Api.Model.ItemInsights.empty
|
||||||
|
, submitResult = Nothing
|
||||||
|
}
|
||||||
|
, Cmd.map SourceMsg sc
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
type Tab
|
type Tab
|
||||||
|
@ -59,7 +59,7 @@ view flags settings model =
|
|||||||
[ div [ class "" ]
|
[ div [ class "" ]
|
||||||
(case model.currentTab of
|
(case model.currentTab of
|
||||||
Just SourceTab ->
|
Just SourceTab ->
|
||||||
viewSources flags model
|
viewSources flags settings model
|
||||||
|
|
||||||
Just UserTab ->
|
Just UserTab ->
|
||||||
viewUsers settings model
|
viewUsers settings model
|
||||||
@ -153,15 +153,15 @@ makeTagStats nc =
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
viewSources : Flags -> Model -> List (Html Msg)
|
viewSources : Flags -> UiSettings -> Model -> List (Html Msg)
|
||||||
viewSources flags model =
|
viewSources flags settings model =
|
||||||
[ h2 [ class "ui header" ]
|
[ h2 [ class "ui header" ]
|
||||||
[ i [ class "ui upload icon" ] []
|
[ i [ class "ui upload icon" ] []
|
||||||
, div [ class "content" ]
|
, div [ class "content" ]
|
||||||
[ text "Sources"
|
[ text "Sources"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
, Html.map SourceMsg (Comp.SourceManage.view flags model.sourceModel)
|
, Html.map SourceMsg (Comp.SourceManage.view flags settings model.sourceModel)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
53
modules/webapp/src/main/elm/Util/Folder.elm
Normal file
53
modules/webapp/src/main/elm/Util/Folder.elm
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
module Util.Folder exposing
|
||||||
|
( isFolderMember
|
||||||
|
, mkFolderOption
|
||||||
|
)
|
||||||
|
|
||||||
|
import Api.Model.FolderItem exposing (FolderItem)
|
||||||
|
import Api.Model.IdName exposing (IdName)
|
||||||
|
import Comp.Dropdown
|
||||||
|
import Data.Flags exposing (Flags)
|
||||||
|
|
||||||
|
|
||||||
|
mkFolderOption : Flags -> List FolderItem -> IdName -> Comp.Dropdown.Option
|
||||||
|
mkFolderOption flags allFolders idref =
|
||||||
|
let
|
||||||
|
folder =
|
||||||
|
List.filter (\e -> e.id == idref.id) allFolders
|
||||||
|
|> List.head
|
||||||
|
|
||||||
|
isMember =
|
||||||
|
folder
|
||||||
|
|> Maybe.map .isMember
|
||||||
|
|> Maybe.withDefault False
|
||||||
|
|
||||||
|
isOwner =
|
||||||
|
Maybe.map .owner folder
|
||||||
|
|> Maybe.map .name
|
||||||
|
|> (==) (Maybe.map .user flags.account)
|
||||||
|
|
||||||
|
adds =
|
||||||
|
if isOwner then
|
||||||
|
"owner"
|
||||||
|
|
||||||
|
else if isMember then
|
||||||
|
"member"
|
||||||
|
|
||||||
|
else
|
||||||
|
""
|
||||||
|
in
|
||||||
|
{ value = idref.id, text = idref.name, additional = adds }
|
||||||
|
|
||||||
|
|
||||||
|
isFolderMember : List FolderItem -> Maybe String -> Bool
|
||||||
|
isFolderMember allFolders selected =
|
||||||
|
let
|
||||||
|
findFolder id =
|
||||||
|
List.filter (\e -> e.id == id) allFolders
|
||||||
|
|> List.head
|
||||||
|
|
||||||
|
folder =
|
||||||
|
Maybe.andThen findFolder selected
|
||||||
|
in
|
||||||
|
Maybe.map .isMember folder
|
||||||
|
|> Maybe.withDefault True
|
Loading…
x
Reference in New Issue
Block a user