11import { AbstractControl , ControlValueAccessor , Validator } from '@angular/forms' ;
22import { EventEmitter , Input , Output } from '@angular/core' ;
33
4- import { browserLanguage , convertToBoolean , isEquals , poLocaleDefault } from '../../../utils/util' ;
4+ import { browserLanguage , convertToBoolean , isEquals , isIE , isMobile , poLocaleDefault } from '../../../utils/util' ;
55import { requiredFailed } from '../validators' ;
66
77import { PoUploadFile } from './po-upload-file' ;
@@ -12,15 +12,23 @@ import { PoUploadStatus } from './po-upload-status.enum';
1212
1313export const poUploadLiteralsDefault = {
1414 en : < PoUploadLiterals > {
15+ files : 'files' ,
16+ folders : 'folders' ,
1517 selectFile : 'Select file' ,
18+ selectFiles : 'Select files' ,
19+ selectFolder : 'Select folder' ,
1620 deleteFile : 'Delete' ,
1721 cancel : 'Cancel' ,
1822 tryAgain : 'Try again' ,
1923 startSending : 'Start sending' ,
2024 dragFilesHere : 'Drag files here' ,
25+ dragFoldersHere : 'Drag folders here' ,
2126 selectFilesOnComputer : 'or select files on your computer' ,
27+ selectFolderOnComputer : 'or select folder on your computer' ,
2228 dropFilesHere : 'Drop files here' ,
23- invalidDropArea : 'Files were not dropped in the correct area' ,
29+ dropFoldersHere : 'Drop folders here' ,
30+ invalidDropArea : '{0} were not dropped in the correct area' ,
31+ invalidFileType : 'Failed to load {0} file(s) as it is not the allowed file type.' ,
2432 invalidAmount : 'Failed to load {0} file(s), as it exceeds the limit amount of files.' ,
2533 invalidFormat : 'Failed to load {0} file(s), as it does not match the format(s): {1}.' ,
2634 invalidSize : 'Failed to load {0} files(s), as it is not the allowed size: from {1} to {2}.' ,
@@ -33,15 +41,23 @@ export const poUploadLiteralsDefault = {
3341 sentWithSuccess : 'Sent with success'
3442 } ,
3543 es : < PoUploadLiterals > {
44+ files : 'archivos' ,
45+ folders : 'carpetas' ,
3646 selectFile : 'Seleccionar archivo' ,
47+ selectFiles : 'Seleccionar archivos' ,
48+ selectFolder : 'Seleccionar carpeta' ,
3749 deleteFile : 'Borrar' ,
3850 cancel : 'Cancelar' ,
3951 tryAgain : 'Intentar de nuevo' ,
4052 startSending : 'Iniciar carga' ,
4153 dragFilesHere : 'Arrastra los archivos aquí' ,
54+ dragFoldersHere : 'Arrastra las carpetas aquí' ,
4255 selectFilesOnComputer : 'o selecciona los archivos en tu computadora' ,
56+ selectFolderOnComputer : 'o selecciona la carpeta en tu computadora' ,
4357 dropFilesHere : 'Deja los archivos aquí' ,
44- invalidDropArea : 'Los archivos no se insertaron en la ubicación correcta' ,
58+ dropFoldersHere : 'Deja las carpetas aquí' ,
59+ invalidDropArea : 'Los {0} no se insertaron en la ubicación correcta' ,
60+ invalidFileType : 'Error al cargar {0} archivo (s) ya que no es el tipo de archivo permitido' ,
4561 invalidAmount : 'Error al cargar {0} archivo (s) ya que excede la cantidad limite de archivos.' ,
4662 invalidFormat : 'Error al cargar {0} archivo (s) ya que no coincide con el formato (s): {1}.' ,
4763 invalidSize : 'Error al cargar {0} archivo (s) ya que no cumple con el tamaño permitido: desde {1} hasta {2}.' ,
@@ -54,15 +70,23 @@ export const poUploadLiteralsDefault = {
5470 sentWithSuccess : 'Enviado con éxito'
5571 } ,
5672 pt : < PoUploadLiterals > {
73+ files : 'arquivos' ,
74+ folders : 'diretórios' ,
5775 selectFile : 'Selecionar arquivo' ,
76+ selectFiles : 'Selecionar arquivos' ,
77+ selectFolder : 'Selecionar pasta' ,
5878 deleteFile : 'Excluir' ,
5979 cancel : 'Cancelar' ,
6080 tryAgain : 'Tentar Novamente' ,
6181 startSending : 'Iniciar envio' ,
6282 dragFilesHere : 'Arraste os arquivos aqui' ,
83+ dragFoldersHere : 'Arraste as pastas aqui' ,
6384 selectFilesOnComputer : 'ou selecione os arquivos no computador' ,
85+ selectFolderOnComputer : 'ou selecione a pasta no computador' ,
6486 dropFilesHere : 'Solte os arquivos aqui' ,
65- invalidDropArea : 'Os arquivos não foram inseridos no local correto' ,
87+ dropFoldersHere : 'Solte as pastas aqui' ,
88+ invalidDropArea : 'Os {0} não foram inseridos no local correto' ,
89+ invalidFileType : 'Falha ao carregar {0} arquivo (s), pois não é o tipo de arquivo permitido' ,
6690 invalidAmount : 'Falha ao carregar {0} arquivo(s), pois excede(m) a quantidade limite de arquivos.' ,
6791 invalidFormat : 'Falha ao carregar {0} arquivo(s), pois não corresponde(m) ao(s) formato(s): {1}.' ,
6892 invalidSize : 'Falha ao carregar {0} arquivo(s), pois não atende ao tamanho permitido: {1} até {2}.' ,
@@ -86,6 +110,7 @@ const poUploadMinFileSize = 0;
86110 *
87111 * O componente `po-upload` permite que o usuário envie arquivo(s) ao servidor e acompanhe o progresso.
88112 * Este componente também possibilita algumas configurações como:
113+ * – Envio de diretórios, onde ele acessa o diretório selecionado assim como seus sub-diretórios;
89114 * - Múltipla seleção, onde o usuário pode enviar mais de um arquivo ao servidor.
90115 * - Auto envio, onde o arquivo é enviado imediatamente após a seleção do usuário, não necessitando que o usuário
91116 * clique em enviar.
@@ -96,19 +121,22 @@ const poUploadMinFileSize = 0;
96121 */
97122export abstract class PoUploadBaseComponent implements ControlValueAccessor , Validator {
98123
124+ private _directory ?: boolean ;
99125 private _disabled ?: boolean ;
100126 private _dragDrop ?: boolean = false ;
101127 private _fileRestrictions ?: PoUploadFileRestrictions ;
102128 private _formField ?: string ;
103129 private _hideRestrictionsInfo ?: boolean ;
104130 private _hideSelectButton ?: boolean ;
105131 private _hideSendButton ?: boolean ;
132+ private _isMultiple ?: boolean ;
106133 private _literals ?: any ;
107134 private _required ?: boolean ;
108135
109136 allowedExtensions : string ;
110137 currentFiles : Array < PoUploadFile > ;
111138
139+ canHandleDirectory : boolean ;
112140 onModelChange : any ;
113141 onModelTouched : any ;
114142
@@ -118,6 +146,30 @@ export abstract class PoUploadBaseComponent implements ControlValueAccessor, Val
118146 protected quantityNotAllowed = 0 ;
119147 protected sizeNotAllowed = 0 ;
120148
149+ /**
150+ * @optional
151+ *
152+ * @description
153+ *
154+ * Permite a seleção de diretórios contendo um ou mais arquivos para envio.
155+ *
156+ * > A habilitação desta propriedade se restringe apenas à seleção de diretórios.
157+ *
158+ * > Definição não suportada pelo browser **Internet Explorer**, todavia será possível a seleção de arquivos padrão.
159+ *
160+ * @default `false`
161+ */
162+ @Input ( 'p-directory' ) set directory ( value : boolean ) {
163+ this . _directory = convertToBoolean ( value ) ;
164+
165+ this . canHandleDirectory = this . _directory && ! isIE ( ) && ! isMobile ( ) ;
166+ this . setDirectoryAttribute ( this . canHandleDirectory ) ;
167+ }
168+
169+ get directory ( ) {
170+ return this . _directory ;
171+ }
172+
121173 /**
122174 * @optional
123175 *
@@ -341,8 +393,16 @@ export abstract class PoUploadBaseComponent implements ControlValueAccessor, Val
341393 * @description
342394 *
343395 * Define se pode selecionar mais de um arquivo.
396+ *
397+ * > Se utilizada a `p-directory`, habilita-se automaticamente esta propriedade.
344398 */
345- @Input ( 'p-multiple' ) isMultiple ?: boolean ;
399+ @Input ( 'p-multiple' ) set isMultiple ( value : boolean ) {
400+ this . _isMultiple = convertToBoolean ( value ) ;
401+ }
402+
403+ get isMultiple ( ) {
404+ return this . canHandleDirectory ? true : this . _isMultiple ;
405+ }
346406
347407 /**
348408 * @optional
@@ -569,4 +629,6 @@ export abstract class PoUploadBaseComponent implements ControlValueAccessor, Val
569629 return files ;
570630 }
571631
632+ abstract setDirectoryAttribute ( value : boolean ) ;
633+
572634}
0 commit comments