Skip to content

Commit

Permalink
feat(upload): adiciona o parâmetro extractData no evento p-upload
Browse files Browse the repository at this point in the history
Adiciona a propriedade `extractData` no evento `p-upload` e nesta
propriedade pode ser informado algum dado solicitado pela API que
não possa estar no objeto `data`, assim o conteúdo será extraído do
objeto e enviado como parâmetro.

Fixes po-ui#1395
  • Loading branch information
wsteixeira committed Jul 24, 2024
1 parent 4179390 commit 2f8009f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,19 @@ export abstract class PoUploadBaseComponent implements ControlValueAccessor, Val
*
* Função que será executada no momento de realizar o envio do arquivo,
* onde será possível adicionar informações ao parâmetro que será enviado na requisição.
* É passado por parâmetro um objeto com o arquivo e a propriedade data nesta propriedade pode ser informado algum dado,
* que será enviado em conjunto com o arquivo na requisição, por exemplo:
* É passado por parâmetro um objeto com o arquivo e as propriedades data e extractParams,
* que serão enviadas em conjunto com o arquivo na requisição, por exemplo:
*
* > data, nesta propriedade pode ser informado algum dado
* ```
* event.data = {id: 'id do usuário'};
* ```
* > extractParams, nesta propriedade pode ser informado algum dado solicitado pela API
* > que não possa estar no objeto `data`, assim o conteúdo sará extraído do objeto e
* > enviado como parâmetro
* ```
* event.extractParams = {id: 'id do usuário'};
* ```
*/
@Output('p-upload') onUpload: EventEmitter<any> = new EventEmitter<any>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,43 @@ describe('PoUploadBaseService:', () => {
expect(service.sendFile).toHaveBeenCalled();
}));

it('should call formData.append with correct parameters', inject(
[PoUploadBaseService],
(service: PoUploadBaseService) => {
const fakeFile = new Blob([]);
fakeFile['lastModified'] = 1504558774471;
fakeFile['lastModifiedDate'] = new Date();
fakeFile['name'] = 'Teste';
fakeFile['webkitRelativePath'] = '';
const files = [new PoUploadFile(<File>fakeFile)];
const headers = { Authorization: '145236' };
const tOnUpload = new EventEmitter<any>();
const callback = (file: PoUploadFile, event: any) => '';

const formData = new FormData();
spyOn(window, 'FormData').and.returnValue(formData);
spyOn(formData, 'append');

const uploadEvent = {
extractParams: { param1: 'value1', param2: 'value2' },
data: { key: 'value' },
url: 'http://example.com/upload',
headers: { 'Content-Type': 'application/json' }
};

spyOn(tOnUpload, 'emit').and.callFake(event => {
event.extractParams = uploadEvent.extractParams;
event.data = uploadEvent.data;
event.url = uploadEvent.url;
event.headers = uploadEvent.headers;
});

service.upload('', files, headers, tOnUpload, callback, callback, callback);

expect(formData.append).toHaveBeenCalled();
}
));

it('should execute uploadCallback function', inject([PoUploadBaseService], (service: PoUploadBaseService) => {
const methods = returnMethodsCallback();
const fakeThis = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ export class PoUploadBaseService {
const filesLength = files.length;
const uploadEvent: any = {
data: {},
extractParams: {},
file: null,
url: url,
headers: headers
Expand All @@ -58,6 +59,10 @@ export class PoUploadBaseService {
uploadEvent['file'] = file;
tOnUpload.emit(uploadEvent);

Object.keys(uploadEvent.extractParams).forEach(key => {
formData.append(key, uploadEvent.extractParams[key]);
});

formData.append('data', JSON.stringify(uploadEvent.data));
url = uploadEvent.url;
headers = uploadEvent.headers;
Expand Down

0 comments on commit 2f8009f

Please sign in to comment.