Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ny komponent FileUpload #2504

Merged
merged 243 commits into from
Mar 15, 2024
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
a65bbcc
Ny komponent FileUpload
torkjels Nov 21, 2023
c54c037
Legg til knapp i box-varianten
torkjels Nov 22, 2023
cc51a2c
Skill på acceptede og rejectede filer i onUpload
torkjels Nov 22, 2023
4376843
Ha én return og flere if's for å gjenbruke kode
torkjels Nov 22, 2023
a794caf
Dra ut partition-utils i egne filer og skriv tester for dem
torkjels Nov 22, 2023
c926dc6
Fiks brukket bygg pga typescript-feil
torkjels Nov 23, 2023
f1d5267
Fiks brukket bygg ved å fjerne ubrukte props i stories
torkjels Nov 23, 2023
31fa77b
Gjør om label-innhold til span og bruk gap istedenfor margin
torkjels Nov 23, 2023
3d277e6
Focus-, hover- og error-styling
torkjels Nov 23, 2023
9fdaf73
ondragover-effekt
torkjels Nov 23, 2023
e5bc40a
Fiks fokus-markering som ikke funker når viser error
torkjels Nov 23, 2023
df47411
Fiks drag-effekt og dra ut i egne sub-komponenter
torkjels Nov 23, 2023
a4cca10
Legg på label og description
torkjels Nov 24, 2023
3676224
Sett min-width tilsvarende height*2.
torkjels Nov 24, 2023
d04cbe4
Fiks lint-errors
torkjels Nov 27, 2023
0f09135
Rød error-border på zone-variant
torkjels Nov 27, 2023
4bd2414
ondrag: bytt js-løsning med after-løsning
torkjels Nov 27, 2023
d1f6101
Endre fra Wrapper og variant til sub-komponenter
torkjels Nov 27, 2023
90f04f6
Fjern kommentar med feil props-lenke. Variantene har ikke egne props
torkjels Nov 27, 2023
56c80ba
Fiks auto-fyll av bredde
torkjels Nov 27, 2023
6c4cc99
Støtte for nb, nn og en locale
torkjels Nov 27, 2023
21c88b9
Småtweak på eksempel og feilmelding
torkjels Nov 27, 2023
ce49c36
Bruk useFormFields
torkjels Nov 27, 2023
c559775
Endre knappe-tekst
torkjels Nov 28, 2023
d748986
Endre span-knapp til Button-knapp
torkjels Nov 28, 2023
8d84bff
Merge branch 'main' into file-uploader
KenAJoh Nov 29, 2023
1a8e3ef
:truck: Flyttet component-definition over kode
KenAJoh Nov 29, 2023
7f93e18
:truck: Rename context, update exports, moved parts -> /parts
KenAJoh Nov 29, 2023
dce6a4a
:bug: Fixed imports in parts
KenAJoh Nov 29, 2023
abe6025
:label: rename buttonvariant -> uploadbutton
KenAJoh Nov 29, 2023
7610e7e
:recycle: refactor types/forwardref in UploadButton
KenAJoh Nov 29, 2023
3e550ad
:label: Rename zone -> dropzone, :recycle: Refactor dropzone with for…
KenAJoh Nov 29, 2023
f274a2c
:label: zone -> dropzone in stories
KenAJoh Nov 29, 2023
8ab16f9
Update @navikt/core/css/form/file-upload.css
torkjels Nov 30, 2023
fa29540
Update @navikt/core/css/form/file-upload.css
torkjels Nov 30, 2023
2175dab
Update @navikt/core/react/src/form/file-upload/parts/UploadButton.tsx
torkjels Nov 30, 2023
8ee5441
Update @navikt/core/react/src/form/file-upload/parts/UploadButton.tsx
torkjels Nov 30, 2023
1932549
Fjern ubrukt klasse
torkjels Nov 30, 2023
f761980
Fiks parentes-feil
torkjels Nov 30, 2023
beeba6a
Fjern logikk for minWidth ettersom vi uansett har width: 100%
torkjels Nov 30, 2023
a944a71
Fjern Button-variant for å holde versjon 1 clean
torkjels Dec 1, 2023
b2abb74
Nytt design
torkjels Dec 1, 2023
f0d0adf
Juster ned border-width på error for å unngå hopping. Kan fikses senere.
torkjels Dec 1, 2023
4c15ae8
Fjern ubrukt styling
torkjels Dec 1, 2023
d7d9750
Merge branch 'main' into file-uploader
torkjels Dec 1, 2023
3d01766
Fiks ref-type
torkjels Dec 1, 2023
a46bf0b
Fjern ubrukt context
torkjels Dec 1, 2023
7bb1ad9
Skjul "Dra og slipp eller" for skjermleser
torkjels Dec 4, 2023
3658237
Støtte for å lime inn filer
torkjels Dec 5, 2023
7354f8f
Merge branch 'main' into file-uploader
torkjels Dec 5, 2023
7364538
Fjern input-element som ikke skulle med
torkjels Dec 5, 2023
408a63f
Flytt paste-funksjon inn i effect og fjern ekkel for-løkke
torkjels Dec 6, 2023
624b0f3
FileUpload.List (#2535)
torkjels Dec 6, 2023
bcaff8a
Fjern endringer i urelaterte filer som kom etter en mislykka merge
torkjels Dec 6, 2023
fb7139a
prettier
torkjels Dec 6, 2023
389746d
Legg til word-break
torkjels Dec 6, 2023
1d2dcbe
La ikon og knapp forbli på toppen ved breaking over flere linjer
torkjels Dec 7, 2023
4fb021e
isNativeFile funker nå også i Node
torkjels Dec 7, 2023
2b252b6
Native File eller base64 sånn at det funker med ssr
torkjels Dec 7, 2023
06ad65f
PR-pynt
torkjels Dec 8, 2023
8da51e4
Importér fra navikt/ds-react
torkjels Dec 8, 2023
60c24a1
Revert "Importér fra navikt/ds-react"
torkjels Dec 8, 2023
e7ed6a7
Endre "Last opp filer" til "Velg filer"
torkjels Dec 8, 2023
c909381
Eksportér filtyper
torkjels Dec 8, 2023
1055778
Dokumentér base64
torkjels Dec 8, 2023
34951e1
Bruk riktig border-farge på items
torkjels Dec 8, 2023
c5548f6
Eksportér FileItem
torkjels Dec 8, 2023
d8c85b2
Rename onUpload til onSelect
torkjels Dec 8, 2023
3c2ceec
Fjern rusk fra stories
torkjels Dec 8, 2023
227d1f4
Margin over og under lista
torkjels Dec 8, 2023
62fa6d3
Fiks label på story
torkjels Dec 8, 2023
f9fd951
Småpirk
HalvorHaugan Dec 8, 2023
2ca016f
Oppdatert accept-dokumentasjon
torkjels Dec 11, 2023
c15133e
refak item
HalvorHaugan Dec 11, 2023
7a0a4be
i18n item
HalvorHaugan Dec 11, 2023
8144364
loader margin top
HalvorHaugan Dec 11, 2023
5125328
refak file type check
HalvorHaugan Dec 11, 2023
34dcac6
refak formatFileSize
HalvorHaugan Dec 11, 2023
f010d00
tekst for multiple=false
HalvorHaugan Dec 11, 2023
3fa18ce
mappings deps
HalvorHaugan Dec 11, 2023
faaa46f
labelTag og valgfri label
HalvorHaugan Dec 11, 2023
109b686
List error css
HalvorHaugan Dec 11, 2023
bbbc16a
Justeringer Item og litt List
HalvorHaugan Dec 11, 2023
fac816b
ID genereres automatisk
HalvorHaugan Dec 11, 2023
270edd8
isDownloading
HalvorHaugan Dec 11, 2023
8aa1474
Stories!
HalvorHaugan Dec 11, 2023
f568c64
Slå sammen isUploading og isDownloading
HalvorHaugan Dec 12, 2023
02c920f
storyflikking
HalvorHaugan Dec 13, 2023
30daf5b
Merge branch 'main' into file-uploader
HalvorHaugan Dec 13, 2023
640680e
Endringer
HalvorHaugan Dec 13, 2023
72dceab
Fokus
HalvorHaugan Dec 13, 2023
4c145f6
extends FormFieldProps
HalvorHaugan Dec 13, 2023
0cbb877
eksport og memo
HalvorHaugan Dec 13, 2023
ea64121
Bort med Accept
HalvorHaugan Dec 13, 2023
46ba66f
Ikke vis error-styling på upload/download
torkjels Dec 13, 2023
bca8f0b
Oppdater stories
torkjels Dec 13, 2023
6c6305e
ikke fjern error border på hover
HalvorHaugan Dec 13, 2023
46bfe92
Fjern unødvendig base64-til-blob-konvertering
torkjels Dec 15, 2023
ca5fa3b
Endre base64 til base64DataUrl
torkjels Dec 18, 2023
3c62a7d
color på btn ved hover, samt rydda litt i tokens
HalvorHaugan Dec 18, 2023
bb39169
Fjern base64DataUrl
torkjels Dec 20, 2023
8dbe247
Merge branch 'main' into file-uploader
KenAJoh Jan 17, 2024
986a4e3
:bug: Fikset imports av utils
KenAJoh Jan 17, 2024
c491860
:bug: Fikset imports
KenAJoh Jan 17, 2024
fdf8166
:fire: Fjernet ekstra story
KenAJoh Jan 17, 2024
dac5d22
:truck: Flyttet locale-provider til wrapper
KenAJoh Jan 17, 2024
f5ec70b
:reacycle: Fjernet children-mappin i List
KenAJoh Jan 18, 2024
d1e80c9
:recycle: Oppdatert bruk av locale i komponenter
KenAJoh Jan 18, 2024
24e4267
:fire: Fjernet nn-locale
KenAJoh Jan 18, 2024
e56a143
:fire: Fjernet story-snapshot
KenAJoh Jan 18, 2024
2cae2ab
:memo: Todo
KenAJoh Jan 18, 2024
d99c264
:fire: Fjernet listitem
KenAJoh Jan 18, 2024
dd33f98
:fire: Fjernet list
KenAJoh Jan 18, 2024
5abec06
:fire: Fjernet duplikat error-marking
KenAJoh Jan 18, 2024
cdc871b
:art: Wrapper er nå et div-element
KenAJoh Jan 18, 2024
83f8b93
:art: ul,li-reset
KenAJoh Jan 18, 2024
7062bb6
:lipstick: Justert visning av dragover-overlay
KenAJoh Jan 18, 2024
3c68efb
:lipstick: Drag-n-drop animert
KenAJoh Jan 18, 2024
3deacdf
:lipstick: Animate icon
KenAJoh Jan 18, 2024
8c945bd
:art: Animated demo
KenAJoh Jan 18, 2024
2fe2008
:lipstick: animated box-shadow on error item
KenAJoh Jan 18, 2024
633cdbf
:lipstick: action-selected farge for dragover tekst
KenAJoh Jan 18, 2024
8eb6785
:bug: Fikset locale-bug
KenAJoh Jan 19, 2024
0a97c5a
WIP: checkpoint animation
KenAJoh Jan 20, 2024
e10b580
:lipstick: Animated colors
KenAJoh Jan 20, 2024
029f9b7
:test_tube: Widget story
KenAJoh Jan 20, 2024
b3f7057
Merge branch 'main' into file-uploader
KenAJoh Jan 23, 2024
9420a4c
:fire: Fjernet console.log
KenAJoh Jan 23, 2024
9eda934
:lipstick: Transition på dragover-text
KenAJoh Jan 23, 2024
76d66f5
:recycle: Forenklet bruk av :has
KenAJoh Jan 23, 2024
98c904f
:fire: Fjernet bruk av navds-file-dropzone__dragover som selector
KenAJoh Jan 23, 2024
04552cc
:recycle: Dragover-overlay er nå psudo-element
KenAJoh Jan 23, 2024
2c142a4
:memo: Todo
KenAJoh Jan 23, 2024
4e4a813
:recycle: Oppdatert locale-bruk i fileupload
KenAJoh Jan 24, 2024
7ed87e3
:bug: hover på zone oppdaterte ikke button
KenAJoh Jan 24, 2024
47c221a
:truck: flyttet dropzone til egen mappe
KenAJoh Jan 24, 2024
7d6f932
:truck: Flyttet logikk for dropzone ut i egen hook
KenAJoh Jan 24, 2024
878a1f5
:truck: Trukket ut logikk for dropzone i hook
KenAJoh Jan 24, 2024
bb91506
:fire: Fjernet FileUpload.List
KenAJoh Jan 24, 2024
98533f4
:lipstick: CSS refactor
KenAJoh Jan 24, 2024
fc53500
:fire: Fjernet ref-sjekk for onDrag
KenAJoh Jan 24, 2024
5abfc19
:bug: Pointer-events none for å beholde drag-state
KenAJoh Jan 24, 2024
8f1f8f5
:recycle: Bruker tokens internt i fileupload css
KenAJoh Jan 24, 2024
24c660a
:recycle: CSS-naming
KenAJoh Jan 24, 2024
8b25b9f
:memo: JSDOC for dropzone and fileupload
KenAJoh Jan 24, 2024
774d3a7
:recycle: FileUpload item støtter overridabecomponent
KenAJoh Jan 24, 2024
6bd1b54
:recycle: Forenklet FileUpload.Item
KenAJoh Jan 24, 2024
f6ac37f
:recycle: Item sizing
KenAJoh Jan 24, 2024
2d530e5
:lipstick: Small loading-text
KenAJoh Jan 24, 2024
141be84
:lipstick: Animated bg on item-icon
KenAJoh Jan 24, 2024
ec58552
:recycle: Oppdatert conditional-props for FileUpload.Item
KenAJoh Jan 24, 2024
e18c59e
:art: FileError icon on Item-error
KenAJoh Jan 24, 2024
0a43c44
:lipstick: Animert ikonstørrelse
KenAJoh Jan 25, 2024
5cc1c14
:lipstick: Padding på FileItem
KenAJoh Jan 25, 2024
ae60db6
:label: rename zone className
KenAJoh Jan 25, 2024
8e2614f
:label: Rename zone -> area
KenAJoh Jan 25, 2024
ad3a639
:memo: FileItem jsdoc
KenAJoh Jan 25, 2024
2cc6199
:truck: Oppdatert types-name
KenAJoh Jan 26, 2024
5136380
:memo: Oppdatert locale-tekster
KenAJoh Jan 26, 2024
4d710f8
:bug: Locale-story oppdatert
KenAJoh Jan 26, 2024
6989607
:art: Tydeligere border on hover
KenAJoh Jan 26, 2024
323db30
:tada: FileUpload.Trigger komponent
KenAJoh Jan 27, 2024
7132b56
:fire: Fjernet extended inputprops fra Trigger
KenAJoh Jan 27, 2024
3c43ffd
:art: Oppdatert feilvalidering
KenAJoh Jan 28, 2024
e9c1a1a
:bug: Fikset stories
KenAJoh Jan 28, 2024
dee48dd
:bug: Import feilet
KenAJoh Jan 28, 2024
9a69884
WIP: Disabled-state
KenAJoh Jan 29, 2024
69a6e75
:recycle: Refactor useDropzone -> useFileUpload
KenAJoh Jan 29, 2024
7238d2b
:fire: Fjernet copy-paste feature
KenAJoh Jan 29, 2024
fd85dcc
Merge branch 'main' into file-uploader
KenAJoh Jan 31, 2024
8c39e4a
:twisted_rightwards_arrows: merge main yarn.lock
KenAJoh Jan 31, 2024
62a9d21
:recycle: Error i Item er nå utenfor box
KenAJoh Jan 31, 2024
8155277
:art: Statustekst vises nå sammen med error
KenAJoh Jan 31, 2024
179fc67
:label: Types
KenAJoh Jan 31, 2024
f8b2d31
:art: Custom tekster
KenAJoh Jan 31, 2024
63f8d9e
WIP: custom-tekster
KenAJoh Jan 31, 2024
d815306
:memo: Bedre storybook-eksempler
KenAJoh Feb 1, 2024
c2c840a
:memo: UU-tester
KenAJoh Feb 1, 2024
874d60d
:art: La til download attr på item-name
KenAJoh Feb 1, 2024
f8abc41
:recycle: Refactor hvordan status og delete/reset håndteres
KenAJoh Feb 1, 2024
0dc16ab
:recycle: Oppdatert typer i story
KenAJoh Feb 1, 2024
3599ee2
Merge branch 'main' into file-uploader
KenAJoh Feb 2, 2024
a626a68
Merge branch 'main' into file-uploader
KenAJoh Feb 5, 2024
74b3692
:truck: Kopiert over kode for i18n
KenAJoh Feb 5, 2024
4672ce0
:globe_with_meridians: Locale støtte
KenAJoh Feb 5, 2024
f97a9d3
:fire: Første release uten tokens
KenAJoh Feb 5, 2024
0b7dbb0
:fire: Fjernet redundant stories
KenAJoh Feb 5, 2024
961292a
:memo: changeset
KenAJoh Feb 5, 2024
3a652af
:fire: Fjernet locale JSDOC
KenAJoh Feb 5, 2024
483ce0c
Småpirk
HalvorHaugan Feb 13, 2024
5aad425
Test av reason, test av maxSizeInBytes, rename testfil
HalvorHaugan Feb 13, 2024
2e776fa
Update @navikt/core/css/form/file-upload.css
KenAJoh Feb 13, 2024
02ac70c
:lipstick: Endret fra border -> outline på dropzone
KenAJoh Feb 13, 2024
e48995d
:bug: border-color -> outline-color
KenAJoh Feb 13, 2024
339b113
:fire: Fjernet place-center på disabled dropzone
KenAJoh Feb 13, 2024
69cda85
:lipstick: file-item offset is -1px
KenAJoh Feb 13, 2024
b6d484c
Apply suggestions from code review
KenAJoh Feb 13, 2024
b9281d7
Update @navikt/core/react/src/form/file-upload/parts/Trigger.tsx
KenAJoh Feb 13, 2024
7c3c7aa
Update @navikt/core/react/src/form/file-upload/parts/dropzone/useDrop…
KenAJoh Feb 13, 2024
4204c68
Update @navikt/core/react/src/form/file-upload/parts/dropzone/useDrop…
KenAJoh Feb 13, 2024
888d263
Update @navikt/core/react/src/form/file-upload/parts/dropzone/useDrop…
KenAJoh Feb 13, 2024
860e0d2
JSDOC, css og litt flikking på item stories
HalvorHaugan Feb 14, 2024
2f51120
Merge branch 'main' into file-uploader
HalvorHaugan Feb 14, 2024
b2ac128
JSDOC, fiks validering, +++
HalvorHaugan Feb 14, 2024
c75dab1
fix test
HalvorHaugan Feb 14, 2024
3c7789a
Sterkere typer for i18n utils
HalvorHaugan Feb 14, 2024
7533a11
Stories og litt typer
HalvorHaugan Feb 14, 2024
373e840
fix story, endre sjekk av disabled i useFileUpload
HalvorHaugan Feb 14, 2024
a7629f4
Merge branch 'main' into file-uploader
HalvorHaugan Feb 15, 2024
e46add9
Ny struktur på returnerte filer
HalvorHaugan Feb 15, 2024
321adb7
Fjern "Aksel" namespace på oversettelser
HalvorHaugan Feb 15, 2024
915d162
Mindre margin på error
HalvorHaugan Feb 15, 2024
7313114
nb.Aksel -> nb
HalvorHaugan Feb 15, 2024
0112440
Fiks test validate-files
HalvorHaugan Feb 15, 2024
9edce4e
Fiks i18n
HalvorHaugan Feb 15, 2024
eb1450e
UNSAFE
HalvorHaugan Feb 15, 2024
f59e872
Forenklet OBJECT_NOTATION_MATCHER
HalvorHaugan Feb 15, 2024
d9625a4
Eksempler
HalvorHaugan Feb 15, 2024
0bfe7ee
:lipstick: animert og oppdatert fileupload error
KenAJoh Feb 16, 2024
1f0aedd
Merge branch 'main' into file-uploader
HalvorHaugan Feb 27, 2024
94b1f68
exports
HalvorHaugan Feb 27, 2024
e1bbc25
fixes
HalvorHaugan Feb 27, 2024
5693db6
tester noe
HalvorHaugan Feb 27, 2024
191aa38
fiks playroom
HalvorHaugan Feb 27, 2024
de0a443
export FileAccepted og RejectedPartitionedFile
HalvorHaugan Feb 27, 2024
97b5625
rename og export PartitionedFiles
HalvorHaugan Feb 28, 2024
67652cb
rename RejectedPartitionedFile
HalvorHaugan Feb 28, 2024
fde5768
ul/li
HalvorHaugan Feb 29, 2024
7e41304
Trigger button secondary
HalvorHaugan Mar 1, 2024
b36b71f
Justert tekster på default eksempel
HalvorHaugan Mar 1, 2024
279137d
Eksempel på Trigger
HalvorHaugan Mar 1, 2024
b1fe537
fix mobile view på story
HalvorHaugan Mar 1, 2024
1e1cdb3
Ny design på Item error
HalvorHaugan Mar 1, 2024
c7f4cc4
story på drag state
HalvorHaugan Mar 1, 2024
876da17
Merge branch 'main' into file-uploader
HalvorHaugan Mar 1, 2024
b868f6b
fjern rest på Trigger
HalvorHaugan Mar 4, 2024
f1ccf09
FileUpload: display:none på input (#2773)
HalvorHaugan Mar 11, 2024
368b15a
Merge branch 'main' into file-uploader
HalvorHaugan Mar 11, 2024
8030d03
Endringer på i18n
HalvorHaugan Mar 13, 2024
2a2554a
Merge branch 'main' into file-uploader
HalvorHaugan Mar 13, 2024
475cee7
fix replacement type
HalvorHaugan Mar 13, 2024
8155147
i18n tests
HalvorHaugan Mar 13, 2024
7fb62b8
Record
HalvorHaugan Mar 13, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions @navikt/core/css/config/_mappings.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ const StyleMappings = {
dependencies: [typoCss],
},
{ component: "Fieldset", main: formCss, dependencies: [typoCss] },
{ component: "FileUpload", main: formCss, dependencies: [typoCss] },
{ component: "Grid", main: "grid.css", dependencies: [typoCss] },
{
component: "GuidePanel",
Expand Down
68 changes: 68 additions & 0 deletions @navikt/core/css/form/file-upload.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
.navds-fileupload {
position: relative;
text-align: center
}

.navds-fileupload__button {
position: relative;
cursor: pointer;
background-color: var(--ac-file-upload-button-bg, var(--a-bg-default));
transition: 0.2s ease all;
torkjels marked this conversation as resolved.
Show resolved Hide resolved
}

.navds-fileupload:hover .navds-fileupload__button {
background-color: var(--ac-file-upload-action-hover-bg, var(--a-surface-action-subtle-hover));
}

.navds-fileupload--zone {
position: relative;
background-color: var(--ac-file-upload-bg, var(--a-surface-subtle));
padding: var(--a-spacing-5);
border: 1px dashed #0067C5;
border-radius: var(--ac-file-upload-border-radius, var(--a-border-radius-medium));
color: var(--ac-file-upload-text, var(--a-text-action));
transition: 0.2s ease border, 0.2s ease background-color;
display: flex;
flex-direction: column;
gap: 10px;
torkjels marked this conversation as resolved.
Show resolved Hide resolved
justify-content: center;
align-items: center;
cursor: pointer;
}

.navds-fileupload--zone:hover {
background-color: var(--ac-file-upload-action-hover-bg, var(--a-surface-action-subtle-hover));
}

.navds-fileupload--dragover,
.navds-fileupload--dragover .navds-fileupload__button {
background-color: var(--ac-file-upload-dragover-bg, var(--a-surface-action-subtle-hover));
}

.navds-fileupload--error:not(:hover):not(.navds-fileupload--dragover) .navds-fileupload__button {
box-shadow: inset 0 0 0 2px var(--ac-file-upload-error-border, var(--a-surface-danger))
}

.navds-fileupload:focus:not(.navds-fileupload--dragover) .navds-fileupload__button,
.navds-fileupload:focus-within:not(.navds-fileupload--dragover) .navds-fileupload__button {
box-shadow: inset 0 0 0 2px
var(--ac-button-secondary-focus-border, var(--__ac-button-secondary-focus-border, var(--a-border-action))),
var(--a-shadow-focus);
}

.navds-fileupload__input {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}

.navds-fileupload__icon {
margin-right: 0.1em;
cursor: pointer;
}
1 change: 1 addition & 0 deletions @navikt/core/css/form/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Order matters; rearrange with care
*/
@import "fieldset.css";
@import "file-upload.css";
@import "form.css";
@import "error-summary.css";
@import "confirmation-panel.css";
Expand Down
10 changes: 10 additions & 0 deletions @navikt/core/css/tokens.json
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,16 @@
"--ac-error-summary-border": "--a-border-danger",
"--ac-error-summary-list-dot": "--a-text-action"
},
"fileupload": {
"--ac-file-upload-bg": "--a-surface-subtle",
"--ac-file-upload-button-bg": "--a-bg-default",
"--ac-file-upload-dragover-bg": "--a-surface-action-subtle-hover",
"--ac-file-upload-border": "--a-border-action",
"--ac-file-upload-error-border": "--a-surface-danger",
"--ac-file-upload-action-hover-bg": "--a-surface-action-subtle-hover",
"--ac-file-upload-border-radius": "--a-border-radius-medium",
"--ac-file-upload-text": "--a-text-action"
},
"checkbox-radio": {
"--ac-radio-checkbox-bg": "--a-surface-default",
"--ac-radio-checkbox-border": "--a-border-default",
Expand Down
53 changes: 53 additions & 0 deletions @navikt/core/react/src/form/file-upload/ButtonVariant.tsx
torkjels marked this conversation as resolved.
Outdated
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import React, { ChangeEvent } from "react";
import Wrapper from "./Wrapper";
import UploadButton from "./UploadButton";

interface Props {
label: string;
description: string | undefined;
className: string | undefined;
divRef: React.Ref<HTMLDivElement>;
error: string | undefined;
inputId: string;
multiple: boolean;
accept: string | undefined;
handleUpload: (event: ChangeEvent<HTMLInputElement>) => void;
onDragEnter: () => void;
onDragEnd: () => void;
isDraggingOver: boolean;
}

const ButtonVariant = ({
label,
description,
className,
onDragEnter,
onDragEnd,
divRef,
error,
isDraggingOver,
inputId,
multiple,
accept,
handleUpload
}: Props) => (
<Wrapper
label={label}
description={description}
divRef={divRef}
className={className}
error={error}
inputId={inputId}
multiple={multiple}
accept={accept}
handleUpload={handleUpload}
onDragEnter={onDragEnter}
onDragEnd={onDragEnd}
isDraggingOver={isDraggingOver}
fullWidth={false}
>
<UploadButton />
</Wrapper>
)

export default ButtonVariant
151 changes: 151 additions & 0 deletions @navikt/core/react/src/form/file-upload/FileUpload.tsx
torkjels marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
import React, { forwardRef, ChangeEvent, useState } from "react";
import { partitionFiles } from "./partition-files";
import ButtonVariant from "./ButtonVariant";
import ZoneVariant from "./ZoneVariant";

export interface OnUploadProps {
allFiles: File[],
acceptedFiles: File[],
rejectedFiles: File[]
}

export interface FileUploadProps {
/**
* Changes styling when changed.
* The "zone" variant takes up the full
* width of its parent, while the "button"
* variant takes up width based on its content.
* Both styles support opening a file viewer
* and drag-and-drop.
*/
variant: "zone" | "button";
/**
* ID of the input element. Required to properly
* connect input element to potential error message.
*/
inputId: string;
/**
* Text shown to the user.
*/
label: string;
/**
* Adds a description to extend labling of FileUpload
*/
description?: string;
/**
* Class name passed to the outermost <div> element.
*/
className?: string;
/**
* Error message.
*/
error?: string;
/**
* Indicates if it is possible
* to upload multiple files at once.
*/
multiple?: boolean;
/**
* Indicates which MIME types are
* selectable in the file browser.
*/
accept?: string;
/**
* Sets a ref on the outermost div.
*/
ref?: React.Ref<HTMLDivElement>;
/**
* Callback triggered on file upload
*/
onUpload({ allFiles, acceptedFiles, rejectedFiles }: OnUploadProps): void;
/**
* Custom validator that is used to decide
* if a file is accepted or rejected.
*/
validator?(file: File): boolean;
}

/**
* A component for uploading files
* @see [📝 Documentation](https://aksel.nav.no/komponenter/core/FileUpload)
* @see 🏷️ {@link FileUploadProps}
* @example
* ```jsx
* <FileUpload
* onUpload={onUpload}
* variant="button"
* label="Last opp filer her"
* inputId="fileupload-input"
* />
* ```
*/
export const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(
(
{
onUpload,
error,
inputId,
label,
description,
className,
variant = "zone",
multiple = true,
accept,
validator
},
ref
) => {
const [isDraggingOver, setIsDraggingOver] = useState<boolean>(false)

const onDragEnter = () => setIsDraggingOver(true)
const onDragEnd = () => setIsDraggingOver(false)

const handleUpload = (event: ChangeEvent<HTMLInputElement>) => {
const fileList = event.target.files
if (!fileList) {
return
}
const files = Array.from(fileList)
const { acceptedFiles, rejectedFiles } = partitionFiles(files, accept, validator)

onUpload({ allFiles: files, acceptedFiles, rejectedFiles })

// Resets the value to make it is possible to upload the same file several consecutive times
event.target.value = ""
}

if (variant === "button") {
torkjels marked this conversation as resolved.
Show resolved Hide resolved
return <ButtonVariant
label={label}
description={description}
divRef={ref}
className={className}
error={error}
inputId={inputId}
multiple={multiple}
accept={accept}
handleUpload={handleUpload}
onDragEnter={onDragEnter}
onDragEnd={onDragEnd}
isDraggingOver={isDraggingOver}
/>
} else {
return <ZoneVariant
label={label}
description={description}
divRef={ref}
className={className}
error={error}
inputId={inputId}
multiple={multiple}
accept={accept}
handleUpload={handleUpload}
onDragEnter={onDragEnter}
onDragEnd={onDragEnd}
isDraggingOver={isDraggingOver}
/>
}
}
);

export default FileUpload;
11 changes: 11 additions & 0 deletions @navikt/core/react/src/form/file-upload/UploadButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { UploadIcon } from "@navikt/aksel-icons";
import React from "react";

const UploadButton = () => (
<span className="navds-button navds-button--secondary navds-fileupload__button">
<UploadIcon fontSize="1.5rem" focusable={false} aria-hidden={true} className="navds-fileupload__icon" />
Velg dine filer
</span>
)

export default UploadButton
Loading
Loading