Skip to content

Commit 41a37c4

Browse files
Some improvements to the Upload component (#162)
* Add FormDefaults instance for Set and Map * Fix weird border on upload component * Add onClick prop to Upload and let specific files be non-removable * Code review feedback
1 parent d2a7951 commit 41a37c4

File tree

5 files changed

+128
-52
lines changed

5 files changed

+128
-52
lines changed

docs/Examples/Form.example.purs

+7-1
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,13 @@ userForm = ado
425425
{ variant: Upload.Avatar
426426
, backend:
427427
{ fetch: \id ->
428-
pure { id, name: Upload.FileName "avatar", previewUri: Nothing }
428+
pure
429+
{ id
430+
, name: Upload.FileName "avatar"
431+
, previewUri: Nothing
432+
, readonly: false
433+
}
434+
, remove: \_ -> pure true
429435
, upload: \file -> produceAff \emitter -> do
430436
let
431437
totalBytes = Int.round $ File.size file

docs/Examples/Upload.example.purs

+30-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import Effect.Random (randomRange)
1717
import Effect.Uncurried (runEffectFn2)
1818
import Lumi.Components.Button (button, primary) as Button
1919
import Lumi.Components.Column (column, column_)
20+
import Lumi.Components.Example (example)
2021
import Lumi.Components.Input as Input
2122
import Lumi.Components.LabeledField (labeledField, RequiredField(..))
2223
import Lumi.Components.Text (h2_)
2324
import Lumi.Components.Upload (FileId(..), FileName(..), UploadVariant(..), defaults, upload)
24-
import Lumi.Components.Example (example)
2525
import React.Basic (Component, JSX, createComponent, make)
2626
import React.Basic.DOM as R
2727
import React.Basic.DOM.Events (targetChecked)
@@ -117,7 +117,13 @@ docs = unit # make component { initialState, didMount, render }
117117
, readonly = self.state.readonly
118118
, backend =
119119
{ fetch: \id@(FileId name) ->
120-
pure { id, name: FileName name, previewUri: Nothing }
120+
pure
121+
{ id
122+
, name: FileName name
123+
, previewUri: Nothing
124+
, readonly: false
125+
}
126+
, remove: \_ -> pure true
121127
, upload: \file -> produceAff \emitter ->
122128
uploadWithRandomPauses emitter file
123129
}
@@ -134,10 +140,17 @@ docs = unit # make component { initialState, didMount, render }
134140
{ value = self.state.files
135141
, variant = Files
136142
, onChange = send self <<< FileEx
143+
, onClick = \(FileId id) -> Just $ log id
137144
, readonly = self.state.readonly
138145
, backend =
139146
{ fetch: \id@(FileId name) ->
140-
pure { id, name: FileName name, previewUri: Nothing }
147+
pure
148+
{ id
149+
, name: FileName name
150+
, previewUri: Nothing
151+
, readonly: false
152+
}
153+
, remove: \_ -> pure true
141154
, upload: \file -> produceAff \emitter -> do
142155
foldMap AVar.read self.state.startUpload
143156
void $ foldMap AVar.tryTake self.state.startUpload
@@ -163,7 +176,13 @@ docs = unit # make component { initialState, didMount, render }
163176
, readonly = self.state.readonly
164177
, backend =
165178
{ fetch: \id@(FileId name) -> do
166-
pure { id, name: FileName name, previewUri: Nothing }
179+
pure
180+
{ id
181+
, name: FileName name
182+
, previewUri: Nothing
183+
, readonly: false
184+
}
185+
, remove: \_ -> pure true
167186
, upload: \file -> produceAff \emitter ->
168187
uploadWithRandomPauses emitter file
169188
}
@@ -182,7 +201,13 @@ docs = unit # make component { initialState, didMount, render }
182201
, readonly = self.state.readonly
183202
, backend =
184203
{ fetch: \id@(FileId name) -> do
185-
pure { id, name: FileName name, previewUri: Nothing }
204+
pure
205+
{ id
206+
, name: FileName name
207+
, previewUri: Nothing
208+
, readonly: false
209+
}
210+
, remove: \_ -> pure true
186211
, upload: \file -> produceAff \emitter ->
187212
uploadWithRandomPauses emitter file
188213
}

src/Lumi/Components/Form.purs

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ import Lumi.Components.Column (column)
8181
import Lumi.Components.FetchCache as FetchCache
8282
import Lumi.Components.Form.Defaults (formDefaults) as Defaults
8383
import Lumi.Components.Form.Internal (Forest, FormBuilder'(..), FormBuilder, SeqFormBuilder, Tree(..), formBuilder, formBuilder_, invalidate, pruneTree, sequential)
84-
import Lumi.Components.Form.Internal (Forest(..), FormBuilder', FormBuilder, SeqFormBuilder', SeqFormBuilder, formBuilder, formBuilder_, invalidate, listen, parallel, revalidate, sequential) as Internal
84+
import Lumi.Components.Form.Internal (Forest, FormBuilder', FormBuilder, SeqFormBuilder', SeqFormBuilder, Tree(..), formBuilder, formBuilder_, invalidate, listen, parallel, revalidate, sequential) as Internal
8585
import Lumi.Components.Form.Validation (setModified)
8686
import Lumi.Components.Form.Validation (Validated(..), Validator, _Validated, fromValidated, mustBe, mustEqual, nonEmpty, nonEmptyArray, nonNull, validNumber, validInt, validDate, optional, setFresh, setModified, validated, warn) as Validation
8787
import Lumi.Components.Input (alignToInput)

src/Lumi/Components/Form/Defaults.purs

+6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ import Prelude
99

1010
import Data.Array.NonEmpty (NonEmptyArray)
1111
import Data.Either (Either(..))
12+
import Data.Map (Map)
13+
import Data.Map as Map
14+
import Data.Set (Set)
15+
import Data.Set as Set
1216
import Data.Maybe (Maybe(..))
1317
import Data.Symbol (class IsSymbol, SProxy(..))
1418
import Lumi.Components.Form.Validation (Validated(..))
@@ -38,6 +42,8 @@ instance formDefaultsNumber :: FormDefaults Number where formDefaults = 0.0
3842
instance formDefaultsInt :: FormDefaults Int where formDefaults = 0
3943
instance formDefaultsString :: FormDefaults String where formDefaults = ""
4044
instance formDefaultsArray :: FormDefaults (Array a) where formDefaults = []
45+
instance formDefaultsSet :: FormDefaults (Set a) where formDefaults = Set.empty
46+
instance formDefaultsMap :: FormDefaults (Map k a) where formDefaults = Map.empty
4147

4248
instance formDefaultsNonEmptyArray :: FormDefaults a => FormDefaults (NonEmptyArray a) where
4349
formDefaults = pure formDefaults

0 commit comments

Comments
 (0)