@@ -2,15 +2,17 @@ module Lumi.Components.Table.FilterDropdown where
22
33import Prelude hiding (div )
44
5+ import Color (cssStringHSLA )
56import Control.Alt ((<|>))
67import Data.Array (drop , mapWithIndex , take , (!!))
78import Data.Foldable (for_ )
89import Data.Maybe (Maybe (..), fromMaybe , maybe )
910import Data.Nullable (Nullable , toMaybe )
1011import Effect.Uncurried (EffectFn1 , EffectFn2 , mkEffectFn2 , runEffectFn1 , runEffectFn2 )
11- import Lumi.Components.Size ( small )
12+ import Lumi.Components.Color ( colors )
1213import Lumi.Components.Icon (IconType (Rearrange), icon )
1314import Lumi.Components.Input (CheckboxState (..), checkbox , input )
15+ import Lumi.Components.Size (small )
1416import React.Basic (Component , JSX , createComponent , element , keyed , makeStateless )
1517import React.Basic.DOM (CSS , css , div , text , unsafeCreateDOMComponent )
1618import React.Basic.DOM.Events (targetChecked )
@@ -106,19 +108,23 @@ filterItem_ = makeStateless filterItemComponent render
106108 connectDragSource $ connectDropTarget $
107109 element (unsafeCreateDOMComponent " lumi-row" )
108110 { className: if item.hidden then " " else " active"
109- , style: css
110- { padding: " 0 8px 0 0"
111- , alignItems: " center"
112- , borderTop:
113- if isOver && (fromMaybe false ((\dragItem -> dragItem.index > index) <$> maybeDragItem))
114- then " 2px solid #0044e4"
115- else " 2px solid transparent"
116- , borderBottom:
117- if isOver && (fromMaybe false ((\dragItem -> dragItem.index < index) <$> maybeDragItem))
118- then " 2px solid #0044e4"
119- else " 2px solid transparent"
120- , opacity: if isDragging then 0.1 else 1.0
121- }
111+ , style:
112+ let
113+ borderStyle :: (Int -> Int -> Boolean ) -> String
114+ borderStyle compare' =
115+ if isOver && maybe false (\dragItem -> dragItem.index `compare'` index) maybeDragItem
116+ then " 2px solid " <> cssStringHSLA colors.primary
117+ else " 2px solid " <> cssStringHSLA colors.transparent
118+ borderTop = borderStyle (>)
119+ borderBottom = borderStyle (<)
120+ in
121+ css
122+ { padding: " 0 8px"
123+ , alignItems: " center"
124+ , borderTop
125+ , borderBottom
126+ , opacity: if isDragging then 0.1 else 1.0
127+ }
122128 , children:
123129 [ renderInput onChange items item
124130 , renderLabel item
0 commit comments