@@ -3,7 +3,6 @@ import React, { useCallback, useMemo, useRef, useState } from 'react';
3
3
import { UploadIcon as Upload } from '@navikt/aksel-icons' ;
4
4
5
5
import { AppCard } from 'src/app-components/Card/Card' ;
6
- import { useAttachmentsUploader } from 'src/features/attachments/hooks' ;
7
6
import { useIsMobileOrTablet } from 'src/hooks/useDeviceWidths' ;
8
7
import { DropzoneComponent } from 'src/layout/FileUpload/DropZone/DropzoneComponent' ;
9
8
import { ImageCanvas } from 'src/layout/ImageUpload/ImageCanvas' ;
@@ -15,23 +14,20 @@ import {
15
14
drawViewport ,
16
15
getViewport ,
17
16
} from 'src/layout/ImageUpload/imageUploadUtils' ;
18
- import { useIndexedId } from 'src/utils/layout/DataModelLocation' ;
19
- import type { IDataModelBindingsSimple } from 'src/layout/common.generated' ;
17
+ import { useImageFile } from 'src/layout/ImageUpload/useImageFile' ;
20
18
import type { Position , ViewportType } from 'src/layout/ImageUpload/imageUploadUtils' ;
21
19
22
20
interface ImageCropperProps {
23
- dataModelBindings ?: IDataModelBindingsSimple ;
24
21
viewport ?: ViewportType ;
25
22
baseComponentId : string ;
26
23
}
27
24
28
25
const MAX_ZOOM = 5 ;
29
26
30
27
// ImageCropper Component
31
- export function ImageCropper ( { baseComponentId, viewport, dataModelBindings } : ImageCropperProps ) {
28
+ export function ImageCropper ( { baseComponentId, viewport } : ImageCropperProps ) {
32
29
const mobileView = useIsMobileOrTablet ( ) ;
33
- const indexedId = useIndexedId ( baseComponentId ) ;
34
- const uploadAttachment = useAttachmentsUploader ( ) ;
30
+ const { saveImage, deleteImage } = useImageFile ( baseComponentId ) ;
35
31
36
32
// Refs for canvas and image
37
33
const canvasRef = useRef < HTMLCanvasElement | null > ( null ) ;
@@ -41,8 +37,6 @@ export function ImageCropper({ baseComponentId, viewport, dataModelBindings }: I
41
37
const [ zoom , setZoom ] = useState < number > ( 1 ) ;
42
38
const [ position , setPosition ] = useState < Position > ( { x : 0 , y : 0 } ) ;
43
39
const [ imageSrc , setImageSrc ] = useState < File | null > ( null ) ;
44
- //bare midlertidig for å kunne laste ned resultatet som blir lagret i backend
45
- const [ previewImage , setPreviewImage ] = React . useState < string | null > ( null ) ;
46
40
47
41
const selectedViewport = getViewport ( viewport ) ;
48
42
@@ -141,75 +135,67 @@ export function ImageCropper({ baseComponentId, viewport, dataModelBindings }: I
141
135
const fileName = img ?. name || 'cropped-image.png' ;
142
136
const imageFile = new File ( [ blob ] , fileName , { type : 'image/png' } ) ;
143
137
144
- // Use the file now
145
- uploadAttachment ( {
146
- files : [ imageFile ] ,
147
- nodeId : indexedId ,
148
- dataModelBindings,
149
- } ) ;
150
- setPreviewImage ( cropCanvas . toDataURL ( 'image/png' ) ) ;
138
+ saveImage ( imageFile ) ;
151
139
} , 'image/png' ) ;
152
140
} ;
153
141
142
+ const handleDeleteImage = ( ) => {
143
+ deleteImage ( ) ;
144
+ imageRef . current = null ;
145
+ setImageSrc ( null ) ;
146
+ handleReset ( ) ;
147
+ } ;
148
+
154
149
return (
155
- < >
156
- < AppCard
157
- variant = 'default'
158
- mediaPosition = 'top'
159
- className = { classes . imageUploadCard }
160
- media = {
161
- imageSrc ? (
162
- < ImageCanvas
163
- canvasRef = { canvasRef }
164
- imageRef = { imageRef }
165
- zoom = { zoom }
166
- position = { position }
167
- viewport = { selectedViewport }
168
- onPositionChange = { handlePositionChange }
169
- onZoomChange = { handleZoomChange }
170
- />
171
- ) : (
172
- < div className = { classes . canvasSizingWrapper } >
173
- < div className = { classes . placeholder } >
174
- < Upload className = { classes . placeholderIcon } />
175
- < p className = { classes . placeholderText } > Upload an image to start cropping</ p >
176
- </ div >
177
- </ div >
178
- )
179
- }
180
- >
181
- { imageSrc ? (
182
- < ImageControllers
150
+ < AppCard
151
+ variant = 'default'
152
+ mediaPosition = 'top'
153
+ className = { classes . imageUploadCard }
154
+ media = {
155
+ imageSrc ? (
156
+ < ImageCanvas
157
+ canvasRef = { canvasRef }
158
+ imageRef = { imageRef }
183
159
zoom = { zoom }
184
- zoomLimits = { { minZoom : minAllowedZoom , maxZoom : MAX_ZOOM } }
185
- updateZoom = { handleZoomChange }
186
- onSave = { handleSave }
187
- onCancel = { ( ) => setImageSrc ( null ) }
188
- onFileUploaded = { handleFileUpload }
189
- onReset = { handleReset }
160
+ position = { position }
161
+ viewport = { selectedViewport }
162
+ onPositionChange = { handlePositionChange }
163
+ onZoomChange = { handleZoomChange }
190
164
/>
191
165
) : (
192
- < DropzoneComponent
193
- id = 'image-upload'
194
- isMobile = { mobileView }
195
- readOnly = { false }
196
- onClick = { ( e ) => e . preventDefault ( ) }
197
- onDrop = { ( files ) => handleFileUpload ( files [ 0 ] ) }
198
- hasValidationMessages = { false }
199
- validFileEndings = { [ '.jpg' , '.jpeg' , '.png' , '.gif' ] }
200
- className = { classes . dropZone }
201
- />
202
- ) }
203
- </ AppCard >
204
- { /*Fjern dette under senere*/ }
205
- { previewImage && (
206
- < a
207
- href = { previewImage }
208
- download = 'cropped-image.png'
209
- >
210
- Download Image
211
- </ a >
166
+ < div className = { classes . canvasSizingWrapper } >
167
+ < div className = { classes . placeholder } >
168
+ < Upload className = { classes . placeholderIcon } />
169
+ < p className = { classes . placeholderText } > Upload an image to start cropping</ p >
170
+ </ div >
171
+ </ div >
172
+ )
173
+ }
174
+ >
175
+ { imageSrc ? (
176
+ < ImageControllers
177
+ zoom = { zoom }
178
+ zoomLimits = { { minZoom : minAllowedZoom , maxZoom : MAX_ZOOM } }
179
+ baseComponentId = { baseComponentId }
180
+ updateZoom = { handleZoomChange }
181
+ onSave = { handleSave }
182
+ onDelete = { handleDeleteImage }
183
+ onCancel = { ( ) => setImageSrc ( null ) }
184
+ onFileUploaded = { handleFileUpload }
185
+ onReset = { handleReset }
186
+ />
187
+ ) : (
188
+ < DropzoneComponent
189
+ id = 'image-upload'
190
+ isMobile = { mobileView }
191
+ readOnly = { false }
192
+ onClick = { ( e ) => e . preventDefault ( ) }
193
+ onDrop = { ( files ) => handleFileUpload ( files [ 0 ] ) }
194
+ hasValidationMessages = { false }
195
+ validFileEndings = { [ '.jpg' , '.jpeg' , '.png' , '.gif' ] }
196
+ className = { classes . dropZone }
197
+ />
212
198
) }
213
- </ >
199
+ </ AppCard >
214
200
) ;
215
201
}
0 commit comments