Skip to content

Commit 08cf174

Browse files
wsteixeirajnrpalma
authored andcommitted
feat(upload): adiciona o parâmetro extraFormData no evento p-upload
Adiciona o parâmetro `extraFormData` no evento do `p-upload` e neste parâmetro pode ser informado algum dado solicitado pela API que não possa estar no objeto `data`, assim o conteúdo será adicionado ao `formData` e enviado como parâmetro. Fixes #1395
1 parent edcc5db commit 08cf174

File tree

3 files changed

+51
-2
lines changed

3 files changed

+51
-2
lines changed

projects/ui/src/lib/components/po-field/po-upload/po-upload-base.component.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,12 +235,19 @@ export abstract class PoUploadBaseComponent implements ControlValueAccessor, Val
235235
*
236236
* Função que será executada no momento de realizar o envio do arquivo,
237237
* onde será possível adicionar informações ao parâmetro que será enviado na requisição.
238-
* É passado por parâmetro um objeto com o arquivo e a propriedade data nesta propriedade pode ser informado algum dado,
239-
* que será enviado em conjunto com o arquivo na requisição, por exemplo:
238+
* É passado por parâmetro um objeto com o arquivo e as propriedades data e extraFormData,
239+
* que serão enviadas em conjunto com o arquivo na requisição, por exemplo:
240240
*
241+
* > data, nesta propriedade pode ser informado algum dado
241242
* ```
242243
* event.data = {id: 'id do usuário'};
243244
* ```
245+
* > extraFormData, nesta propriedade pode ser informado algum dado solicitado pela API
246+
* > que não possa estar no objeto `data`, assim o conteúdo sará extraído do objeto e
247+
* > enviado como parâmetro
248+
* ```
249+
* event.extraFormData = {id: 'id do usuário'};
250+
* ```
244251
*/
245252
@Output('p-upload') onUpload: EventEmitter<any> = new EventEmitter<any>();
246253

projects/ui/src/lib/components/po-field/po-upload/po-upload-base.service.spec.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,43 @@ describe('PoUploadBaseService:', () => {
8787
expect(service.sendFile).toHaveBeenCalled();
8888
}));
8989

90+
it('should call formData.append with correct parameters', inject(
91+
[PoUploadBaseService],
92+
(service: PoUploadBaseService) => {
93+
const fakeFile = new Blob([]);
94+
fakeFile['lastModified'] = 1504558774471;
95+
fakeFile['lastModifiedDate'] = new Date();
96+
fakeFile['name'] = 'Teste';
97+
fakeFile['webkitRelativePath'] = '';
98+
const files = [new PoUploadFile(<File>fakeFile)];
99+
const headers = { Authorization: '145236' };
100+
const tOnUpload = new EventEmitter<any>();
101+
const callback = (file: PoUploadFile, event: any) => '';
102+
103+
const formData = new FormData();
104+
spyOn(window, 'FormData').and.returnValue(formData);
105+
spyOn(formData, 'append');
106+
107+
const uploadEvent = {
108+
extraFormData: { param1: 'value1', param2: 'value2' },
109+
data: { key: 'value' },
110+
url: 'http://example.com/upload',
111+
headers: { 'Content-Type': 'application/json' }
112+
};
113+
114+
spyOn(tOnUpload, 'emit').and.callFake(event => {
115+
event.extraFormData = uploadEvent.extraFormData;
116+
event.data = uploadEvent.data;
117+
event.url = uploadEvent.url;
118+
event.headers = uploadEvent.headers;
119+
});
120+
121+
service.upload('', files, headers, tOnUpload, callback, callback, callback);
122+
123+
expect(formData.append).toHaveBeenCalled();
124+
}
125+
));
126+
90127
it('should execute uploadCallback function', inject([PoUploadBaseService], (service: PoUploadBaseService) => {
91128
const methods = returnMethodsCallback();
92129
const fakeThis = {

projects/ui/src/lib/components/po-field/po-upload/po-upload-base.service.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export class PoUploadBaseService {
4141
const filesLength = files.length;
4242
const uploadEvent: any = {
4343
data: {},
44+
extraFormData: {},
4445
file: null,
4546
url: url,
4647
headers: headers
@@ -58,6 +59,10 @@ export class PoUploadBaseService {
5859
uploadEvent['file'] = file;
5960
tOnUpload.emit(uploadEvent);
6061

62+
Object.keys(uploadEvent.extraFormData).forEach(key => {
63+
formData.append(key, uploadEvent.extraFormData[key]);
64+
});
65+
6166
formData.append('data', JSON.stringify(uploadEvent.data));
6267
url = uploadEvent.url;
6368
headers = uploadEvent.headers;

0 commit comments

Comments
 (0)